Tengo una gramática ANTLR y me gustaría difuminar mi analizador.¿Existe alguna utilidad que, dada una gramática ANTLR, produzca cadenas coincidentes?
Respuesta
¿Está buscando la generación de una gramática CFG? Es decir. la generación de cadenas aceptadas por la gramática? Esta podría ser una buena idea para verificar la corrección gramatical, pero tenga en cuenta que el conjunto de cadenas aceptadas probablemente sea infinito. Cualquier error realmente malo ya debería ser aparente en la especificación de la gramática, y con suerte mediante la comprobación de LL-ness.
No conozco ninguna herramienta en el mundo ANTLR, tampoco una búsqueda rápida en Google sobre la generación (E) BNF revela algo útil.
Sin embargo, no es muy difícil hacer rodar su propio generador si el rendimiento no es un problema. Prolog me viene a la mente, hay mucha literatura disponible, pero si no quieres dejar Java, sospecho que la elaboración casera es el camino a seguir. Es divertido de todos modos.
Supongamos que ha generado oraciones (cadenas de tokens) de su gramática ANTLR. ¿Por qué crees que tu analizador basado en ANTLR se opondría a ellos?
Lo que realmente tiene que hacer es producir cadenas no del todo legales. Entonces, lo que necesita es un generador que pueda producir cadenas erróneas.
Dado que ANTLR genera un conjunto de procedimientos a partir de su gramática ANTLR, creo que sería difícil producir un generador de oraciones utilizando el analizador generado. Lo que necesitas es el modelo explícito de la gramática. Y esto ya está disponible para usted: la entrada ANTLR gramática.
Una complicación adicional que veo es la generación de tokens legales de las expresiones regulares que componen las definiciones del token. De nuevo, necesitaría procesar la entrada ANTLR para hacer esto.
El procesamiento de ambos parece técnicamente sencillo. El mejor motor para usar como base es probablemente la interfaz ANTLR, que obviamente analiza las especificaciones ANTLR, por lo que debe contener alguna representación de la entrada ANTLR.
Estaba buscando algo similar y encontré GramTest, que parece ser adecuado, pero en lugar de la gramática ANTLR utiliza la gramática BNF como entrada.
Esta herramienta le permite generar casos de prueba basados en el usuario arbitrario gramáticas definidas. La gramática de entrada se da en notación BNF. Las aplicaciones potenciales incluyen fuzzing y pruebas automáticas.
Para obtener más información de fondo que enlaza con las siguientes entradas del blog:
- 1. ¿Existe una gramática ANTLR o IRONY existente para R?
- 2. C# ANTLR gramática?
- 3. ¿Existe alguna alternativa válida a ANTLR escrita en C#?
- 4. Convertir la gramática Antlr simple a Xtext
- 5. ¿Existe alguna utilidad para validar makefiles?
- 6. ¿Existe alguna utilidad para ordenar VBScript?
- 7. antlr gramática: parser- y analizadoras literales
- 8. problemas de gramática C#, ANTLR, ECMAScript
- 9. cadenas coincidentes disímiles
- 10. ¿Hay un archivo de gramática C++ en funcionamiento para ANTLR?
- 11. Ampliando la gramática ANTLR simple para admitir variables de entrada
- 12. ¿Utilidad para formatear un archivo de gramática de Bison/Yacc?
- 13. Prefijos de cadenas coincidentes en Haskell
- 14. C# compare dos cadenas para palabras coincidentes
- 15. Antlr lexer tokens que coinciden con cadenas similares, ¿y si el codicioso lexer comete un error?
- 16. Cadenas coincidentes entre columnas en R
- 17. ANTLR ¿Cuál es la forma más sencilla de realizar una gramática dependiente de sangría de pitón?
- 18. ¿Existe un emparejador RSpec2 para Hashes coincidentes?
- 19. ANTLR para C# y atributo CLSCompliant
- 20. Dada una cadena, genera una expresión regular que puede analizar cadenas * similares *
- 21. ¿Cómo puedo construir una gramática limpia similar a Python en ANTLR?
- 22. Fichas Antlr del archivo
- 23. ¿Hay alguna utilidad que convierta POSIX a PCRE para PHP?
- 24. ¿Existe alguna convención de formato en las cadenas de consulta?
- 25. Gramática AS3: Más precisa
- 26. ¿Cuáles son las características de ANTLR que XText no proporciona?
- 27. ANTLR: indentación de espacio?
- 28. Resaltar cadenas específicas en una cadena larga dada en Javascript
- 29. ¿Alguna forma de hacer que XmlSerializer produzca xml en un orden definido?
- 30. ¿Alguna herramienta puede generar aleatoriamente el código fuente según una gramática de lenguaje?
i no cree que es correcto, ya que un usuario antlr no estoy interesantes de probar la capacidad de las ANTLR para usar una gramática para analizar una secuencia de entrada, sus habilidades y su comportamiento están bien documentados. No, lo que estoy interesado en probar es el comportamiento de mi visitante-oyente para gráficos de objetos arbitrarios: gráficos en los que no podía pensar para encontrar los documentos. Me gustaría mucho una herramienta que genere cadenas aleatorias para una gramática suministrada. Tal herramienta permitiría una generación elegante de pruebas de extremo a extremo. – Groostav
@Groostav: todos entienden que el problema fue generar cadenas aleatorias del lenguaje, o de variantes cercanas. El problema es, ¿cómo vas a generar esas cadenas? Mi punto es que no puede hacerlo fácilmente a partir de analizadores ANTLR generados; eso es como tratar de interpretar el código arbitrario que es Turing-hard (tal vez no, pero nadie está argumentando que esto es fácil de hacer). El único artefacto que debe usar para generar esas cadenas es la propia gramática ANTLR explícita, incluidos los aspectos léxicos. ANTLR en sí mismo no parece brindarle ninguna ayuda. ¿Qué será? –