EPAL, el lenguaje de incluso palíndromos, se define como el lenguaje generado por la siguiente gramática libre de contexto inequívoca:
EPAL es la "ruina" de muchos algoritmos de análisis: todavía tengo que encontrar algún algoritmo de análisis para CFG inequívocos que puedan analizar cualquier gramática que describa el lenguaje. A menudo se usa para mostrar que hay CFG inequívocos que un analizador en particular no puede analizar. Esto inspiró mi pregunta:
¿Existe algún algoritmo de análisis que acepte solo CFG no ambiguos que funcionan en EPAL?
Por supuesto, uno puede diseñar un analizador ad-hoc de dos pasos para la gramática que analiza el lenguaje en tiempo lineal. Me interesan los métodos de análisis que no se han diseñado específicamente con EPAL en mente.
fuente
Respuestas:
Considere el siguiente bosquejo de una estrategia de análisis bajo su propio riesgo.
En lugar de leer la entrada solo desde un extremo, leemos desde ambos lados y buscamos reglas coincidentes. Podemos hacer esto en un estilo de descenso recursivo; en una llamada a , encuentre el prefijo w y el sufijo v en la entrada de modo que haya una regla A → w B v , descienda a B ( ) en la palabra restante. Si no hay una regla coincidente, rechace la palabra.A ( ) w v A → w B v B ( )
Este algoritmo analiza todas las gramáticas lineales e inequívocas. Se necesita tiempo lineal si todos los pares de reglas y A → w ′ B ′ v ′ tienen w ≢ p w ′ o v ≢ s v ′ ¹. Esto incluye EPAL. De lo contrario, debemos mirar hacia adelante para que podamos tomar el tiempo Θ ( n 2 ) .A → w B v A → w′si′v′ w ≢pagsw′ v≢sv′ Θ(n2)
La idea no funciona para las gramáticas no lineales en absoluto. Las gramáticas lineales pero ambiguas en general no pueden analizarse sin retroceder (al menos para entradas negativas).
fuente