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
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.
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.
En mi experiencia, antlr es, con mucho, la herramienta más popular para Java léxico/análisis. –
GNU Bison tiene una interfaz Java,
http://www.gnu.org/software/bison/manual/html_node/Java-Bison-Interface.html
Se puede utilizar ir generar código Java.
¿Cuáles son sus experiencias con esto? Funciona bien? –
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.
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
- 1. Lex/Yacc para C#?
- 2. 'equivalente de amigos' para Java?
- 3. C# Uri.EscapeDatastring() equivalente para Java
- 4. PHP __call equivalente para java
- 5. Buscando una gramática de Java en formato lex/yacc
- 6. ¿Hay depuradores gramaticales Yacc?
- 7. Gramática Lisp en yacc
- 8. equivalente de Java para MEF en .NET
- 9. Java equivalente para mysql_real_escape_string() de PHP
- 10. Java equivalente para str.strip de Python()
- 11. ¿Hay un equivalente Java para LINQ?
- 12. ¿Archivo Java .properties equivalente para Ruby?
- 13. Equivalente de NCrunch para Java en Eclipse
- 14. Java equivalente de OpenLayers
- 15. Java mkdir -p equivalente
- 16. Anotación Java equivalente C#
- 17. "Curl -F" equivalente Java
- 18. xml.etree.ElementTree equivalente en Java
- 19. DebugBreak equivalente en Java?
- 20. __LINE__ equivalente en Java?
- 21. Lex y Yacc en PHP
- 22. yacc/lex o codificación manual?
- 23. Java equivalente a app.config?
- 24. equivalente Java WPF
- 25. sprintf equivalente en Java
- 26. yacc - campo tiene tipo incompleto
- 27. NServiceBus equivalente en Java world
- 28. Usos apropiados para yacc/byacc/bison y lex/flex
- 29. ¿Utilidad para formatear un archivo de gramática de Bison/Yacc?
- 30. Yacc/Jay archivo de la gramática para JavaScript?
Dificultad: CUP ya no se mantiene y [CUP 2] (http://www2.in.tum.de/cup2) es beta. ¿Todavía está bien? – minopret
@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
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? –