with tutorial program parser for compiler and parsing lex

parsing - tutorial - Análisis, ¿dónde puedo aprender al respecto?



lexical analyzer with lex (12)

Me han dado un trabajo de ''traducción'' de un idioma a otro. La fuente es demasiado flexible (compleja) para un enfoque simple línea por línea con expresiones regulares. ¿Dónde puedo obtener más información sobre análisis léxico y analizadores sintácticos?



Lexing / Parsing + typecheck + generación de código es un gran ejercicio de CS. Lo recomendaría a cualquiera que quiera una base sólida, así que estoy a favor del Libro del Dragón.


Recientemente he estado trabajando con PLY, que es una implementación de lex y yacc en Python. Es bastante fácil comenzar a usarlo y hay algunos ejemplos simples en la documentación.

El análisis puede convertirse rápidamente en un tema muy técnico y descubrirá que probablemente no necesitará conocer todos los detalles del algoritmo de análisis si está utilizando un generador de análisis como PLY.


Si desea "emocionarse" con el tema, busque una copia de " The Dragon Book ". Por lo general, es el texto en un curso de diseño de compilador. Definitivamente satisfará su necesidad de "aprender más sobre análisis léxico y analizadores sintácticos", ¡y muchas otras cosas divertidas !

IMH (umble) O, sálvate un brazo y / o una pierna y compra una edición anterior: llenará tus deseos de información.


Si prefiere las herramientas basadas en Java, el compilador de compiladores Java, JavaCC, es un buen analizador / analizador. Es un archivo de configuración impulsado, y generará código Java que puede incluir en su programa. No lo he usado hace un par de años, así que no estoy seguro de cómo es la versión actual. Puede encontrar más información aquí: https://javacc.dev.java.net/


Encontré este sitio útil:

Primer de Lex y YACC / HOWTO

La primera vez que usé lex / yacc fue para un proyecto relativamente simple. Este tutorial fue todo lo que realmente necesitaba. Cuando me acerqué a proyectos más complejos más adelante, la familiaridad que tenía de este tutorial y un proyecto simple me permitieron construir algo más elegante.


Después de tomar (bastantes) algunas clases de compiladores, he usado tanto The Dragon Book como C & T. Creo que C & T hace un trabajo mucho mejor para hacer que la construcción de compiladores sea digerible. No quitar nada de The Dragon Book, pero creo que C & T es un libro mucho más práctico.

Además, si le gusta escribir en Java, le recomiendo usar JFlex y BYACC / J para sus necesidades de análisis y análisis.


Mucha gente ha recomendado libros. Para muchos, estos son mucho más útiles en un entorno estructurado con asignaciones y fechas de vencimiento, etc. Incluso si no, tener el material presentado de otra manera puede ser de gran ayuda.

(a) ¿Ha considerado ir a una escuela con un currículo decente de CS?
(b) Hay muchas clases en línea, como Open Courseware de MIT . Su sección EE / CS tiene muchos cursos que tocan el análisis sintáctico, aunque no puedo ver ninguno en el análisis per se. Normalmente se presenta como uno de los primeros cursos teóricos ya que la clasificación del lenguaje y los autómatas están en el corazón de gran parte de la teoría del CS.


Otro libro de texto a considerar es la Pragmática del Lenguaje de Programación . Lo prefiero sobre el libro de Dragon, pero YMMV.

Si está utilizando Perl, otra herramienta a considerar es Parse :: RecDescent .

Si solo necesita hacer esta traducción una vez y no sabe nada sobre la tecnología del compilador, le sugiero que llegue tan lejos como pueda con algunas traducciones bastante simplistas y luego lo arregle a mano. Sí, es mucho trabajo. Pero es menos trabajo que aprender un tema complejo y codificar la solución correcta para un trabajo. Dicho esto, aún debes aprender el tema, pero no dejes que no sepas que es un obstáculo para terminar tu proyecto actual.


Pruebe ANLTR :

ANTLR, otra herramienta para el reconocimiento de idiomas, es una herramienta de lenguaje que proporciona un marco para construir reconocedores, intérpretes, compiladores y traductores a partir de descripciones gramaticales que contienen acciones en una variedad de idiomas de destino.

Hay un libro para eso también.


Técnicas de análisis: una guía práctica Por Dick Grune y Ceriel JH Jacobs

Este libro (disponible gratuitamente como PDF) ofrece una amplia visión general de diferentes técnicas / algoritmos de análisis sintáctico. Si realmente quieres entender los diferentes algoritmos de análisis sintáctico, esta IMO es una mejor referencia que Dragon Book (ya que Parsing Techniques se enfoca completamente en el análisis sintáctico, mientras que Dragon Book cubre el análisis solo como una, aunque importante, parte del proceso de construcción del compilador) .


flex y bison son los nuevos lex y yacc. La sintaxis para BNF a menudo se ridiculiza por ser un poco obtusa. Algunos se han movido a ANTLR y Ragel por este motivo.

Si no está haciendo demasiada traducción, puede hacer un único uso de expresiones regulares multilínea con Perl o Ruby. Escribir una gramática BNF compatible para un idioma existente no es una tarea que deba tomarse a la ligera.

Por otro lado, es totalmente posible aprovechar los archivos .l y .y de un idioma dado si están disponibles como fuente abierta. Luego, podría construir un código nuevo a partir de un árbol de análisis sintáctico existente.