2009-08-31 16 views
6

Quiero escribir un analizador sintáctico para fines educativos, y me preguntaba si hay algunos recursos en línea o tutoriales que explican cómo escribir uno. Algo en la línea de "Construyamos un compilador" por Jack Crenshaw.Recursos en línea para escribir un analizador generador

Quiero escribir el generador de analizador para la gramática LR (1).

Tengo una comprensión decente de la teoría detrás de la generación de las tablas de acción y goto, pero quiero algún recurso que me ayude a implementarlo.

Los idiomas preferidos son C/C++, Java aunque incluso otros idiomas son correctos.

Gracias.

Respuesta

8

Estoy de acuerdo con otros, el libro del Dragón es un buen fondo para el análisis de LR.

Si usted está interesado en programas de análisis descendente recursivo, una experiencia de aprendizaje enormemente divertido es este sitio web, que le guía a través de la construcción de un sistema de compilador completamente autónomo que puede compilarse a sí mismo y de otros idiomas:

MetaII Compiler Tutorial

Todo esto se basa en un asombroso pequeño artículo técnico de 10 páginas de Val Schorre: META II: Un lenguaje de escritura compilador orientado a la sintaxis de honesto a dios 1964. Aprendí a compilar compiladores de esto en 1970. Hay un momento alucinante cuando finalmente encuentras cómo el compilador puede regenerarse a sí mismo ...

Conozco al autor del sitio web de mis días universitarios, pero no tengo nada que ver con el sitio web.

1

No muy en línea, pero el Dragon Book tiene discusiones bastante elaboradas sobre el análisis de LR.

2

Si quisiera ir a la ruta de Python, le recomendaría lo siguiente.

he encontrado ambas cosas a ser extremadamente útil y Paul McGuire el autor de pyparsing es super a ayudar cuando se encuentra con problemas. El libro Procesamiento de texto en Python es solo una referencia práctica para tener al alcance de la mano y lo ayuda a tener el estado de ánimo correcto al intentar construir un analizador sintáctico.

También señalaría que un lenguaje OO es más adecuado como motor de análisis de lenguaje porque es extensible y el polimorfismo es la forma correcta de hacerlo (en mi humilde opinión). Ver el problema en términos de una máquina de estado en lugar de "Buscar un punto y coma al final de xyz" demostrará que su analizador se vuelve mucho más robusto al final.

¡Espero que eso ayude!

0

Me pareció más fácil aprender a escribir analizadores sintácticos de descenso recursivo antes de aprender a escribir analizadores LR. Bueno, para ser sincero, después de muchos años de escribir analizadores, nunca me pareció necesario escribir un analizador LR.

Recientemente escribí un tutorial en CodeProject llamado Implementing Programming Language Tools in C# 4.0 que describe técnicas recursivas de análisis de descenso.

Cuestiones relacionadas