Sunteți pe pagina 1din 28

TEMA 6

GRAMTICAS INDEPENDIENTES DEL CONTEXTO

TEMA 6.- GRAMTICAS INDEPENDIENTES DEL CONTEXTO


6.1. Gramticas independientes del contexto.
6.2. Limpieza de Gramticas Independientes del contexto.
6.3. Gramticas limpias y gramticas sucias.
6.4. Limpieza de gramticas
6.4.1. Teorema de los smbolos vivos
6.4.2.Teorema de los smbolos accesibles
6.4.3. Anlisis automtico de la limpieza de gramticas
6.5 Gramticas bien formadas
6.6. Formas Normales de Gramticas Independientes del
contexto.

6.6.1. Forma Normal de Chomsky (FNC)


6.6.2. Forma Normal de Greibach (FNG)

TALF. Tema6

n 2

6.1. Gramticas independientes del contexto.

Tcnicas para preparar una gramtica tipo 2 para


ser tratada eficientemente por un autmata con
pila:
Gramticas limpias
Gramticas bien formadas
Formas normales de Chomsky y Greibach

TALF. Tema6

n 3

6.2. Limpieza de Gramticas Independientes del contexto.

Las gramticas de los lenguajes de programacin


estn formadas por un conjunto de reglas BNF,
cuyo nmero suele ser bastante amplio, lo cual
incide en la ocultacin de distintos problemas que

pueden producirse, tales como


tener reglas que produzcan smbolos que no se usen

despus, o
que nunca se llegue a cadenas terminales.

Todo esto se puede solventar realizando la


transformacin de la gramtica inicial sucia a una
gramtica limpia.

TALF. Tema6

n 4

6.3. Gramticas limpias y gramticas sucias.

Definiciones.
Smbolo muerto (superfluo): es un smbolo no terminal que
no genera ninguna cadena de smbolos terminales.
Smbolo vivo: es un smbolo no terminal del cual se puede
derivar una cadena de smbolos terminales. Todos los
smbolos terminales son smbolos vivos. Es decir son
smbolos vivos lo que no son muertos.
Smbolo inaccesible: es un smbolo no terminal al que no
se puede llegar por medio de producciones desde el smbolo
inicial.
Smbolo accesible: es un smbolo que aparece en una
cadena derivada del smbolo inicial. Es decir, aquel smbolo
que no es inaccesible.
Smbolo extrao: se denomina as a todo smbolo muerto o
inaccesible.
Gramtica sucia: es toda gramtica que contiene smbolos
extraos.
Gramtica limpia: es toda gramtica que no contiene
smbolos extraos.

TALF. Tema6

n 5

6.4. Limpieza de gramticas


toda gramtica en bruto ha de limpiarse con el objetivo
de eliminar todos los smbolos extraos.
El mtodo de limpiar las gramticas sucias consiste

en detectar en primer lugar todos los smbolos muertos, y


a continuacin

se detectan todos los smbolos inaccesibles. Es importante


seguir este orden, puesto que la eliminacin de smbolos
muertos puede generar nuevos smbolos inaccesibles.

Los algoritmos que se utilizan en la limpieza de


gramticas se basan en los teoremas que se enuncian a
continuacin

TALF. Tema6

n 6

6.4. Limpieza de gramticas


6.4.1. Teorema de los smbolos vivos
Si todos los smbolos de la parte derecha de una
produccin son vivos, entonces el smbolo de la parte
izquierda tambin lo es.

Algoritmo para detectar smbolos muertos:


1. Hacer una lista de no-terminales que tengan al
menos una produccin sin smbolos no terminales en
la parte derecha.
2. Dada una produccin, si todos los no-terminales de la
parte derecha pertenecen a la lista, entonces
podemos incluir al no terminal de la parte izquierda.
3. Cuando no se puedan incluir ms smbolos mediante
la aplicacin del paso 2, la lista contendr todos los
smbolos vivos, el resto sern muertos.

TALF. Tema6

n 7

6.4. Limpieza de gramticas. Ejemplo.

Determinar los smbolos muertos de la gramtica expresada en BNF:

<INICIAL>::= a <NOTA 1> <NOTA2> <NOTA3> | <NOTA4> d


<NOTA 1>::= b <NOTA2> <NOTA3>
<NOTA2>::= e | d
<NOTA3>::= g <NOTA2>
<NOTA4>::= <NOTA 1> f <NOTA5>
<NOTA5>::= t <NOTA4> | v <NOTA5>

1.

2.

3.

aplicando los pasos del algoritmo:


