You are on page 1of 50

Lenguajes Independientes del

Contexto
Teora del Autmata
AFD como generadores
Un AFD (o AFN) puede verse como un aceptador de cadenas o
como un generador de cadenas.
a Acepta a(a* b*)b

q2 b Como productor haciendo las


e
transiciones
a
q0 q1 q4 q0- q1- q2- q2- q2- q5.
Genera: aaaab
e q3 b

b
Las cadenas estn formadas por a seguidas por otra parte.
Podemos representarlo como S aE, lo que sigue pueden ser
cadenas de aes o bes, de E podemos ir a generar aes mediante
A y bes mediante B, es decir, E A o E B.
Las aes se producen con A aA y las bes con B bB,
eventualmente A y B producirn b, es decir A b y B b.
En suma: S aE
EA
EB
A aA
B bB
Ab
Bb
Las reglas anteriores pueden escribirse como se muestra:
S aE
EA|B
A aA | b
B bB | b
Donde | significa o.
Una derivacin es una es una serie de sustituciones de el
smbolo de la derecha de las producciones por las cadenas de la
izquierda hasta obtener una cadena de smbolos terminales.
Ejemplo

La siguiente es una derivacin para la cadena aaab.

S aE aaA aaaA aaab


Gramticas regulares
Una gramtica es un cuarteto (N, S, S , P) donde:
N es un conjunto de smbolos llamados no terminales.
S es un conjunto finito y no vaco de smbolos terminales.
S N es el smbolo inicial
P es una coleccin, de reglas de sustitucin, llamadas
producciones, que son de la forma A w, donde A N y w es
una cadena sobre S N que satisface lo siguiente:
1 w contiene un no terminal como mucho.
2 si w contiene un no terminal se encuentra al extremo
derecho de la cadena
Ejemplo
La siguiente es una gramtica
S = {a, b}, N = {S, A}, S bA, A aaA | b | e
Genera cadena de la forma ba2nb o ba2n.
L(G) = b(aa)*(b)
Las producciones se pueden representar como pares
ordenados de N S (N e).
P = {(S, bA), (A, aaA), (A, b), (S, e)}
Ejercicios
Sea S aS | bT y T aa
Derivar abaa, aabaa, aaabaa.
Probar que deriva akba2, k >= 1.
S aS aaS aaaS akS akbT akbaa
Obtener gramaticas para
a*b a
a*b b*a
(a*b b*a)*
AFD a gramtica regular

A partir de un AFD dado por M = (Q, S, s, F, d) definiendo la


gramtica por G = (N, S, S, P) con
N=Q
S=S
S=s
P = {(q, ap)| d(q, ap) = p} {(q, e)| q F}
a a,b
b a,b
q1 q2 q3

q1 aq1 | bq2
q1 aq3 | bq3 | e
q1 aq3 | bq3
Tarea
Obtener la expresin regular para la siguiente gramtica regular.
S bA | aB | e
A abaS
B babS
Gramtica regular a AFD
Sea G una gramtica regular, G = (N, S, S, P). Definimos M = (Q,
S, s, F, D) de la siguiente manera
Q=N{f}
s=S
F={f}
1. Si A s1snB es una produccin, aada a Q los estados
q1,, qn y las transformaciones siguientes
D(A, s1sn) = D(q1, s2sn) = D(qn1, sn) = B
2. Si A s1snB es una produccin, aada a Q los estados
q1,, qn y las transiciones siguientes
D(A, s1sn) = D(q1, s2sn) = D(qn1, sn) = f
Ejemplo
S bA | aB | e
A abaS
B babS
a
b a b
s q1 q2 q3
a
e q4
q1 b b
q5
a

q6
Ejercicios
Obtener AFNs para la siguientes gramticas regulares.
S aS | bB | b e
B cC
C aS

S abA | B | baB | e
A bS | b
B aS
Gramticas Libres del contexto
La siguiente es una gramtica
S aB | bA
A a | aS | bAA
B b | bS | aBB
No tiene las restricciones de una gramtica regular.
Las producciones permiten ms de un no terminal en el lado
derecho.
Definicin
Una gramtica libre del contexto (GIC) es un cuarteto (N, S, S ,
P) donde:
N es un conjunto de smbolos llamados no terminales.
S es un conjunto finito y no vaco de smbolos terminales.
S N es el smbolo inicial
P es una coleccin, de reglas de sustitucin, llamadas
producciones, que son de la forma A w, donde A N y w es
una cadena sobre (S N)*. Es decir, las producciones pueden
tener cero, uno o ms no terminales que aparezcan en cualquier
lugar del lado derecho.
El lenguaje generado es conocido por Lenguaje independiente
del contexto (LIC).
Ejemplo

