Documentos de Académico
Documentos de Profesional
Documentos de Cultura
4.1.1
Un autmata de pila es una sptupla M=(Q,,,q0,,F) donde: Q= conjunto finito de estados = alfabeto de entrada = alfabeto de pila q0Q estado inicial
Inmaculada Luengo
4. Autmatas de Pila
es decir la forma genrica de la imagen de una terna ser (q , a , Z ) = {(r1 , 1 ),L , (rk , k ); ri Q , i *} Segn esta definicin un AP es en genral no determinista. Una transicin es una orden que permite, en el caso de que el autmata se encontrara en estado q, en la cinta de entrada estuviera leyendo el smbolo a y el smbolo de la cima de la pila fuera Z, transitar a cualquiera de los estados ri y, extrayendo el smbolo Z de la pila, sustituirlo por la correspondiente palabra i. Para visualizar un autmata de pila podemos imaginar los estados y la cinta de entrada como en los autmatas finitos, pero ahora est la pila que podemos imaginar como una cinta interna (que siempre representamos como una columna) donde se van insertando o extrayendo los smbolos de pila segn lo vayan mandando las transiciones. La pila hace el papel de una memoria rudimentaria: sobre ella se escriben palabras y se van extrayendo smbolo a smbolo. Debe quedar claro el modo en que entendemos que se insertan las palabras en la pila: Si = a1.ak es una palabra de longitud k y queremos insertarla en la pila de un AP, entendemos que el smbolo que queda en la cima de la pila es a1. Volveremos sobre ello ms adelante. Lo que no debemos ahora es tratar de visualizar una transicin no determinista porque cada posibilidad lleva aparejado un estado diferente de la pila y se complica mucho la notacin si en cada instante representamos todas las posibles situaciones actuales de la pila. Antes de terminar este apartado estudiamos las transiciones definidas sobre ternas "especiales", 62
Inmaculada Luengo
4. Autmatas de Pila
i) (q,,Z)= {(r1,1),.,(rk,k) : ri Q, i *} se lee en la cinta de entrada, es decir: se transita sin avanzar en la cinta de entrada. ii) (q,a,)= {(r1,1),.,(rk,k) : ri Q, i *} se extrae de la pila, es decir: se transita sin extraer nada de la pila, pero si se inserta. iii) (q,,)= {(r1,1),.,(rk,k) : ri Q, i *} se transita sin avanzar en la cinta de entrada y sin extraer de la pila.
4.1.2
REPRESENTACIN GRFICA DE UN AP
Es similar a la de un autmata finito: Dibujamos un crculo por cada estado no final y un doble crculo por cada estado final. Marcamos el estado inicial con una flecha de entrada, sin etiquetar. Por cada (r,) (q,a,Z) dibujamos una flecha de q a r etiquetada a,Z; El grfico de un AP lo describe completamente.
Ejemplo: Sea M8 = (Q,,,q0,,F,) con Q = {p,q,r,s}, = {0,1}, = {#,a}, p estado inicial, F={s}, y funcin de transicin definida de la manera siguiente (p,,)={(q,#)} (q,0,)={(q,a)} (q,1,a)={(r,)} (r,1,a)={(r,)} (r,,#)={(s,)} La imagen de todas las dems ternas del conjunto de partida es . La representacin grfica de este AP ser 63
Inmaculada Luengo
4. Autmatas de Pila
Observemos que lo que hace M12 es antes que nada marca el principio de la pila con # sin leer nada en la cinta y pasa al estado q; a continuacin por cada 0 que lee en la entrada inserta una a en la pila, sin cambiar de estado; cuando lee el primer 1, extrae una a de la pila y pasa al estado r; tiene que seguir leyendo smbolos 1 a la vez que extrae los smbolos a de la pila; cuando el nmero de 1 ledos iguala al nmero de 0 vuelve a aparecer el smbolo # en la cima de la pila, lo extrae y se alcanza el estado final s. Por tanto las nicas palabras que podrn alcanzar el estado final son las de la forma 0n1n con n>0. Ejemplos: Sea M9 dado por el diagrama siguiente
64
4. Autmatas de Pila
4.1.3
Una palabra * diremos que es una palabra aceptada por el autmata de pila AP
si existe un camino desde el estado inicial que, procesando todos los smbolos de ,
logra llegar a algn estado final.
4.1.4
LENGUAJE DE UN AP
Es el conjunto de todas las palabras aceptadas. Ejemplos: El lenguaje del autmata de pila M8 es L(M8)={01:n1}. El lenguaje de M9 son las palabras sobre ={x,y} que ledas de izquierda a derecha nunca tienen ms 'y' que 'x'. El lenguaje de M10 es L(M10)={xmy: mn1}
4.1.5
4.1.6
La idea general es que una autmata de pila es determinista cuando en ningn momento pueda darse la situacin de tener varias transiciones posibles ante una situacin actual del autmata. Desde luego lo primero que debe ocurrir es que para cada trio (q,a,Z), (q,a,Z) sea vaco o unitario, es decir |(q,a,Z)|1. Pero no basta con esto porque si tuviesemos (q,a,Z)=(r,Y) y (q,,Z)=(s,X) con (r,Y)(s,X) entonces si el autmata se encuentra en estado q, leyendo en cinta a, y en la cima de la pila se encuentra Z, podra pasar al estado r, procesar la a de la cinta y sustituir en la cima de la pila la Z por la Y; o bien podra pasar al estado s, no procesar la a de la entrada y sustituir en la cima de la pila la Z por la X. Es decir seguira habiendo no determinismo. De manera que para decir 65
Inmaculada Luengo
4. Autmatas de Pila
que el autmata sea determinista debe cumplir adems que para cada a y para cada Z, como mximo uno de los cuatro tros (q,a,Z),(q,a,),(q,,Z),(q,,) tenga imagen no vaca a travs de . Formalmente un AP decimos que es determinista si: i) (q , a , Z ) Q ( {}) ( {}) se tiene (q , a , z 1) ii) a , Z , como mximo uno de los cuatro tros
es no determinista porque si se encuentra en estado q y en la cima de la pila se encuentra el smbolo A tiene dos opciones extraerlo e insertar 'xAy' en la pila o extrerlo e insertar 'xy', es decir
66
Inmaculada Luengo
4. Autmatas de Pila
4.1.7
LA PILA VACA. Observemos que el autmata de pila M8 slo acepta palabras con la pila vaca, mientras que M9 y M10 puede aceptar palabras que dejan residuos en la pila. Esto es inaceptable a la hora de implementar un trozo de programa que sea un analizador de los correspondientes lenguajes, porque ms tarde o ms temprano la pila se desbordar y el programa empezar a dar errores. El problema en s no es muy grave porque dado un AP siempre podemos construir otro equivalente que slo acepte palabras con la pila vacia, de la siguiente manera: i) quitamos la condicin de inicial del estado inicial del AP dado, creamos un nuevo estado inicial i y aadimos la transicin (i , , ) = (q0 ,# ) donde q 0 es el antiguo estado inicial y # es un smbolo de pila nuevo. ii) quitamos la condicin de final de todos los antiguos estados finales, aadimos un nuevo estado s y para cada antiguo estado final r F aadimos la transicin (r , , ) = (s , ) que slo cambia de estado. iii) para cada Z aadimos una transicin (s , , Z ) = (s , ) iv) aadimos un estado final nuevo f y la transicin (s , ,# ) = ( f , ) .
Ejemplos: Un AP equivalente a M9 que vacia su pila antes de aceptar cualquier palabra ser
Un AP equivalente a M10 que vaca su pila antes de aceptar cualquier palabra ser
67
Inmaculada Luengo
4. Autmatas de Pila
Fig 4.5 AP equivalente a M10 que vaca la pila antes de aceptar palabras.
Lo que suele ocurrir es que al hacer el cambio para que el autmata vace su pila se introducen transiciones no deterministas.
Desgraciadamente no es cierto que para cada autmata de pila no determinista exista otro equivalente determinista, lo cual va a producir complicaciones a la hora de implementar los correspondientes analizadores. Si observamos la grmatica independiente del contexto con axioma A y con reglas
L = {x n y n : n > 0}
que sabemos que no es regular. La cuestin que queremos plantearnos es si esto es un caso particular (un AP y una G2 que tienen el mismo lenguaje) o ser un resultado general, algo as como: Los autmatas de pila y las gramticas independientes del contexto son equivalentes en cuanto a los lenguajes que determinan. Estudiamos un poco ms a fondo las gramticas independientes del contexto.
68
Inmaculada Luengo
4. Autmatas de Pila
4.2.1
SMBOLOS INACCESIBLES
Un smbolo no terminal decimos que es inaccesible si desde el axioma no se puede derivar ninguna palabra que lo contenga. Si un smbolo es inaccesible y lo eliminamos junto con todas sus producciones y todas las producciones en las que aparezca, la grmatica obtenida es equivalente a la dada.
4.2.2
SMBOLOS SUPERFLUOS
Hay dos tipos de posibles smbolos superfluos de una gramtica i) No terminales: un smbolo no terminal es superfluo si a partir de l no se puede obtener ninguna derivacin escrita slo con smbolos terminales. Si eliminamos un simbolo no terminal superfluo, sus producciones y las producciones en que aparece, la gramtica obtenida es equivalente a la dada. ii) Terminales: un smbolo terminal decimos que es superfluo si no aparece en ninguna derivacin desde el axioma. Si eliminamos del alfabeto de terminales los terminales superfluos la gramtica obtenida es equivalente a la dada.
4.2.3
GRAMTICA LIMPIA
Una grmatica que no tiene smbolos inaccesibles ni superfluos se dice que es una gramtica limpia.
69
Inmaculada Luengo
4. Autmatas de Pila
4.2.4
REGLAS NO GENERATIVAS
Las reglas compresoras del tipo A:= donde A no es el axioma decimos que son reglas no generativas. Si eliminamos esa regla y por cada regla de tipo B:=xAy (x,yN) aadimos la regla B:=xy, la gramtica obtenida es equivalente a la dada.
4.2.5
REGLAS DE REDENOMINACIN
Las reglas del tipo A:=B, donde A y B son smbolos no terminales decimos que son reglas de redenominacin. Si eliminamos dicha regla, aadiendo por cada regla B:=, la regla A:=, la gramtica obtenida es equivalente a la dada.
4.2.6
Una gramtica limpia, sin reglas no generativas y sin reglas de redenominacin decimos que es una gramtica bien formada. Una de las dificultades que ofrece la implementacin de programas que analicen si una determinada palabra pertenece o no al lenguaje determinado por una cierta gramtica independiente del contexto, es el hecho de que la parte derecha de cada una de sus reglas puede tener cualquier longitud, lo que supone que los rboles de derivacin de las palabras del lenguaje de la gramtica no tienen un nmero de ramas fijo.
Ejemplo: Sea la gramtica G3 de axioma S cuyas reglas son S:=aMNz M:= aMa / z N:= bN / b Sea la derivacin S aMNz aaMaNz aazaNz aazabNz aazabbNz aazabbbz Su rbol de derivacin es
70
Inmaculada Luengo
4. Autmatas de Pila
Observamos que el primer nivel tiene cuatro ramas, en el segundo hay un nodo con tres ramas y otro con dos,.. En general es difcil dimensionar un rbol que se adapte a todas las derivaciones posibles de la gramtica y esto ocurre as precisamente por la falta de restricciones a la longitud y forma de la parte derecha de las reglas. Noah Comsky observa y demuestra que esta falta de restriccin es tan slo aparente porque cualquier gramtica independiente del contexto es equivalente a otra cuyas partes derechas de todas sus reglas observa un riguroso patrn.
4.2.7
i) A:=BC, con A,B,CN, ii) A:=a, con A N, aT iii) S:= con S el axioma. Con esto se pueden obtener todas las palabras del lenguaje con rboles binarios. La demostracin es constructiva, sobre la reglas de la gramtica bien formada Sea A:= una regla de G. Si empieza por un smbolo no terminal, se tiene A:=Bx, introducimos un nuevo no terminal B y sustituimos la regla original por las reglas B:=x y A:=BB.
71
Inmaculada Luengo
4. Autmatas de Pila
Si empieza por un terminal, se tendr A:=ax, con aT, x*, introducimos dos nuevos no terminales, C y C, y sustituimos la regla original por las reglas A:=CC y C:=a y C:=x. Como este proceso es finito porque la longitud de las palabras de la parte derecha de todas las reglas es finita, llegar un momento en que todas las reglas sean del tipo de la forma normal de Chomsky. Ejemplos: Sea G4 = ({0 ,1},{A, B ,C}, A, P ) dada por las reglas A:=0BC / 1A / 11 B:=1C1 / AB0 / 1 C:= B1 / 0 Queremos pasarla a FNC Empezamos por la regla A:=0BC. La parte derecha empieza por un smbolo
terminal. Introducimos un nuevo no terminal al que llamaremos D y hacemos D:=0, y escribimos A:=DBC; ahora introducimos otro no terminal, sea E y la regla E:=BC; quitamos la regla original y la sustituimos por las tres reglas A:=DE, E:=BC y D:=0, que estn las tres en FNC. Seguimos con la regla A:=1A. La parte derecha empieza por un smbolo
terminal. Introducimos un no terminal nuevo F y la regla F:=1. Eliminamos la regla original y la sustituimos por las dos reglas A:=FA y F:=1, ambas en FNC. Para la regla A:=11, simplemente la cambiamos por A:=FF. En cuanto a la regla B:=1C1, hacemos G:=C1 y cambiamos la regla original por
B:=FG y la nueva regla G:=CF. Para B:=AB0 podemos hacer H:=AB quitar la regla original y poner B:=HD. La regla B:=1 no hay que modificarla. Para C:=B1, basta quitarla y escribir en su lugar C:=BF. Por ltimo la regla C:=0, no hace falta modificarla.
Una gramtica equivalente a la dada en forma normal de Chomsky (FNC) ser: A:=DE / FA / FF B:=FG / HD / 1 72
Inmaculada Luengo
4. Autmatas de Pila
C:=BF / 0 D:=0 E:=BC F:=1 G:=CF H:=AB Ejemplo: Sea la gramtica G3 de nuestro ejemplo anterior S:=aMNz M:= aMa / z N:= bN / b Para encontrar una equivalente en FNC, procedemos como antes Para la regla S:= aMNz; Hacemos B:=a (FNC) C:= MNz (no FNC), y
cambiamos la regla original por S:= BC (FNC). Seguimos haciendo D:= Nz (no FNC) y C:= MD (FNC); por ltimo hacemos E:= z (FNC) y D:= NE(FNC). Para la regla M:= aMa hacemos F:= Ma (no FNC) que cambiamos por F:= MB
(FNC) y M:= BF. Para la regla N:= bN, simplemente hacemos G:= b (FNC) y N:= GN (FNC). Las reglas M:= z y N:= b, ya est en FNC y no necesitan ser modificadas.
4. Autmatas de Pila
N:= GN / b Por otra parte la palabra aazabbbz es derivable desde el axioma con la grmtica original y por tanto tambin con esta. En efecto S BC aC aMD aBFD aaFD aaMBD
4.3 EQUIVALENCIA
ENTRE
AUTMATAS
DE
PILA
4. Autmatas de Pila
nuestra definicin la transicin ( p , x , A) = (q , xAB ) est permitida y el efecto en la pila sera el de la figura
Mientras que ese mismo efecto en un modelo de AP que slo admite la insercin en pila smbolo a smbolo lo causara la secuencia de movimientos
Como vemos ambos diagramas representan el mismo efecto en la mquina: i) procesar el smbolo x de la cinta de entrada, ii) pasar del estado p al estado q, y iii) sustituir la A que se encuentra en la cima de la pila por la palabra xAB insertandola de modo que x es el nuevo smbolo de la cima de la pila.
4.3.1
4. Autmatas de Pila
i)
Insertamos la marca de principio de pila en el fondo de la pila,a la vez que avanzamos hasta el estado p, (i , , ) = ( p ,# ) .
ii) Insertamos el axioma en la pila y pasamos al estado q, ( p , , ) = (q , S ) . iii) Por cada regla de la forma A:=w, se aade la transicin (q , , A) = (q , w) , que permitir que si la mquina se encuentra en estado q, con una A en la cima de la pila podamos extraerla e insertar en su lugar la parte derecha de alguna de sus reglas, sin cambiar de estado ni procesar lo que hay en la cinta de entrada. iv) Por cada simbolo del alfabeto de terminales a T se aade la transicin
(q , a , a ) = (q , ) , que permitir si en algun momento est en estado q, en la cinta
de entrada se lee una a y en la cima de la pila est la misma a, puede extraerse de la pila. v) Extraer la # de la pila y transitar al estado final denotando que la pila ha quedado vaca, (q , ,# ) = ( f , ) . La palabra habr sido acepatada si y slo la pila est vaca y ha sido leda completa (el cursor de lectura en cinta debe estar sobre la marca de fin de cadena). Ejemplo: Sea la gramtica G, definida por las reglas A:=xAy / xy. Para construir un AP equivalente, tomamos Q={i,p,q,f}, el alfabeto de entrada ser T ={x,y}, como alfabeto de pila tomaremos ={x,y,A,#} y las transiciones i) (i,,)=(p, #) transicin que inserta la # en el fondo de la pila ii) (p,,)=(q,A) transicin que inserta el axioma encima de la # al comenzar. iii) Por la regla A:=xAy aadimos la transicin (q,,A)=(q,xAy); por la regla A:=xy aadimos la transicin (q,,A)=(q,xy). iv) Por ser x,y los dos nicos terminales aadimos las transiciones (q,x,x)=(q,) y (q,y,y)=(q,). v) Por ltimo la transicin que extrae la #, (q,,#)=(f,) Tenemos en total siete transiciones. En la figura vemos el AP dibujado
76
Inmaculada Luengo
4. Autmatas de Pila
Supongamos que en la cinta de entrada de la mquina escribimos la palabra w = xxyy, que es del lenguaje de la gramtica porque se obtiene del axioma A xAy xxyy. En la cinta tendremos
x x y y
1 2 3 4 5
(con el nmero de debajo de cada smbolo indicamos la casilla que ocupa, incluida la marca de fin de cadena, p.e. y (4) es la segunda y de la palabra) En la siguiente tabla vemos la secuencia de transiciones realizadas para procesar la palabra xxyy (el smbolo de la cima de la pila es el primero de la izquierda en cada momento). Entrada Estado i p q q q q q q q Cinta x (1) x (1) x (1) x (1) x (2) x (2) y (3) y (4)
fdc (5)
Salida Pila Transicin ,;# # A# ,;A ,; xAy x,x; ,; xy x,x; y,y; y,y; ,#; Estado p q q q q q q q f Cinta x (1) x (1) x (1) x (2) x (2) y (3) y (4)
fdc (5) fdc (5)
Pila # A#
xAy#
Ay#
xAy#
Ay#
xyy# yy# y#
#
xyy# yy# y#
#
Tabla 4.1: Descripciones instantneas del AP de la figura 4.9 al procesar la cadena xxyy.
77
Inmaculada Luengo
4. Autmatas de Pila
Al procesar la palabra xxyy en la pila del AP veramos sucesivamente (los nmeros de las casillas inferiores indican la posicin actual en la cinta de entrada, los numeros entre parntesis indican el nmero de orden del movimiento o instante del proceso).
x A y #
1
(1)
x y y #
3
(7)
A A y y #
2
(5)
y #
2
(6)
y #
4
(8)
#
1
(3)
#
1
(4)
#
5
(9)
1
(2)
5
(10)
Fig. 4.8. Descripcin sucesiva de la pila de autmata de la Fig. 4.9 al procesar la palabraq xxyy.
Observemos que cuando en la cima de la pila hay un 'no terminal' (instantes (3) y (5)) el AP lo extrae y lo sustituye por la parte derecha de alguna de sus reglas, sin avanzar en la cinta de entrada; cuando en la cima de la pila hay un 'terminal', el AP lo extrae, si coincide con lo que en ese momento lee en la cinta de entrada, y avanza en la cinta de entrada. Si la cima de la pila y el smbolo actual de lectura en cinta no coinciden, no se puede realizar ninguna transicin y por tanto la mquina se para y la palabra no es aceptada. No olvidemos que esto es un mtodo universal para construir un AP equivalente a una gramtica independiente del contexto dada. Puede ocurrir que encontremos otro AP tambin equivalente a la gramtica dada. En concreto en nuestro ejemplo podra ser
que adems tiene la ventaja de ser determinista. Tambin es cierto, como vemos a continuacin, que dado un autmata de pila siempre existe una gramtica independiente del contexto equivalente, lo que permite concluir que las gramticas independientes del contexto y los autmatas de pila son equivalentes en cuanto a los lenguajes abarcados. 78
Inmaculada Luengo
4. Autmatas de Pila
4.3.2
Supongamos conocido un autmata de pila M = {Q , , , q 0 , F }. Vamos a definir cada uno de los elementos de una gramtica que afirmamos es equivalente a M. Tomamos como conjunto de no terminales un smbolo S y todas las ternas <p,A,q> donde p y q son estados de M y A es un smbolo de pila o , es decir
N = {S } { p , A.q : p , q Q , A {}}
Como conjunto de terminales tomamos como siempre el alfabeto de entrada del AP, o sea el propio . Como axioma tomamos S. Para crear las reglas hacemos lo siguiente i) Por cada estada final f F creamos una regla S:= <i,,f> donde i es el estado inicial. ii) Por cada estado pQ creamos una regla <p,,p>:= Las reglas definidas hasta ahora son genricas, a partir de aqu empezamos a
introducir las reglas que reflejan las transiciones del AP iii) Por cada transicin (p,x,A) = (q,B) con A (o sea para las transiciones que extraen verdaderamente un smbolo de la pila) se crea para cada estado rQ una regla como sigue <p,A,r>:= x<q,B,r> (es decir por cada transicin que extrae realmente un smbolo de la pila, se introducen tantas reglas como estados tenga el AP original). iv) Por cada transicin de tipo (p,x,) = (q,B) (aquellas transiciones que no extraen nada de la pila), se crea para cada par de estados r,sQ y por cada smbolo
79
Inmaculada Luengo
4. Autmatas de Pila
Se observa que este mtodo introduce gran cantidad de reglas, aunque posiblemente muchos de los no terminales pueden ser inaccesibles o superfluos con lo que se podr eliminar algunas de ellas a posteriori.
Ejemplo: Sea el AP de la figura cuyo alfabeto de entrada es ={b,c} y cuyo alfabeto de pila es = {c}.
Vamos a construir una gramtica equivalente, para ello procedemos como sigue: El alfabeto de terminales es el de entrada del autmata, T = ={b,c}, el axioma es S, los no terminales son
S:= <p,,r>.
ii) Se crea una regla por cada estado <p,,p>:= <q,,q>:= <r,,r>:= iii) la nica transicin que realmente extrae de la pila es (q,c,c)=(r,). Por esta transicin debemos introducir una regla por cada estado, as <q,c,p>:= c<r,,p> <q,c,q>:= c<r,,q> 80
Inmaculada Luengo
4. Autmatas de Pila
<q,c,r>:= c<r,,r> iv) por la transicin (p,c,)=(q,c) debemos introducir una regla por cada par de estados (los posibles pares de estados son (p,p), (p,q), (p,r), (q,p), (q,q),(q,r), (r,p),(r,q),(r,r)) y por cada smbolo de pila o . As tenemos que aadir |Q|(||+1)=18 reglas que son: <p,,p>:= c<q,c,p><p,,p> <p,,p>:= c<q,c,q><q,,p> <p,,p>:= c<q,c,r><r,,p> <p,c,p>:= c<q,c,p><p,c,p> <p,c,p>:= c<q,c,q><q,c,p> <p,c,p>:= c<q,c,r><r,c,p>
<p,,q>:= c<q,c,p><p,,q> <p,,q>:= c<q,c,q><q,,q> <p,,q>:= c<q,c,r><r,,q> <p,c,q>:= c<q,c,p><p,c,q> <p,c,q>:= c<q,c,q><q,c,q> <p,c,q>:= c<q,c,r><r,c,q> <p,,r>:= c<q,c,p><p,,r> <p,,r>:= c<q,c,q><q,,r> <p,,r>:= c<q,c,r><r,,r> <p,c,r>:= c<q,c,p><p,c,r> <p,c,r>:= c<q,c,q><q,c,r> <p,c,r>:= c<q,c,r><r,c,r> Nos faltan otras 18 reglas que tendremos que introducir por la transicin
4. Autmatas de Pila
<q,c,p>:= b<q,,q><q,c,p> <q,c,p>:= b<q,,r><r,c,p> <q,,q>:= c<q,,p><p,,q> <q,,q>:= c<q,,q><q,,q> <q,,q>:= c<q,,r><r,,q> <q,c,q>:= c<q,,p><p,c,q> <q,c,q>:= c<q,,q><q,c,q> <q,c,q>:= c<q,,r><r,c,q> <q,,r>:= c<q,,p><p,,r> <q,,r>:= c<q,,q><q,,r> <q,,r>:= c<q,,r><r,,r> <q,c,r>:= c<q,,p><p,c,r> <q,c,r>:= c<q,,q><q,c,r> <q,c,r>:= c<q,,r><r,c,r> Observemos que las reglas i) son de tipo S:= D (de redenominacin); las reglas ii) son de tipo A:= (no generativas); las iii) de tipo A:=aB (terminal seguido de no-treminal); y las iv) de la forma A:=aBC (las nicas que son propiamente de una gramtica independiente del contexto, las otras podran pertenecer a una gramtica regular lineal a la derecha). En realidad lo que pretendamos era comprobar que el conjunto de los lenguajes correspondientes a todos los autmatas de pila y el de los lenguajes correspondientes a gramticas independientes del contexto son iguales, es decir que ambos tipos de objetos tienen la misma potencialidad.
Se demuestra que hay lenguajes que no son lenguajes de ningn autmata de pila, por ejemplo L = x n y n z n : n 0 , con lo que vemos que el potencial de los autmatas de pila como reconocedores de lenguajes es limitado. 82
Inmaculada Luengo
4. Autmatas de Pila
4.4.1
PRINCIPIO DE PREANLISIS.
Cosideremos de nuevo la gramtica independiente del contexto A:=xAy / xy, el AP equivalente obtenido por el mtodo general que se vin en la seccin 4.3.1,es
Si consideramos la palabra xxyy afirmamos que es del lenguaje de la gramtica porque puede ser obtenida desde el axioma de las derivaciones A xAy xxyy . Observamos que en la primera derivacin usamos la regla A:=xAy, mientras que en la segunda 83
Inmaculada Luengo
4. Autmatas de Pila
usamos A:=xy. El mtivo es que nosostros estamos viendo que despues de la segunda x ya viene una y. Pero si nosotros no viesemos la palabra que queremos derivar, si slo la pudiesemos ver smbolo a smbolo no sabramos en que momento debemos dejar de cambiar A por xAy, para cambiarla por xy. La idea del principio de preanlisis es 'mirar' no slo el siguiente smbolo de la cinta de entrada que se va a procesar, sino los siguientes k smbolos. Por ejemplo, un LL(1) mantiene en memoria slo un smbolo de la cinta de entrada, el siguiente que se va a procesar; un LL(2), mantiene en memoria dos smbolos de la cinta de entrada en cada momento, el smbolo actual, que se procesar en su momento y el inmediatamente siguiente. En el ejemplo que nos ocupa, si cuando se va a procesar la segunda 'x' se sabe que el siguiente smbolo es una 'y' como ocurre si pensamos en un LL(2), probablemente se pueda resolver el problema de usar de manera determinista las dos reglas que hay para A: siempre que se est leyendo una x y el simbolo siguiente tambien es una x usamos la regla A:=xAy y siempre que se lea una x y el smbolo siguiente sea una y, se usar la regla A:=xy. As el no determinismo queda salvado y podemos escribir un trozo de programa genrico para esta situacin. Volviendo al caso general del analizador LL(k), es decir si suponemos que conociendo los siguientes k smbolos de la cinta de entrada en todo momento se puede salvar el no determinismo de la gramtica podremos construir un algoritmo que traducido a un trozo de programa sea capaz de decidir si una palabra determinada es o no del lenguaje de la misma. Primero construimos una tabla determinista que ser un dato de entrada, de la forma siguiente Tantas filas como no-terminales de la gramtica, en nuestro caso que ser un LL(2) una sola fila. Tantas columnas como k-plas posibles de smbolos no terminales pudieran leerse en un momento determinado en la cinta, includa la marca de fin de cadena: en nuestro caso, dado que en cada momento se van a tener en memoria dos smbolos las posibilidades sern xx, xy, yx, yy, xfdc, yfdc'. Luego nuestra tabla es de 1 por 6. En el cruce de la fila i, que corresponde al terminal Ai y columna que corrresponde a la combinacin de terminales xi1 , L , xik se escribe la parte derecha de la regla que se
debe si en un momento dado en la cima de la pila se encontrara el no-terminal Ai y los k simbolos de preanalisis fuesen precisamente xi1 , L , xik . En nuestro ejemplo, en el cruce
de la unica fila con la columna rotulada xx escribimos xAy, porque siempre que el smbolo actual sea x y el siguiente tambin sea x, queremos cambiar A por xAy. En el
84
Inmaculada Luengo
4. Autmatas de Pila
cruce de la nica fila con la columna rotulada xy escribiremos xy, porque siempre que el smbolo actual sea x y el siguiente smbolo sea y, y A se encuentre en ese momento en la cima de la pila, queremos cambiar A por xy. Rellenamos con e las casillas que corresponden a situaciones de palabras que no son del lenguaje de la gramtica xx A xAy xy xy yx e yy e xfdc e yfdc e
vamos a crear un algoritmo que reproduzca el modo de funcionamiento de nuestro AP Primero observemos atentamente su funcionamiento: Se trabaja siempre sobre la cima-de-la-pila. Se inserta una marca de principio-de-pila y a continuacin el axioma de la gramtica, a patrir de ah se van insertando o extrayendo smbolos en la pila hasta que vuelva a aparecer la marca de principio-depila. Se puede insertar varios a la vez, pero se extraen de uno en uno. Pueden darse dos situaciones: a) La cima-de-la-pila es un terminal. En tal caso siempre se compara a ver si coincide con el smbolo actual de lectura en cinta. Si coincide se extrae de la pila y se avanza la lectura en la cinta (manteniendo en todo momento k smbolos de cinta en memoria). Si no coincide ya no se puede realizar ninguna transicin del AP, con lo cual la palabra no alcanzar estado final, no es del lenguaje de la gramtica y por tanto el algoritmo debe declarar un mensaje de error. b) La cima-de-la-pila es un no-terminal. En tal caso la transicin aplicable es extraerlo de la pila e insertar en su lugar la parte derecha de la regla que en ese momento sea adecuado aplicar teniendo en cuenta los k smbolos de preanlisis, resuelto con el principio de preanlisis en la tabla, es decir insertamos lo que diga la tabla, teniendo en cuenta la posibilidad de que sea 'e' para incluir un mensaje de error. Antes de dar una palabra por aceptada hay que comprobar adems que ha sido leida completa, sin ms que comprobar que cuando vuelve a aparecer la marca de principiode-pila el simbolo actual es la marca de fin-de-cadena. 85
Inmaculada Luengo
4. Autmatas de Pila
El analizador sintctico LL(k) estar formado por el alfabetos de terminales (incluida la marca de fin de cadena), el de no terminales (incluida la marca de fin de cadena), la tabla construida como se acaba de explicar (con una columna para (fdc -)) y la rutina siguiente
INSERTAR (#) INSERTAR (S) PARA i=1 HASTA k LEER (Smbolo) Smbolo[I]= Smbolo FIN PARA MIENTRAS cima-de-la-pila # HACER CASO cima-de-la-pila DE (imitar el AP segn el tipo de smbolo en la cima de la pila) Terminal: SI cima-de-la-pila = Smbolo1, ENTONCES EXTRAER cima-de-la-pila PARA i=1 hasta k-1 Smbolo [i]= Smbolo[i+1] FIN PARA LEER(Smbolo), Smbolo[k] = Smbolo SI NO salir a la rutina de error No terminal: SI tabla(cima-de-la-pila, (Smbolo[1], ...,Simbolo[k]))e EXTRAER cima-de-la-pila INSERTAR tabla [cima-de-la-pila, (Smbolo[1], ...,Smbolo[k])] SI NO salir a la rutina de error FIN CASO FIN MIENTRAS EXTRAER (#) SI Smbolo1 fdc ENTONCES salir a la rutina de error. (leer k smbolos consecutivos en la cinta)
En nuestro ejemplo los datos de entrada son T = {x, y}, N = {x, y , A, #} , la tabla que construimos para esta gramtica xx A xAy xy xy yx e yy e xfdc e yfdc e fdce
86
Inmaculada Luengo
4. Autmatas de Pila INSERTAR (S) LEER (Smbolo) Smbolo1= Smbolo LEER (Smbolo) Smbolo2 = (Smbolo) MIENTRAS cima-de-la-pila# HACER CASO cima-de-la-pila DE Terminal: SI cima-de-la-pila = Simbolo1 ENTONCES EXTRAER cima-de-la-pila, Smbolo 1 = Smbolo2 , LEER (Smbolo), Smbolo2 = Smbolo SI NO salir a la rutina de error
No terminal: SI tabla[cima-de-la-pila,(Smbolo1,Smbolo2)]e ENTONCES EXTRAER cima-de-la-pila INSERTAR tabla[cima-de-la-pila,(Smbolo1,Smbolo2)] SI NO salir a la rutina de error FIN CASO FIN MIENTRAS EXTRAER (#) SI Smbolo1 fdc ENTONCES salir a la rutina de error.
Este tipo de analizador no resuelve el problema genrico del no determinismo de las Gramticas independientes del contexto. Por ejemplo sea la gramtica A:=xAy / xxAy / . Cuando tenemos una palabra del lenguaje xxxxyy que se obtiene AxxAyxxxxAyyxxxxAyy, no existe ningn LL(k) que sea vlido porque por muy grande que sea k, si tomamos para analizar una palabra que empieza con un nmero de smbolos x mayor que k, no sabemos de manera determinista con cul de las dos reglas xxAy o xAy comenzar a derivar.
87
Inmaculada Luengo