A saber, ¿existe alguna herramienta que muestre automáticamente el idioma completo de una gramática dada, incluyendo resaltar las ambigüedades (si las hay)?¿Cuál es la forma más fácil de saber si una gramática BNF es ambigua o no?
Respuesta
Puede haber alguna peculiaridad acerca de las gramáticas de estilo BNF, pero, en general, no es posible decidir si una gramática libre de contexto dada (como BNF) es ambigua.
En resumen, no existe una herramienta porque, en general, esa herramienta es matemáticamente imposible. Sin embargo, podría haber algunos casos especiales que podrían funcionar para usted.
Más específicamente, puede verificar si una gramática es ambigua si lo es, pero no se puede probar que no. – OrangeDog
@OrangeDog: Bueno, en general no puedes probarlo, pero es posible para algunas gramáticas (Aquí hay una pequeña gramática para la cual puedes probarla fácilmente: "goal = a;"). –
En general, no.
Pero como un enfoque práctico, lo que se puede hacer, se le da una gramática, es para cada regla, enumerar posibles cadenas de terminales válidos/no terminales, para ver si alguna regla tiene dos o más derivaciones equivalentes (que serían una ambigüedad).
Nuestro DMS Software Reengineering Toolkit es un sistema de transformación de programas para lenguajes informáticos arbitrarios, impulsado por descripciones gramaticales explícitas. DMS usa un generador de analizador para controlar su motor de análisis GLR.
El generador de analizadores de DMS opcionalmente controlará la ambigüedad esbozada arriba, ejecutando una búsqueda iterativa de profundización en todas las reglas de la gramática. Esto es práctico porque tiene tablas de análisis para guiar eficientemente la enumeración de opciones. Puedes decirle que ejecute este control hasta cierta profundidad elegida. Puede tomar mucho tiempo si elige una profundidad de cualquier tamaño interesante, pero de hecho una profundidad de 3 o 4 es suficiente para encontrar muchas ambigüedades estúpidas introducidas en una gramática grande. Generalmente hacemos esto durante nuestra depuración inicial de la gramática, y en el punto donde creemos que lo tenemos bastante correcto.
Nota: el software DMS vinculado cuesta dinero. El sitio web no muestra el precio; debe llamar para una cotización. –
- 1. ¿Cuál es el BNF de BNF? es decir, ¿cómo definimos una meta gramática BNF?
- 2. ¿Cuál es la forma más fácil de animar una línea?
- 3. ¿Es esta una gramática ambigua? ¿Cómo debería resolverlo?
- 4. C#: ¿cuál es la forma más fácil de restar tiempo?
- 5. ¿Cuál es la forma más fácil de averiguar si dos archivos son diferentes por programación?
- 6. ANTLR ¿Cuál es la forma más sencilla de realizar una gramática dependiente de sangría de pitón?
- 7. ¿cómo puedo demostrar que esta gramática es ambigua?
- 8. ¿Cuál es la forma más fácil de hacer 'es' en Java?
- 9. La forma más fácil de comprobar si una Cadena arbitraria es un nombre de archivo válido
- 10. ¿Cuál es la mejor manera de analizar una gramática simple?
- 11. ¿Cuál es la forma más fácil de obtener una OutOfMemoryException en C#?
- 12. ¿Cuál es la forma más fácil de dibujar texturas con OpenGL ES?
- 13. ¿Cuál es la forma más confiable de verificar si una variable de JavaScript es nula?
- 14. ¿Cuál es la forma más fácil de crear una tabla de Excel con C#?
- 15. ¿Cuál es la forma más fácil y no intensiva de memoria de exportar XML desde Python?
- 16. ¿Cuál es la forma más fácil de actualizar una aplicación grande de C# winforms a WPF
- 17. ¿Cuál es la forma más fácil de explicar qué es Hadoop y mapa/reducir?
- 18. ¿Cuál es la forma más fácil de crear una extensión C opcional para un paquete python?
- 19. ¿Cuál es la forma más fácil de paralelizar una tarea en Java?
- 20. cómo saber si una cadena es base64 o no
- 21. ¿Cuál es la forma más fácil de conservar datos en una aplicación de iPhone?
- 22. ¿Cuál es la forma más fácil de especificar una lista con valores en Spring?
- 23. ¿Cuál es la forma más fácil de probar una API REST de catalizador?
- 24. Android Eclipse: ¿Cuál es la forma más fácil de duplicar una clase?
- 25. ¿Existe una forma unificada de saber si un nodo es visible o no?
- 26. ¿Cuál es la forma más fácil de llenar los vacíos en una lista de números?
- 27. ¿Cuál es la forma más fácil de guardar una consulta LINQ para su uso posterior?
- 28. ¿Cuál es la forma más fácil de exportar una base de datos SQLServer 2000 a XML?
- 29. Cómo saber si un Tipo es una lista o matriz o IEnumerable o
- 30. ¿Cuál es la forma más fácil de eliminar el primer carácter de una cadena?
Quizás esto es relevante: http://cstheory.stackexchange.com/questions/4352/how-is-proving-a-context-free-language-to-be-ambiguous-undecidable –