Pregunta
Estoy trabajando en un proyecto de diseño de compilador en Java. El análisis léxico se realiza (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é.
Solución
Si desea específicamente un comportamiento similar a YACC (controlado por tablas), el único que conozco es TAZA .
En el mundo Java, parece que más personas se inclinan hacia analizadores de descenso recursivo como ANTLR o JavaCC .
Y la eficiencia rara vez es una razón para elegir un generador de analizador.
Otros consejos
En el pasado, he usado ANLTR tanto para lexer como para parser, y la página de inicio de JFlex dice que puede interactuar con ANTLR. No diría que la documentación en línea de ANTLR es tan genial. Terminé invirtiendo en 'La referencia ANTLR definitiva' , que ayudó considerablemente.
GNU Bison tiene una interfaz Java,
http://www.gnu.org /software/bison/manual/html_node/Java-Bison-Interface.html
Puedes usarlo para generar código Java.
También hay jacc.
Jacc está lo más cerca posible de yacc, pero se implementa en Java puro y genera un analizador Java.
Se interconecta bien con jFlex
Otra opción sería GOLD Parser .
A diferencia de muchas de las alternativas, el analizador GOLD genera las tablas de análisis a partir de la gramática y las coloca en un archivo binario no ejecutable. Cada idioma admitido tiene un motor que lee las tablas binarias y analiza su archivo fuente.
No he usado específicamente la implementación de Java, pero he usado el motor Delphi con resultados bastante buenos.