You are on page 1of 21

Captulo 3 Autmatas de Pila y Gramticas Independientes del Contexto 3.

1 Introduccin
En el Captulo 2 se vieron los autmatas de estados finitos y su relacin con las expresiones regulares. En este captulo se vern los autmatas de pila y su relacin con las gramticas independientes del contexto. Los autmatas de pila tienen memoria representada en forma de una pila lo que les permite reconocer una clase de lenguajes ms grande: los lenguajes independientes del contexto. Un autmata de pila es una mquina con un nmero finito de estados, una cinta de entrada y una pila. El autmata lee cadenas de smbolos de longitud finita de la cinta de entrada que es infinita1. El comportamiento de la mquina est determinado por el estado en que se encuentra, el smbolo o smbolos en el tope de la pila y el o los smbolos en la cinta de entrada. Para cada estado y dependiendo del tope de la pila, al leer uno o varios smbolos de la cinta de entrada cambia de estado, empila o desempila de la pila y avanza en la cinta de entrada. En la mquina de la figura de abajo, en el tiempo k est leyendo sk y est en el estado i y la pila tiene la el smbolo n en el tope. La cabeza lector nicamente puede avanzar.
1 2 3 4 ....... i....... n

n n-1

...
1

s1

s2

...

sk

sk+1

Estas mquinas tambin pueden usarse para reconocer lenguajes. Es decir, para leer cadenas (secuencias de smbolos) y determinar si pertenecen o no a un lenguaje dado. Tambin sirven para describir el comportamiento de ciertas mquinas.

Es decir, las cadenas son de longitud finita, digamos n, y n puede ser tan grande como se quiera.

3-1

3.2 Autmatas de pila como reconocedores de lenguajes


La definicin formal de un autmata de pila est dada en la Definicin 3.1.

Definicin 3.1. Un autmata de pila es una sxtupla M=(Q,,,qI, F, ) donde:


Q es un conjunto finito de estados es un alfabeto de entrada finito es un alfabeto de pila finito qI Q es el estado inicial F Q es el conjunto de estados finales (Q * *) (Q *) es la relacin de transicin de estados Cmo se usa un autmata de pilas para reconocer cadenas? El autmata comienza en el estado inicial con una secuencia de smbolos por leer. Inicialmente la pila est vaca. En cada instante lee smbolos de la cinta de entrada. Dependiendo de lo que lee, del tope de la pila y del estado en el que se encuentra, cambia de estado avanza en al cinta de entrada, desempila lo que reconoci en la pila y empila smbolos en la pila de acuerdo con la relacin de transicin de estados. Si puede aplicar sucesivamente estas transformaciones y llegar a un punto en el cual ha leido toda la cadena, est en un estado final y la pila est vaca, entonces se dice que el autmata acepta la cadena. Las transiciones se interpretan as: si ((q,, ),(p, )) esto se lee as: "si est en el estado q, leyendo una cadena con prefijo y con en el tope de la pila, avance sobre , desempile , empile y pase al estado p". Al decir que est en el tope quiere decir que si: = 12...n entonces la pila sera:
n n-1

...
1

Cuando es la cadena vaca, , se est diciendo que no importa qu est en la pila. NO QUIERE DECIR

QUE LA PILA ESTA VACIA. De hecho, la notacin de transiciones no permite determinar cuando la pila est vaca. Para esto sera necesario usar un smbolo en el alfabeto de la pila que se use para marcar la base de la pila.

3-2

Si = 12...n al decir que se empila sobre una pila:


n n-1

, la pila quedara:

...
1

