Clase 15 "GLC`s limpias y bien formadas"

Anuncio
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
Descargar