2. 4.1 Gramáticas Libres de Contexto
Las gramáticas libres de contexto
generan lenguajes aceptados por
Autómatas de Pila
3. Antecedentes
• Hemos dicho que los Autómatas Finitos reconocen los
lenguajes generados por las gramáticas llamadas
regulares, lenguajes que también reciben el nombre de
regulares.
• Estos autómatas se asocian con los Analizadores Léxicos.
• Tienen entre sus limitaciones ser incapaces de reconocer
el lenguaje x n y n donde n es un número entero positivo
cualquiera.
• Esto significa que este lenguaje no es un lenguaje regular.
4. Los Autómatas de Pila
• No se sujetan a esta restricción, es decir, si aceptan el
lenguaje x n y n
• Se asocian a las gramáticas denominadas “libres de
contexto” capaces de generar lenguajes entre los
cuales se encuentra el arriba mencionado.
• A diferencia de los Autómatas Finitos carentes de
memoria externa, los autómatas de pila reciben ese
nombre porque tienen una pila como memoria
externa.
5. Las gramáticas libres de contexto
• Se diferencían de las gramáticas regulares porque el
lado derecho de sus reglas de reescritura pueden
contener cualquier número de terminales y de no
terminales en el orden que sea.
• Pero al igual que en las gramáticas regulares se
mantiene la restricción de que en el lado izquierdo
de las reglas de reescritura debe existir solamente
una no terminal.
6. 4.1.1 Conceptos Básicos relacionados
con gramáticas
• Hemos dicho también que una gramática proporciona
reglas para generar un lenguaje. Estas reglas se llaman
“reglas de reescritura, de producción o de derivación” y
se forman con elementos llamados “terminales” y “no
terminales”, sólo los “no terminales” pueden generar
nuevas reglas.
• Se puede definir como una cuaterna (V,T,S,R) donde:
V = Conjunto finito de no terminales.
T= Conjunto finito de terminales.
S= Símbolo inicial (elemento de V).
R= Conjunto de reglas de reescritura.
8. El ejemplo anterior es de una gramática
• Regular, excepto por la primera regla de reescritura.
• Libre de Contexto.
• Cuyas reglas pueden formar frases como:
“Juan quiere a María.”
“María golpea a Juan.”
“Juan golpea a Juan.”
“María quiere a María.”
“María quiere patinar.”
y otras. Pero no se puede formar la frase
“Juan no quiere patinar.”
9. Y que además
• Tiene sus no terminales entre paréntesis
rectangulares y sus terminales sin paréntesis.
• Tiene como símbolo inicial la no terminal <frase>
• Puede considerarse una gramática subconjunto de la
gramática española.
• El alfabeto de las reglas que contiene, y del lenguaje
que genera, incluye todos los símbolos que forman
las terminales y las no terminales de esta gramática.
10. Preguntas del ejemplo para ejercicio:
1. ¿Qué significado tiene el hecho de que la gramática
ejemplo es regular, excepto por la regla 1 y es de
contexto libre?.
2. ¿Cómo se puede obtener la frase “Juan quiere a
María.”?.
3. ¿Qué cambios se tendrían que hacer en las reglas
de reescritura de esta gramática para que se
pudiera generar la frase “Juan no quiere ir a
patinar.”?.
11. Otro ejemplo de Brookshear
• La gramática
S XSZ
S Y
Y yY
Y λ
X x
Z z
Puede generarse la cadena xyz mediante las
siguientes derivaciones:
S XSZ xSZ xYZ xyYZ xyZ xyz
12. Preguntas del ejemplo para el ejercicio
1. ¿Cuáles son los elementos de la gramática
ejemplo?.
2. ¿Es ésta una gramática regular?. ¿es libre de
contexto?
3. ¿Qué otras cadenas serían generadas por la
gramática?. (cómo se aplicarían las reglas para
generarlas).
13. 4.1.2 Árboles de derivación y
derivación por derecha e izquierda
• Hasta ahora se han aplicado reglas de manera
que la no terminal que se sustituye es la que
se encuentra más a la izquierda de la
correspondiente regla.
• Esto se llama “derivación por la izquierda”.
• También podría realizarse una “derivación por
la derecha”.
• Como caso tomemos el segundo ejemplo de
Brookshear e intentemos obtener la cadena
xyz mediante una derivación por la derecha.
14. Del segundo ejemplo decimos que:
La gramática
S XSZ
S Y
Y yY
Y λ
X x
Z z
Puede generar la cadena xyz mediante las siguientes
derivaciones por la derecha:
S XSZ XSz XYz Xy Yz Xyz xyz
15. Un árbol de derivación
• Tiene como nodos las terminales y las no terminales
de la gramática.
• El nodo raíz es el símbolo de inicio.
• Los hijos son los símbolos que en la derivación
reemplazan al no terminal padre.
• Las hojas son las terminales.
16. Un tercer ejemplo de Brookshear
• Sea la gramática independiente del contexto:
S zMNz
M aMa
M z
N bNb
N z
que genera el lenguaje zan zanbmzbmz, siendo n y m
números naturales al cual pertenece la cadena
zazabzbz.
17. El árbol de derivación para esta cadena es:
s
z M N z
a M a b N b
z z
18. Ejercicio para el tercer ejemplo
1. Verifica que el árbol de derivación efectivamente
permita obtener la cadena zazabzbz. Si es así
construye un árbol para la cadena zaazaabzbz.
2. ¿Mediante esta gramática se podría obtener la
cadena zaazaaabbbzbbz? Si es posible construye el
correspondiente árbol de derivación, si no es posible
di porqué no.
3. Construye una gramática que genere cadenas
binarias que contengan cualquier cantidad, entera
no negativa, de pares de unos. Luego elabora un
árbol de derivación para la cadena 01101001.
19. Solución al ejercicio 3 del tercer ejemplo:
Primero representamos el diagrama de transición
de un autómata que acepte el lenguaje “pares de
unos”
0
0
0
1
1
1 2 3
1
20. El autómata diseñado
Es un autómata finito (Q, ∑ , q0, δ. F) con
transiciones que puede convertirse en
un autómata de pila (Q, ∑ , Г, q0, δ. F) con
transiciones δ: Q x ( ∑ U λ) Q x Г* siendo Г el
alfabeto de pila.
El autómata de pila equivalente, suponiendo una
pila conteniendo sólo la cadena vacía λ, se puede
representar de la siguiente manera:
21. 0, λ; λ 0, λ; λ
0, λ; λ
1, λ; λ
1, λ; λ
1 2 3
1, λ; λ
La transición (0, λ; λ) en el estado 1 (al igual que en los
estados 2 y 3)significa que cuando la cabeza lectora de la
máquina lee un 0 en la cinta de entrada, se extrae λ
(cadena vacía) de la cima de la pila y se coloca λ en la
cima de la misma pila. Nótese que, si en lugar de λ
hubiese otros símbolos de ∑ , podría extraerse e
insertarse cualquier símbolo del alfabeto de pila de
manera que al final se altere su contenido.
22. Asumiendo como válido
El diagrama de transiciones del autómata de pila (M) , puede
obtenerse la correspondiente gramática independiente del
contexto mediante el algoritmo siguiente:
1. Para cada estado de aceptación f de M, forme la regla de
reescritura S < q0, λ, f).
2. Para cada estado p en M forme la regla de reescritura
<p, λ, p> λ.
3. Para cada transición (p, x, y; q, z), con y ≠ λ genere una regla
de reescritura <p, y, r> x <q, z, r> para cada estado r de M.
4. Para cada transición de la forma (p, x, λ; q, z), genere todas
las reglas de reescritura de la forma <p, w, r> x <q, z, k>
<k, w, r>, donde w es un símbolo de pila o λ, mientras que k y
r (que pueden ser iguales) son estados de M.
23. Aplicando el algoritmo
1. Como sólo el estado 3 es de aceptación:
S < 1, λ, 3>
2. Para cada uno de los tres estados
< 1, λ, 1> λ
<2, λ, 2> λ
<3, λ, 3> λ
3. No existen transiciones (p, x, y; q, z), con y ≠ λ
4. Se establece la regla <p, w, r> x <q, z, k> <k, w, r>, donde
w = { λ }; k = 1,2,3; r = 1, 2, 3
Por lo que al realizar este 4to paso se tendrán las siguientes
reglas de reescritura:
25. Dado que w asume sólo un valor ( λ ) , mientras que r
y k asumen tres (1, 2 y 3 respectivamente), cada
transición genera 9 reglas de reescritura (3 x 3 x 1),
como ha sucedido en las tres transiciones cuyas
reglas generadas se muestran en la diapositiva
anterior. Vale la pena que concluyas de escribir las
reglas de reescritura que generan las otras cuatro
restricciones.
26. 4.1.3 Recursividad por la derecha y por
la izquierda
• Puede observarse que las derivaciones pueden
repetirse sustituciones cíclicas y recursivas de manera
que existen casos en que debemos ayudarnos de
reglas lambda (épsilon) para concluir. De la misma
manera se observa esto en los árboles como en los
procesos de derivación por la izquierda o por la
derecha.
• Esta propiedad de recursividad en la derivación da
origen al llamado “lema de bombeo” que
posteriormente será utilizado.