De manera anloga, si = entonces se est indicando que no se debe empilar nada, NO QUIERE DECIR QUE EMPILE . Si se mira la pila como una cadena, al decir que est en el tope de la pila, estamos diciendo que la pila es de la forma: para algn . Anlogamente, al empilar sobre una pila , la pila quedara . La transicin descrita arriba, es la transicin general. Hay transiciones ms especficas descritas a continuacin: ((q,,),(p, )) si est en el estado q y la cadena que est leyendo tiene como prefijo entonces (sin

importar lo que est en el tope de la pila), lea , empile y pase al estado p. ((q,, ),(p, )) si est en el estado q y la cadena que est leyendo tiene como prefijo y en el tope de la pila est , entonces lea , desempile y pase al estado p (sin empilar nada). ((q,,),(p, )) si est en el estado q y la cadena que est leyendo tiene como prefijo sin importar la pila, lea , pase a p y no empile nada. ((q,, ),(p, )) si est en el estado q, lee y est en el tope de la pila, pase a p empilando sobre . ((q,, ),(p, )) si est en el estado q, lee y est en el tope de la pila, pase a p dejando en el tope de la pila. Note que en las ltimas dos transiciones debemos volver a empilar ya que al reconocerlo, se desempila. Si en cualquiera de las transiciones mencionadas arriba, es , esto indica que se toma la accin correspondiente sin avanzar sobre la cinta de entrada. El estado general de un autmata de pilas est dado por: el estado en que se encuentra, lo que le falta por leer y la pila. Formalmente, esto se define como configuracin:

Definicin 3.2. La configuracin de un autmata de pilas es una tripleta, (q, , ), con qQ, ,*, * y
donde: q es el estado en el que se encuentra, es la pila y es lo que le falta por leer.

3-3

Interesa definir como pasar de una configuracin a otra.

Definicin 3.3. Dadas dos configuraciones: (q, ,) y (q, , ) si:


= =, = y ((q, , ), (q, )) . Se dice que (q,,) es alcanzable en un paso a partir de (q, , ) y escribimos: (q, , ) (q, , ). Es decir: Para todo * , *, ((q, , ), (q, )) (q, , ) (q,, ) La clausura transitiva de esta relacin da el concepto de ser alcanzable desde entre configuraciones.

Definicin 3.4. Dadas dos configuraciones C y K decimos que K es alcanzable desde C y escribimos C * K
si ocurre alguna de las siguientes condiciones: C=K CK Existe una configuracin C tal que C C y C*K Con la definicin de alcanzable, se define cuando un autmata acepta una cadena. Informalmente, una cadena es aceptada por un autmata de pilas si comienza con la cadena por leer en el estado inicial con la pila vaca y puede llegar a una configuracin con un estado final, sin nada por leer y con la pila vaca.

Definicin 3.5. Dado M=(Q,,,qI,F,) y *, se dice que M acepta a , si existe un estado final f (f F)
tal que (qI, , ) * (f, ,). Note que no es suficiente terminar en un estado final; hay que terminar en un estado final habiendo ledo todo y con la pila vaca. Anlogamente a que con los autmatas finitos, podemos definir el lenguaje reconocido por un autmata de pilas, como el conjunto de todas las cadenas que son aceptadas por dicho autmata. Con el concepto de aceptar una cadena, se define el lenguaje aceptado por un autmata.

Definicin 3.6. Dado M=(Q,,,qI,F,) y definimos el lenguaje aceptado por M, denotado como L(M) as:
L(M)={: * | f F tal que (qI, , )* (f, ,)} Los autmatas de pilas tienen ms poder computacional que los autmatas de estados finitos. Estos pueden reconocer lenguajes que no pueden ser reconocidos por los autmatas finitos. Por ejemplo pueden reconocer el lenguaje : {anbn: n 0}. Hay autmatas determinsticos y no-determinsticos.

3-4

Definicin 3.7. Un autmata de pila determinstico es un autmata de pila para toda configuracin (q, , )
existe a lo ms una configuracin (q, , ) tal que (q, , )(q, , ). A diferencia de lo que ocurre con los autmatas regulares, los autmatas de pila no determinsticos no tienen el mismo poder computacional que los determinsticos. Los ejemplos mostrados en este captulo usan tanto autmatas determinsticos como no determinsticos. Ejemplo 3.1 El autmata determinstico M=({1,2},{a,b}, {a},1, {1,2}, {((1,a,),(1,a)), ((1,b,a),(2, )), ((2,b,a),(2, ))}) reconoce {anbn: n 0}. A continuacin se muestra la ejecucin de la mquina para algunas cadenas de {a,b}*. aaabbb Estado 1 1 1 1 2 2 2 ab Estado 1 1 2 Estado 1 bbb Estado 1 aaabbbb Estado 1 1 1 1 2 2 2 Pila a aa aaa aa a Cadena aaabbb aabbb abbb bbb bb b b Accin aplicar((1,a,),(1,a)) aplicar((1,a,),(1,a)) aplicar((1,a,),(1,a)) aplicar((1,b,a),(2, )) aplicar((2,b,a),(2, )) aplicar((2,b,a),(2, )) falla: no hay regla que aplicar y falta por leer b 3-5 Pila Cadena bbb Accin Falla: no hay regla que aplicar y queda por leer bbb Pila Cadena Accin Acepta: 1 es final Pila a Cadena ab b Accin aplicar((1,a,),(1,a)) aplicar((1,a,),(1,a)) Acepta: 2 es final Pila a aa aaa aa a Cadena aaabbb aabbb abbb bbb bb b aplicar aplicar aplicar aplicar aplicar aplicar acepta: Accin ((1,a,),(1,a)) ((1,a,),(1,a)) ((1,a,),(1,a)) ((1,b,a),(2, )) ((2,b,a),(2, )) ((2,b,a),(2, )) 2 es final

