2010-01-11 25 views
11

Estoy trabajando en un nuevo idioma y mientras escribo la gramática me gustaría poder probar la gramática en cuanto a integridad, conflictos y similares. No estoy realmente preocupación por el generador de analizador subyacente (pero uno para .NET sería preferible)Cualquier BNF IDE con características de prueba

Así lista de características en una palabra sería:

  • funcionalidad editor de texto acumulación
  • sintaxis/sematics de error informar
  • conflictos de informes
  • funcionalidad prueba de gramática (es decir, la ventana de código de escritura en la gramática previsto para verificar la exactitud de la gramática definición)

Un proyecto CodePlex llamado Irony tiene algo similar a lo que estoy pidiendo, pero no admite escribir la gramática como BNF que se requiere.

+0

Relacionados: http://stackoverflow.com/questions/1800199/is-there-a-bnf-mode-for-emacs – dmckee

Respuesta

7

Recomendaría ANTLR como generador de analizadores. Es una característica completa y es compatible con C#, así como una gran cantidad de otros idiomas de destino.

Para IDEs, hay un complemento para Eclipse llamado ANTLR IDE y un IDE independiente llamado ANTLRWorks, que funcionan bien.

Tenga en cuenta, sin embargo, que ANTLR usa un algoritmo LL (*) en lugar de un algoritmo LR (k). Aún así, es muy bueno y ANTLRWorks puede hacer la mayor parte del factoring izquierdo necesario.

4

Cuando "trabaja en un nuevo idioma" y trata de obtener un BNF de referencia correcto, probablemente no desee sesgar su gramática de referencia hacia ningún generador de analizador en particular. Uno de los problemas al escribir una gramática de prueba para Bison (LALR (1)) o ANTLR (LL *) es exactamente eso. Tampoco querrá quedarse colgado en "cómo codifico las reglas de BNF de forma tal que lo haga realmente analizar" presumiblemente porque está interesado en trabajar en la gramática, no trabajando en el generador del analizador.

Así que recomiendo usar un generador de analizador sintáctico libre de contexto completo. Esto te permitirá escribir la gramática en la forma más natural con el mínimo esfuerzo. Esto podría significar renunciar a "editor de texto", "ventana de prueba de editor", ... pero según mi experiencia (verifique mi biodesbordamiento de pila), el uso de un generador de analizador sin contexto sobrepasa completamente esas sutilezas. Editar-guardar-analizar no requiere mucho esfuerzo.

Entiendo que Bison tiene una opción de GLR que proporcionaría generación de analizador sin contexto, y es de código abierto, por lo que podría servir simplemente para probar la gramática.

Nuestra DMS Software Reengineering Toolkit es comercial y también proporciona un analizador GLR, que se ha utilizado para implementar más de 30 idiomas completos, incluidos C, C++ y COBOL en varios dialectos y en otros idiomas más modernos como Python, Ruby, PHP, ....

La diferencia entre DMS y Bison es que DMS está diseñado para admitir todos los aspectos de la construcción de un analizador/traductor de lenguaje completo (Unixde lexing, análisis GLR con informe y recuperación de errores, construcción automática de árbol , construcción de tabla de símbolos, control y análisis de flujo de datos, transformaciones, impresión bonita, ...). Si quisieras evaluar seriamente tu "nuevo idioma", eventualmente necesitarás hacer todo esto, y Bison es solo un pequeño paso en este camino. DMS te llevará todo el camino.

+0

Una respuesta muy informativa gracias. Estoy al final apuntando a un generador de analizador específico (fsyacc). Parte de la tarea que me he propuesto es aprender F # y como tenía que escribir un compilador, pensé que sería el proyecto perfecto para aprender un funcional. lenguaje (aunque f # estrictamente hablando es multi-paradigma no solo funcional), así que realmente espero hacer las cosas que DMS hubiera proporcionado. fsyacc ius LALR (1) por lo que ANTLRworks es de poca ayuda al final, pero el autocompletado y aún lo hace más rápido que un simple editor de texto –

0

Eche un vistazo a BNFC, que puede generar código de trabajo y el archivo MAKE, desde BNF con etiqueta, para varios idiomas de destino como: Haskell, OCaml, C, C++ y Java. Obtiene una impresora bonita, corrector/impresora de sintaxis abstracta, código esqueleto para su propio compilador o intérprete, y documentación del lenguaje postcript.

0

puede ser encontrará esta herramienta útil: Gold Parser Builder

unfortunally es sólo ventanas.

Cuestiones relacionadas