2010-08-07 12 views

Respuesta

1

¿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.

0

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.

+0

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

+1

@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á? –

0

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:

Cuestiones relacionadas