Estoy estudiando para mi prueba de lenguajes de computación, y hay una idea que estoy teniendo problemas para resolver.Regular vs Contexto Gramáticas gratis
Entiendo que gramáticas regulares son más simples y no pueden contener ambigüedades, pero no pueden hacer muchas tareas que son necesarias para los lenguajes de programación. También entendí que gramáticas libres de contexto permiten la ambigüedad, pero permiten algunas cosas necesarias para los lenguajes de programación (como los palíndromos).
Lo que estoy teniendo problemas con la comprensión de cómo se pueda derivar de todo lo anterior al saber que no terminales gramática regular pueden asignar a un terminal o un no terminal seguido de un terminal o que un contexto libre de mapas no terminales a cualquier combinación de terminales y no terminales.
¿Alguien me puede ayudar a armar todo esto?
Primero: las gramáticas regulares pueden ser ambiguas (ejemplo de Kai Kuchenbecker: S -> aA | aB, B -> a, A -> a). Lo único es que solo hay una forma de posicionar los nodos en el árbol de sintaxis (por ejemplo, la ambigüedad de asociatividad no existe cuando se usa una gramática común). Segundo: Puede haber más de un lado derecho en un terminal no terminal (A -> a, A -> aA; y wikipedia incluso incluye épsilon como tercera alternativa: http://en.wikipedia.org/wiki/ Regular_grammar) – user764754
ambigüedad viene cuando una oración se puede derivar de su gramática en más de una ruta de derivación.el simple hecho de tener más de una regla de producción para un terminal no hace que la gramática sea ambigua. – Sujoy
Este ejemplo es realmente incorrecto. Si imaginamos que las reglas completas son 'A-> a | c' y 'B-> b' entonces esta gramática permite no palíndromos. Por ejemplo, podría producir: 'S-> ABA-> aBA-> abA-> abc'. El problema es que no queremos producir dos variables en la primera regla, sino dos terminales. Una posibilidad para una gramática que permite palíndromos es: 'S -> aSa | bSb | a | b' – gdiazc