Cap´ıtulo 9 Gramáticas Independientes del Contexto

Anuncio
Capı́tulo 9
Gramáticas Independientes del
Contexto
Definición 1 (Gramática Independiente del Contexto) Consideremos G una gramática,
G = (ΣN , ΣT , S, P). Se dice que G es independiente del contexto o de tipo 2 si todas las reglas
de producción de P son de la siguiente forma:
A ::= β,
con A ∈ ΣN y β ∈ (ΣT ∪ ΣN )∗ .
Todo lenguaje generado por una gramática de tipo 2 se define como lenguaje independiente del
contexto
Observación 2 A lo largo del capı́tulo, utilizaremos la siguiente notación:
Las letras mayúsculas A, B, C, D, E, y S denotarán variables; S será siempre el axioma
salvo que se especifique lo contrario.
Las letras minúsculas a, b, c, d, e, cualquier dı́gito y cadenas en negrita serán terminales.
Las letras mayúsculas X, Y, Z denotarán sı́mbolos que pueden ser terminales o variables.
Las letras minúsculas u, v, w, x, y, z denotarán cadenas de terminales.
Las letras mı́nusculas griegas α, β, γ denotarán cadenas de variables y terminales.
Ejemplo 1
G1 = ({S}, {a, b}, S, {S ::= aSb | ab}).
Las gramáticas regulares son independientes del contexto.
G2 = ({S}, {a, b}, S, {S ::= aSb | SS | λ}).
El lenguaje de los palı́ndromos sobre cualquier alfabeto finito es independiente del contexto.
El lenguaje de las expresiones regulares sobre {0, 1} es independiente del contexto.
El lenguaje HTML es un lenguaje independiente del contexto.
1
2
CAPÍTULO 9. GRAMÁTICAS INDEPENDIENTES DEL CONTEXTO
9.1.
Simplificación de G.I.C.
Existen varias maneras de restringir el formato de las producciones de una G.I.C. sin modificar
el lenguaje que genera. Si L es un lenguaje independiente del contexto no vacı́o, entonces se
puede generar por una gramática independiente del contexto G con las siguientes propiedades:
a) Cada variable y cada terminal de G aparece en la derivación de alguna palabra de L.
b) No existen producciones de la forma A ::= B, donde A y B son variables.
Es más, si λ 6∈ L, no se necesitan producciones de la forma A ::= λ. De hecho, si λ 6∈ L,
podemos imponer que todas las producciones de G sean de la forma A ::= BC o bien A ::= a,
donde A, B, C ∈ ΣN y a ∈ ΣT . Alternativamente, podemos imponer que todas las producciones
sean de la forma A ::= aβ, donde a ∈ ΣT y β ∈ Σ∗N . Estas dos formas especiales se denominan
Forma Normal de Chomsky y Forma Normal de Greibach, respectivamente.
9.1.1.
Reglas innecesarias
Una regla de la forma A ::= A, con A ∈ ΣN se denomina regla innecesaria. Este tipo de
producciones pueden eliminarse de la gramática sin variar el lenguaje generado.
9.1.2.
Sı́mbolos inútiles
∗
∗
Un sı́mbolo X es un sı́mbolo útil si existe una derivación de la forma S ⇒ αXβ ⇒ w, con
α, β ∈ (ΣT ∪ ΣN )∗ y w ∈ Σ∗T . Diremos que X es inútil si no es útil.
Lema 3 Dada una gramática independiente del contexto G = (ΣN , ΣT , S, P), con L(G) 6= ∅,
existe una gramática independiente del contexto G′ = (Σ′N , ΣT , S, P ′ ) equivalente tal que para
∗
cada A ∈ Σ′N , existe w ∈ Σ∗T con A ⇒ w.
Demostración.– La demostración del Lema se basa en el Algoritmo 1.
Algoritmo 1
Precondición : Gramática independiente del contexto G = (ΣN , ΣT , S, P), con L(G) 6= ∅.
V iejo ← ∅;
N uevo ← {A ∈ ΣN | (A ::= w) ∈ P para algún w ∈ Σ∗T };
mientras V iejo 6= N uevo hacer
V iejo ← N uevo;
N uevo ← V iejo ∪ {A ∈ ΣN | (A ::= α) ∈ P para algún α ∈ (ΣT ∪ V iejo)∗ };
fin mientras
Σ′N ← N uevo;
P ′ ← {(A ::= α) ∈ P | A ∈ Σ′N , α ∈ (ΣT ∪ Σ′N )∗ };
CAPÍTULO 9. GRAMÁTICAS INDEPENDIENTES DEL CONTEXTO
3
Lema 4 Dada una gramática independiente del contexto G = (ΣN , ΣT , S, P), existe una gramática independiente del contexto G′ = (Σ′N , Σ′T , S, P ′ ) equivalente tal que para cada X ∈ Σ′N ∪Σ′T ,
∗
existen α, β ∈ (ΣN ∪ ΣT )∗ con S ⇒ αXβ.
Demostración.– De nuevo, la demostración es constructiva y se basa en el Algoritmo 2.
Algoritmo 2
Precondición : Gramática independiente del contexto G = (ΣN , ΣT , S, P).
V iejoN ← ∅;
N uevoN ← {S};
V iejoT ← ∅;
N uevoT ← ∅;
mientras V iejoN 6= N uevoN ∧ V iejoT 6= N uevoT hacer
V iejoN ← N uevoN ;
V iejoT ← N uevoT ;
para todo A ∈ V iejoN hacer
para todo (A ::= α) ∈ P hacer
N uevoN ← N uevoN ∪ {todas las variables en α};
N uevoT ← N uevoT ∪ {todos los terminales en α};
fin para
fin para
fin mientras
Σ′N ← N uevoN ;
Σ′T ← N uevoT ;
P ′ ← {(A ::= α) ∈ P | A ∈ Σ′N , α ∈ (Σ′N ∪ Σ′T )∗ };
Teorema 5 Todo lenguaje independiente del contexto, no vacı́o, se puede generar por una
gramática independiente del contexto sin sı́mbolos inútiles.
Demostración.– Basta aplicar el procedimiento del Lema 4 al resultado de aplicar el Lema 3.
Observación 6 Es importante resaltar que se debe aplicar primero el Lema 3 y luego el Lema 4.
Por ejemplo, la gramática G = ({A, B, S}, {a}, S, {S ::= AB | a ; A ::= a}). La gramática
sin sı́mbolos inútiles equivalente es G1 = ({S}, {a}, S, {S ::= a}). Sin embargo, si aplicamos el
Lema 4 y luego el Lema 3, el resultado es G2 = ({A, S}, {a}, S, {S ::= a ; A ::= a}).
Ejemplo 2 Consideremos la gramática G = ({A, B, C, D, E, S}, {a, b, c, d}, S, P), donde P son
CAPÍTULO 9. GRAMÁTICAS INDEPENDIENTES DEL CONTEXTO
4
las siguientes producciones:
S
B
A
C
E
D
::=
::=
::=
::=
::=
::=
Aa | B | D
b
Aa | bA | B | cE
abd
λ
Db
Tras aplicar el primer lema, la gramática resultante es G1 = ({A, B, C, E, S}, {a, b, c, d}, S, P1 ),
donde P1 son las siguientes producciones:
S
B
A
C
E
::=
::=
::=
::=
::=
Aa | B
b
Aa | bA | B | cE
abd
λ
Tras aplicar el segundo lema, la gramática resultante es G2 = ({A, B, E, S}, {a, b, c}, S, P2 ),
donde P2 son las siguientes producciones:
S
B
A
E
9.1.3.
::=
::=
::=
::=
Aa | B
b
Aa | bA | B | cE
λ
Reglas no generativas (reglas λ)
Dada una gramática independiente del contexto G = (ΣN , ΣT , S, P), se dice que una regla es
∗
no generativa si tiene la forma A ::= λ, con A ∈ ΣN . Los sı́mbolos A, tales que A ⇒ λ, se
denominan anulables.
Es evidente que si λ ∈ L(G), entonces S es anulable y no podremos prescindir de la regla
S ::= λ. Sin embargo, si λ 6∈ L(G), entonces podemos construir una gramática sin producciones
no generativas y, por tanto, sin sı́mbolos anulables.
Teorema 7 Dada una gramática independiente del contexto G = (ΣN , ΣT , S, P), existe una
gramática independiente del contexto G′ = (ΣN , ΣT , S, P ′ ) equivalente a G sin reglas no generativas excepto posiblemente la regla S ::= λ.
Demostración.– La prueba, constructiva, se basa en el Algoritmo 3.
CAPÍTULO 9. GRAMÁTICAS INDEPENDIENTES DEL CONTEXTO
Algoritmo 3
Precondición : Gramática independiente del contexto G = (ΣN , ΣT , S, P).
V iejo ← ∅;
SA ← {A ∈ ΣN | (A ::= λ) ∈ P};
mientras V iejo 6= SA hacer
V iejo ← SA ;
para todo (B ::= α) ∈ P hacer
si α ∈ SA ∗ entonces
SA ← SA ∪ {B};
fin si
fin para
fin mientras
P ′ ← ∅;
para todo (B ::= X1 X2 · · · Xn ) ∈ P hacer
para i = 1, . . . , n hacer
Yi1 ← Xi ;
si Xi 6∈ SA entonces
Yi2 ← Xi ;
else si Xi ∈ SA entonces
Yi2 ← λ;
fin si
fin para
para todo (σ1 , . . . , σn ) ∈ {1, 2}n hacer
P ′ ← P ′ ∪ {B ::= Y1σ1 · · · Ynσn };
fin para
P ′ ← P ′ \ {B ::= λ};
fin para
si S ∈ SA entonces
P ′ ← P ′ ∪ {S ::= λ};
fin si
5
CAPÍTULO 9. GRAMÁTICAS INDEPENDIENTES DEL CONTEXTO
6
Ejemplo 3 Consideremos la gramática G = ({A, B, E, S}, {a, b, c}, S, P), donde P son las
siguientes producciones:
S
B
A
E
::=
::=
::=
::=
Aa | B
bB | b|λ
Aa | bA | BEE
λ
Aplicando el Algoritmo 3, resulta que los sı́mbolos anulables (SA ) es SA = {S, A, B, E}. La
nueva gramática resultante tiene las siguientes producciones:
S ::= Aa | a | B | λ
B ::= bB | b
A ::= Aa | a | bA | b | BEE | BE | EE | B | E
Observación 8 Como se puede ver fácilmente en el ejemplo, pueden aparecer sı́mbolos inútiles. Por ello, despues de realizar el Algoritmo es conveniente eliminar sı́mbolos
inútiles y reglas innecesarias.
9.1.4.
Reglas unitarias
Dada una gramática independiente del contexto G = (ΣN , ΣT , S, P), se dice que una regla es
unitaria si tiene la forma A ::= B, con A, B ∈ ΣN .
Teorema 9 Dada una gramática independiente del contexto G = (ΣN , ΣT , S, P), existe una
gramática independiente del contexto G′ = (ΣN , ΣT , S, P ′ ) equivalente a G sin reglas unitarias.
Demostración.– La prueba constructiva del Teorema es el Algoritmo 4. Obsérvese que se exige
que la gramática no tenga reglas no generativas. Ası́, debemos preprocesar la gramática para
poder aplicar el Algoritmo. En particular, si λ ∈ L(G), hay que quitar la regla S ::= λ y tras
aplicar el algoritmo, volver a añadirla.
Ejemplo 4 Consideremos la gramática G = ({A, B, C, E, S}, {a, b, c}, S, P), donde P son las
siguientes producciones:
S
A
C
B
E
::=
::=
::=
::=
::=
Aa | a | C | BE | B | λ
Aa | a
B
bB | b | S
c
CAPÍTULO 9. GRAMÁTICAS INDEPENDIENTES DEL CONTEXTO
7
Algoritmo 4
Precondición : Gramática independiente del contexto G = (ΣN , ΣT , S, P) sin reglas no generativas.
para todo A ∈ ΣN hacer
∗
Unitario(A) ← {B ∈ ΣN | A ⇒ B};
fin para
P ′ ← ∅;
para todo A ∈ ΣN hacer
para todo B ∈ Unitario(A) hacer
para todo (B ::= α) ∈ P ∧ α 6∈ ΣN hacer
P ′ ← P ′ ∪ {A ::= α};
fin para
fin para
fin para
Tenemos que los conjuntos unitarios son Unitario(S) = Unitario(B) = Unitario(C) =
{B, C, S}, Unitario(A) = {A} y Unitario(E) = {E}. Con esto, obtenemos la gramática
G′ = ({A, B, C, E, S}, {a, b, c}, S, P ′ ), donde P ′ son las siguientes producciones:
S
A
B
C
E
::=
::=
::=
::=
::=
Aa
Aa
Aa
Aa
c
|
|
|
|
a | BE | bB | b | c | λ
a
a | BE | bB | b | c
a | BE | bB | b | c
Observación 10 Como se puede ver fácilmente en el ejemplo, pueden aparecer sı́mbolos inútiles. Por ello, despues de realizar el Algoritmo es conveniente eliminar sı́mbolos
inútiles y reglas innecesarias.
9.1.5.
Gramática bien formada
Definición 11 Dada una gramática independiente del contexto G = (ΣN , ΣT , S, P), se dice
bien formada si verifica las siguientes propiedades:
No contiene reglas innecesarias ni sı́mbolos inútiles.
No contiene reglas no generaticas salvo en el axioma.
No contiene reglas unitarias.
Si (S ::= λ) ∈ P, entonces (ΣN , ΣT , S, P \ {S ::= λ}) también es una gramática bien
formada
CAPÍTULO 9. GRAMÁTICAS INDEPENDIENTES DEL CONTEXTO
8
Ejemplo 5 La gramática ({S}, {a, b}, S, {S ::= SS | aSb | λ}) no es una gramática bien
formada.
Teorema 12 Todo lenguaje independiente del contexto no vacı́o L se puede generar mediante
una gramática bien formada.
Demostración.– Sea G = (ΣN , ΣT , S, P) una gramática independiente del contexto tal que
L = L(G). A esta gramática le haremos las siguientes transformaciones:
1. Eliminamos las reglas innecesarias.
2. Aplicamos el Algoritmo 3 para eliminar las reglas no generativas.
3. Aplicamos el Algoritmo 4 para eliminar las reglas unitarias. Obsérvese que si S ::= λ
aparece entre las reglas, debemos aplicar el Algoritmo 4 sin dicha regla y añadirla al final
del proceso.
4. Aplicar el Algoritmo 1 y luego el Algoritmo 2 para eliminar los sı́mbolo inútiles.
La gramática resultante es una gramática bien formada.
9.2.
Formas Normales
9.2.1.
Formal Normal de Chomsky
Sea G = (ΣN , ΣT , S, P) una gramática independiente del contexto. Se dice que G está en Forma
Normal de Chomsky si no tiene sı́mbolos inútiles y todas las producciones son de una de las
siguientes formas:
S ::= λ,
A ::= a, con A ∈ ΣN y a ∈ ΣT ,
A ::= BC, con A, B, C ∈ ΣN .
Los árboles de derivación de una gramática en Forma Normal de Chomsky son árboles binarios,
lo que facilita la implementación de analizadores sintácticos (parsers).
Teorema 13 Todo lenguaje libre de contexto L no vacı́o se puede generar por una gramática
en Forma Normal de Chomsky.
Demostración.– Sea G = (ΣN , ΣT , S, P) una gramática independiente del contexto bien formada tal que L = L(G). La prueba del Teorema se sigue a partir de la construcción de la
gramática G′ = (Σ′N , ΣT , S, P ′ ) del Algoritmo 5. Nótese que la gramática G′ ası́ construı́da
puede contener sı́mbolos inútiles, ası́ que también hay que aplicar el algoritmo para eliminar
sı́mbolos inútiles.
CAPÍTULO 9. GRAMÁTICAS INDEPENDIENTES DEL CONTEXTO
Algoritmo 5
Precondición : Gramática independiente del contexto G = (ΣN , ΣT , S, P) bien formada.
Σ′N ← ΣN ;
P ′ ← ∅;
para todo a ∈ ΣT hacer
˙ a };
Σ′N ← Σ′N ∪{C
′
′
P ← P ∪ {Ca ::= a};
fin para
para todo (A ::= X1 X2 · · · Xm ) ∈ P hacer
si m ≥ 2 entonces
Xi si Xi ∈ ΣN
′
′
′
′
′
′
P ← P ∪ {A ::= X1 X2 · · · Xm };
# donde Xi =
Ca si Xi = a ∈ ΣT
else si m = 1 entonces
P ′ ← P ′ ∪ {A ::= X1 };
fin si
fin para
para todo (A ::= B1 B2 · · · Bm ) ∈ P ′ hacer
si m ≥ 3 entonces
P ′ ← P ′ \ {A ::= B1 B2 · · · Bm };
para i = 1, . . . , m − 2 hacer
˙
Σ′N ← Σ′N ∪{D
i };
fin para
P ′ ← P ′ ∪ {A ::= B1 D1 };
para i = 1, . . . , m − 3 hacer
P ′ ← P ′ ∪ {Di ::= Bi+1 Di+1 };
fin para
P ′ ← P ′ ∪ {Dm−2 ::= Bm−1 Bm };
fin si
fin para
si (S ::= λ) ∈ P entonces
P ′ ← P ′ ∪ {S ::= λ};
fin si
9
CAPÍTULO 9. GRAMÁTICAS INDEPENDIENTES DEL CONTEXTO
10
Ejemplo 6 Consideremos la gramática siguiente: G = ({S, A, B}, {a, b, c}, S, P), con P las
producciones siguientes:
S ::= Aba | a | BbA | λ
A ::= aab | Acbc
B ::= Ac
En primer lugar, la gramática G está bien formada. En un primer paso, añadimos sı́mbolos
no terminales para cada uno de los sı́mbolos terminales de la gramática, y cambiamos, en las
producciones en las que proceda, los sı́mbolos terminales por los sı́mbolos no terminales correspondientes. La gramática intermedia equivalente es G1 = ({S, A, B, Ca , Cb , Cc }, {a, b, c}, S, P1 ),
donde P1 son las producciones siguientes:
S
A
B
Ca
Cb
Cc
::=
::=
::=
::=
::=
::=
ACb Ca | a | BCb A
Ca Ca Cb | ACc Cb Cc
ACc
a
b
c
Ahora, para cada una de las producciones que no están en forma requerida, se procede a añadir
sı́mbolos no terminales intermedios y las correspondientes producciones. Por ejemplo, se elimina
la producción S ::= ACb Ca y se añade el no terminal D1 junto con las producciones S ::= AD1
y D1 ::= Cb Ca . Realizando este proceso sucesivamente, y añadiendo la producción S ::= λ, obtenemos finalmente la gramática G′ = ({S, A, B, Ca , Cb , Cc , D1 , D2 , D3 , D4 , D5 }, {a, b, c}, S, P ′ ),
donde P ′ son las producciones siguientes:
S
A
B
Ca
Cb
Cc
D1
D2
D3
D4
D5
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
AD1 | a | BD2 | λ
Ca D3 | AD4
ACc
a
b
c
Cb Ca
Cb A
Ca Cb
C c D5
Cb Cc
La gramática resultante no tiene sı́mbolos inútiles y está en Forma Normal de Chomsky.
Observación 14 La Forma Normal de Chomsky no es única. Es decir, un mismo lenguaje
posee infinitas Gramáticas en Forma Normal de Chomsky que lo generan. Este algoritmo calcula
una de ellas.
CAPÍTULO 9. GRAMÁTICAS INDEPENDIENTES DEL CONTEXTO
9.2.2.
11
Formal Normal de Greibach
Sea G = (ΣN , ΣT , S, P) una gramática independiente del contexto. Se dice que G está en Forma
Normal de Greibach si no tiene sı́mbolos inútiles y todas las producciones son de una de las
siguientes formas:
S ::= λ,
A ::= aα, con A ∈ ΣN , a ∈ ΣT , y α ∈ Σ∗N .
Esta representación será muy útil cuando queramos construir, a partir de una gramática independiente del contexto, un autómata a pila.
Vamos a ver a lo largo de esta sección un algoritmo para transformar una gramática independiente del contexto a otra equivalente en Forma Normal de Greibach. Para ello, necesitaremos
primero unos resultados intermedios.
Definición 15 Sea G = (ΣN , ΣT , S, P) una gramática independiente del contexto, y sea A ∈
ΣN un sı́mbolo no terminal. Definiremos como A–producción a toda regla en P de la forma
A ::= α, con α ∈ (ΣN ∪ ΣT )∗ .
Definición 16 Sea G = (ΣN , ΣT , S, P) una gramática independiente del contexto. Diremos que
G tiene reglas recursivas a izquierdas si posee alguna producción de la forma A ::= Aα, donde
A ∈ ΣN y α ∈ (ΣN ∪ ΣT )∗ .
Lema 17 Dada G = (ΣN , ΣT , S, P) una gramática independiente del contexto, existe una
gramática equivalente G′ = (Σ′N , ΣT , S, P ′ ) tal que no tiene reglas recursivas a izquierdas.
Demostración.– Supongamos que existe una A–producción recursiva a izquierdas. Sean A ::=
Aα1 | · · · | Aαn todas las A–producciones que recursivas a izquierdas y A ::= β1 | · · · | βm
todas las A–producciones que no son recursivas a izquierdas. Sea G1 := (Σ′N , ΣT , S, P ′ ) la
gramática formada al añadir un sı́mbolo no terminal B nuevo a ΣN , y reemplazar todas las
A–producciones por las siguientes:
A ::= β1 | · · · | βm | β1 B | · · · | βm B
B ::= α1 | · · · | αn | α1 B | · · · | αn B
La gramática resultante G1 es equivalente a G, y no tiene ni A–producciones ni B–producciones
recursivas a izquierda. Procediendo de igual forma para todos los sı́mbolos en ΣN se sigue el
resultado.
Ejemplo 7 Consideremos por ejemplo una gramática que contenga las siguientes A–producciones A ::= Ab | ACD | bDC | a. Lo que harı́amos para eliminar la recursividad a izquierdas
serı́a añadir un nuevo sı́mbolo no terminal (B, por ejemplo), eliminar las A–producciones de
la gramática, y añadir las siguientes producciones:
A ::= bDC | a | bDCB | aB
B ::= b | CD | bB | CDB
CAPÍTULO 9. GRAMÁTICAS INDEPENDIENTES DEL CONTEXTO
12
Definición 18 Sea G = (ΣN , ΣT , S, P) una gramática independiente del contexto, y consideremos una producción (A ::= αBβ) ∈ P, con A, B ∈ ΣN , y α, β ∈ (ΣN ∪ ΣT )∗ . Sean
B ::= γ1 | · · · | γm todas las B–producciones. Se llama sustitución de B en la producción
(A ::= αBβ) al proceso de eliminar dicha producción de P y añadir a P las producciones
A ::= αγ1 β | · · · | αγm β.
Lema 19 Dada G = (ΣN , ΣT , S, P) una gramática independiente del contexto, sustituir un
sı́mbolo en cualquier producción de G no cambia el lenguaje generado por la gramática.
Demostración.–
Ejemplo 8 Consideremos una gramática que contiene la producción B ::= aCAD y las A–
producciones A ::= Ab | ACD | bDC | a. Entonces la sustitución de A en la regla B ::= aCAD
consiste en eliminar dicha regla y añadir las producciones siguientes:
B ::= aCAbD | aCACDD | aCbDCD | aCaD.
Teorema 20 Dada G = (ΣN , ΣT , S, P) una gramática independiente del contexto, existe una
gramática equivalente en Forma Normal de Greibach.
Demostración.– Supongamos que G está en Forma Normal de Chomsky, y supongamos ΣN =
{A1 , . . . , Am }. Construyamos una gramática G′ = (Σ′N , ΣT , S, P ′ ) equivalente tal que si (Ai ::=
Aj γ) ∈ P ′ , entonces j > i. Para ello, tenemos el Algoritmo 6. En resumidas cuentas, el Algoritmo lo que hace es
Elimina las producciones de la forma Ai ::= Aj γ, con i > j realizando sustitución.
Elimina las producciones de la forma Ai ::= Ai γ, esto es, recursividad a izquierdas.
Una vez aplicado dicho algoritmo, tendremos que la gramática resultante verifica que las producciones son de la forma:
Ai ::= Aj γ, con i < j.
Ai ::= aγ, con a ∈ ΣT .
Ti ::= γ, con γ ∈ (ΣN ∪ {T1 , T2 , . . . , Ti−1 })∗ .
Nótese que el sı́mbolo más a la izquierda en la parte de la derecha de cualquier Am –producción
debe ser terminal. Además, el sı́mbolo más a la izquierda en la parte de la derecha de cualquier Am−1 –producción debe ser Am o un terminal. En caso de que sea Am , podemos generar
nuevas producciones sustituyendo Am en dichas reglas. Esas nuevas producciones tendrán su
parte de la derecha comenzando por un sı́mbolo terminal. Procediendo con las producciones
Am−2 , . . . , A2 , A1 conseguimos que todas las Ai –producciones (i = 1, . . . , m) comienzan con un
sı́mbolo terminal.
Y para las Tj –producciones, se tiene que no pueden empezar con otra Ti , luego empiezan bien
con terminales o con Ak , luego basta sustituir dicho no terminal.
CAPÍTULO 9. GRAMÁTICAS INDEPENDIENTES DEL CONTEXTO
Algoritmo 6
Precondición : Gramática G = (ΣN , ΣT , S, P) en Forma Normal de Chomsky.
P ′ ← P;
Σ′N ← ΣN ;
para k = 1, . . . , m hacer
para j = 1, . . . , k − 1 hacer
para todo (Ak ::= Aj α) ∈ P ′ hacer
para todo (Aj ::= β) ∈ P ′ hacer
P ′ ← P ′ ∪ {Ak ::= βα};
P ′ ← P ′ \ {Ak ::= Aj α};
fin para
fin para
fin para
para todo (Ak ::= Ak α) ∈ P ′ hacer
Σ′N ← Σ′N ∪ {Tk };
P ′ ← P ′ ∪ {Tk ::= α | αTk };
P ′ ← P ′ \ {Ak ::= Ak α};
para todo (Ak ::= β) ∈ P ′ ∧ β no comienza por Ak hacer
P ′ ← P ′ ∪ {Ak ::= βTk };
fin para
fin para
fin para
13
CAPÍTULO 9. GRAMÁTICAS INDEPENDIENTES DEL CONTEXTO
14
Observación 21 La gramática resultante puede contener sı́mbolos inútiles y por tanto deben
de eliminarse para que la gramática esté en Forma Normal de Greibach.
Ejemplo 9 Consideremos la gramática G = ({A, B, C, D}, {a, b}, A, P), donde P son las producciones
A
B
C
D
::=
::=
::=
::=
BD
CA | a
AB | b
a
La gramática G está ya en Forma Normal de Chomsky. Supongamos ordenadas las variables,
A < B < C < D. Vayamos por orden de las variables de menor a mayor:
‘A’ No hay nada que hacer para la variable A.
‘B’ No hay nada que hacer para la variable B.
‘C’ Para la variable C, eliminamos la producción C ::= AB y añadimos la produccione C ::=
BDB. De nuevo, eliminamos esta nueva producción y añadimos las producciones C ::=
CADB | aDB. Finalmente eliminamos la recursividad a izquierda, eliminando la regla
C ::= CADB y añadiendo el sı́mbolo no terminal TC y las reglas C ::= bE | aDBTC y
T ::= ADB | ADBTC .
‘D’ No hay nada que hacer para la variable D.
Recapitulando, la gramática intermedia es de la forma G1 = ({A, B, C, D, TC }, {a, b}, A, P1 ),
donde P1 son las producciones
A
B
C
D
TC
::=
::=
::=
::=
::=
BD
CA | a
bTC | aDBTC | aDB | b
a
ADB | ADBTC
Siguiendo la demostración del teorema, tendremos que ir sustituyendo en D, C, B, A los primeros sı́mbolos en las producciones para conseguir que el primero sea un sı́mbolo terminal.
Procedemos pues, de mayor a menor:
‘D’ No hay nada que hacer para la variable D.
‘C’ No hay nada que hacer para la variable C.
‘B’ Procedemos a sustituir C en la producción B ::= CA, con lo que quitamos dicha producción y añadimos las producciones B ::= bTC A | aDBTC A | aDBA | bA.
CAPÍTULO 9. GRAMÁTICAS INDEPENDIENTES DEL CONTEXTO
15
‘A’ Procedemos a sustituir B en la producción A ::= BD, con lo que quitamos dicha producción y añadimos las producciones A ::= bTC AD | aDBTC AD | aDBAD | bAD | aAD.
Para concluir, tenemos que hacer el mismo proceso para las variables auxiliares. En este caso,
sólo tenemos TC , con lo que sustituimos A en las producciones TC ::= ADB | ADBTC con lo
que eliminamos dichas producciones y añadimos las producciones siguientes:
TC ::= bTC ADDB | aDBTC ADDB | aDBADDB | bADDB | aDDB |
bTC ADDBTC | aDBTC ADDBTC | aDBADDBTC | bADDBTC | aDDBTC .
Por lo tanto, la gramática en Forma Normal de Greibach equivalente que buscamos es G′ =
({A, B, C, D, TC }, {a, b}, A, P ′ ), donde P ′ son las producciones
A
B
C
D
TC
::=
::=
::=
::=
::=
bTC AD | aDBTC AD | aDBAD | bAD | aD
bTC A | aDBTC A | aDBA | bA | a
bTC | aDBTC | aDB | b
a
bTC ADDB | aDBTC ADDB | aDBADDB | bADDB | aDDB |
bTC ADDBTC | aDBTC ADDBTC | aDBADDBTC | bADDBTC | aDDBTC .
Descargar