Sea la gramtica S aSb | e


Esta gramtica genera el lenguaje (anbn | n>=0} que no es
regular.
Ejercicios
Sea la gramtica S AA
A AAA | a | bA | Ab
Obtener derivaciones para b2aba2ba.
Probar como puede obtenerse una derivacin para
b m1 ab m2 a...b m2 n ab m2 n1
Para todo n > 0 y m1, m2,, m2n+1 >= 0
Ejercicios
Obtener gramticas independientes del contexto para los
siguientes lenguaje
(ambn | m >= n}
(w {a, b}*| w tiene el doble de aes que de bes}
(ambn | n <= m <= 2n} S aSb | aaSb | e
(ambncpdq | m+n >= p+q} S aS | aSd | A | B | C
A bA | bAc | e
B aBc | aB | A | e
C bCd | bC | A | e
rboles de derivacin
Considere la siguiente es una gramtica
S AB
A aA | a
B bB | b
La cadena aabbb se puede derivar mediante
S AB AbB AbbB Abbb aAbbb aabbb
El rbol de derivacin es S
A B

a A b B

a b B

b
La cadena aabbb se puede derivar tambin mediante las
siguientes derivaciones
S AB aAB aaBBB aabBB aabbB aabbb
S AB aAB aAbB aAbbB aAbbb aabbb
El rbol de derivacin es el mismo que el anterior

Considere la siguiente es una gramtica


S SbS | ScS | a
Las siguientes derivaciones son para abaca
S SbS SbScS SbSca Sbaca abaca
S ScS SbScS abScS abacS abaca
Los rboles de derivacin se muestran a continuacin
S SbS SbScS SbSca Sbaca abaca
S
S S
b
a S c S

