Universidad Rey Juan Carlos Curso 2007–2008 Teorı́a de Autómatas y Lenguajes Formales Ingenierı́a Técnica en Informática de Sistemas Hoja de Problemas 2 Gramáticas Formales Nivel del ejercicio : (!) básico, (♣) medio, (♠) avanzado. 1. (!) Obtener las derivaciones de las palabras 002 y 0001 a partir de la siguiente gramática : G = ({A, B}, {0, 1, 2}, A, {A ::= 0B, A ::= 2, B ::= 0A, B ::= 1}) . Obtener el lenguaje que genera. Solución: A::=0B B::=0A A::=2 A −→ 0B −→ 00A −→ 002 A::=0B B::=0A A::=0B B::=1 A −→ 0B −→ 00A −→ 000B −→ 0001 El lenguaje que genera esta gramática son palabras que tienen un número determinado de ceros seguido de la paridad de los mismos (un 1 si el número de ceros es impar y un 2 en caso contrario): L = {0n 2 | n mod 2 = 0} ∪ {0n 1 | n mod 2 = 1} 2. (!) Obtener el lenguaje generado por la gramática : G = ({S}, {a, b}, S, {S ::= aSbb | λ}) . Solución: La gramática genera un lenguaje cuyas palabras están compuestas por una ristra de a’s seguida por otra ristra de b’s y además, el número de a’s es la mitad del número de b’s. L = {an b2n | n ≥ 0} 3. (!) Construir una gramática que genere el lenguaje L = {an bn+1 | n ≥ 0}. Página 1 de 8 Hoja de Problemas 2 (cont.) Solución: G = ({S, A}, {a, b}, S, {S ::= Ab, A ::= aAb | λ}) 4. (♣) Construir una gramática que genere el lenguaje L = {w | na (w) y nb (w) son pares }. Solución: G = ({S, A, B, C, D}, {a, b}, S, P }) P = {S ::= SS | A | B | λ, A ::= aSa, B ::= bSb, C ::= DSD, D ::= ab | ba} 5. (!) Indicar si las gramáticas con los siguientes conjuntos de producciones son equivalentes : P1 = {S ::= aSb | λ}, P2 = {S ::= aAb | λ, A ::= aAb | λ}. Solución: Dos gramáticas son equivalentes cuando generan el mismo lenguaje. Podemos observar que los lenguajes que generan G1 y G2 son los siguientes: L(G1 ) = {an bn | n ≥ 0} y L(G2 ) = {an bn | n ≥ 0} Por lo tanto, como L(G1 ) = L(G2 ), son gramáticas equivalentes. 6. (!) Construir gramáticas para Σ = {a, b} que generen los lenguajes cuyo conjunto de palabras sean : (a) Todas las cadenas con una única a. Solución: G = (ΣN , {a, b}, S, P ) ΣN = {S, B}, P = {S ::= BaB, B ::= bB | λ} Página 2 de 8 Hoja de Problemas 2 (cont.) (b) Todas las cadenas con al menos la subcadena ababbb. Solución: G = (ΣN , {a, b}, S, P ) ΣN = {S, A}, P = {S ::= AababbbA, A ::= aA | bA | λ} (c) Todas las cadenas con no más de tres a! s. Solución: G = (ΣN , {a, b}, S, P ) ΣN = {S, P, G, T, B}, P = {S ::= B | P, P ::= GaB | BaG | BaB, G ::= T aB | BaT | BaB, T ::= BaB, B ::= bB | λ} 7. (!) Describir el lenguaje generado por la gramática cuyo conjunto de producciones es {S ::= aA | λ, A ::= bS}. Solución: L = {(ab)n | n ≥ 0} 8. (!) Describir el lenguaje generado por la gramática cuyo conjunto de producciones es {S ::= Aa, A ::= B, B ::= Aa}. Solución: Recordemos que por definición, dada una gramática G = (ΣN , ΣT , S, P ) el lenguaje reconocido o generado por G está formado por todas las sentencias (palabras) de G: L(G) = {x | S →∗ x y x ∈ Σ∗T } Dado que ninguna forma sentencial generada por la gramática del ejemplo es una sentencia (x ∈ Σ∗T ), entonces el lenguaje generado por esta gramática es el lenguaje vacı́o (L = ∅). 9. (♣) Construir una gramática para cada uno de los siguientes lenguajes : (a) L1 = {an bm | n ≥ 0, m > n}. Página 3 de 8 Hoja de Problemas 2 (cont.) Solución: G1 = ({S1 , A, B}, {a, b}, S1 , {S1 ::= B | aAbB, A ::= aAb | λ, B ::= b | bB}) (b) L2 = {an+2 bn | n ≥ 1}. Solución: G2 = ({S2 , C}, {a, b}, S2, {S2 ::= aaaCb, C ::= aCb | λ}) (c) L3 = {an bn−3 | n ≥ 3}. Solución: Para resolver este apartado, podemos tener en cuenta que L3 = {an bn−3 | n ≥ 3} es equivalente a L3equiv = {am+3 bm | m ≥ 0} y por lo tanto, se puede resolver de forma parecida al apartado anterior. G3 = ({S3 , D}, {a, b}, S3, {S3 ::= aaaD | λ, D ::= aDb | λ}) (d) L1 L2 . Solución: Para realizar este ejercicio, podemos utilizar las reglas de producción creadas en el apartado (a) y (b), teniendo cuidado al mezclar las producciones renombrándolas si fuese necesario, y generar otro axioma que haga uso de ellas: S ::= S1 S2 . G4 = ({S, S1 , S2 , A, B, C}, {a, b}, S, {S ::= S1 S2 , S1 ::= B | aAbB, A ::= aAb | λ, B ::= b | bB, S2 ::= aaaCb, C ::= aCb | λ}) Si nos damos cuenta, las producciones relativas a los elementos no terminales A y C son iguales, por lo que podemos eliminar una y retocar las reglas de producción que hagan uso de ellos. Al finalizar, la solución queda: G4 = ({S, S1 , S2 , A, B, C}, {a, b}, S, {S ::= S1 S2 , S1 ::= B | aAbB, A ::= aAb | λ, B ::= b | bB, S2 ::= aaaAb}) (e) L1 ∪ L2 . Solución: Procederemos de forma análoga al apartado anterior, sı́mplemente varı́a el nuevo axioma: S ::= S1 | S2 (f) L32 . Solución: Página 4 de 8 Hoja de Problemas 2 (cont.) De forma parecida, reutilizaremos la gramática que genera L2 , añadiendo un nuevo axioma: S ::= S2 S2 S2 (g) L∗1 . Solución: Idem del anterior. Nuevo axioma: S ::= SS1 (h) L4 = {abn a | n ≥ 1}. Solución: G5 = ({S5 , B}, {a, b}, S5 , {S5 ::= aBa, B ::= bB | b}) 10. (♣) Construir una gramática para cada uno de los siguientes lenguajes para Σ = {a} : (a) L1 = {w | |w| mod 3 = 0}. Solución: G1 = ({S}, {a}, S, {S ::= aaaS | λ}) . (b) L2 = {w | |w| mod 3 > 0}. Solución: G2 = ({S}, {a}, S, {S ::= a | aa | aaaS}) . 11. (♣) Dado un alfabeto Σ y una palabra w ∈ Σ∗ , se dice que w es un palı́ndromo si se verifica que w−1 = w. Dado Σ2 := {0, 1}, construir una gramática que genere el lenguaje de los palı́ndromos sobre Σ2 , Lpal (Σ2 ) := {w ∈ Σ∗2 | w−1 = w}. Solución: G = ({S, A}, {0, 1}, S, {S ::= 0S0 | 1S1 | A, A ::= 0 | 1 | λ}) 12. (♣) Construir una grámatica que genere el lenguaje L = {ww | w ∈ {a, b}∗ }. Solución: El lenguaje generado está formado por palabras que resultan de la concatenación de una misma palabra w dos veces, tal que w ∈ {a, b}∗ . G = ({S, X, Y, F, A, B}, {a, b}, S, P ) Página 5 de 8 Hoja de Problemas 2 (cont.) P = = = = = = = = = = = {S ::= XY, X ::= XaA | XbB | F, Aa ::= aA, Ab ::= bA, AY ::= Y a, Ba ::= aB, Bb ::= bB, BY ::= Y b, F a ::= aF, F b ::= bF, F Y ::= λ} 13. (♣) Construir una grámatica que genere el lenguaje L = {www | w ∈ {a, b}+ }. Solución: El lenguaje generado está formado por palabras que resultan de la concatenación de una misma palabra w tres veces, tal que w ∈ {a, b}∗ . G = ({S, X, Y, Z, F, A, B}, {a, b}, S, P ) P = {S ::= XY Z, X ::= XaA | XbB | F, Aa ::= aA, Ab ::= bA, Ba ::= aB, Bb ::= bB, AY ::= Y aA, BY ::= Y bB, AZ ::= Za, BZ ::= Zb, F a ::= aF, F b ::= bF, F Y ::= Y F, F Za ::= λ, F Zb ::= λ} Página 6 de 8 Hoja de Problemas 2 (cont.) 14. (♣) Sea Σ := {(, ), 0, 1}. Las expresiones con paréntesis bien balanceadas se definen del siguiente modo : • La palabra vacı́a está bien balanceada. • 0 y 1 son palabras bien balanceadas. • Si w ∈ Σ∗ es una palabra bien balanceada, entonces (w) es una palabra bien balanceada. • Si w, w! ∈ Σ∗ son palabras bien balanceadas, entonces ww! es una palabra bien balanceada. Construye una gramática que genere el lenguaje de las palabras bien balanceadas. Solución: G = ({S, W, P }, {0, 1}, S, {S ::= SW S | P, W ::= (W ) | (P ), P ::= OP | 1P | 0 | 1 | λ}) 15. (!) ¿ Son equivalentes las gramáticas cuyas producciones son las siguientes?. P1 = {S ::= aSb | ab | λ}, P2 = {S ::= aAb | ab, A ::= aAb | λ}. Solución: Observemos los lenguajes que genera cada una de las gramáticas: L(G1 ) = {an bn | n ≥ 0} y L(G2 ) = {an bn | n > 0} Como podemos ver, L(G1 ) incluye la palabra vacı́a(λ), mientras que el segundo lenguaje no la incluye, por lo tanto, al no generar el mismo lenguaje, no son equivalentes. 16. (!) Demostrar si las gramáticas con las siguientes producciones son ambiguas : {A ::= 1B | 11, B ::= 1}, {S ::= AB | aaB, A ::= a | Aa, B ::= b}. Solución: Recordemos las definiciones. Una gramática es ambigua si genera alguna sentencia ambigua. Una sentencia es ambigua si puede obtenerse por medio de varias derivaciones distintas correspondientes a árboles de derivación diferentes. Página 7 de 8 Hoja de Problemas 2 (cont.) Por lo tanto, debemos encontrar una sentencia que pueda corresponderse con dos (o más) árboles de derivación. Para la primera gramática, podemos encontrar dos árboles de derivación correspondientes a la palabra 11: A 1 A 1 1 B 1 Y para la segunda gramática, podemos encontrar dos árboles de derivación para la palabra aab: S S a a B b A A a Por lo tanto, ambas gramáticas son ambiguas. Página 8 de 8 B a b