aaabb Estado 1 1 1 1 2 2 Pila a aa aaa aa a Cadena aaabbb aabbb abbb bbb bb Accin aplicar((1,a,),(1,a)) aplicar((1,a,),(1,a)) aplicar((1,a,),(1,a)) aplicar((1,b,a),(2, )) aplicar((2,b,a),(2, )) Falla: pues ley todo, pero la pila no est vaca.

La notacin mostrada para describir autmatas puede resultar un poco engorrosa. Explicamos una notacin diagramtica para describir estos autmatas, Los estados, el estado inicial y los estados finales se representan igual que en los autmatas de estados finitos. Lo que vara son las transiciones. Estas se denotan como se muestra abajo. ((q,, ),(p, )) , (Si reconoce en el tope, desempile y empile )
q
, changeTop(,)

((q,, ),(p, )) (Si reconoce en el tope, desempile )


q
,pop ()

((q,, ),(p, )) , (Si reconoce en el tope empile sobre )


q
, p u sh O n ( , )

((q,, ),(p, ))

(empile sin importar que hay en la pila)


q
, p u sh ( )

((q,, ),(p, )) (Si reconoce en el tope djelo en el tope)


q
, s k ip ( )

((q,, ),(p, )) (Ignore la pila)


q
, ig n o r e

3-6

Estas transiciones las abreviaremos como se muestra abajo, cuando se quiera hacer referencia a ellas en el texto y no en un dibujo de un autmata.

q ,changeTop (,) p q pop() p q ,pushOn(,) p q ,push () p q ,skip () p q ,ignore p

EJERCICIOS
1. Verifique que todas las transiciones ms comunes descritas arriba pueden ser descritas por medio de las instrucciones changeTop, pop, pushOn, push, skip, e ignore, 2. Verifique que las instrucciones ignore y pushOn son innecesarias podran simularse con otras

instrucciones. Ayuda: Debe reemplazar cada instruccin por || instrucciones. 3. Se puede Podramos hacer modelar todo con una sola instruccin eliminando las restricciones: , ? Justifique su respuesta. Ejemplo 3.1a El ejemplo mostrado arriba: {anbn: n 0} y M = ({1,2},{a,b},{a},1,{1,2},{((1,a,),(1,a)), ((1,b,a),(2, )), ((2,b,a),(2, )) }) se dibujara as:
a,push(a) b,pop(a) b,pop(a)

A continuacin se muestran ms ejemplos: Ejemplo 3.2 Para el lenguaje {a3nbn: n 0} el autmata determinstico M =

({1,2},{a,b},{a},1,{1,2},{((1,a,),(1,a)), ((1,b,aaa),(2, )), ((2,b,aaa),(2, )) }) reconoce el lenguaje y se dibujara as:


a,push(a) b,pop(aaa) b,pop(aaa)

3-7

