Considere la siguiente extensión de gramáticas libres de contexto que permite que las reglas tengan en el lado izquierdo, uno (o más) terminal en el lado derecho del no terminal. Es decir, reglas de la forma:Extensión a CFG, ¿qué es?
A b -> ...
El lado derecho puede ser cualquier cosa, como en las gramáticas sin contexto. En particular, es no se requiere, que el lado derecho tendrá exactamente el mismo símbolo de terminal al final. En ese caso, esta extensión sería sensible al contexto. Pero la terminal no es solo un contexto. A veces, este terminal se llama "retroceso".
Claramente, esto ya no es CFG (tipo-2). Incluye tipo-1. ¿Pero, qué es esto? ¿Realmente escribes-0 ya?
Esta extensión en particular está permitida en Definite Clause Grammars dcg en Prolog. (Para evitar malentendidos, no considero aquí las extensiones completas de Prolog. Es decir, supongo que las terminales provienen de un alfabeto finito y no son términos arbitrarios, tampoco considero los argumentos adicionales de Prolog que están permitidos en los DCG, que también entran en type- . 0 ya)
Editar: Aquí está una manera más sencilla de describir la extensión: Añadir a una CFG reglas de la forma
A b -> <epsilon>
¿Cómo sabes que el push-back corresponde a una regla A b -> ...? ¿Por qué no b A -> ...? –
@CookieMonster: De eso se trata el formalismo de Colmerauer. – false
No es necesario, especialmente sin ninguna referencia en la mano. Podría ser también una cosa lambek. –