Conversión de Gramáticas Libres de Contexto EQUIPO 6 Jardón Jara Micheelle Enrique Perfecto Espinosa Valeria
Objetivo Desarrollar el tema de Conversión de Gramáticas Libres de Contexto (GLC): Algoritmos para la conversión a una gramática limpia, a una bien formada y a una normalizada según Chomsky (FNC), mediante una presentación de Power Point que incluya teoría y ejercicios sobre el mismo. Ejercicio Realizar los árboles de derivación de cada ejemplo explicado durante la presentación. Deberán ser 2 árboles por cada ejemplo: uno con la gramática inicial y otro con la gramática modificada, comprobando una cadena aceptada por ambos árboles. NOTA: 7 ejemplos en total.
Gramática Libre de Contexto (GLC) De tipo 2 según la Jerarquía de Chomsky. Elementos G= {V, T, S, P} donde: *V = Conjunto finito de símbolos No Terminales (MAYÚSCULAS). *T= Conjunto finito de símbolos Terminales (minúsculas). *S= Símbolo o elemento inicial (el arranque). *P= Reglas de Producción (Definición recursiva del lenguaje). FUENTE: Apuntes Profa. Hilda Yelitza Contreras Zambrano.
Gramática Limpia No contiene reglas innecesarias. No contiene símbolos superfluos. No contiene símbolos inaccesibles. Gramática Bien Formada Es limpia. No contiene reglas no generativas o producciones nulas (reglas ). No contiene reglas unitarias o de redenominación. FUENTE: Apuntes Profa. Hilda Yelitza Contreras Zambrano.
Conversión a Gramática Bien Formada Algoritmo para obtener una gramática bien formada. 1. Eliminar reglas innecesarias. 2. Eliminar reglas no generativas (reglas ). 3. Eliminar reglas unitarias. 4. Eliminar símbolos superfluos. 5. Eliminar símbolos inaccesibles. FUENTE: Apuntes Profa. Hilda Yelitza Contreras Zambrano.
Reglas innecesarias Una regla de la forma A::= A es innecesaria y puede ser eliminada. No se necesita seguir un algoritmo para eliminarse. Ejemplo (1) : Sea G = {V,T,S,P} con las siguientes producciones: S::=A B A::=A 0 B::=A B 1 2 se elimina A::=A y nos queda A::=0 FUENTE: Apuntes Profa. Hilda Yelitza Contreras Zambrano.
Reglas No Generativas Es una regla de la forma A::=, siendo A V. Los símbolos A, tales que A *, se denominan anulables. Algoritmo Sea la GLC G={V,T,S,P}. Transformamos G en G ={V,T,S,P } de forma que L(G)=L(G ). 1) Obtención de los símbolos anulables en G (conjunto SA). SA={A A V y (A::= ) P}.
2) Creación de G : 2.1 P =. 2.2 Se separa cada regla de producción y se sustituye de la siguiente forma: * Si un símbolo de la parte izquierda no es anulable ( SA) no se modifica. * Si un símbolo de la parte izquierda es anulable ( SA) se agrega una opción donde este símbolo se sustituye por. 2.3 De estas nuevas reglas se eliminan los que tienen la forma B::=, y de las reglas restantes se eliminan los. Las reglas resultantes se incluyen en P. 2.4 Si S SA entonces P = P {S::= }. FUENTE: Apuntes Profa. Hilda Yelitza Contreras Zambrano.
Ejemplo (2) Sea G una gramática definida por las siguientes reglas: S::=Aa B A::=Aa ba BE B::= bb b E::= 1) Obtención de los símbolos anulables en G (conjunto SA). SA= {B,E} (por B::= y E::= ) SA={B,E,S} SA={B,E,S,A} (por S::=B) (por A::=E)
SA={B,E,S,A} 2) Creación de G 2.1 P =. 2.2 y 2.3 S::= Aa S::=Aa a S::=Aa a S::= B S::=B S::= B A::= Aa A::=Aa a A::=Aa a A::= ba A::=bA b A::= ba b S::=Aa B A::=Aa ba BE B::= bb b E::= A::= BE A::= BE B E A::= BE B E B::= bb B::=bB b B::= bb b B::= b B::= b B::= b B::= B::= SE ELIMINA E::= E::= SE ELIMINA
2.4 Se añade la regla S::= porque S SA. Reglas de Producción modificadas: P = { S::=Aa a B A::= Aa a ba b BE B E B::= bb b } Ahora existe la regla A::=E. E es un símbolo superfluo que se eliminará más adelante según el algoritmo. FUENTE: Apuntes Profa. Hilda Yelitza Contreras Zambrano.
Reglas No Generativas Son de la forma A::=B, siendo A,B V Existen 2 algoritmos para eliminar reglas unitarias. 1) Algoritmo para derivaciones unitarias que no sean cíclicas de la forma: A B A. 2) Algoritmo general; funciona en todos los casos. FUENTE: Apuntes Profa. Hilda Yelitza Contreras Zambrano.
1) Algoritmo Simple Repetir Para cada regla unitaria A::=B se sustituye B por sus propias reglas. Hasta que no haya más reglas unitarias. Ejemplo (3) Sea G una gramática definida por las siguientes reglas: S::= Aa C E CE B::= bb b C::= B A::= Aa ba b B E::= c Primero sustituiremos a B en la regla C y en la regla A.
C::= bb b A::= Aa ba b bb S::= Aa C E CE B::= bb b C::= B A::= Aa ba b B E::= c Se sustituye C (ya modificada) y E en la regla S. S::= Aa bb b c CE Reglas de producción modificadas P = { S::= Aa bb b c CE B::= bb b C::= bb b A::= Aa ba b bb E::= c } FUENTE: Apuntes Profa. Hilda Yelitza Contreras Zambrano.
2) Algoritmo General Sea la GLC G={V,T,S,P}. Transformamos G en G ={V,T,S,P } de forma que L(G)=L(G ). 1) Para cada A V, se define el conjunto: Unitario(A) = {B V A *B usando sólo reglas unitarias}. 2) Inicializar P =. 3) Para cada variable A y cada B Unitario(A): Para cada regla no unitaria B::=w de P, añadir A::=w a P. Este algoritmo también elimina reglas innecesarias. FUENTE: Apuntes Profa. Hilda Yelitza Contreras Zambrano.
Ejemplo (4) Sea G una gramática definida por las siguientes reglas: S::= Aa C E BE B::= bb b S C::= B A::= Aa a E::= c 1) Encontrar conjuntos unitarios *Unitario(S) S C B S (ya está incluido) Por lo tanto, Unitario(S)={S,C,E,B}. E
*Unitario(A) = {A} *Unitario(B) B S C B E Por lo tanto, Unitario(B)={B,S,C,E,}. S::= Aa C E BE B::= bb b S C::= B A::= Aa a E::= c *Unitario(C) C B S C E Por lo tanto, Unitario(C)={C,B,S,E}. *Unitario(E) = {E}
2) P =. 3) Crear reglas de P : Unitario(S)={S,C,E,B} S: S::=Aa BE (por S; C y E son reglas unitarias) nada por C S:= c (por E) S::=bB b (por B) Unitario(A) = {A} A: A::=Aa a (por A) Unitario(B)={B,S,C,E,}. B: B::= bb b (por B) B::= Aa BE (por S) nada por C B::= c (por E) (porque B es regla unitaria) S::= Aa C E BE B::= bb b S C::= B A::= Aa a E::= c
Unitario(C)={C,B,S,E} C: nada por C C::= bb b (por B) C::= Aa BE (por S) C::= c (por E) S::= Aa C E BE B::= bb b S C::= B A::= Aa a E::= c Unitario(E) = {E} E: E::= c (por E) Reglas de producción modificadas P = { S::= Aa BE c bb b A::=Aa a B::= Aa BE c bb b C::= Aa BE c bb b E::= c } FUENTE: Apuntes Profa. Hilda Yelitza Contreras Zambrano.
Símbolos Superfluos Es un símbolo No Terminal A tal que no existe una derivación A *w, donde w T. Algoritmo 1) Sea la GLC G={V,T,S,P}. Transformamos G en G ={V,T,S,P } de forma que L(G)=L(G ). Se construye iterativamente el nuevo V como sigue: Inicializar V,P a. Repetir Añadir a V todo no terminal A para el cual existe A::=w P y w (T V )*. Hasta que no se puedan añadir más símbolos a V.
2) Asignar a P todas las reglas p P cuyos símbolos pertenezcan a T V. 3) Si S V, añadir S a V. Ejemplo (5) Sea G una gramática definida por las siguientes reglas: S::= Aa B D B::=b A::=Aa ba B ce C::=abd E::= D::=Db 1) Inicializar V = ; P =.
S::= Aa B D B::=b A::=Aa ba B ce C::=abd E::= D::=Db 2) Añadir símbolos No Terminales: V ={B} (por B::=b) V ={B,C} (por C::=abd) V ={B,C,E} (por E::= ) V ={B,C,E,S} (por S::=B; porque B V ) V ={B,C,E,S,A} (por A::=B; B V ) SE ELIMINA D::=Db 3) Añadir reglas a P. Reglas de producción modificadas: P = { S::=Aa B B::=b A::=Aa ba B ce C::=abd E::= } FUENTE: Apuntes Profa. Hilda Yelitza Contreras Zambrano.
Símbolos Inaccesibles Un símbolo X (terminal o No terminal) será inaccesible si no existe una derivación: S * axb tal que a,b (V T)* Algoritmo Sea la GLC G={V,T,S,P}. Transformamos G en G ={V,T,S,P } de forma que L(G)=L(G ). Se construye iterativamente el nuevo V,T y P como sigue: 1) Inicializar V de forma que contenga el axioma S, e inicializar P y T a.
2) Repetir Para A V y reglas A::=w P: 2.1 Introducir A::=w en P. 2.2 Para todo No Terminal B de w, introducir B en V. 2.3 Para todo terminal a de w, introducir a en T. Hasta que no se puedan añadir nuevas reglas a P. Ejemplo (6) Sea G una gramática definida por las siguientes reglas: S::= Aa B B::=b A::=Aa ba B ce C::=abd E::= G ={V,T,S,P }
1) Inicializar V = {S}; P = ; T =. 2) Añadir reglas y símbolos: P ={S::=Aa B}; V ={S,A,B}; T ={a}. P ={S::=Aa B, A::=Aa ba B ce}; V ={S,A,B,E}; T ={a,b,c}. P ={S::= Aa B, A::=Aa ba B ce, B::=b}; V ={S,A,B,E}; T ={a,b,c}. P ={S::= Aa B, A::=Aa ba B ce, B::=b, E::= }; V ={S,A,B,E}; T ={a,b,c} SE ELIMINA C::=abd S::= Aa B B::=b A::=Aa ba B ce C::=abd E::=
Reglas de producción modificadas P = { S::= Aa B A::=Aa ba B Ce B::=b E::= } Hasta aquí se obtiene una gramática bien formada eliminando las redundancias mencionadas. A continuación veremos cómo normalizar una gramática por Chomsky. FUENTE: Apuntes Profa. Hilda Yelitza Contreras Zambrano.
Forma Normal de Chomsky (FNC) Una GLC está en la FNC si cada una de sus producciones es de los siguientes 2 tipos: A a A BC S donde A,B,C son variables No Terminales (V), a es un símbolo terminal (T) y S es el axioma. Teorema: Cualquier GLC sin -producciones puede ser transformada a una gramática equivalente en donde las producciones son de la forma A BC o A a. FUENTE: Apuntes Profa. Hilda Yelitza Contreras Zambrano.
Algoritmo Sea A X1 X2 Xm en P. 1) Crear producciones del tipo A a adecuadamente. Si Xi es Terminal y Xi = a entonces agregamos a P la producción Ca a y remplazamos Xi por Ca. Entonces todas las producciones son de forma: A B1 B2 Bm y A a 2) Se crean producciones A BC adecuadamente. Para los casos en que m 3, hacemos: A B1 D1; D1 B2 D2;, Dm-2 Bm-1 Bm 3) Agregamos las respectivas variables y producciones (P ). V = V {D1, D2 Dm-2} FUENTE: Apuntes Profa. Hilda Yelitza Contreras Zambrano. Tema 4 GLC.
Ejemplo (7) Sea G una gramática bien formada definida por las siguientes reglas: S::= AB asb aab ab aa Bb a b A::= aab ab aa a B::=Bb b 1) Crear 2 nuevos símbolos No Terminales siguiendo la regla A a. C a y D b Reemplazando: S::= AB CSD CAB CB CA BD a b A::= CAB CB CA a B::=BD b
2) Crear 2 nuevos símbolos No Terminales siguiendo la regla A BC. E SD y F AB Reemplazando: S::= AB CE CF CB CA BD a b A::= CF CB CA a B::= BD b 3) Nuevas Producciones C a D b E SD F AB S::= AB CSD CAB CB CA BD a b A::= CAB CB CA a B::=BD b
Gramática Normalizada por Chomsky. P = { S::= AB CE CF CB CA BD a b A::= CF CB CA a B::= BD b E::=S D F::=A B C::=a D::=b } V ={S,A,B,E,F,C,D} T={a,b} S={S} FUENTE: Apuntes Profa. Hilda Yelitza Contreras Zambrano.
Fuentes Bibliográficas [1] A.V. Aho, J.E. Hopcroft, and J.D. Ullman. (1974). The Design and Analysis of Computer Algorithms. Addison-Wesley. [2] Copias de apuntes de la Profa. Hilda Yelitza Contreras Zambrano. [3] Contreras Zambrano Hilda Yelitza. (Abril, 2014). Tema 4 GLC. PDF recuperado de: http://webdelprofesor.ula.ve/ingenieria/hyelitza/materias/preteoria/apuntes/tema4.pdf [4] Contreras Zambrano Hilda Yelitza. (Abril, 2014). Unidad 2 GIC. PDF recuperado de: http://webdelprofesor.ula.ve/ingenieria/hyelitza/materias/preteoria/unidad2/glc.pdf [5] Apuntes y ejercicios realizados en Clase. [6] Contreras Zambrano Hilda Yelitza. (Abril, 2014). GLC. Video de Youtube recuperado de: http://www.youtube.com/watch?v=v8a2-o20ebo