2008-08-29 18 views
16

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?Análisis, ¿dónde puedo obtener información al respecto

Respuesta

2

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.

8

Trate ANLTR:

antlr, otra herramienta para Language reconocimiento, es una herramienta de lenguaje que proporciona un marco para la construcción de reconocedores, intérpretes, compiladores, y traductores de descripciones gramaticales que contienen acciones en una variedad de idiomas de destino .

También hay un book para él.

alt text

1

Si prefiere herramientas basadas en Java, el compilador del compilador de Java, JavaCC, es un buen analizador/escáner. 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/

11

Si desea ponerse "emocional" sobre el tema, recoja una copia de "The Dragon Book". Es generalmente 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", así como un montón de otras diversión cosas!

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

1

flex y bison son las nuevas 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 cualquier idioma si están disponibles como de código abierto. Luego, podría construir un código nuevo a partir de un árbol de análisis sintáctico existente.

1

Lexing/análisis sintáctico + typecheck + generación de código es un gran ejercicio CS Se lo recomendaría a cualquiera que quiera una base sólida, así que estoy todo por el dragón libro

1

Todavía otro libro de texto a considerar es Programming Language Pragmatics. Lo prefiero sobre el libro de Dragon, pero YMMV.

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

Si solo tiene que 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 arreglarlo 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.

1

me encontré con este sitio útil:

Lex and YACC primer/HOWTO

La primera vez que utilicé lex/yacc era 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.

1

Después de tomar (bastante) algunas clases de compiladores, he usado tanto The Dragon Book como C&T. Creo que C & T hace un trabajo mucho mejor al hacer que la construcción del compilador 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.

2

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 plan de estudios decente de CS?
(b) Hay muchas conferencias en línea, como MIT's Open Courseware. Su EE/CS section 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.

+0

+1 para mit ocw, lo uso todo el tiempo para matemáticas. Por alguna razón, ir a clase en MY schedual es mucho mejor que levantarse a las 6:30. – Shawn

1

Parsing Techniques - A Practical Guide Por Dick Grune y Ceriel J.H. Jacobs

Este libro (disponible gratuitamente como PDF) ofrece una amplia visión general de diferentes técnicas/algoritmos de análisis. 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) .

+0

Tu enlace parece estar roto – Shawn

+0

He corregido el enlace: el PDF real (para la primera edición) se puede descargar aquí: http://dickgrune.com/Books/PTAPG_1st_Edition/BookBody.pdf; una nueva edición y una edición más extensa del libro ahora también está disponible en Amazon – Gio

Cuestiones relacionadas