2008-09-09 16 views

Respuesta

1

No tengo una respuesta a la pregunta de la herramienta, pero diré que es bastante fácil en cualquier lenguaje de procesamiento de texto (perl/python/etc) generar oraciones aleatorias de una gramática BNF y algo más detallada en un lenguaje más grande (Java/C/etc.), pero no debería ser demasiado difícil de implementar.

El problema con esto, por supuesto, es que solo puede generar cadenas en la gramática, y a menos que su gramática sea muy simple, el espacio de prueba es infinitamente grande.

1

He hecho exactamente lo que hazzen comentado (usando una DSL incorporada en un lenguaje de scripting). Fue un ejercicio levemente interesante, pero a excepción de las pruebas más básicas de, p. análisis, no fue terriblemente útil. La mayoría de mis pruebas más interesantes tienen que ver con relaciones más sofisticadas de las que uno puede expresar fácilmente en BNF (o cualquier otra gramática libre de contexto).

0

Si, por ejemplo, está desarrollando un compilador, es probable que tenga un tipo de datos de árbol de sintaxis abstracta. Si es así, entonces podría escribir una función para generar un AST aleatorio; con eso, puede imprimirlo en una cadena y alimentarlo a su prueba unitaria. Se garantiza que es un programa válido de esta manera, ya que comenzó con su AST.

Si estuviera escribiendo un compilador en Haskell o ML, esto es lo que haría, usando QuickCheck.

0

Gramtest es una de esas herramientas que puede generar cadenas de gramáticas definidas por el usuario arbitrario BNF. Puede leer más detalles sobre el algoritmo detrás de Gramtest here y algunos consejos prácticos sobre la herramienta están disponibles here.

Cuestiones relacionadas