Confeccin de la lista: slo hay un smbolo no terminal con el cual comenzar
la lista.
<NOTA2>
Aplicando el teorema 6.4.1. se incluyen en la lista por el siguiente orden:
<NOTA3>
<NOTA1>
<INICIAL>
No se puede aplicar el teorema ms veces, por lo tanto la lista de smbolos
vivos est completa y los smbolos <NOTA4> y <NOTA5> son no terminales
muertos.

TALF. Tema6

n 8

6.4. Limpieza de gramticas


6.4.2.Teorema de los smbolos accesibles
Si el smbolo no terminal de la parte izquierda de una
produccin es accesible, entonces todos los smbolos
de la parte derecha tambin lo son.
Algoritmo para detectar smbolos accesibles:
1. Se comienza la lista con un nico no terminal, el smbolo
inicial.
2. Si la parte izquierda de la produccin est en la lista,
entonces se incluyen en la misma a todos los no
terminales que aparezcan en la parte derecha.
3. Cuando ya no se puedan incluir ms smbolos mediante
la aplicacin del paso 2, la lista contendr todos los
smbolos accesibles, y el resto ser inaccesible.

TALF. Tema6

n 9

6.4. Limpieza de gramticas. Ejemplo.

Sea la siguiente gramtica en BNF:

<INICIAL>::= a<NOTER1><NOTER2>|<NOTER1>
<NOTER1>::= c <NOTER2> d
<NOTER2>: := e | f <INICIAL>
<NOTER3>::= g <NOTER4> | h <NOTER4> t
<NOTER4>::= x l y l z

Aplicando el algoritmo los smbolos inaccesibles son:

1.

Confeccin de la lista: <INICIAL>

2.

Aplicacin del teorema 6.4.2


<NOTER1>
<NOTER2>

3.

No se puede aplicar ms veces el paso, luego la lista de smbolos accesibles


est completa, y los no terminales inaccesibles son:
<NOTER3>
<NOTER4>

TALF. Tema6

n 10

6.4. Limpieza de gramticas.


6.4.3. Anlisis automtico de la limpieza de gramticas

Los algoritmos de limpieza de gramticas comprueban si


las gramticas son limpias. Los pasos para el
tratamiento de cualquier gramtica son:

Una gramtica es limpia si no tiene:


smbolos muertos
smbolos inaccesibles
reglas innecesarias (A::=A; stas se eliminan
directamente)

TALF. Tema6

n 11

6.4. Limpieza de gramticas. Ejemplo.

Ejemplo:
<INICIAL>::= A <NOTER1> <NOTER2>
<INICIAL>: := <NOTER1>
<NOTER1>::= C <NOTER2> D
<NOTER2>::= E
<NOTER2>::= F <INICIAL>
<NOTER3>::= G <NOTER4>
<NOTER3>::= H <NOTER4> T
<NOTER4>::= X
<NOTER4>::= Y
<NOTER4>::= Z

El analizador indicar que la gramtica no es limpia. La relacin de


smbolos no accesibles: NOTER3 y NOTER4.

TALF. Tema6

n 12

6.5 Gramticas bien formadas


Una gramtica est bien formada si:
1. Est limpia.
Sin smbolos muertos
Sin smbolos inaccesibles
Sin reglas innecesarias

2. No tiene reglas no generativas (A::= , AS).


3. No tiene reglas de redenominacin (A::=B).

TALF. Tema6

n 13

6.5 Gramticas bien formadas

Algoritmo para eliminar las reglas no generativas (A::= , AS):

P = P

//P= reglas no generativas; P=reglas generativas

Repetir
Para cada P=( A P y AS )
P = P- {P}
Para cada P = (B::=xAy) P
P = P {B::=xy}

Hasta que todas las reglas sean generativas

TALF. Tema6

n 14

6.5 Gramticas bien formadas. Ejemplo.


Ejemplo:
P = {(A::=C0B), (A::=), (B::=BC), (B::=), (C::=0B), (C::=)}

Aplicando el algoritmo:
Eliminacin de la regla B::= :
P = {(A::=C0B), (A::=C0) ,(A::=), (B::=BC), (B::=C),
(C::=0B), (C::=0), (C::=)}
Eliminacin de la regla C::= :
P = {(A::=C0B), (A::=0B), (A::=C0) , (A::=0) ,(A::=),
(B::=BC), (B::=C), (B::=B), (B::=), (C::=0B), (C::=0)}
Eliminacin de la regla B::= que ha aparecido de nuevo:
P = {(A::=C0B), (A::=0B), (A::=C0) , (A::=0) ,(A::=),
(B::=BC), (B::=C), (C::=0B), (C::=0)}
Esta ser la gramtica sin reglas regenerativas

Par eliminar las reglas de redenominacin (A::=B) se


genera una nueva produccin A::= por cada regla B::=,
con * y se borra la regla A::=B.
TALF. Tema6

n 15