Ejemplo 3.3 El siguiente autmata determinstico reconoce las cadenas sobre { {,},[,],(,) } en los que los parntesis estn balanceados.
(,push(( ) [,push([ ) {,push({ )

1
},pop({ )

),pop(( )

],pop([ )

Ejemplo 3.4 El siguiente autmata no-determinstico reconoce las cadenas sobre palndromos.
a,push(a) b,push(b) a,pop(a) b,pop(b) b,ignore a,ignore b,pop(b) a,pop(a)

{a, b}

que son

Ejemplo 3.5 El siguiente autmata no-determinstico reconoce las cadenas sobre palndromos de longitud par.
a,push(a) b,push(b) b,pop(b) a,pop(a) b,pop(b) a,pop(a)

{a, b}

que son

Ejemplo 3.6 El siguiente autmata determinstico reconoce el lenguaje {cR: {a,b}*}


a,push(a) b,push(b) c,ignore b,pop(b) a,pop(a)

EJERCICIOS 1. Muestre el seguimiento de los autmatas de arriba para una cadena del lenguaje de longitud 4 y una cadena que no est en el lenguaje de longitud 5. 2. Describa autmatas de pilas (determinsticos o no-determinsticos) para reconocer los siguientes lenguajes: a. { anbn: n > 0} b. { anbm: n m 0}

3-8

c. { anbm: n m > 0} d. { anbm: n > m 0} e. { anbm: n > m > 0} f. { anbm: m n 0} g. { anbm: m n > 0} h. { anbm: m > n 0} i. j. { anbm: m > n > 0} { an=bn: n 0} { an>bm: n m 0} { anbm: m n 0}

3. *** Enriquezca la definicin de autmata de pilas para que de respuestas: a. en los estados b. en las transiciones 4. Describa un autmata de pila que reconozca el lenguaje de las palabras palndromes sobre el alfabeto: {a, A, b, B} donde no se toman en cuenta las diferencias por mayscula y minscula. Ejemplos de palabras en este lenguaje seran: aaAAbbBbaaaa aaAA abbBbA 5. Describa un autmata de pilas que reconozca el siguiente lenguaje: L = {a} { () : L } { + : L } 6. Describa un autmata de pilas que reconozca el siguiente lenguaje: L = {a} { f(1, ..., n) : n > 0, 0 i n, i L } . Ejemplos de palabras en este lenguaje a f(a) f(a,a,a) f(f(a,a),f(a),a)

7. Modifique el autmata que reconoce parntesis balanceados para que dentro de los parntesis siempre deba

haber o secuencia de a's separadas por comas o secuencias de expresiones de parntesis y a's separadas por comas. Ejemplos de palabras en este lenguaje: a (a,a,a) ([a,{(a,a),a}],a)

3.3 Autmatas y Gramticas


Los autmatas pila reconocen la misma clase de lenguajes generados por las gramticas independientes del contexto. En esta seccin veremos algoritmos como dada una gramtica, podemos construir un autmata de pilas que reconozca el lenguaje generado por la gramtica. Tambin veremos como construir una gramtica que genere el lenguaje reconocido por un autmata dado. Se recomienda repasar las definiciones de gramticas dadas en el Captulo 1 antes de continuar leyendo esta seccin.

3-9

3.3.1 De Autmatas a Gramticas


Primero se da la definicin de un autmata de pilas simplificado. En este tipo de autmata de pilas simplificado es aquel en que las instrucciones pueden ser solamente de una de las siguientes formas: p a,push(c) r p a,pop(c) r Con a { } y c Formalmente esto se define as:

Definicin 3.8. Un autmata de pila simplificado es una sxtupla M=(Q,,,qI,qf,) donde :


Q es un conjunto finito de estados es un alfabeto de entrada finito es un alfabeto de pila qI Q es el estado inicial qf Q es el estado final (Q ({ }) ({ })) (Q ( { })) es la relacin de transicin de estados, y se cumple que: ((q, a, b), (p, c)) ( b = c ) Note que los autmatas simplificados no necesariamente son determinsticos. La clase de los lenguajes reconocidos por los autmatas de pila simplificados es exactamente igual a la clase de lenguajes reconocidos por los autmatas de pila. Para demostrar esto habra que demostrar que dado un autmata de pilas es posible construir un autmata de pilas simplificado y viceversa. Es fcil ver que todo autmata simplificado es un autmata de pilas. La reciproca se deja como ejercicio. Ayuda: hay que agregar estados. Dado un autmata de pilas simplificado (no necesariamente determinstico): M=(Q,,,s,f,) se puede construir una gramtica G=(N,T,S,P) tal que L(M)=L(G) de la siguiente forma: 1. Hay un nterminal por cada elemento en QQ para facilidad de expresin se definen as: N = {Apq | pQ, q Q} 2. Los terminales son el alfabeto de entrada: T= 3. El smbolo distinguido, S es: Asf 4. La lista de producciones se construye as: a. Por cada q Q agregue la produccin: Aqq : b. Por cada pQ, q Q, r Q agregue la produccin: ApqApr Arq c. Si se tiene que p a,push(c) r y adems que tb,pop(c) q agregue la produccin: ApqaArtb
Es decir:

3-10

P = {ApqaArtb : a,b { }, ((p,a,),(r,c)) , ((t,b,c),(q,)) } {ApqApr Arq: pQ, q Q, r Q} {Aqq : q Q} Es posible demostrar que para cualquier autmata M, al generar la gramtica con estas reglas, L(G) = L(M). Esto, sin embargo, queda fuera del propsito de estas notas. Ejemplo 3.7 Recuerde el autmata de arriba que reconoce{ anbn: n 0}
a,push(a) b,pop(a)
1 2

b,pop(a)

An cuando no las reglas s son de la forma correcta, se tienen 2 estados finales. Se arregla el autmata as:
a,push(a) b,pop(a)
1 2

b,pop(a)

,ignore

El problema es que toda transicin debe empilar o desempilar. Entonces se hace lo siguiente: Se agrega un smbolo al alfabeto de la pila, que es empilado al pasar del estado 1 al 2. Este debe ser desempilado.
,pop($) a,push(a) b,pop(a)
1 2

b,pop(a)

,push($)

Dadas las reglas, se pueden construir fcilmente los conjuntos de terminales, de los no-terminales y se puede determinar cul es el smbolo distinguido. N = {A11, A12, A21, A22} T = {a,b} S= A12

Ahora se empiezan a aplicar las reglas para obtener las producciones. De la regla (a) se obtienen las siguientes reglas: A11 3-11

A22

Aplicando la regla (b), se agregan las siguientes producciones:

1 1 1 1 2 2 2 2 Ahora la regla 3:

1 1 2 2 1 1 2 2

1 2 1 2 1 2 1 2

Produccion agregada ApqApr Arq A11A11 A11 A11A12 A21 A12A11 A12 A12A12 A22 A21A21 A11 A21A22 A21 A22A21 A12 A22A22 A22

1 a,push(a) 1 y adems que 1b,pop(a) 2,entonces se agrega A12 aA11b 1 a,push(a) 1 y adems que 2b,pop(a) 2,entonces se agrega: A12 aA12b 1 ,push($) 2 y adems que 2,pop($) 2,entonces se agrega: A12 A22 Finalmente, la producciones seran las siguientes: A11 A11A11 A11 A11A12 A21 A12A11 A12 A12A12 A22 A12 A22 A12 aA11b A12 aA12b A21A21 A11 A21A22 A21 A22A21 A12 A22A22 A22 A22

Por inspeccin podemos simplificar esta gramtica. Se ve que el smbolo A21 es intil, ya que todas las reglas que lo tienen en la parte izquierda lo tienen tambin en la parte derecha. Esto hace que una vez se genera este smbolo, nunca puede eliminarse. Por lo tanto, se eliminan todas la reglas que tienen este smbolo dejando la gramtica as:

3-12

A11 A11A11 A11 A12A11 A12 A12A12 A22 A12 A22

A12 aA11b A12 aA12b A22A22 A22 A22

Ahora nos damos cuenta que los smbolos A22 y A11 slo puede generar . Podemos entonces cambiar estos smbolos por cuando aparecen en la parte derecha de una regla y eliminar las reglas que los tienen en la parte izquierda dejando la gramtica as: A12A12 A12A12 A12 A12 ab A12 aA12b A22 A22

Las primeras dos reglas son intiles y la cuarta y la quinta nunca se usarn debido a que A22 nunca aparece en la parte derecha de una regla. Entonces, la gramtica queda: A12 A12 ab A12 aA12b Ahora se mostrara que si una palabra est en el lenguaje, entonces es generada por la gramtica. Faltara demostrar que si no est en el lenguaje reconocido por el autmata entonces no es generada por la gramtica. Esta demostracin se omite. La demostracin se hace inductivamente. Primero se muestra que se puede generar y que se puede generar ab; luego se muestra que si se puede generar akbk entonces e puede generar ak+1bk+1.

3-13

Recuerde que demostrar que la gramtica genera una cadena, , es demostrar que S * . Como el smbolo distinguido de esta gramtica es A12, en este caso se debe demostrar que A12*2. 1. A12* A12 aplicamos A12 2. A12 * ab A12 aplicamos A12 ab ab 3. Si A12 * akbk entonces A12 *ak+1bk+1. Hiptesis de induccin: A12 * akbk A12 aplicamos A12 aA12b a A12b * hiptesis de induccin aakbkb = notacin de cadenas ak+1bk+1

3.3.2 De Gramticas a Autmatas


En esta seccin se muestra como construir autmatas no determinsticos que reconocen el lenguaje generado por una gramtica dada. Se construyen dos tipos de autmatas uno para hacer anlisis descendente y otro para hacer anlisis ascendente. En el anlisis descendente comenzamos con el smbolo distinguido para generar las cadenas del lenguaje, en el anlisis ascendente se parte de la cadena para llegar al smbolo distinguido. Vindolo en trminos del rbol de sintaxis en el anlisis descendente comenzamos por la raz y llegamos a las hojas. En el ascendente, comenzamos por las hojas para llegar a la raz. El proceso de construccin de los autmatas se har a travs de un ejemplo. La siguiente gramtica reconoce el lenguaje { anbn: n 0}: ({A},{a, b},A,{ A ,A aAb}). El conjunto de terminales es {A}, el de no-terminales en {a, b}, el smbolo distinguido es A y las producciones son las dos producciones de arriba.

Note que en este caso el smbolo no se est usando como implicacin lgica; se usa como el concepto de ser deivable

en un paso, visto en el Captulo 1.

3-14

Autmata descendente: El autmata descendente correspondiente a esta gramtica se construye as: El autmata tiene tres estados: s, q y f, donde s es el estado inicial y f es el nico estado final. En el estado q, se realizaran todas las acciones necesarias para reconocer el lenguaje. El alfabeto de entrada es el conjunto de smbolos terminales. El alfabeto de pila es la unin de los terminales y los no terminales agregando un smbolo nuevo $3. Este smbolo se usar para marcar la base de la pila. Ahora las transiciones: la idea es que este autmata comience con el smbolo distinguido en la pila y aplique reglas de produccin para reconocer las cadenas del leguaje. Por o tanto: para comenzar ponemos el smbolo distinguido en la pila. Agregamos una transicin del estado inicial a q, y se empila $ y el smbolo distinguido: s ,push($A) q Como el autmata acepta con la pila vaca, lo ltimo que se debe hacer es desempilar la marca de base de pila. Agregamos, entonces, una transicin de q el estado interno al estado final f donde se desempila el smbolo $. q,pop($) f Ahora por cada regla de produccin: L agregar la regla: q,pop(L) q En este caso particular se agregara la siguiente transicin. q,pop(A) q Por cada regla de produccin: L con agregar la regla: q,ChangeTop(L, R) q En este caso particular se agregara la siguiente transicin: q,changeTop(A,bAa) q 4 Finalmente, la parte de reconocer: por cada smbolo t de los terminales, , agregamos la siguiente transicin: qt,pop(t) q. En este caso particular se agregaran las siguientes transiciones. qa,pop(a) q y qb,pop(b) q

que es un smbolo que no existe en los terminales ni en los no terminales Note que la regla era A aAb y empilamos bAa porque se empila el reverso de la parte derecha de la regla.

3-15

El autmata quedara as:


,pop(A) ,changeTop(A,bAa)

,push($A)

,pop($)

a,pop(a) b,pop(b)

Su funcionamiento para dos ejemplos (una cadena en el lenguaje y una que no est en el lenguaje se define as)
aaabbb

Estado s q q q q q q q q q q q f aaabb Estado


s q q q q q q q q q q

Pila $A $bAa $bA $bbAa $bbA $bbbAa $bbbA $bbb $bb $b $ Pila
$A $bAa $bA $bbAa $bbA $bbbAa $bbbA $bbb $bb $b

Cadena aaabbb aaabbb aaabbb aabbb aabbb abbb abbb bbb bbb bb b

Accin ,push($A) q ,changeTop(A,bAa) q a,pop(a) q ,changeTop(A,bAa) q a,pop(a) q ,changeTop(A,bAa) q a,pop(a) q ,pop(A) q b,pop(b) q b,pop(b) q b,pop(b) q ,pop($) f ACEPTA Accin

Cadena

aaabb ,push($A) q aaabb ,changeTop(A,bAa) q aaabb a,pop(a) q aabb ,changeTop(A,bAa) q aabb a,pop(a) q abb ,changeTop(A,bAa) q abb a,pop(a) q bb ,pop(A) q bb b,pop(b) q b b,pop(b) q

Falla: no aplicables

hay

reglas

El proceso descrito arriba para construir el autmata descendente a partir de una gramtica independiente del contexto se define formalmente a continuacin. 3-16

Dada una gramtica G=(N, , S, P) construimos el autmata que reconoce L(G) as: M = ({s,q,f}, , N {$},s,{f},) con: = {(s, , ), (q,$S)} {(q, , $), (f, )} {(q, , ), (q, ): }{(q, , A), (q, R): A }. El autmata generado reconoce la palabras en L(G) usando anlisis descendente. Autmatas ascendentes El autmata descendente correspondiente a esta gramtica se construye as: El autmata tambin tiene tres estados: s, q y f, donde s es el estado inicial y f es el nico estado final. En el estado q, se realizaran todas las acciones necesarias para reconocer el lenguaje. El alfabeto de entrada es el conjunto de smbolos terminales. El alfabeto de pila es la unin de los terminales y los no terminales agregando un smbolo nuevo $5. Este smbolo se usar para marcar la base de la pila. Ahora las transiciones: la idea es que de este autmata comience trate de obtener el smbolo distinguido. Por lo tanto: Si en la pila est $S en el tope donde S es smbolo distinguido, pasamos a f y aceptamos (siempre y cuando, claro, se haya terminado de leer la cadena). Agregamos, entonces, una transicin de q el estado interno al estado final f donde se desempila $S. q,pop($S) f Para comenzar ponemos el smbolo $ en la pila. Agregamos una transicin del estado inicial a q, y se empila $: s ,push($) q Ahora por cada regla de produccin: L agregar la regla: q,push(L) q : Lo que esto quiere decir es que puede ser L. En este caso particular se agregara la siguiente transicin. q,push(A) q Por cada regla de produccin: L con agregar la regla: q,ChangeTop(,L) q En este caso particular se agregara la siguiente transicin: q,changeTop(aAb, A) q

que es un smbolo que no existe en los terminales ni en los no terminales

3-17

Finalmente, la parte de leer: por cada smbolo t de los terminales, , agregamos la siguiente transicin: qt,push(t) q. En este caso particular se agregaran las siguientes transiciones. qa,push(a) q y qb,push(b) q

El autmata quedara as:


,push(A) ,changeTop(aAb,A)

,push($)

,pop($A )

a,push (a) b,push (b)

Su funcionamiento para los dos mismos ejemplos de la seccin anterior se muestra a continuacin.
aaabbb Estado Pila Cadena Accin

s q q q q q q q q q q q f
aaabb

$ $a $aa $aaa $aaaA $aaaAb $aaA $aaAb $aA $aAb $A Pila $ $a $aa $aaa $aaaA $aaaAb $aaA $aaAb $aA

aaabbb aaabbb aabbb abbb bbb bbb bb bb b b b

,push($) q a,push(a) q a,push(a) q a,push(a) q ,push(A) q b,push(b) q ,changeTop(aAb,A) q b,push(b) q ,changeTop(aAb,A) q b,push(b) q ,changeTop(aAb,A) q ,pop($A) f ACEPTA

Estado s q q q q q q q q q

Cadena aaabb aaabb aabb abb bb bb b b

Accin ,push($) q a,push(a) q a,push(a) q a,push(a) q ,push(A) q b,push(b) q ,changeTop(aAb,A) q b,push(b) q ,changeTop(aAb,A) q Falla: no hay regla aplicable 3-18

Formalmente el proceso es el siguiente: Dada una gramtica G=(N, , S, P) se construye M para que L(M)=L(G) as: M = ({s,q,f}, , N {$},s,{f},) con = {(s, , ), (q,$)} {(q, , $S), (f, )} {(q, , ), (q, ): } {(q, , ), (q, A): A } Este adems analiza la cadena en forma ascendente. A continuacin se muestra otro ejemplo.
La siguiente gramtica genera el lenguaje de las expresiones de sumas de a's con asociando a la izquierda:

E E +T

ET Ta
,changeTop(T,a) ,changeTop(E,T+E) ,changeTop(E,T)

El autmata descendente es:

,push($E)

,pop($)

a,pop(a) +,pop(+)

El seguimiento para la cadena a+a+a se muestra a continuacin: Estado s q q q q q q q q q q q q f Pila $E $T+E $T+T+E $ T+T+T $T+T+a $T+T+ $T+T $T+a $T+ $T $a $ Cadena a+a+a a+a+a a+a+a a+a+a a+a+a a+a+a +a+a a+a a+a +a a a Accin ,push($E) q ,changeTop(E,T+E) q ,changeTop(E,T+E) q ,changeTop(E,T) q ,changeTop(T,a) q a,pop(a) q +,pop(+) q ,changeTop(T,a) q a,pop(a) q +,pop(+) q ,changeTop(T,a) q ,pop(a) q ,pop($) f ACEPTA

Note que la derivacin sugerida por este seguimiento es: EE+TE+T+TT+T+Ta+T+Ta+a+Ta+a+a

3-19

El autmata ascendente se muestra a continuacin:

,changeTop(a,T) ,changeTop(E+T, E) ,changeTop(T,E)

,push($)

,pop($E)

a,push (a) +,push (+)

El seguimiento para la cadena a+a+a es:


Estado Pila Cadena Accin

s q q q q q q q q q q q q f

$ $a $T $ E $E+ $E+a $E+T $E $E+ $E+a $E+T $E

a+a+a a+a+a +a+a +a+a +a+a a+a +a +a +a a

,push($) q a,push(a) q ,changeTop(a,T) q ,changeTop(T,E) q +,push(+) q a,push(a) q ,changeTop(a,T) q ,changeTop(E+T,E) q +,push(+) q a,push(a) q ,changeTop(a,T) q ,changeTop(E+T,E) q ,pop($E) f ACEPTA

En este caso, la derivacin correspondiente es: EE+TE+aE+T+aE+a+aT+a+aa+a+a Cuando se est haciendo seguimiento de autmatas ascendentes a veces se usa otra notacin. En lugar de decir a, push(a), se dice shift. Esto causa que el primer smbolo de la cadena de entrada pase a la pila. En lugar de decir changeTop(E+T,E) , se dice, reduce E E+T. No se empila $ al principio; en lugar de esto se le agrega $ al final de la cadena. Al estar E en el tope de la pila y $ en la entrada, se acepta con la instruccin ACCEPT. A veces ni se dibuja el autmata. Ejemplo 3.8 La siguiente gramtica genera el lenguaje de expresiones de la forma a o f(exp, ..., exp) Ea E f( L ) L E L L,E

El seguimiento para f(f(a,a),a) sera:

3-20

Pila f f( f(f f(f( f(f(a f(f(E f(f(L f(f(L, f(f(L,a f(f(L,E f(f(L f(f(L) f(E f(L f(L, f(L,a f(L,E f(L f(L) E EJERCICIOS

Cadena f(f(a,a),a)$ (f(a,a),a)$ f(a,a),a)$ (a,a),a)$ a,a),a)$ ,a),a)$ ,a),a)$ ,a),a)$ a),a)$ ),a)$ ),a)$ ),a)$ ,a)$ ,a)$ ,a)$ a)$ )$ )$ )$ $ $

Accin shift shift shift shift shift reduce reduce shift shift reduce reduce shift reduce reduce shift shift reduce reduce shift reduce ACCEPT

Ea LE

Ea LL,E Ef(L) LE

Ea LL,E Ef(L)

1. Construya los autmatas descendentes y ascendentes para las siguientes gramticas 2. Sin construir el autmata ascendente muestre el seguimiento del reconocimiento de la cadena a+a*(a+a) para la gramtica: (El smbolo distinguido es E u los terminales son a.+.(.) E E +T ET TT*F TF Fa F (E)

3-21

You might also like