Teoría de Lenguajes Gramáticas incontextuales José M. Sempere Departamento de Sistemas Informáticos y Computación Universidad Politécnica de Valencia Gramáticas incontextuales 1. Definiciones básicas. 2. Simplificación de gramáticas incontextuales. 3. Formas normales. Algoritmos de normalización. 4. Análisis de cadenas en gramáticas incontextuales. 5. Propiedades de decisión. 6. Subclases de gramáticas incontextuales Bibliografía M. A. Harrison. Introduction to Formal Language Theory. Addison-Wesley. 1978. J. E. Hopcroft, J. D. Ullman. Introduction to Automata Theory, Languages and Computation. Addison-Wesley.1979. G. Rozenberg, A. Salomaa (Eds.). Handbook of Formal Languages (Vol.1) Springer. 1997.
Definiciones básicas Gramática incontextual: G=(N,, P, S) con las producciones de la forma A A N, (N )* S AB A aab B cbd Árboles de derivación A S B a A b c B d Derivaciones directas S AB aabb abb abcbd abcd Derivaciones (por la izquierda, por la derecha, arbitrarias) S * abcd * Lenguaje generado por la gramática G L(G) = { w : S * w } Jerarquía de Chomsky Ambigüedad, lenguaje inherentemente ambiguo L reg L cf L cs Simplificación de gramáticas incontextuales G=(N,, P, S) diremos que está simplificada si (1) Todos sus símbolos son útiles (1.1) Generativos A N : A * w w * (1.2) Alcanzables A ( N): S * A, ( N)* (2) No contiene producciones unitarias (3) No contiene producciones vacías A B A,B N A A N Para toda gramática incontextual G existe una gramática incontextual G simplificada tal que L(G ) = L(G) { }
Forma Normal de Chomsky G=(N,, P, S) diremos que está en forma normal de Chomsky si todas sus producciones toman una de las dos siguientes formas (1) A BC A, B, C N (2) A a a Para toda gramática incontextual G existe una gramática incontextual G en forma normal de Chomsky tal que L(G ) = L(G) { } Algoritmo para la obtención de la Forma Normal de Chomsky Entrada G=(N,, P, S) gramática incontextual arbitraria con L(G) Salida G 1 =(N 1, 1, P 1, S) gramática en FNC tal que L(G 1 ) = L(G) { } Método /* Pasos preliminares */ Obtener G 2 =(N 2, 2, P 2, S) simplificada tal que L(G 2 ) = L(G) { } /* Fase 1 */ Para toda producción A X 1 X 2 X n P 2 con n 2 Si X i 2 sustituir X i por C xi en la anterior producción y añadir la producción C xi X i El resto de producciones permanecen igual Se obtiene la gramática G 3 = (N 3, 3, P 3, S) con L(G 3 ) = L(G 2 ) /* Fase 2 */ Para toda producción A X 1 X 2 X n P 3 con n 3 Sustituir la anterior producción por el conjunto de producciones A X 1 D 1 D 1 X 2 D 2 D n-2 X n-1 X n El resto de producciones permanecen igual Se obtiene la gramática G 1 = (N 1, 1, P 1, S) con L(G 1 ) = L(G 2 ) = L(G) { }
Ejemplo G=(N,, P, S) (simplificada) S AaBb ABB Aa A aa ab B a BB /* Fase 1 */ G 3 =(N 3, 3, P 3, S) S AC a BC b ABB AC a A C a A C a C b B a BB C a a C b b /* Fase 2 */ G 1 =(N 1, 1, P 1, S) S AD 1 AD 3 AC a D 1 C a D 2 D 2 BC b D 3 BB A C a A C a C b B a BB C a a C b b Forma Normal de Greibach G=(N,, P, S) diremos que está en forma normal de Greibach si todas sus producciones son de la forma A a a N* Para toda gramática incontextual G existe una gramática incontextual G en forma normal de Greibach tal que L(G ) = L(G) { }
Algoritmo para la obtención de la Forma Normal de Greibach (1) Entrada G=(N,, P, S) gramática incontextual arbitraria con L(G) Salida G 1 =(N 1, 1, P 1, S) gramática en FNG tal que L(G 1 ) = L(G) { } Método /* Pasos preliminares */ Obtener G 2 =(N 2, 2, P 2, S) simplificada y en FNC tal que L(G 2 ) = L(G) { } /* Fase 1 */ N 2 = { A 1, A 2,, A m } Para k=1 hasta m Para j=1 hasta k-1 Para cada producción A k A j Para cada producción A j Añadir la producción A k Eliminar la producción A k A j Para cada producción A k A k Añadir la producción B k Añadir la producción B k B k Eliminar la producción A k A k Para cada producción A k Si no comieza por A k Añadir la producción A k B k Algoritmo para la obtención de la Forma Normal de Greibach (2) Al final de la Fase 1 las producciones están en una de las tres formas (1) A i A j con j > i (2) A i a (3) B i con a (N { B 1, B 2,, B i-1 })* Las producciones de la forma (2) ya están en FNG Todas las producciones de A m ya están en FNG Las producciones de los nuevos símbolos B i comienzan por símbolos A j /* Fase 2 */ Para k = m-1 hasta 1 Para cada producción A k A j Para cada producción A j Añadir la producción A k Eliminar la producción A k A j Para cada producción B k A j Para cada producción A j Añadir la producción B k Eliminar la producción B k A j
Ejemplo G=(N,, P, A 1 ) (simplificada y en FNC) /* Fase 1 */ G 2 =(N 2, 2, P 2, A 1 ) (1) (2) (3) A A 1 A 2 A 1 A 2 A 3 3 A A 2 a a B 2 A 2 A 3 A 2 a 2 A B 2 A 3 A 2 B 2 A 3 A 3 A 1 A 3 b 2 A 3 A 1 A 3 b A 1 A 2 A 3 A 2 A 1 A 2 a A 3 A 1 A 3 b A 1 A 2 A 3 A 2 a a B 2 B 2 A 3 A 2 B 2 A 3 A 2 A 3 A 2 A 3 A 3 b (4) A 1 A 2 A 3 A 2 a ab 2 B 2 A 3 A 2 B 2 A 3 A 2 A 3 a A 3 A 3 a B 2 A 3 A 3 b /* Fase 2 */ G 1 =(N 1, 1, P 1, A 1 ) (1) (2) A 1 a A 3 a B 2 A 3 A 2 a a B 2 B 2 A 3 A 2 B 2 A 3 A 2 A 3 a A 3 A 3 a B 2 A 3 A 3 b A 1 a A 3 a B 2 A 3 A 2 a a B 2 B 2 a A 3 A 3 A 2 B 2 a B 2 A 3 A 3 A 2 B 2 b A 2 B 2 a A 3 A 3 A 2 a B 2 A 3 A 3 A 2 b A 2 A 3 a A 3 A 3 a B 2 A 3 A 3 b Otras formas de gramáticas Forma m-estándar G=(N,, P, S) diremos que está en forma m-estándar si todas sus producciones son de la forma A a a N* m Para toda gramática incontextual G y para todo valor m 2 existe una gramática incontextual G en forma m-estándar tal que L(G ) = L(G) { }
Algoritmo para la obtención de la Forma Normal m-estándar Entrada G=(N,, P, S) gramática incontextual en Forma Normal (m+1)-estándar Salida G 1 =(N 1,, P 1, S) gramática en Forma Normal m-estándar tal que L(G 1 ) = L(G) Método N 1 = N {(A,B) : A,B N } /* Definición de las producciones de P 1 */ P 1 = {A : A P, m+1 } {A ab 1 B m-1 (B m, B m+1 ) : A ab 1 B m B m+1 P } {(A,B) B : A P, m } {(A,B) ab 1 B m-1 (B m, B) : A ab 1 B m-1 B m P} {(A,B) ab 1 B m-2 (B m-1, B m )(B m+1,b) : A ab 1 B m B m+1 P} Ejemplo G=(N,, P, A 1 ) (en FN 3-estándar) A 1 a A 3 a A 4 A 3 A 2 a a A 4 aa 2 A 2 A 3 a A 3 A 3 a A 4 A 3 A 3 b A 4 a A 3 A 3 A 4 b A 2 A 4 a G 1 =(N 1,, P 1, A 1 ) (en FN 2-estándar) N 1 = { A 1, A 2, A 3, A 4, (A 1,A 1 ), (A 1,A 2 ), (A 1, A 3 ), (A 1,A 4 ), (A 2,A 1 ), (A 2,A 2 ), (A 2, A 3 ), (A 2,A 4 ), (A 3,A 1 ), (A 3,A 2 ), (A 3, A 3 ), (A 3,A 4 ), (A 4,A 1 ), (A 4,A 2 ), (A 4, A 3 ), (A 4,A 4 ) } P 1 : A 1 a A 3 a A 4 A 3 A 2 a a A 4 aa 2 A 2 A 3 a A 3 A 3 b A 4 b A 2 A 4 a A 3 a A 4 A 3 A 3 A 3 a A 4 (A 3,A 3 ) (A 3,A 3 ) b A 3 (A 3,A 3 ) a A 3 (A 3,A 3 ) A 4 a A 3 A 2 A 4 A 4 a A 3 (A 2,A 4 ) (A 2,A 4 ) a A 4 a A 4 A 4 a A 2 (A 2, A 4 )
Otras formas de gramáticas Gramáticas invertibles G=(N,, P, S) diremos que es invertible si se cumple la siguiente propiedad ( A, B N) ( ( N)*) [((A ) P) ((B ) P)] A=B Para toda gramática incontextual G existe una gramática incontextual G invertible tal que L(G ) = L(G) Una solución no práctica A i A k A i R i A k R k R Algoritmo para la obtención de la Forma Normal invertible Entrada G=(N,, P, S) gramática incontextual simplificada Salida G 1 =(N 1,, P 1, S 1 ) gramática invertible tal que L(G 1 ) = L(G) Método N 1 = {S 1 } 2 N - S 1 N /* Definición de las producciones de P 1 */ S 1 si es un subconjunto de N que contenga a S Para cada producción B x 0 B 1 x 1 B n x n P donde B i, N, x i * Para cada auxiliar A 1,, A n N 1 {S 1 } añadir la producción A x 0 A 1 x 1 A n x n donde A = {C : C x 0 C 1 x 1 C n x n P, C i A i }
Ejemplo G=(N,, P, S) S 0A 1B A 0A 0S 1B B 1 0 G 1 =(N 1,, P 1, S 1 ) (invertible) N 1 = { S 1, {S}, {A}, {B}, {S,A}, {S,B}, {A,B}, {S,A,B} } P 1 : S 1 {S} {S,A} {S,B} {S,A,B} B 1 0 {B} 1 0 S 0A A 0A A 1B S 1B A 0S {S,A} 0{A} 0{A,B} 0{S,A} 0{S,A,B} {S,A} 1{B} 1{A,B} 1{S,B} 1{S,A,B} {A} 0{S} 0{S,B} Análisis de cadenas en gramáticas incontextuales El problema de la pertenencia ( Membership Problem ) Dada una gramática incontextual arbitraria G=(N,, P, S) y una cadena w * w L(G)? Si w = el problema se reduce a comprobar si S es anulable En el caso de w podemos trabajar con una gramática simplificada y en forma normal G tal que L(G ) = L(G) { }. El problema se reduce a comprobar si w L(G )
Análisis de cadenas mediante exploración exhaustiva Entrada : G=(N,, P, S) en FNG y w = w 1 w 2 w n (w ) Salida : Cierto (si w L(G)) o Falso (si w L(G)) Método : Explorar sistemáticamente todos los árboles de derivación que sigan el orden de los símbolos de la cadena S w 1 A 1 A p w 2 A 2 A q Complejidad temporal: O(k n ) (siendo k el número máximo de producciones que tiene cualquier auxiliar de la gramática) Algoritmo de análisis CYK (Cocke-Younger-Kasami) Entrada : G=(N,, P, S) en FNC y w = w 1 w 2 w n (w ) Salida : Cierto (si w L(G)) o Falso (si w L(G)) Método : Para i=1 hasta n V i1 = { A : A w i P } Para j=2 hasta n Para i=1 hasta n-j+1 V ij = Para k=1 hasta j-1 V ij = V ij { A : A BC P, B V ik, C V i+k, j-k } Si S V 1n devolver Cierto sino devolver Falso Complejidad temporal: O(n 3 ) Complejidad espacial: O(n 2 ) (siendo G un parámetro externo)
Ejemplo G=(N,, P, S) (simplificada y en FNC) S AB BC A BA a B CC b C AB a w = baaba j 1 2 3 4 5 b a a b a i 1 2 3 4 5 B A,C A,C B A,C S,A B S,C S,A B B S,A,C S,A,C S V 15 Cierto (w L(G)) Propiedades de decisión Un problema de decisión (expresado en términos formales) es decidible si existe un algoritmo que lo resuelva. (En caso contrario es indecidible) Algunos problemas decidibles referentes a gramáticas incontextuales El problema de la vacuidad : L(G) =? El problema de la infinitud : L(G) =? El problema de la pertenencia : w L(G)? El problema de la equivalencia estructural : str(g 1 ) = str(g 2 )? (str(g i ) denota el conjunto de esqueletos de G i, árboles de derivación donde los nodos internos no tienen etiquetas )
Algunos problemas indecidibles referentes a gramáticas incontextuales El problema de la inclusión : L(G 1 ) L(G 2 )? El problema de la equivalencia : L(G 1 )= L(G 2 )? El problema de la exhaustividad : L(G) = *? El problema de la regularidad : Es L(G) regular? El problema de la ambigüedad : Es G ambigua? El problema de la ambigüedad inherente : Es L(G) inherentemente ambiguo? El problema de la complementariedad : Es L(G) incontextual? El problema de la intersección : Es L(G 1 ) L(G 2 ) incontextual? Algunas subclases de gramáticas incontextuales Gramáticas lineales pares G=(N,, P, S) A u B v A w A, B N u, v, w * u = v L reg L el L cf Gramáticas lineales G=(N,, P, S) A u B A B v A w A, B N u, v, w * L reg L el L lin L cf