6.6. Formas Normales de Gramticas Independientes del contexto.

En algunas ocasiones es imprescindible que las gramticas se


hallen dispuestas de una forma especial. Es decir, se trata de
obtener una gramtica equivalente, que genera el mismo
lenguaje, pero que debe cumplir unas especificaciones
determinadas. A continuacin se muestran las dos formas
normalizadas ms frecuentes, que se emplean en los lenguajes
formales y sus aplicaciones.

6.6.1. Forma Normal de Chomsky (FNC)


6.6.2. Forma Normal de Greibach (FNG)

TALF. Tema6

n 16

6.6.1. Forma Normal de Chomsky (FNC)


Una gramtica se dice que est en la Forma Normal de
Chomsky si sus reglas son de una de estas formas:
A BC
Aa
Siendo A, B, C no terminales y a un terminal.

Teorema de la forma normal de Chomsky


Toda gramtica libre de contexto sin la cadena vaca
tiene una gramtica equivalente cuyas producciones
estn en la Forma Normal de Chomsky.
Forma Normal de Chomsky (FNC)

Una gramtica se dice que est en la Forma Normal de


Chomsky si sus reglas son de una de estas formas:
A BC
Aa
Siendo A, B, C no terminales y a un terminal.

TALF. Tema6

n 17

6.6.1. Forma Normal de Chomsky (FNC)

El algoritmo a seguir es:


1. PiP / Pi: A 1...n, donde i(NT ), n2
1. j, si jT (es terminal) entonces hacer:
1. N =N {Cj}
2. P= P {Cj j}
3. Modificar Pi, donde antes pona j ahora poner Cj.

2. PkP / Pk: A B1...Bm, donde BN , m3


1. N =N {Dj} j=1..m-2.
2. Reemplazar Pk por las producciones:
A B1D1, D1 B2D2,..., Dm-2 Bm-1Bm

TALF. Tema6

n 18

6.6.1. Forma Normal de Chomsky (FNC). Ejemplo.

Sea la gramtica G=( N={S, A, B}, T ={a, b}, P, S) cuyas producciones son:

las reglas pueden reescribirse:

S
A
B
encontrar

bA | aB
bAA | aS | a
aBB | bS | b
una gramtica equivalente en FNC.

(1)
(2)
(3)
(4)
(5)(*)
(6)
(7)

S
S
A
A
A
B
B

(8)(*)

bA
aB
bAA
aS
a
aBB
bS

B b

Solamente las sealadas con (*) estn en forma FNC. La produccin (1) se sustituye por dos:

S CbA
Cb b

Igualmente la (2) puede sustituirse por

S Ca B
Ca a

Las producciones (3) y (4) se sustituyen por

A CbD1
A Ca S

D1 AA

y la (6) y la (7) por

B C aD 2
D2 BB
B Cb S
TALF. Tema6

n 19

6.6.1. Forma Normal de Chomsky (FNC). Ejemplo.

la gramtica equivalente en FNC es:

S CbA
S Ca B
A Ca S
A CbD1
A a
B Cb S
B CaD2
B b
D1 AA
D2 BB
Ca a
Cb b

TALF. Tema6

n 20

6.6.2. Forma Normal de Greibach (FNG)

Se dice que una gramtica est en la Forma Normal de


Greibach si sus reglas de produccin son de la forma:

A a
A a
donde A N, a T N*

Teorema de la forma normal de Greibach


Todo lenguaje de contexto libre sin la cadena vaca puede ser
generado por una gramtica cuyas reglas de produccin son de
la forma

A a
A a
donde A N, a T N*

Ejemplo: La gramtica dada en el ejemplo anterior.


S bA | aB
A bAA | aS | a
B aBB | bS | b
TALF. Tema6

n 21

6.6.2. Forma Normal de Greibach (FNG)

Funciones previas utilizadas en el algoritmo para obtener la FNG:

1.

Eliminar recursividad a izquierdas, las producciones A A.

Operacin para eliminar la recursividad en un smbolo:

1. Crear una nueva variable BA, N = N BA


2. PiP, Pi: A A,
1. Aadir a P: BA y BA BA
2. Sacar A A de P.

3. PjP, Pj: A , y no empieza por A


1. Aadir A BA

La notamos como ELIMINArecursividad(A)


2.

Sustiruir en las reglas A B las reglas de B


Operacin para eliminar una produccin A B, con AB.

1. Sacar A B de P.
2. PiP, tq B , aadir A
La notamos como ELIMINAproduccin(A B)
TALF. Tema6

n 22

6.6.2. Forma Normal de Greibach (FNG)


Pasos para conseguir la FNG:
1.

Partir de una gramtica en forma normal de Chomsky. En


realidad basta con que sea una gramtica limpia y sus
producciones tengan la forma:

