Professional Documents
Culture Documents
1 Formas normales para las gramticas independientes del contexto 7.1.1 Eliminacin de smbolos intiles 7.1.2 Clculo de smbolos generadores y alcanzables 7.1.3 Eliminacin de producciones- 7.1.4 Eliminacin de las producciones unitarias 7.1.5 Forma Normal de Chomsky 7.2 El lema de bombeo para los lenguajes independientes del contexto 7.3 Propiedades de clausura de los lenguajes independientes del contexto 7.4 Propiedades de decisin de los LIC
S X w , donde
w pertenece a T*. Observe que X puede ser V o T, y la forma sentencial X puede ser la primera o la ltima en la derivacin. Si X no es til, decimos que es intil. La omisin de los smbolos intiles de una gramtica no cambiar el lenguaje generado. El mtodo para eliminar los smbolos intiles identifica las dos cosas que un smbolo tiene que cumplir para resultar til: l. Decimos que X es generador si w puede ser ese mismo smbolo terminal obtenido en cero pasos. 2. Decimos que X es alcanzable si existe una derivacin
*
X w para alguna cadena terminal w. Todo smbolo terminal es generador, ya que S X w para algn y .
*
Un smbolo que es til ser generador y alcanzable. Si eliminamos los smbolos que no son generadores en primer lugar y luego eliminamos aquellos smbolos que no son alcanzables, tendremos slo los smbolos tiles Ejemplo 7.1. Considere la gramtica: SAB| a, Ab. Todos los smbolos excepto B son generadores; a y b se generan a s mismos; S genera a y A genera b. Si eliminamos B, tenemos que eliminar la produccin S AB, quedando la gramtica: Sa Ab Ahora comprobamos que slo S y a son alcanzables a partir de S. Eliminando A y b slo queda la produccin Sa. Dicha produccin por s misma es una gramtica cuyo lenguaje es {a}, igual que el lenguaje de la gramtica original. Si primero comprobamos la alcanzabilidad, nos encontramos con que todos los smbolos de la gramtica son alcanzables. Si luego eliminamos el smbolo B porque no es generador, obtenemos una gramtica que todava tiene smbolos intiles, en concreto, A y b. Teorema 7.2. Sea G = (V, T, P, S) una GIC y supongamos que L(G) ; es decir, G genera al menos una cadena. Sea G1 = (V1, T1, P1, S) la gramtica que obtenemos mediante los siguientes pasos: l. Primero eliminamos los smbolos no generadores y todas las producciones que impliquen a uno o ms de dichos smbolos. Sea G2 = (V2, T2, P2, S) esta nueva gramtica. Observe que S tiene que ser generador, ya que suponemos que L(G) tiene al menos una cadena. 2. En segundo lugar, eliminamos todos los smbolos que no son alcanzables de la gramtica G2. Luego G1 no tiene ningn smbolo intil, y L(G1) = L(G) .
Trataremos de saber cmo, para una gramtica, calcular el conjunto de smbolos generadores y calcular el conjunto de smbolos alcanzables. Para ambos problemas, vamos a emplear el algoritmo que intenta descubrir los smbolos de dichos tipos. Si las construcciones inductivas apropiadas de estos conjuntos no consiguen descubrir un smbolo que sea generador o alcanzable, respectivamente, entonces el smbolo no es de ninguno de esos tipos. Sea G = (V, T, P, S) una gramtica. Para calcular los smbolos generadores de G, realizamos la siguiente induccin. Base. Todo smbolo de T, es generador, ya que se genera a s mismo. Paso inductivo. Supongamos que existe una produccin A y que todo smbolo de es generador. Entonces A es generador. Esta regla incluye el caso en que = ; todas las variables que tienen como cuerpo de una produccin son generadoras. Ejemplo 7.3. Considere la gramtica del ejemplo 7.1. De acuerdo con el caso base, a y b son generadores. Segn el paso inductivo, podemos utilizar la produccin Ab para concluir que A es generador y podemos emplear la produccin Sa para concluir que S es generador. El paso inductivo termina en dicho punto. No podemos utilizar la produccin SAB, porque no se ha demostrado que B sea generador. Por tanto, el conjunto de smbolos generadores es {a, b, A, S}. Teorema 7.4. El algoritmo anterior encuentra todos y slo los smbolos generadores de G. Consideremos ahora el algoritmo inductivo mediante el que determinaremos el conjunto de smbolos alcanzables para la gramtica G = (V, T, P, S). De nuevo, podemos demostrar que cualquier smbolo que no aadamos al conjunto de smbolos alcanzables no es realmente alcanzable. Ejemplo 7.5. Partimos de la gramtica del ejemplo 7.1. De acuerdo con el caso base, S es alcanzable. Dado que S tiene cuerpos de produccin AB y a, concluimos que A, B y a son alcanzables. B no tiene producciones, pero A tiene Ab. Por tanto, concluimos que b es alcanzable. Ahora no se puede aadir ningn smbolo ms al conjunto de smbolos alcanzables, que es {S, A, B, a, b}. Teorema 7.6. El algoritmo anterior determina todos (y slo) los smbolos alcanzables de G.
A . Si A es anulable, entonces
caso en que todos los Xi estn ausentes. Observe tambin que si una produccin de la forma A existe en P, no incluimos esta produccin en P1. Ejemplo 7.8. Considere la gramtica SAB, AaAA| , BbBB| . En primer lugar, determinamos los smbolos anulables. A y B son directamente anulables porque tienen producciones con como cuerpo. Entonces, determinamos que S es anulable, porque la produccin SAB tiene un cuerpo que consta slo de smbolos anulables. Por tanto, estas tres variables son anulables. Ahora construimos las producciones de la gramtica G1. En primer lugar, consideramos SAB. Todos los smbolos del cuerpo son anulables, por lo que existen cuatro formas en las que podemos elegir que A y B estn presentes o ausentes de forma independiente. Sin embargo, no podemos elegir que todos los smbolos estn ausentes, por lo que slo existen tres producciones: SAB| A| B. A continuacin consideramos la produccin AaAA. La segunda y tercera posiciones son smbolos anulables, por lo que de nuevo existen cuatro opciones de presencia o ausencia. En este caso, ninguna de las cuatro opciones es anulable, ya que el smbolo no anulable a estar presente en cualquier caso. Estas cuatro opciones dan las producciones: AaAA| aA| aA| a. Las dos opciones intermedias generan la misma produccin, ya que no importa qu A eliminemos si decidimos eliminar una de ellas. Por tanto, la gramtica final G1 slo tendr tres producciones para A. De forma similar, la produccin B proporciona para G1: BbBB| bB| b. Las dos producciones- de G no generan nada para G1. Por tanto, G1 est constituido por las siguientes producciones: SAB| A| B, AaAA| aA| a, BbBB| bB| b. Concluimos este estudio sobre la eliminacin de las producciones- demostrando que la construccin dada anteriormente no cambia el lenguaje, excepto porque ya no est presente si es que exista en el lenguaje de G. Teorema 7.9. Si la gramtica G1 se construye a partir de G mediante la construccin anterior para eliminar las producciones-, entonces L(Gl) = L(G) - {}.
A B , utilizando slo
Una vez que hayamos determinado dichos pares, podemos reemplazar cualquier secuencia de pasos de derivacin en la que A B1 B2 ... Bn por una produccin que utilice directamente la produccin no unitaria Bn a partir de A; es decir, A. Comenzamos viendo la construccin inductiva de los pares (A, B) tales que slo producciones unitarias. Denominamos a este tipo de pares par unitario. Base. (A, A) es un par unitario para cualquier variable A. Es decir,
A B empleando
Paso Inductivo. Suponga que hemos determinado que (A, B) es un par unitario y que BC es una produccin, donde C es una variable. Luego (A, C) es un par unitario. Ejemplo 7.10. Considere la gramtica de la figura. El caso base nos proporciona los pares unitarios (E, E), (T, T), (F, F) y (I, I). Para el paso inductivo, podemos hacer las siguientes inferencias: 1. (E, E) y la produccin ET generan el par unitario (E, T). 2. (E, T) y la produccin TF generan el par unitario (E, F). 3. (E, F) y la produccin FI generan el par unitario (E, I). 4. (T, T) y la produccin TF generan el par unitario (T, F). 5. (T, F) y la produccin FI generan el par unitario (T, I). 6. (F, F) y la produccin FI generan el par unitario (F, I). No pueden inferirse ms pares. De hecho, estos diez pares representan todas las derivaciones que no usan nada ms que producciones unitarias.
A A en cero pasos.
Existe una demostracin sencilla de que el algoritmo propuesto proporciona todos los pares que deseamos. A continuacin utilizamos dichos pares para eliminar las producciones unitarias de una gramtica y demostrar que los lenguajes de ambas gramticas son el mismo. Teorema 7.11. El algoritmo anterior determina exactamente los pares unitarios para una GIC G. Para eliminar las producciones unitarias, hacemos lo siguiente. Dada una GIC G = (V, T, P, S), construimos la GIC G1 = (V, T, P1, S): l. Determinamos todos los pares unitarios de G. 2. Para cada par unitario (A, B), aadimos a P1 todas las producciones A, donde B es una produccin no unitaria de P. Observe que A = B es posible; de esa forma, P1 contiene todas las producciones no unitarias de P. Ejemplo 7.12. Continuamos con el ejemplo 7.10, en el que se llev a cabo el paso (l) de la construccin anterior. La figura resume el paso (2) del algoritmo, en el que hemos creado el nuevo conjunto de producciones utilizando el primer miembro de un par como la cabeza y todos los cuerpos no unitarios del segundo miembro del par como los cuerpos de la produccin.
El paso final consiste en eliminar las producciones unitarias de la gramtica de la figura anterior. La gramtica resultante, no tiene ninguna produccin unitaria, aunque genera el mismo conjunto de expresiones que la gramtica original. Teorema 7.13. Si la gramtica G1 se construye a partir de la gramtica G mediante el algoritmo descrito anteriormente para eliminar las producciones unitarias, entonces L(G1) = L(G). Si Deseamos convertir cualquier GIC G en una GIC equivalente que no emplee ningn smbolo intil, ni producciones-, ni producciones unitarias hay que realizar las siguientes simplificaciones, en el orden indicado: l. Eliminar las producciones-. 2. Eliminar las producciones unitarias. 3. Eliminar los smbolos intiles. Teorema 7.14. Si G es una GIC que genera un lenguaje que contiene al menos una cadena distinta de , entonces existe otra GIC G1 tal que L(G1) = L(G) - {}, y G1 no tiene producciones-, ni producciones unitarias ni smbolos intiles.
, ni producciones unitarias ni smbolos intiles. Toda produccin de dicha gramtica es de la forma Aa, que es una
forma permitida por la FNC, o tiene un cuerpo de longitud 2 o superior. Nuestras tareas son entonces: a) Conseguir que todos los cuerpos de longitud 2 o superior estn formados slo por variables. b) Descomponer los cuerpos de longitud 3 o superior en una cascada de producciones, teniendo cada una de ellas un cuerpo formado slo por dos variables. La construccin para (a) es la siguiente: para todo smbolo a que aparezca en un cuerpo de longitud 2 o superior, creamos una nueva variable, por ejemplo A. Esta variable slo tiene una produccin, Aa. Ahora empleamos A en lugar de a en cualquier lugar que aparezca esta ltima dentro de un cuerpo de longitud 2 o superior. En este punto, toda produccin tendr un cuerpo formado por un slo smbolo terminal o por al menos dos variables y ningn smbolo terminal.
Para el paso (b), tenemos que descomponer dichas producciones AB1B2Bk para k 3, en un grupo de producciones con dos variables en cada cuerpo. Introducimos k-2 nuevas variables, C1, C2,, Ck-2. La produccin original se reemplaza por las k-1 producciones: AB1C1, C1B2C2,, Ck-3Bk-2Ck-2, Ck-2Bk-1 Bk Ejemplo 7.15. Vamos a expresar la gramtica del ejemplo 7.12 en su FNC. Para la parte (a), observe que existen ocho smbolos terminales, a, b, 0, 1, +, *, (, y), cada uno de los cuales aparece en un cuerpo que no est formado por un nico smbolo terminal. Por tanto, tenemos que introducir ocho nuevas variables, y ocho producciones en las que la nueva variable es reemplazada por el smbolo terminal. Utilizando las iniciales obvias como las nuevas variables, introducimos: Aa, Bb, Z0, O1, P+, M*, L(, R) Si introducimos estas producciones y reemplazamos cada uno de los smbolos terminales de un cuerpo formado por ms de un smbolo terminal por la variable correspondiente, obtenemos la gramtica mostrada en la figura. Ahora todas las producciones estn en la forma normal de Chomsky excepto aquellas cuyos cuerpos tienen longitud 3: EPT, TMF y LER. Algunos de estos cuerpos aparecen en ms de una produccin, pero podemos tratarlos introduciendo una variable adicional en cada uno.
Para EPT, introducimos la nueva variable C1, y reemplazamos la produccin EEPT por EEC1 y C1PT. Para TMF introducimos la nueva variable C2. Las dos producciones que utilizan este cuerpo, ETMF y TTMF, son reemplazadas por ET C2, TTC2 y C2MF. Para LER introducimos la nueva variable C3 y reemplazamos las tres producciones que utiliza, ELER, TLER y FLER por EL C3, TL C3, FL C3 y C3ER. La gramtica final, que est en la forma normal de Chomsky, se muestra en la figura.
Teorema 7.16. Si G es una GIC cuyo lenguaje consta de al menos una cadena distinta de , entonces existe una gramtica G1 en la forma normal de Chomsky, tal que L(G1) = L(G) - {}.
3. Para todo i 0, uviwxiy pertenece a L. Es decir, las dos cadenas v y x pueden "bombearse" cualquier nmero de veces, incluyendo cero, y la cadena resultante pertenecer a L.
7.3.1 Sustituciones
Sea un alfabeto y supongamos que para todo smbolo a de , elegimos un lenguaje La. Estos lenguajes que elegimos pueden emplear cualquier alfabeto, no necesariamente y no necesariamente el mismo para todos. Esta eleccin de lenguajes define una funcin s (una sustitucin) sobre , y nos referiremos a La como s(a) para cada smbolo a. Si w = ala2...an es una cadena de *, entonces s(w) es el lenguaje de todas las cadenas x1x2xn tal que la cadena xi pertenece al lenguaje s(ai), para i = 1,2,,n o dicho de otra manera, s(w) es la concatenacin de los lenguajes s(a1)s(a2) s(an). Podemos extender la definicin de s para aplicarla a lenguajes: s(L) es la unin de s(w) para todas las cadenas w de L. Teorema 7.23. Si L es un lenguaje independiente del contexto sobre el alfabeto , y s es una sustitucin sobre tal que s(a) es un LIC para cada a de , entonces s(L) es un LIC.
1.
Unin. Sean L1 y L2 lenguajes independientes del contexto. Entonces L1UL2 es el lenguaje s(L), donde L es el lenguaje {1 ,2} y s es la sustitucin definida por s(1) = L1 y s(2) = L2. Concatenacin. De nuevo, sean L1 y L2 lenguajes independientes del contexto. Entonces L1L2 es el lenguaje s(L), donde L es el lenguaje {12} y s es la misma sustitucin que en el caso (1). Clausura y clausura positiva. Si L1 es un lenguaje independiente del contexto, L es el lenguaje {1}* y s es la sustitucin s(l) = L1, entonces L1* = s(L). De forma similar, si L es el lenguaje {1}+, entonces L1+ = s(L). Homomorfismo. Supongamos que L es un lenguaje independiente del contexto del alfabeto y h es un homomorfismo sobre . Sea s la sustitucin que reemplaza cada smbolo a en por el lenguaje que consta de una sola cadena que es h(a). Es decir, s(a) = {h(a)}, para todo a en . Entonces, h(L) = s(L).
2.
3.
4.
7.3.3 Reflexin
Los lenguajes independientes del contexto tambin son cerrados para la reflexin. Teorema 7.25. Si L es un lenguaje independiente del contexto, entonces LR tambin lo es.
terminales, y eliminar aqullas que no lo hacen junto con todas sus producciones. Slo entonces eliminaremos las variables que no son derivables a partir del smbolo inicial. + Eliminacin de producciones- y unitarias. Dada una GIC, podemos encontrar otra GIC que genere el mismo lenguaje, excepto la cadena , y que no tenga producciones- (aquellas con como cuerpo) ni producciones unitarias (aquellas con una sola variable en el cuerpo). + Forma normal de Chomsky. Dada una GIC que genera al menos una cadena no vaca, podemos encontrar otra GIC que genere el mismo lenguaje, excepto la cadena , y que est en la forma normal de Chomsky: no existen smbolos intiles y todo cuerpo de produccin consta de dos variables o de un smbolo terminal. + El lema de bombeo. En cualquier LIC, es posible encontrar, dentro de cualquier cadena lo suficientemente larga del lenguaje, una subcadena corta tal que los dos extremos de dicha subcadena puedan ser "bombeados" en tndem; es decir, cada uno de ellos puede repetirse el nmero de veces que se desee. Las dos cadenas que van a bombearse no pueden ser ambas . + Operaciones que preservan la independencia del contexto. Los LIC son cerrados para la sustitucin, la unin, la concatenacin, la clausura (asterisco), la reflexin y el homomorfismo inverso. Los LIC no son cerrados para la interseccin y la complementacin, aunque la interseccin de un LIC con un lenguaje regular siempre es un lenguaje independiente del contexto.