[Python-es] Parsear Fortran en Python

Juan Luis Cano juanlu001 en gmail.com
Dom Nov 15 13:06:05 EST 2015


On 2015-11-11 13:48, Luis Fernando Lopez Aguilar wrote:
> Pueden pasarme ese programa escrito en fortran?
>
> Tengo curiosidad de cuan dificil es reinterpretar, por los 80 al 85 he 
> programado en fortran IV en un pdp11/45
>
> Saludos.
> f.l.

Luis Fernando, no es un programa concreto el que quiero parsear: estaba 
explorando opciones sobre cuál sería la mejor manera de escribir un 
parser. Me temo que desde FORTRAN IV hasta Fortran 2003 ha cambiado 
bastante la cosa :)

Gracias Alex y Mario por las ideas. Mario, no me queda claro cómo 
utilizar alguno de los parsers de Fortran existentes para extraer los 
tokens y convertirlos a Python, o a lo mejor es que te he entendido mal. 
¿Te refieres, por ejemplo, a tratar de reutilizar la lógica de gfortran?

También he descubierto grako, que está bastante bien documentado y 
trabaja con EBNF https://pypi.python.org/pypi/grako Creo que escogeré 
una de estas tres opciones.

Y sí, efectivamente quiero hacerlo con tokens y reglas porque ya he 
leído demasiado código que trata de parsear lenguajes complicados 
"chapuceramente" solo utilizando regex (o ni siquiera) y me sangran los 
ojos. Quiero producir una cosa que sea lo más sólida y robusta posible 
(si es que finalmente lo hago).

Un saludo:

Juanlu

>
> El 11 de noviembre de 2015, 6:45, Alexandre Manhaes Savio 
> <alexsavio en gmail.com <mailto:alexsavio en gmail.com>> escribió:
>
>     Tengo experiencia con ANTLR y bison (ya he hecho functionar un
>     parser para un sub-set de algo parecido a python con ambos).
>     Además de las respectivas asignaturas en la ingeniería.
>     Estoy de acuerdo con María. Lo de programar con tokens aunque al
>     principio parezcan un engorro, te salvarán el pellejo.
>
>     Yo que tú le daba un intento con pyparser, lo más aburrido es
>     generar las reglas desde la sintaxis y comprobar que va bien.
>
>
>     -----------------------------------
>     Alexandre Manhães Savio
>     Post-doctoral researcher
>     Klinikum rechts der Isar, TUM, München
>     alexsavio.github.io <http://alexsavio.github.io>
>     Nebenstellennummer: 4570
>     On 11.11.2015 09:39, Kiko wrote:
>     >
>     >
>     > El 11 de noviembre de 2015, 0:02, Mario R. Osorio
>     > <mario en osorio.solutions <mailto:mario en osorio.solutions
>     <mailto:mario en osorio.solutions>>> escribió:
>     >
>     >     Juan Luis,
>     >
>     >     Es posible que yo haya simplificado mucho tus necesidades. A
>     mi me
>     >     toco estudiar a profundidad pyparser y me dio la impresion
>     que era
>     >     casi imposible no poder parsear cualquier cosa, por
>     complicado que
>     >     fuera.
>     >
>     >     Sin embargo, y en otro order de ideas, no se conoces *como
>     funcionan
>     >     los parsers y compiladores*
>     <http://parsingintro.sourceforge.net/>,
>     >     pero en dos palabras, el parser genera tokens, los cuales son
>     >     convertidos en lenguaje de maquina por el compilador. Existen
>     >     docenas de parsers para fortran. Quizas perrefieras utilizar
>     alguno
>     >     de estos parsers y en vez de compilar los token, convertirlos a
>     >     python con tu priopio codigo.
>     >
>     >     Pareciera el mismo trabajo porque de todas maneras tendrias
>     que (o
>     >     al menos te seria mas facil) utilizar pyparser para
>     convertir los
>     >     tokens a codigo python. SIN EMBARGO, debo SUPONER que es mas
>     facil
>     >     generar las reglas para los tokens que para el codigo.
>     >
>     >     Mi preferencia personal seria utilizar pyparser, pero debes
>     tener la
>     >     documentacion correcta y completa del lenguaje a compilar, o
>     mejor
>     >     aun, las definiciones EBNF de FORTRAN 77, asi podrias
>     utilizar *este
>     >     modulo* <http://pyparsing.wikispaces.com/file/view/ebnf.py>, y
>     >     ahorrarte muuuchos dolores de cabeza...
>     >
>     >
>     >     Dtb/Gby
>     >     =======
>     >     Mario R. Osorio
>     >     A.S. of Computer Programming and Analysis
>     >
>     >     “If I had asked people what they wanted, they would have
>     said faster
>     >     horses.”
>     >      ― Henry Ford
>     >
>     >
>     >
>     >     2015-11-10 16:06 GMT-05:00 Juan Luis Cano <juanlu001 en gmail.com <mailto:juanlu001 en gmail.com>
>     >     <mailto:juanlu001 en gmail.com <mailto:juanlu001 en gmail.com>>>:
>     >
>     >         Gracias a todos por las respuestas, si consigo algo decente
>     >         habrá artículo en el blog pero no antes de 2016 :)
>     >
>     >         Juanlu
>     >
>     >
>     >         On 2015-11-10 21:47, francismb wrote:
>     >
>     >             Hola Juan,
>     >
>     >                 Otras opciones que tengo son usar unas reglas
>     formuladas
>     >                 con SDF[1],
>     >                 pero como no sé qué hacer con ellas no sé en qué
>     estado
>     >                 están. He
>     >                 intentado usar Open Fortran Parser,
>     supuestamente basado
>     >                 en ANTLR, pero
>     >                 ni siquiera me compila. También he buscado por ahí
>     >                 gramáticas de Fortran
>     >                 ya escritas (por ejemplo para lex/yacc) pero no he
>     >                 encontrado nada
>     >                 satisfactorio.
>     >
>     >                 Aprovechando, si alguien me recomienda alguna
>     lecturita
>     >                 al respecto o da
>     >                 algún consejo genérico se lo agradecería
>     también. No es
>     >                 mi objetivo
>     >                 hacerme un experto en parsers, con que resuelva mi
>     >                 problema me basta.
>     >
>     >             Otra alternativa si tuvieras la gramatica seria
>     ANTLR [1],
>     >             es java pero
>     >             segun tengo entendido genera python [2]
>     >
>     >
>     >
>     >             [1] http://www.antlr.org/
>     >             [2]
>     > https://theantlrguy.atlassian.net/wiki/display/ANTLR4/Python+Target
>     >
>     >             Saludos,
>     >             francis
>     >
>     >
>     >
>     > Quizá en la lista de numpy te puedan dar más opciones.
>     >
>     > De mi experiencia con Brython y su transpilador (Python a JS) te
>     puedo
>     > decir que la tarea es un infierno lleno de excepciones en las
>     reglas y
>     > corner cases que hacen que sea fácil tener bugs.
>     >
>     > Saludos.
>     >
>     >
>     > _______________________________________________
>     > Python-es mailing list
>     > Python-es en python.org <mailto:Python-es en python.org>
>     > https://mail.python.org/mailman/listinfo/python-es
>     > FAQ: http://python-es-faq.wikidot.com/
>     >
>
>     _______________________________________________
>     Python-es mailing list
>     Python-es en python.org <mailto:Python-es en python.org>
>     https://mail.python.org/mailman/listinfo/python-es
>     FAQ: http://python-es-faq.wikidot.com/
>
>
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20151115/6f9c8ff0/attachment.html>


Más información sobre la lista de distribución Python-es