Unidad temática iv

26
Unidad Temática IV Normalización de Gramáticas

Transcript of Unidad temática iv

Unidad Temática IV

Normalización de Gramáticas

4.1 Gramáticas Libres de Contexto

Las gramáticas libres de contexto generan lenguajes aceptados por

Autómatas de Pila

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 xn yn donde n es un número entero positivo cualquiera.

• Esto significa que este lenguaje no es un lenguaje regular.

Los Autómatas de Pila

• No se sujetan a esta restricción, es decir, si aceptan el lenguaje xn yn

• 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.

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.

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.

Ejemplo de Gleen Brookshear 1. <Frase> < sujeto> <predicado> <punto>

2. <Sujeto> <sustantivo>

3. <sustantivo> Maria

4. <sustantivo> Juan

5. <predicado> <verbo intransitivo>

6. <predicado> <verbo transitivo> <objeto>

7. <verbo intransitivo> patinar

8. <verbo transitivo> golpear

9. <verbo transitivo> quiere

10. <objeto> a <sustantivo>

11. <punto> .

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.”

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.

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.”?.

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

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).

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.

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

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.

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.

El árbol de derivación para esta cadena es:

s

z M N z

a M a b N b

z z

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.

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”

1

1

3

0

2

0

1 1

0

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:

1, λ; λ

1, λ; λ

3

0, λ; λ

2

0, λ; λ

1 1, λ; λ

0, λ; λ

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.

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.

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:

Para la transición (1, 0,λ; 1, λ) <1, λ, 2> 1 <2, λ, 2> <2, λ, 2>

< 1, λ, 1> 0 <1, λ, 1> <1, λ, 1> <1, λ, 2> 1 <2, λ, 3> <3, λ, 2>

<1, λ, 1> 0 <1 , λ, 2> <2, λ, 1> <1, λ, 3> 1<2, λ, 1> <1, λ, 3>

<1, λ, 1 > 0 < 1, λ, 3> <3, λ, 1> <1, λ, 3> 1<2, λ, 2> <1, λ, 3>

<1, λ, 2> 0 < 1, λ, 1> <1, λ, 2> <1, λ, 3> 1<2, λ, 2> <1, λ, 3>

<1, λ, 2> 0 <1, λ, 2> <2, λ, 2> para la transición (2,0, λ; λ,2)

<1, λ, 2> 0 <1, λ, 3> <3, λ, 2> <2, λ, 1> 0 <2, λ, 1> <1, λ, 1>

<1, λ, 3> 0 <1, λ, 1> <1, λ, 3> <2, λ, 1> 0<2, λ, 2> <2, λ, 1>

< 1, λ, 3> 0 <1, λ, 2> <1, λ, 3> <2, λ, 1> 0 <2, λ, 3> <3, λ, 1>

< 1, λ, 3 > 0 <1, λ, 3> <3, λ, 3> <2, λ, 2> 0 <2, λ, 1> <1, λ, 2>

Para la transición (1, 1, λ; 2, λ) <2, λ, 2> 0<2, λ, 2> <2, λ, 2>

<1, λ, 1 > 1 <2, λ, 1> <1, λ, 1> <2, λ, 2> 0<2, λ, 3> <3, λ, 2>

<1, λ, 1> 1 <2 , λ, 2> <2, λ, 1> <2, λ, 3> 0<2, λ, 1> <1, λ, 3>

<1, λ, 1> 1 <2, λ, 3> <3, λ, 1> <2, λ, 3> 0<2, λ, 2> <2, λ,3>

< 1, λ, 2> 1<2, λ, 1> <1, λ, 2> <3, λ, 3> 0<2, λ, 3> <3, λ,3>

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.

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.