Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Definicin
N - un conjunto de smbolos no terminales (variables)
T - un conjunto de smbolos terminales
P - un conjunto de reglas de produccin
SN un smbolo no terminal de N
La cuaterna (T, N , S, P) se llama gramtica independiente del
contexto (Gramticas de tipo 2, segn la clasificacin de
Chomsky) si todas las reglas de produccin de P tienen la
forma:
A::= , siendo AN y *
Todo lenguaje generado por una GIC G (se denota por L(G)) se
llama Lenguaje independiente del contexto.
Ejemplos:
G1={{a,b},{S},S,{S::=aSb | ab}}
G2={{a,b},{S},S,{S::=aSbb | abb}}
G3={{a,b},{S},S,{S::=a | bS }}
G4={{a,b},{S},S,{S::=aSb | SS | }}
G5={{a,b},{S},S,{S::=aS | Sb | a | b}}
Motivacin
Representacin de la sintaxis de lenguajes de
programacin; descripcin de la estructura de lenguajes
de marcado (DTD en XML, ); generadores de
compiladores (Yacc, ), etc.
ForStatement:
for ( ForInitopt ; Expressionopt ; ForUpdateopt ) Statement
ForStatement:
for ( ; ; ) Statement
for ( ; ; ForUpdate ) Statement
for ( ; Expression ; ) Statement
for ( ; Expression ; ForUpdate ) Statement
for ( ForInit ; ; ) Statement
for ( ForInit ; ; ForUpdate ) Statement
for ( ForInit ; Expression ; ) Statement
for ( ForInit ; Expression ; ForUpdate ) Statement
if Line_Too_Short then
raise Layout_Error;
elsif Line_Full then
New_Line;
Put(Item);
elsif Line_Empty then
.
else
Put(Item);
end if;
Reglas innecesarias
Una regla de la forma A::=A es innecesaria y puede ser
eliminada.
Ejemplo A::=A
Ejemplo:
S::= Aa | B | D
B ::= b
A ::= Aa | bA | B | cE
C ::= abd
E ::=
D::=Db
G={{a,b,c,d},N,S,P}
1. Inicializar:
N=; P=
2. Aadir smbolos no terminales:
N={B}
(por B::=b)
(por C::=abd)
N={B,C}
(por E::=)
N={B,C,E}
(por S::=B)
N={B,C,E,S}
N={B,C,E,S,A} (por A::=B)
3. Aadir reglas a P:
P={ S::= Aa | B
B ::= b
A ::= Aa | bA | B | cE
C ::= abd
E ::= }
Smbolos inaccesibles
Un smbolo X (terminal o no terminal) ser inaccesible si no
existe ninguna derivacin S * X tal que , (T N)*.
Ejemplo: C (C::=abd)
Ejemplo:
S::= Aa | B
B ::= b
A ::= Aa | bA | B | cE
C ::= abd
E ::=
G={T,N,S,P}
1. Inicializar:
N={S}; P=; T=
2. Aadir reglas y smbolos:
P={S::=Aa|B}; N={S,A,B}; T={a}
P={S::=Aa|B, A::=Aa|bA|B|cE}; N={S,A,B,E};
T={a,b,c}
P={S::=Aa|B, A::=Aa|bA|B|cE, B::=b}; N={S,A,B,E};
T={a,b,c}
P={S::=Aa|B,
A::=Aa|bA|B|cE,
B::=b, E::=};
N={S,A,B,E}; T={a,b,c}
Los dos algoritmos vistos hasta el momento deben ser aplicados
en el orden en que han sido expuestos, ya que si no, los
resultados pueden no ser los deseables:
S ::= AB | a ; A ::= a
1. Inacc. S ::= AB | a; A ::= a
2. Superfl. S ::= a ; A::=a
S::= Aa | a
A ::= Aa | b | a
10
11
C::=bB | b
A::=Aa | a | bA | b | bB
13
C
E
S (ya en la lista)
14
Unitario(C)={C, B, S, E}
Unitario(E)={E}
Crear reglas de P:
S: S::=Aa | a | BE (por S)
nada por C
S::=c |
(por E)
S::=bB | b
(por B)
B: B::=bB | b
(por B)
B::=Aa | a | BE (por S)
nada por C
B::=c |
(por E)
C:
E: E::=c |
A: A::=Aa | a
Resultado:
(por E)
nada por C
C::=bB | b
(por B)
C::=Aa | a | BE (por S)
C::=c |
(por E)
(por A)
S::= Aa | a | BE | c | | bB | b
A::= Aa | a
B::= Aa | a | BE | c | | bB | b
C::= Aa | a | BE | c | | bB | b
E::= c |
NOTAS:
Gramtica limpia
Una gramtica G = (T , N , S, P) se dice limpia si no contiene
smbolos inaccesibles, smbolos superfluos, ni reglas
innecesarias.
17
18
Ejemplo:
Sea la siguiente gramtica: G = ({a,b,c} , {S,A,B} , S, P) con
P={ S::= Aba | a | BbA |
A::= aab | Acbc
B::=Ac }
1. G es una gramtica bien formada
2. N=N, P=P
3. P={ S::= ACD | a | BCA | ;
A::= DDC | AECE;
B::=AE; C::=b; D::=a; E::=c }
N={S,A,B,C,D,E}
4. (primer ciclo)
S::=ACD
S::=FD y F::=AC
S::=BCA
S::=GA y G::=BC
A::=DDC
A::=HC y H::=DD
A::=AECE
A::=BCE (ya existe B::=AE)
P={ S::= FD | a | GA | ;
A::= HC | BCE;
B::=AE; C::=b; D::=a; E::=c;
F::=AC; G::=BC; H::=DD}
N={S,A,B,C,D,E,F,G,H}
(segundo ciclo)
A::=BCE
P={
S::= FD | a | GA | ;
A::= HC | GE;
B::=AE; C::=b; D::=a; E::=c;
F::=AC; G::=BC; H::=DD}
N={S,A,B,C,D,E,F,G,H}
19
20
Lema
Toda gramtica independiente del contexto puede reducirse a
otra equivalente sin reglas recursivas a izquierdas
Ejemplo:
A::=Ab | ACD | bDC | a |
Posible derivacin desde A:
AACD AbCDAbbCDACDbbCDbDCCDbbCD
Cada derivacin podra comenzar con: bDC | a y seguir con la
repeticin 0 o n veces de: b | CD.
La parte correspondiente a la repeticin de b | CD se podra
obtener con (reglas no recursivas a izquierdas):
B::= bB | CDB | b | CD
y juntando con A se obtiene la parte del comienzo de las
derivaciones de A:
A::=bDCB | aB | bDC | a
El conjunto de las reglas para A y B obtiene las mismas
derivaciones que la gramtica inicial.
21
Mtodo de demostracin:
Sea G = (T , N , S, P) una GIC con reglas recursivas a
izquierdas, donde P contiene reglas de la forma:
A ::= Ax1 | Ax2 | | Axn | y1 | y2 | .. | ym
xi, yi *, A no es el primer smbolo de ningn yi
Se construye una G = (T , N {B} , S, P), donde P = P sin
reglas de la forma A := Axi y con las siguientes reglas:
A ::= y1B | y2B | .. | ymB | y1 | y2 | .. | ym
B ::= x1B | x2B | | xnB | x1 | x2 | | xn
Demostraremos que L(G)=L(G).
Cualquier derivacin de G que parta de A tendr la siguiente
forma:
AAxi1Axi2xi1... ykxin...xi2xi1
y se puede obtener con G:
AykBykxinB ykxinxin-1B... ykxin...xi2xi1
Lo mismo es cierto para cualquier derivacin de G respecto a
G. Como G y G se diferencian solo en las producciones que
afectan a A se sigue que L(G)=L(G).
22
Obtencin de la FNG
Tipos de reglas:
Tipo 0: A::=aAB | b
Tipo 1: A::=aBc | bc
Tipo 2: A::=Aa | c
Tipo 3: A::=Ba, B::=bD | aB
Tipo 4:
A::=Ba, B::=Aa|c
ya esta en FNG
A::=aBC | bC, C::=c
A::=cE | c, E::=aE | a
A::=bDa | aBa, B::=bD | aB
(algunos tipo 1)
A::=Aaa | ca , B::=Baa | c
(algunos tipo 2 o 1)
(C>A)
... C::=Bac | ac
(C>B)
... C::=Cbac | ac
... C::=acF | ac, F::=bacF | bac
(tipo 1)
2. tratar reglas X::=Yw con X<Y: (de mayor a menor X)
A::=Ba | a, B::=Cb, C::=acF | ac, F::=bacF | bac
2.1. tratar B: (B>A)
... B::=Cb
... B::=acFb | acb
(tipo 1)
2.2. tratar A:
... A::=Ba|a ... A::=acFba | acba | a (tipo 1)
Resultado:
A::=acFba | acba | a
C::=acF | ac
B::=acFb | acb
F::=bacF | bac
23
Sustitucin
Sea G=(T, N, S, P) una gramtica y sea la regla
R=(A::= yBx) P con A,BN y x,y*. Sean B::= w1|...|wm
todas las reglas de P cuya parte izquierda es B.
Se llama sustitucin del smbolo B en la regla R a la accin de
eliminar la regla A::= yBx de P y de incluir en este conjunto las
reglas A ::= yw1x | ... | ywmx.
Ejemplo:
Sea G una gramtica definida por las siguientes reglas:
A::=Ba (axioma)
C::=AB | b
Sustitucin de B en A::=Ba
A::= CAa | aa (axioma)
C::=AB | b
B::=CA | a
B::=CA | a
24
Mtodo de demostracin:
Sea G=(T, N, S, P) una GIC y sea BN. Sea A::= yBx con
AN y x,y* una regla en P.
Caso 1: No existen reglas B::= w1|...|wm
P=P {A::= yBx}
En este caso B es un smbolo superfluo y, por tanto, la regla
A::= yBx puede ser eliminada sin que cambie el lenguaje
representado.
Caso 2: Existen reglas B::= w1|...|wm
P=(P {A::= yBx}) {A ::= yw1x | ... | ywmx}
Cualquier derivacin de G que parte de A utilizando la regla
A::= yBx tiene la forma:
AyBx*vBuvwku
y se puede obtener con G:
Aywkx * vwku
Por otra parte, cualquier derivacin de G que parte de A y
utiliza una de las reglas nuevas tiene la forma:
Aywkx
y se puede obtener con G:
AyBxywkx
Como G y G se diferencian slo en las producciones que
afectan a A y B se sigue que L(G)=L(G).
25
26
27
Ejemplo:
A::=Ba (axioma)
C::=AB | b
B::=CA | a
Orden A<B<C:
5.
6.
28
7.
29