A a o A
2.

donde A N, a T N*

Establecer un determinado orden en los smbolos no-terminales y

Poner las producciones en la forma: AiAj, con j>i.

1. Para k=1,...,m
1. Para j=1,...,k-1
1. PiP, Pi: Ak Aj,
ELIMINARproduccin(Ak Aj)
2. Si Ak Ak entonces ELIMINArecursividad(Ak)

TALF. Tema6

n 23

6.6.2. Forma Normal de Greibach (FNG)

3. Poner las producciones en la forma: Aia.


1. Para i=m-1,...,1
1. PiP, Pi: Ai Aj, y j>i
ELIMINARproduccin(Ai Aj)
2. Para k=1,...,m
1. PiP, Pi: Bj Ak,
1. ELIMINARproduccin(Bj Ak)

TALF. Tema6

n 24

6.6.2. Forma Normal de Greibach (FNG). Ejemplo.

Ejemplo:

1.

Partimos de la gramtica en FNC del ejemplo anterior:


1. S CbA |CaB
2. A Ca S| CbD1|a
3. B Cb S| CaD2|b
4. D1 AA
5. D2 BB
6. Ca a
7. Cb b

2.

Tomamos el orden anterior para N ={S=A1}. Poner las

producciones en la forma: AiAj, con j>i.

TALF. Tema6

n 25

6.6.2. Forma Normal de Greibach (FNG)


2.

Tomamos el orden anterior para N ={S=A1}.


1.
Poner las producciones en la forma: AiAj, con j>i.

1.

2.
3.
4.
5.
6.
7.

S CbA |CaB
A Ca S| CbD1|a
B Cb S| CaD2|b
D1 AA
D2 BB
Ca a
Cb b

Resultado paso 2

1.
2.
3.

S CbA |CaB
A Ca S| CbD1|a
B Cb S| CaD2|b

ELIMINARproduccin(D2 BB) por:

4.

D1 CaSA| CbD1A| aA

D2 CbSB| CaD2B|bB

5.
6.
7.

D2 CbSB| CaD2B|bB
Ca a
Cb b

Para k=1,...,m

//m=7

1. Para j=1,...,k-1
1. PiP, Pi: Ak Aj,
ELIMINARproduccin(Ak Aj)

k=4 (D1), j=2 (A) cambian las producciones:


ELIMINARproduccin(D1 AA) por:
D1 CaSA| CbD1A| aA

2.

K=5 (D2), , j=3(B)

No Ak Ak

TALF. Tema6

n 26

6.6.2. Forma Normal de Greibach (FNG)


3.

Poner las producciones en la forma: Aia.

1.

Para i=m-1,...,1 //m=7


1. PiP, Pi: Ai Aj, y j>i

i=5 ELIMINARproduccin(D2 CbSB| CaD2B|bB)


por: D2 bSB| aD2B|bB

i= 4 ELIMINARproduccin(D1 CaSA| CbD1A| aA)


por: D1 aSA| bD1A| aA

i= 3 ELIMINARproduccin(B Cb S| CaD2|b) por:


B bS| aD2|b

i= 2 ELIMINARproduccin(A Ca S| CbD1|a)
A aS| bD1|a

i= 2 ELIMINARproduccin(S CbA |CaB) por:


S bA |aB

1.

Para k=1,...,m
1. PiP, Pi: Bj Ak, No existen

TALF. Tema6

1.
2.
3.

S CbA |CaB
A Ca S| CbD1|a
B Cb S| CaD2|b

4.

D1 CaSA| CbD1A| aA

5.
6.
7.

D2 CbSB| CaD2B|bB
Ca a
Cb b

1.
2.
3.

Resultado paso 3
S bA |aB
A aS| bD1|a
B bS| aD2|b

4.

D1 aSA| bD1A| aA

5.
6.
7.

D2 bSB| aD2B|bB
Ca a
Cb b

n 27

6.6.2. Forma Normal de Greibach (FNG)

Resultado paso 3: gramtica


equivalente e FNG:

1. S bA |aB

1. S bA |aB

2. A aS| bD1|a

2. A aS| bD1|a
3. B bS| aD2|b

3. B bS| aD2|b

4. D1 aSA| bD1A| aA

4. D1 aSA| bD1A| aA

5. D2 bSB| aD2B|bB

5. D2 bSB| aD2B|bB

6. Ca a
7. Cb b

Si ahora la limpiamos:

Quedando la gramtica limpia:

Simbolos vivos:
todos
Smbolos accesibles:
S, A, B, D1, D1
Eliminamos C1,C2

TALF. Tema6

Equivalente a:
1. S bA | aB
2. A bAA | aS | a
3. B aBB | bS | b

n 28

S-ar putea să vă placă și