a a
S ScS SbScS abScS abacS abaca
S
S S
c
S S
b a
a a
Ejemplos
S x | y | z | S + S | S S | S *S | S/S | (S)
S S + S S + S*S S + S*(S) S + S*(S S)
x + S*(S S) x + y*(S S) x + y*(z S) x + y*(z
y)
Dibujar el rbol de derivacin, es ambiguo?
Una gramtica libre de contexto para un lenguaje consistente en
todas las cadenas que se pueden formar con las letras a y b,
habiendo un nmero diferente de una que de otra, sera:
SU|V
U TaU | TaT
V TbV | TbT
T aTbT | bTaT |
T genera todas las cadenas con la misma cantidad de letras a que
b, U genera todas las cadenas con ms letras a, y V todas las
cadenas con ms letras b.
Otro ejemplo para un lenguaje es {anbncm+n | n>=0 , m>=0}
puede ser generado por la siguiente gramtica libre de contexto.
S aSc | B
B bBc |
Es ambiguo?
Simplificacin de gramticas
independientes del contexto
Sea G = (N, S, S, P) una gramtica independiente del
contexto. Transformaremos G en G'= (N', S, S, P') de forma
que L(G') = L(G), y para todo A N' se obtenga que A *
w para algn w S*.
Algoritmo 1.
Eliminacin de no terminales que no deriven cadenas terminales.

1. Iniciar N' con todos los no terminales de A para los que A w,


es una produccin de G, con w S*.
2. Inicializar P' con todas las producciones A w para las cuales
A N y w S*.
3. Repetir
Aadir a N ' todos los no terminales A para los cuales A w, para
algn w (N ' S*) que sea una produccin de P y aadirla P '.
hasta que no puedan aadir ms no terminales a N '.
Ejemplo
S Aa | B | D
Bb
A aA | bA | B
C abc
C es una produccin intil
1er paso: N = {B, C}
2o paso: P = {B b}
3er paso: N = {B, C, A, S}
Ejemplo
S aAb | cEB | CE
A dBE | eeC
B ff | D
C gFB | ae
Dh
Algoritmo 2.
Elimina aquellos terminales y no terminales que no aparezcan en
las cadenas que se deriven a partir de S.
Sea G = (N, S, S, P) una gramtica independiente del contexto.
Transformaremos G en G '= (N', S, S, P ') de forma que
L(G ') = L(G),
y para todo X N ' S', se tenga que
S aXb
para las cadenas a y b de (N ' S')*.
Algoritmo 2. (cont.)
1. Inicializar N ' de forma que contenga el smbolo inicial S, e
inicializar P ' y S' a .
2. Repetir
Para A N ', si A w es una produccin de P, entonces
1. Introducir A w en P '.
2. Para todo no terminal B de w, introducir B en N '.
3. Para todo terminal s de w, introducir s en S'.
hasta que no se puedan aadir nuevas producciones
Algoritmo 3
Identifica el conjunto N, de todos los no terminales anulables
en una gramtica independiente del contexto.

1. Inicializar N con todos los no terminales A para los cuales


existe una produccin e, A e.
2. Repetir
Si B w para algn w (N S)* y todos los smbolos de w
estn en N, aadir B a N.
hasta que no se aadan ms no terminales a N.
Algoritmo 3 (cont.)

Una vez identificados los no terminales anulables, se


modifican las reglas de produccin con el fin de eliminar la
producciones e.
Esto se realiza sustituyendo producciones de la forma B
X1X2Xn por las producciones que se formen al eliminar los
subconjuntos de Xi que son anulables.
Algoritmo 3 (cont.)
Se crea un nuevo conjunto de producciones P como sigue:
Si B X1X2Xn es una produccin de P, entonces en P
introduciremos todas las producciones de la forma B
Y1Y2Yn, donde las Yi satisfagan:
Yi = Xi si Xi no es anulable
Yi = Xi o e si Xi es anulable
Yi no es e para toda i (es decir, no se introduce en P
ninguna produccin de la forma
B e)
En una gramtica que contenga e, se pueden eliminar todas las
producciones e y despus aadir la produccin S e.
Ejemplo
N = {B, C, D}
S AB S AB | A
A aA | abB | aCa A aA | abB | ab | aCa | aa
B bA | BB | e B bA | BB | B
Ce D dB | d | BCB | BC | CB | BB
D dB | BCB B|C
Con 1: S AB abB abbA abbaA abbaabB
abbaab
Con 2: S A abB abbA abbaA abbaab
Eliminacin de producciones
unitarias
Producciones de la forma A B se conocen como unitarias. Para
A N se define
Unitario(A) = {B N | A * B usando solamente producciones
unitarias}
Las producciones unitarias agregan pasos intiles al proceso de
derivacin de cadenas de terminales.
El siguiente algoritmo elimina todas las producciones unitarias de
una gramtica G. Sea G = (N, S, S, P) se obtendr G, tal que G =
(N, S, S, P) no contiene producciones unitarias como sigue:
Eliminacin de producciones
unitarias (cont.)
1. Inicializar P de forma que contenga todos los elementos de P.
2. Para cada A N, obtener el conjunto Unitario(A).
3. Para cada A para el cual Unitario(A) {A}.
Para cada B Unitario(A).
Para cada produccin no unitaria B w de P
Aadir A w a P
4. Eliminar todas las producciones unitarias que haya en P.
S A | Aa Unitario(S) = {S, A, B, C, D}
AB Unitario(A) = {A, B, C, D}
B C | b Unitario(B) = {B, C, D}
C D | ab Unitario(C) = {C, D}
Db Unitario(D) = {D}
Se introducen las producciones:
S b | ab, A b | ab, B b | ab, C b | ab
Se eliminan las unitarias y resulta:
S b | ab | Aa C b | ab
A b | ab Db
B b | ab
Forma normal de Chomsky
Una gramtica independiente del contexto esta en forma
normal de Chomsky si no contiene producciones e y todas
las producciones son de la forma A a para a S, o de la
forma A BC, donde B y C son no terminales.
Para transformar una gramtica independiente del contexto a
la forma normal de Chomsky, primero se eliminan todas las
transformaciones e, los smbolos intiles y las producciones
unitarias de G.
Si se tiene una produccin de la forma A w, con |w| > 1,
donde w = X1X2Xn. Si Xi es un smbolo terminal s,
sustituimos Xi por un nuevo no terminal Cs y aadimos la
produccin Cs s. De esta forma A w contendr solo no
terminales.
Forma normal de Chomsky (cont.)

La produccin tendr la forma A B1B2Bn, esta se puede


reemplazar por las producciones
A B1D1
D1 B2D2

Dn-2 Bn-1Bn
donde los Di son nuevo no terminales.
S bA | aB
A bAA | aS | a
B aBB | bS | b
Despus de la primera transformacin:
Despus de la segunda transformacin:
S CbA | CaB
S CbA | CaB
A CbAA | CaS | a
A CbD1 | CaS | a
B CaBB | CbS | b
D1 A A
Ca a
B CaD2 | CbS | b
Cb b
Ca a
Cb b
D2 BB
Propiedades de los lenguajes
independientes del contexto

Se puede probar mediante induccin que, si se puede derivar


w y | w | >0, la derivacin tiene 2 | w | etapas en una gramtica
en forma normal de Chomsky.
En el nivel m del rbol de derivacin hay, como mximo, 2m
nodos padre, por tanto, el camino ms largo en un rbol de
derivacin consta de m + 2 nodos, entonces 2m es la longitud
mxima de la cadena derivada.
Lema del bombeo para GIC
Sea L un LIC que no contiene e. Existe un entero k para el
cual, si z L y | z | > k, entonces z se puede volver a
escribir como z = uvwxy con las propiedades siguientes:
1. | vwx | k.
2. Al menos o v o x no es e.
3. uviwxiy L para todo i 0.
Demostracin. Sea G = (N, S, S, P) con L = L(G) y sea n el
nmero de no terminales de N y k = 2n. Supongamos z L
con | z | > k.
Lema del bombeo para GIC (cont.)
El camino ms largo de derivacin debe contener n + 2 nodos,
n + 1 sern no terminales, por tanto, algn no terminal se
repite. Entonces
S * uAy * uvAxy * uvwxy = z
por tanto | vwx | 2n. Puesto que A * vAx, debemos tener A
* viAxi para algn i 0. Por tanto S * uviwxiy para
todo i 0. Como A * vAx, se debe tener que A BC *
vAx * vwx. Entonces B * v y C * Ax o si no B * vA
y C * x. En el primer caso | v | 1 y en el segundo | x |
1, con lo que o v o x no es e.
Ejemplo
Considerar el lenguaje L = {aibj | j = i2}.
Si z L, z = akbk^2, por el lema del bombeo z = uvwxy.
Si v = arbs, vi = (arbs)i y por tanto no pertenece a L.
Igualmente si x = arbs. Las nicas posibilidades son
v = ar y x = as
v = br y x = bs
v = ar y x = bs.
En el primer caso tenemos: uv2wx2y = ak+r+sbk^2
En el segundo caso tenemos: uv2wx2y = akbk^2+r+s
En el tercer caso tenemos: uv2wx2y = ak+(i1)rbk^2+(i1)s
Los cuales no pertenecen a L.
Lema
Sea G = (N, S, S, P) una GIC que no tiene
producciones e y que est en forma normal de
Chomsky. Sea x una cadena de S*. Se puede
determinar, para cada A N y para cada subcadena w
de x, si A * w.
Demostracin. Sea n = | x | y sea wij la subcadena que
comienza en la posicin i y tiene j caracteres.
Probaremos el lema con induccin sobre j.
Si j = 1, entonces A * w si y solo si existe la
produccin A wij esta en P, por tanto se puede
determinar lo enunciado en el lema.
Lema
Ahora supongamos que se cumple para cadenas de
longitud menor que j con j > 1. Observe que A wij si
y solo si A BC para algunos B y C, los cuales B *
wik y C * wk+1,j-k para k entre 1 y j - 1.
Entonces tanto wik como wk+1,j-k tiene longitud menor
que j y se puede determinar si B * wik y si C *
wk+1,j-k.
De lo anterior, si j = n entonces se puede determinar si
S * w1,j = w1,n = x. Es decir si x L(G) para cada x
S*.
Algoritmo CYK (Cocke, Younger y
Kasami)
Sirve para determinar si x L(G).

1. Para cada i = 1, 2, , n, sea


Ni1 = {A | A wi1}
Es decir, Ni1 es el subconjunto de todos los no terminales que producen el
i-simo smbolo de x.
2. Para cada j = 2, 3, , n, hacer lo siguiente:
Para cada i = 1, 2, , n - j + 1, hacer lo siguiente:
a. Iniciar Nij =
b. Para cada k = 1, 2, , j - 1, aadir a Nij todos los no
terminales A para los cuales A BC, con B Nik y C Ni+k,j-k.
3. Si S N1n, entonces x L(G).
Ejemplo de CYK
Sea la gramtica Para la cadena bbab se genera la
siguiente tabla
S AB | BC
j = 2, i = 1..3 y k = 1, Nij Ni+k,jk = N12
A BA | a
N21, N22 N31, N32 N41,
B CC | b
j = 3, i = 1..2 y k = 1..2 Nij Ni+k,jk =
C AB | a N13 N22, N13 N31, N23 N32, N23 N41,
Para la cadena bbab se j = 4, i = 1 y k = 1..3 Nij Ni+k,jk = N14
genera la siguiente tabla N23, N14 N32, N14 N41,
j=1 j=2 j=3 j=4
b
j=1 B B A S, C
b j=2 B A, S S,C
a j=3 A,C S, C
b j=4 B
Demostrar que bba, bab, babba pertenecen al lenguaje anterior
Algunos teoremas
Teorema. Si L1 y L2 son lenguajes independientes del
contexto, entonces L1 L2 es un lenguaje independiente del
contexto.

Teorema. Si L es un lenguaje independiente del contexto,


entonces L* es un lenguaje independiente del contexto.

Teorema. La concatenacin de lenguajes independientes del


contexto es independiente del contexto.

Los lenguajes independientes del contexto no son cerrados


respecto a la interseccin ni el complemento.