2009-10-28 27 views
24

Estoy trabajando en un proyecto de diseño de compilador en Java. El análisis léxico está hecho (usando jflex) y me pregunto qué herramienta similar a yacc sería la mejor (la más eficiente, la más fácil de usar, etc.) para hacer un análisis sintáctico y por qué.Yacc equivalente para Java

Respuesta

16

Si desea específicamente el comportamiento similar a YACC (basado en tablas), el único que conozco es CUP.

En el mundo de Java, parece que hay más personas que se inclinan por los analizadores de descenso recursivos como ANTLR o JavaCC.

Y la eficiencia rara vez es una razón para elegir un generador de analizador sintáctico.

+0

Dificultad: CUP ya no se mantiene y [CUP 2] (http://www2.in.tum.de/cup2) es beta. ¿Todavía está bien? – minopret

+0

@minopret - No he usado CUP en más de una docena de años, pero a menos que hubiera un error importante no arreglado, entonces debería estar bien incluso si no se mantiene activamente. Sin embargo, a menos que necesites un comportamiento similar al de YACC, miraría ANTLR. – kdgregory

+0

Estoy trabajando en un creador de archivo de marcado GitHub (.md) que toma un archivo de código, escrito en cualquier idioma, y ​​genera un archivo .md para él. Estoy haciendo esto en Java. ¿Pueden estos softwares manejar * cualquier * idioma o solo Java? –

5

En el pasado, he usado ANLTR tanto para lexer como para el analizador, y la página de inicio de JFlex dice que puede interoperar con ANTLR. No diría que la documentación en línea de ANTLR es genial. Terminé invirtiendo en 'The Definitive ANTLR reference', lo que me ayudó considerablemente.

+1

En mi experiencia, antlr es, con mucho, la herramienta más popular para Java léxico/análisis. –

2

Otra opción sería GOLD Parser.

A diferencia de muchas de las alternativas, el analizador GOLD genera las tablas de análisis gramatical y las coloca en un archivo binario no ejecutable. Cada lenguaje admitido tiene un motor que lee las tablas binarias y analiza su archivo fuente.

No he usado la implementación de Java específicamente, pero he usado el motor Delphi con bastante buenos resultados.

2

También hay jacc.

Jacc es casi lo más parecido posible a yacc, pero está implementado en Java puro y genera un analizador de Java.

que interactúa bien con JFlex

http://web.cecs.pdx.edu/~mpj/jacc/