Clase 15: GLC’s limpias y bien formadas Solicitado: Ejercicios 12: GLC’s Limpias y bien formadas M. en C. Edgardo Adrián Franco Martínez http://computacion.cs.cinvestav.mx/~efranco @efranco_escom [email protected] 1 • Gramáticas limpias y bien formadas • Reglas no deseadas • Gramáticas sucias • Gramáticas bien formadas • Eliminación de las reglas no generativas • Eliminación de las reglas de redenominación • Limpieza de gramáticas Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez Contenido • Algoritmo para detectar símbolos muertos • Algoritmo para detectar símbolos inaccesibles • Ejemplo • Ejercicios 12: GLC’s Limpias y bien formadas Compiladores (Lenguajes y gramáticas - Edgardo A. Franco) 2 • Una gramática limpia y bien formada facilita el correcto tratamiento y detección a la hora de ser impuesta en algún lenguaje. • Para poder construir una gramática adecuada se debe verificar la correcta escritura de las reglas de producción de la gramática, así como su validez. Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez Gramáticas limpias y bien formadas 3 • Sin Reglas No Generativas: U → ε, es una regla no generativa. Si el lenguaje representado por la gramática no contiene la palabra vacía es posible eliminar todas las reglas no generativas, de lo contrario se debe admitir la regla S→ε, donde S es el símbolo inicial. • Sin Reglas de Redenominación: A → B es una regla de redenominación. Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez Reglas no deseadas 4 • Sin Reglas con Símbolos No Generativos: Dada la gramática G= (N, Σ, S, P), para cada símbolo A de N se construye la gramática G(A)=(NA, ΣA, A, PA), si L(G(A)) es vacío, entonces A es un símbolo no generativo ya que todas las reglas de A son no generativas. Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez • Sin Reglas Innecesarias: A → b, es una regla innecesaria si A no hace parte del lado derecho de otra regla. A es un símbolo inaccesible. 5 «Identificar las reglas no generativas y de redenominación es tarea fácil, mientras que ubicar las reglas innecesarias, con símbolos no generativos o superfluas puede llegar a ser difícil si el numero de producciones de una gramática es muy grande» Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez • Sin Reglas Superfluas: Dada la gramática G = ( {a,b}, { S, A, B}, S, {S → AB, A → Aa|a, B → Bb} ), la regla B →Bb es superflua porque no puede derivar una cadena que solo contenga símbolos terminales, debido a la existencia del símbolo B no generativo en el lado derecho de la producción. 6 • Llamamos símbolo vivo al símbolo no terminal a partir del cual se puede derivar una cadena de terminales. G = ( {a,b}, { S, A, B, C}, S, P) P: {S → Ab, S → AB, A → Aa|a, B → Bb, C → abA} ) S, A y C son símbolos vivos Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez • Para identificar las reglas innecesarias, no generativas o superfluas, puede realizarse la búsqueda de símbolos llamados muertos e inaccesibles en la gramática. 7 G = ( {a,b}, { S, A, B, C}, S, P) P: {S → Ab, S → AB, A → Aa|a, B → Bb, C → abA} ) B es un símbolo muerto Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez • Llamamos símbolo muerto a los símbolos novivos, no generan una cadena del lenguaje. • Como B es un símbolo muerto, las reglas donde B aparecen del lado derecho únicamente son Reglas con Símbolos No Generativos. • Las reglas donde B aparece del lado izquierdo, pasan ha ser Reglas Superfluas de la gramática. 8 G = ( {a,b}, { S, A, B, C}, S, P) P: {S → Ab, S → AB, A → Aa|a, B → Bb, C → abA} ) C es un símbolo inaccesible • Como C es un símbolo inaccesible, las reglas donde B aparecen del lado derecho únicamente son Reglas Innecesarias. Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez • Llamamos símbolo inaccesible si nunca aparece en la parte derecha de una producción. 9 • A las gramáticas que contienen símbolos muertos e inaccesibles se les llama gramáticas súcias. Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez Gramáticas sucias «A las gramáticas que incluyen reglas con símbolos no generativos, reglas superfluas e innecesarias, se les conoce como gramáticas sucias» 10 • Una gramática está bien formada si es limpia y además no contiene producciones A→ λ o A→ B. Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez Gramáticas bien formadas «Las gramáticas bien formadas, además de ser limpias no incluyen reglas no generativas ni reglas de redenominación» 11 • Para eliminar reglas no generativas, se deberá de sustituir las eliminaciones no generativas por aquellas que dejan la gramática con el mismo sentido. S→aAB|Ab A→cBd|λ B→cBA Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez Eliminación de las reglas no generativas S→aAB|aB|b A→cBd B → c B A | cB 12 • Para eliminar reglas de redenominación, se deberá de sustituir las reglas de redenominación por reglas que dejan la gramática con el mismo sentido S→aAB|G|A A → c B d | Bc B → bbc | Abb | Ga G →gAd | g Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez Eliminación de las reglas de redenominación S → a A B | gAd | g | c B d | Bc A → c B d | Bc B → bbc | Abb | Ga G →gAd | g 13 • Para realizar la limpieza de una gramática, se consideran los siguiente principios. Teorema 1: si todos los símbolos de la parte derecha de una producción son símbolos vivos, entonces el símbolo de la parte izquierda también lo es. Teorema 2: si el símbolo no-terminal de la parte izquierda de una producción es accesible, entonces todos los símbolos de la parte derecha también lo son. Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez Limpieza de gramáticas 14 1. Hacer una lista de no-terminales que tengan al menos una producción con sólo símbolos terminales en la parte derecha. 2. Dada una producción, si todos los no-terminales de la parte derecha pertenecen a la lista, entonces podemos incluir en la lista al no-terminal de la parte izquierda de la producción. 3. Cuando ya no se puedan incluir más símbolos en la lista mediante la aplicación del paso 2, la lista contendrá los símbolos no-terminales vivos y el resto serán símbolos muertos. Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez Algoritmo para detectar símbolos muertos 15 1. Se inicializa una lista de no-terminales que sabemos que son accesibles con el axioma. 2. Si la parte izquierda de una producción está en la lista, entonces se incluye en la misma al no-terminal que aparece en la parte derecha de la producción. 3. Cuando ya no se pueden incluir más símbolos a la lista mediante la aplicación del paso 2, entonces la lista contendrá todos los símbolos accesibles y el resto de los noterminales serán inaccesibles. Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez Algoritmo para detectar símbolos inaccesibles 16 • Ejemplo: Limpiar y formar de manera correcta la gramática siguiente: S→aAB|A|G A→cBd|H B → e | f S|λ C→gD|hDt D→x|y|z E → AH | cB F → AB | Ga G → FG H → Ha | bH | E Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez Ejemplo: 17 S→aAB|A|G A→cBd|H B → e | f S|λ C→gD|hDt D→x|y|z E → AH | cB F → AB | Ga G → FG H → Ha | bH | E S → a A B | aA | A | G A → c B d | cd | H B→e|fS C→gD|hDt D→x|y|z E → AH | cB | c F → AB | A | Ga G → FG H → Ha | bH | E Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez 1. Eliminación de reglas no generativas 18 S → a A B | aA | A | G A → c B d | cd | H B→e|fS C→gD|hDt D→x|y|z E → AH | cB | c F → AB | A | Ga S → a A B | aA | c B d | cd | Ha | bH | AH | cB | c |FG G → FG A → c B d | cd |Ha | bH | AH | cB | c H → Ha | bH | E B → e | f S C→gD|hDt D→x|y|z E → AH | cB | c F → AB | c B d | cd |Ha | bH | AH | cB | c | Ga G → FG H → Ha | bH | AH | cB | c Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez 2. Eliminación de reglas de redenominación 19 S → a A B | aA | c B d | cd | Ha | bH | AH | cB | c |FG A → c B d | cd |Ha | bH | AH | cB | c B→e|fS C→gD|hDt D→x|y|z E → AH | cB | c F → AB | c B d | cd |Ha | bH | AH | cB | c | Ga G → FG H → Ha | bH | AH | cB | c Lista inicial {S,A,B,D,E,F,H} Lista final {S,A,B,D,E,F,H,C} Símbolos fuera de la lista {G} Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez 3. Búsqueda de símbolos muertos 20 Símbolos MUERTOS BDACEFH G El símbolo muerto G aparecen en la parte derecha de las reglas con símbolos no generativos y las reglas donde aparecen G del lado izquierdo son reglas superfluas en la gramática: Reglas con símbolos no generativos S →FG F →Ga G→FG Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez Símbolos VIVOS Reglas superfluas G→FG 21 S → a A B | aA | c B d | cd | Ha | bH | AH | cB | c A → c B d | cd |Ha | bH | AH | cB | c B→e|fS C→gD|hDt D→x|y|z E → AH | cB | c F → AB | c B d | cd |Ha | bH | AH | cB | c H → Ha | bH | AH | cB | c Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez 4. Eliminación de reglas con símbolos no generativos y reglas superfluas 22 S → a A B | aA | c B d | cd | Ha | bH | AH | cB | c A → c B d | cd |Ha | bH | AH | cB | c B→e|fS C→gD|hDt D→x|y|z E → AH | cB | c F → AB | c B d | cd |Ha | bH | AH | cB | c H → Ha | bH | AH | cB | c Lista inicial {S,A,B,H} Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez 4. Búsqueda de símbolos inaccesibles Lista final {S,A,B,H} Símbolos fuera de la lista {C,D,E,F} 23 Símbolos INACCESIBLES SABGHE CDF Los símbolos inaccesibles aparecen en la parte izquierda de las reglas innecesarias lo que indica que las siguientes reglas son innecesarias en la gramática: Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez Símbolos ACCESIBLES Reglas innecesarias C→gD|hDt D→x|y|z F → AB | c B d | cd |Ha | bH | AH | cB | c E → AH | cB | c 24 S → a A B | aA | c B d | cd | Ha | bH | AH | cB | c A → c B d | cd |Ha | bH | AH | cB | c B→e|fS H → Ha | bH | AH | cB | c Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez • Gramática limpia y bien formada 25 • Realice la limpieza de las siguientes gramáticas: 1.E→aFB|F|C|Da A→gD|hDt|λ B→e|Fe|J C → C b| G b| J e a c D → x | y| z| J a F→cGd|Ca|λ G→Rea|eaR M→cFa|aBa N→Mea|Jac|Na R→Ce 2.<S>::= a <B> <A>| <C> | <H> <A>::= c <G> d |<G> <B>::= <E> | f <S> | λ <C>::= g <D>| h <D> t <D>::= x | y | z |<C> <E>::= <A><H>| c<B> | λ <F>::= <A><B> | <G>a <G>::= <F><G> |G>H> <H>::= <H>a | <b><H> | <E> <J>::= <H>a | <B><E> | asa *Se entregarán antes del día Martes 22 de Octubre de 2013 (23:59:59 hora limite) *Incluir la redacción de cada ejercicio *Portada y encabezados de pagina Teoría computacional Clase 15: GLC's limpias y bien formadas Prof. Edgardo Adrián Franco Martínez Ejercicios 12 “GLC’s limpias y bien formada” 26