Sie sind auf Seite 1von 67

TEMA 7

AUTMATAS CON PILA


TALF. Tema 7 n 2
7. AUTMATAS CON PILA
7.1. Introduccin
7.2. Definicin de Autmatas con pila.
7.3. Lenguaje aceptado por un autmata con pila.
7.4. Autmatas con pila y lenguajes libres del contexto.
7.4.1. Reconocimiento descendente. Gramticas LL(k).
7.4.1.1. Proceso de Anlisis Sintctico Descendente.
7.4.1.2. Analizadores LL y autmatas de pila no deterministas
7.4.1.3. Implementacin de Analizadores LL
Transformacin de una gramtica para su anlisis descendente.
Construccin de los conjuntos PRIMERO Y SIGUIENTE.
Condiciones LL(1).
7.4.1.4. Algoritmo de anlisis sintctico LL
Construccin de Tablas LL.
7.4.2. Reconocimiento ascendente. Gramticas LR(k).
7.4.2.1. Introduccin
7.4.2.2. Proceso de Anlisis Sintctico Ascendente.
7.4.2.3. Analizadores LR y autmatas de pila no deterministas
7.4.2.4. Implementacin de Analizadores LR
7.4.2.5. Algoritmo de anlisis sintctico LR
7.4.2.6. Construccin de Tablas LR.
TALF. Tema 7 n 3
7.1. Introduccin
Los Autmatas con Pila son una extensin de los AFD a los que se les aade
una memoria (pila).
En la pila se almacenan smbolos de la cadena de entrada y de la gramtica, as
como caracteres especiales (#) para indicar el estado de pila vaca.
Las transiciones son de la forma: (p,x,s;q,t)
p=estado inicial
q=estado al que llega
x= smbolo de la cadena de entrada
s=smbolo que se desapila
t=smbolo que se apila
Grficamente:
p q
x, s; t
x
Cabeza de lectura
Cadena de ENTRADA
PILA
r
p
q
t
s
CIMA
Mecanismo de control
autmatas con pila
x
Cabeza de lectura
Cadena de ENTRADA
PILA
r
p
q
s
s
CIMA
Mecanismo de control
TALF. Tema 7 n 4
7.2. Definicin de Autmatas con pila.
Definicin: Un Autmata a Pila se define como la sptupla:(, P, Q, A
0
, q
0
, f, F)
donde:
: alfabeto de entrada.
P: alfabeto de la pila.
Q: conjunto de estados.
A
0
: smbolo inicial de la pila (#).
q
0
: smbolo inicial del conjunto de estados.
f: funcin de transicin. Es una aplicacin de
Qx{}xP en el conjunto de partes de P(QxP)*.
F: conjunto de estados finales o de aceptacin.
Funcin de transicin. Interpretamos la funcin f de la siguiente forma:
f(q, a, A) = {(q1,Z1),..., (qn,Zn)}: Si el AP se encuentra en el estado q, lee el
smbolo a de la cinta de entrada, y aparece el smbolo A en el tope de la pila,
pasar al estado qi (n>i>1), borrar el smbolo A de la pila e introducir la
palabra Zi, situando la cabecera de la misma en el tope de la pila, y avanzando
una posicin en la cinta de entrada.
f(q, , A) = {(q1,Z1),..., (qn,Zn)}: Si el AP se encuentra en el estado q y
aparece el smbolo A en el tope de la pila, pasar al estado qi (n>i>1), borrar
el smbolo A de la pila e introducir la palabra Zi, situando la cabecera de la
misma en el tope de la pila, y mantendr la misma posicin en la cinta de
entrada.
TALF. Tema 7 n 5
7.2. Definicin de Autmatas con pila.
Descripciones instantneas
Dado un AP, podemos describir el proceso de aceptacin o rechazo de una palabra
de * mediante una serie de descripciones instantneas de la forma (q, x, Z) que
definen respectivamente el estado del AP, la entrada que queda por leer, y el
contenido de la pila en un momento dado.
Decimos que una descripcin instantnea (q, az, AZ) precede a otra (p, z, YZ) en
un paso y se expresa como:(q, az, AZ)(p, z, YZ), si (p, Y)ef(q, a, A).
Decimos que una descripcin instantnea (q, az, AZ)precede a otra (p, z, YZ) en n
pasos y se expresa como:(q, az, AZ) * (p, z, YZ), si existen una serie de
descripciones que cumplen la relacin de precedencia anterior de una en una.
Autmata a Pila Determinista: Un AP es Determinista si verifica:
1. qeQ, AeP, cardinal(f(q, , A))>0 f(q, a, A) =C, ae.
2. qeQ, AeP, ae{} cardinal(f(q, a, A))<2.
TALF. Tema 7 n 6
7.3. Lenguaje aceptado por un autmata con pila.
Lenguaje aceptado por un AP (M=(, P, Q, A
0
, q
0
, f, F)
Lenguaje aceptado por criterio de estado final
LEF(M) = (x / (q
0
, x, A
0
) * (p, , X), peF, X e P*}
Lenguaje aceptado por criterio de pila vaca
LPV(M) = (x / (q
0
, x, A
0
) * (p, , ), peQ}
Equivalencia
LEFLPV
1. Nuevo estado i tal que:
2. Nuevo estado p tal que:
3. xeP crear las transiciones:
4. Nuevo estado f que ser el final tal que:
LPVLEF
1. Igual que el anterior.
2. Nuevo estado f tal que qeQ:
i q
0
,; #
p
,;
,;
p
,x;
p f
, #;
i q
0
,; #
q
i
f
, #;
q
j
, #;
TALF. Tema 7 n 7
7.3. Lenguaje aceptado por un autmata con pila. Ejemplo.
Ejemplo: Autmata con pila que reconoce el lenguaje L={x
n
y
m
, n>m}
Aplicamos el algoritmo de LEFLPV
1 2
y,x;
y,x; x, ;x
i 1
p f
, ; #
, #;
x, ;x
2
y,x;
y,x;
,x;
, ;
TALF. Tema 7 n 8
7.3. Lenguaje aceptado por un autmata con pila.
Los lenguajes libres de contexto son reconocidos por los Autmatas a
Pila No Determinsticos.
Los APND aceptan ms lenguajes que los Autmatas a Pila
Determinsticos, por lo que no son equivalentes, aunque la mayora de
los lenguajes de programacin son reconocidos por los APD.
Teorema
A toda gramtica G libre de contexto le corresponde
biunvocamente un AP que acepta por vaciado de pila el lenguaje
generado por ella.
Existen dos mtodos para construir un AP a partir de la GIC:
Anlisis descendente:gramticas LL(k)
Anlisis ascendente:gramticas LR(k)
donde:
L Left to right: la secuencia de tokens de entrada se analiza de izquierda
a derecha.
L/R Left-most/right-most: obtiene la derivacin por la
izquierda/derecha.
k es el nmero de smbolos de entrada que es necesario conocer en cada
momento para poder hacer el anlisis.
TALF. Tema 7 n 9
El proceso comienza apilando el axioma de
la gramtica. Continuamente mira lo que hay
en las ltimas casillas de la pila:
Si existe concordancia con un no
terminal de alguna de las reglas de
produccin de la gramtica analizada,
elimina de la cima de la pila ese no
terminal y lo cambia por la cadena de la
parte derecha de la regla de produccin.
Si existe concordancia con un terminal
y coincide con el carcter de la entrada,
lo desapila y lee un carcter ms de la
entrada.
autmatas con pila
Cabeza de lectura
CINTA DE ENTRADA
PILA
Indicador de stado
CIMA
Mecanismo de control
Si con este proceso se consigue agotar el contenido de la cinta de entrada y
de la pila, la palabra es reconocida. En otro caso no lo es.
7.4.1.1. Proceso de Anlisis Sintctico Descendente.
TALF. Tema 7 n 10
7.4.1.1. Proceso de Anlisis Sintctico.
Ejemplo: G = ({a}, {S}, S, {S ::= aS | a})
cadena de entrada= aa
PILA ENTRADA ACCIN
aa$ Apilar S
aS
aa$
S::=aS
S
aa$ Desapilar a; Leer()
S a$ S::=a
$ aceptar
a
a$
Desapilar a; Leer()
TALF. Tema 7 n 11
1. Construir los cuatro estados del autmata: i el inicial, f el de aceptacin y p
y q dos estados intermedios.
2. Se introducen las transiciones estndar para marcar la cima de la pila, para
apilar el axioma y para determinar cundo queda vaca:
(i, , ; p,#), (p,, ; q,S ) y (q, ,#; f, ).
3. Por cada smbolo terminal a eE
T
, introducimos una transicin de la forma
(q,a,a;q,).
4. Por cada regla de la forma A::= oe P, aadimos la transicin (q,,A;q,o).
i q
p
f
, ; #
, S; , #;
a eE
T
a, a;
, A;o A e P
7.4.1.2. Analizadores LL y autmatas de pila no deterministas
TALF. Tema 7 n 12
a,a;
b,b;
z,z;
i
p
q
f
, ; #
, ;S
, #;
, S; zMNz
,N; bNb
, M; aMa
, N; z
, M; z
7.4.1.2. Analizadores LL y autmatas de pila no deterministas
Ejemplo:
G = ({a, b, z}, {S, M, N}, S, {S ::= zMNz, M ::= aMa | z, N ::= bNb | z})
TALF. Tema 7 n 13
estado Pila Entrada
i

zazabzbz$
p # zazabzbz$
q
S# zazabzbz$
q zMNz# zazabzbz$
q MNz# azabzbz$
q aMaNz# azabzbz$
q MaNz# zabzbz$
q zaNz# zabzbz$
q aNz# abzbz$
q Nz# bzbz$
q bNbz# bzbz$
q Nbz# zbz$
q zbz# zbz$
q bz# bz$
q z# z$
q # $
f

7.4.1.2. Analizadores LL y autmatas de pila no deterministas
Accin
(i, , ; p, #)
(p, , ; q, S)
(q, , S ; q, zMNz)
(q, z,z;q,)
(q,,M;q, aMa) | (q, , M ; q, z)
(q, a,a;q,)
(q, , M ; q, z)| (q,,M;q, aMa)
(q, z,z;q,)
(q, a,a;q,)
(q,,N;q, bNb) | (q, , N ; q, z)
(q, b,b;q,)
(q, , N ; q, z)
(q, z,z;q,)
(q, b,b;q,)
(q, z,z;q,)
(q, , #; f, )
(q,,M;q, aMa)
(q, ,M; q, z)
indeterminacin
Aceptar
TALF. Tema 7 n 14
Si aceptamos una cadena usando este
autmata podremos reconstruir la
secuencia de derivaciones que nos conduce
a ella a partir de S.
7.4.1.2. Analizadores LL y autmatas de pila no deterministas
Accin
(i, , ; p, #)
(p, , ; q, S)
(q, , S ; q, zMNz)
(q, z,z;q,)
(q,,M;q, aMa) | (q, , M ; q, z)
(q, a,a;q,)
(q, , M ; q, z)| (q,,M;q, aMa)
(q, z,z;q,)
(q, a,a;q,)
(q,,N;q, bNb) | (q, , N ; q, z)
(q, b,b;q,)
(q, , N ; q, z)
(q, z,z;q,)
(q, b,b;q,)
(q, z,z;q,)
(q, , #; f, )
Aceptar
S zMNz zaMaNz zazaNz zazabNbzzazabzbz
TALF. Tema 7 n 15
7.4.1.3. Implementacin de Analizadores LL
Los analizadores sintcticos descendentes son lo que construyen el rbol
sintctico de la sentencia a reconocer de una forma descendente,
comenzando por el smbolo inicial o raz, hasta llegar a los smbolos
terminales que forman la sentencia.
Se desea un anlisis sintctico descendente sin retroceso, por medio del uso
de gramticas LL(k=1):
pueden analizar sintcticamente sin retroceso, en forma descendente, examinando
en cada paso todos los smbolos procesados anteriormente y los k=1 smbolos ms
a la derecha
Para eliminar el retroceso en el anlisis descendente, se ha de elegir
correctamente la produccin correspondiente a cada no terminal que se
expande. Es decir que el anlisis descendente ha de ser determinista, y
slo se debe de dejar tomar una opcin en la expansin de cada no terminal.
Gramticas LL(k)
Son un subconjunto de las gramticas libres de contexto. Permiten un anlisis
descendente determinista (o sin retroceso), por medio del reconocimiento de la
cadena de entrada de izquierda a derecha ("Left to right") y que va tomando las
derivaciones ms hacia la izquierda ("Leftmost") con slo mirar los k tokens
situados a continuacin de donde se halla.
Por definicin de gramtica LL(k):
Toda gramtica LL(k) es no ambigua.
no es recursiva a izquierdas.
TALF. Tema 7 n 16
7.4.1.3. Implementacin de Analizadores LL
Anlisis descendente sin retroceso.
En el anlisis descendente con retroceso se generan formas
sentenciales a partir del axioma dando marcha atrs en cuanto se
detecta que la forma generada no es viable, (es decir, no conduce a
ninguna sentencia del lenguaje). Este proceso de vuelta atrs es lento.
Para mejorar la eficiencia del mismo, sera muy til saber a priori qu
alternativa del smbolo no terminal es ms conveniente usar.
Ejemplo:
gramtica
(1) S cAd
(2) A bcB
(3) A a
(4) B b
Anlisis de la sentencia cad.
Partiendo del axioma, slo se puede aplicar la regla 1, obteniendo la forma
sentencial cAd. Si se compara con la sentencia cad, se observa que ambas
comienzan con el caracter c. Por tanto, la subcadena Ad ha de generar el
resto de la sentencia, o sea, ad. En este instante existen dos alternativas que
se pueden emplear para modificar la forma sentencial, que corresponden a la
aplicacin de las reglas 2 y 3.
La aplicacin de la regla 2 provoca la aparicin del carcter b al principio de
la subcadena restante, mientras que la regla 3 provoca la aparicin del
carcter a. Por tanto, como la subcadena que falta por generar para producir
la sentencia final es ad (empieza por a), puede deducirse que en este
instante la regla que debe emplearse es la regla 3, y no la 2.
TALF. Tema 7 n 17
7.4.1.3. Implementacin de Analizadores LL
Anlisis descendente sin retroceso.
El mtodo de anlisis que hemos seguido consiste en leer la cadena de entrada
de izquierda a derecha, (L: Left to rigth) utilizando reglas de produccin
izquierda (L: Left most) e inspeccionando un (1) solo smbolo de la entrada para
elegir la regla conveniente. Este anlisis se denomina LL(1).
Hay casos en los que este procedimiento no sirve.
Supngase, por ejemplo, que la gramatica fuese:
(1) S cAd
(2) A aB
(3) A a
(4) B b
Al analizar la tira de entrada cad, tras realizar la primera produccin
obtendramos la forma sentencial cAd, quedando como subcadena a analizar ad
(que comienza con a). Pero ahora hay dos reglas aplicables que comienzan por a
(las reglas nmero 2 y 3). Por tanto, no es posible decidir de forma automtica
qu regla debe emplearse.
Si se pretende que el anlisis sea sin retroceso, es indispensable que la
gramtica no tenga ciclos por la izquierda (no sea recursiva por la izquierda).
No todas las gramticas admiten un anlisis descendente sin retroceso en el que
se pueda predecir la alternativa que debe usarse. En el siguiente apartado se
ver una condicin necesaria y suficiente para que una gramtica admita un
anlisis LL(1).
TALF. Tema 7 n 18
7.4.1.3. Implementacin de Analizadores LL
Transformacin de una gramtica para su anlisis descendente
4.3.1. Construccin de los conjuntos PRIMERO Y SIGUIENTE
Funciones asociadas a una gramtica independiente del contexto, G que facilitan
la construccin de un analizador sintctico predictivo.
Defnicin: Si o es una cadena de smbolos gramaticales, se llama PRIMERO(o)
al conjunto de smbolos terminales por los que comienzan las cadenas derivadas
de o.
Si o *, entonces tambin pertenece a PRIMERO(o).
Defnicin: Se define SIGUIENTE(A), para el no terminal A como el conjunto de
smbolos terminales que pueden aparecer inmediatamente a la derecha de A en
alguna forma sentencial.
Esto es, el conjunto de terminales a e E
T
tales que haya una derivacin de la
forma S*oAa para algunas cadenas o y .
En algn momento de la derivacin puede haber existido smbolos entre A y a
pero derivaron en (se anularon) y desaparecieron.
Si A puede ser el smbolo situado ms a la derecha en una forma sentencial,
entonces $eSIGUIENTE(A) siendo $ el smbolo que delimita la entrada por la
derecha.
TALF. Tema 7 n 19
7.4.1.3. Implementacin de Analizadores LL
Construccin de los conjuntos PRIMERO Y SIGUIENTE
Clculo de los Primeros:Para calcular PRIMERO(X) para todos los
smbolos gramaticales X, se aplican las reglas siguientes hasta que no se
puedan aadir ms terminales a ningn conjunto PRIMERO.
1. Si X es un terminal, entonces PRIMERO(X) = {X}
2. Si X entonces PRIMERO(X) = PRIMERO(X) {}
3. Si X es un no terminal y X Y
1
Y
2
Y
k
Si existe un i tal que a e PRIMERO(Y
i
) y adems
Y
1
Y
2
Y
i-1
* esto es, si est en PRIMERO(Y
1
).. PRIMERO(Y
i-1
)
entonces:
PRIMERO(X) = PRIMERO(X) {a}
Si e PRIMERO(Y
j
) para j = 1; 2;..; k entonces:
PRIMERO(X) = PRIMERO(X) {}
Por ejemplo, todo los smbolos de PRIMERO(Y
1
) sin duda pertenecern a
PRIMERO(X). Si Y
1
no deriva a , entonces no se aade nada ms a
PRIMERO(X), pero si Y
1
* , entonces se aaden los elementos de
PRIMERO(Y
2
) y as sucesivamente.
TALF. Tema 7 n 20
7.4.1.3. Implementacin de Analizadores LL
Se puede calcular el conjunto PRIMERO para cualquier cadena de la forma
X
1
X
2
..X
n
del siguiente modo:
Aadir a PRIMERO(X
1
X
2
X
n
) los smbolos = e a PRIMERO(X
1
).
Si e PRIMERO(X
1
), aadir los smbolos= de PRIMERO(X
2
).
Si est tanto en PRIMERO(X
1
) como en PRIMERO(X
2
), aadir
tambin los smbolos distintos de de PRIMERO(X
3
) y as
sucesivamente.
Por ltimo, aadir a PRIMERO(X
1
X
2
X
n
) si i, PRIMERO(X
i
)
contiene a .
Ejemplo:
gramtica:
A BCc | gDB
B bCDE |
C ca | DaB
D dD |
E gAf | c
Primero
A g b c d a
B b
C c d a
D d
E g c
TALF. Tema 7 n 21
7.4.1.3. Implementacin de Analizadores LL
Clculo de los Siguientes:para calcular SIGUIENTE(A) A e
N
de
una gramtica, aplicar las siguientes reglas hasta que no se pueda
aadir ningn elemento nuevo a ningn conjunto SIGUIENTE.
1. Incluir $ en SIGUIENTE(S), donde S es el smbolo inicial de la
gramtica y $ es el delimitador de la entrada por la derecha (el
ltimo smbolo de la entrada).
2. Si hay una produccin A oB (con ) entonces todo los
smbolos de PRIMERO( ) excepto se incluyen en SIGUIENTE(B).
3. Si hay una produccin de la forma A oB o bien A oB con
ePRIMERO(), es decir, * entonces todos los smbolos de
SIGUIENTE(A) se incluyen en SIGUIENTE(B).
En la segunda regla se trata de identificar (para calcular sus
siguientes) smbolos no terminales que no aparezcan al final de las
reglas de produccin, mientras que en la tercera regla se han de
localizar smbolos no terminales que estn al final de la regla de
produccin, o bien estn seguidos por cadenas que derivan en .
TALF. Tema 7 n 22
7.4.1.3. Implementacin de Analizadores LL
Ejemplo:
A BCc | gDB
B bCDE |
C ca | DaB
D dD |
E gAf | c
Primero Siguiente
A g b c d a $ f
B b c d a f $ g
C c d a c d g
D d b g c a $ f
E g c c d a f $ g
Construccin de los conjuntos PRIMERO Y SIGUIENTE
TALF. Tema 7 n 23
7.4.1.3. Implementacin de Analizadores LL
Condiciones LL(1)
Smbolos directores
Ayudan a decidir qu regla utilizar en cada paso
Construccin
Conjunto Primero PRIM (o)
Conjunto Siguiente SIG (A)
Regla
DIR ( A := o ) =
SI e PRIM(o) ENTONCES = PRIM (o) {}SIG(A)
SINO = PRIM (o)
TALF. Tema 7 n 24
7.4.1.3. Implementacin de Analizadores LL
Condiciones necesarias para ser LL(1)
No ambigua
Factorizada por la izquierda
No recursiva a izquierdas
Condicin necesaria y suficiente LL(1): Se dice que una
gramtica cumple la condicin LL(1) si para cada par de reglas
de la gramtica que tengan el mismo antecedente la
interseccin de sus smbolos directores es vaca. Es decir,
Si se tienen la producciones del no terminal A:
A o
1
| o
2
|.....|o
n
se debe cumplir que
1. PRIM(o
i
) PRIM(o
j
)=C i = j o
i
e E*
2. Si e PIM(o
j
) entonces
PRIM(o
i
) SIG(A)=C i =j
TALF. Tema 7 n 25
7.4.1.3. Implementacin de Analizadores LL
Analizador descendente predictivo dirigido por tabla
Utiliza una tabla (tabla LL(1)) para decidir
i + i * i $
$
Pila
Entrada
Analizador sintctico
Tabla LL(1)
(gramtica LL(1))
Salida
TALF. Tema 7 n 26
7.4.1.4. Algoritmo de anlisis sintctico LL
Construccin de tablas LL(1)
Las funciones Primero y Siguiente permiten rellenar siempre que sea
posible, las entradas de una tabla de anlisis sintctico predictivo para la
gramtica.
Para realizar el anlisis sintctico de una cadena generada por una
gramtica LL(1) se define un procedimiento basado en el empleo de una
pila y una tabla de doble entrada. Este procedimiento consiste en asignar a
un par (smbolo ledo (terminal), smbolo de pila (no terminal)) una regla de
la gramtica.
La tabla de anlisis se obtiene mediante el siguiente algoritmo:
Se define la tabla: TABLA :
N
x [
T
{$}] [
N

T
{$}]*
Algoritmo:
A o
a terminal = e PRIM(o)
TABLA[A,a]= o
fin
Si e PRIM(o)
b terminal e SIG(A)
TABLA[A,a]=
fin
Fsi
fin
TALF. Tema 7 n 27
7.4.1.4. Algoritmo de anlisis sintctico LL
Algoritmo:
Procedimiento Anlisis_LL();
Inserta (S); // S= axioma
Leer(smbolo); // Preanlisis=smbolo
Mientras pila_no_vaca hacer
Caso cima_pila sea
terminal: Si cima_pila==smbolo entonces
Desapilar(smbolo);
Leer(smbolo);
sino
Error()
fsi
No_terminal: Si TABLA[cima_pila,smbolo] != error entonces
Desapilar(cima_pila);
Apila(TABLA[cima_pila,smbolo]);
sino
Error()
fsi
fcaso
fmientras
fprocedimiento
TALF. Tema 7 n 28
7.4.1.4. Algoritmo de anlisis sintctico LL. Ejemplo.
1. Gramtica
E := E + E
E := E - E
E := E * E
E := E / E
E := n
E := (E)
3. Primeros y Siguientes
2. Gramtica equivalente
1. E := TE
2. E := +TE
3. | -TE
4. |
5. T := FT
6. T := *FT
7. | /FT
8. |
9. F := n
10. | ( E )
4. Tabla LL(1)
PRIM SIG
E ( n ) $
E + - ) $
T n ( + - ) $
T * / + - ) $
F n ( + - * / ) $
+ - * / ( ) n $
E 1 1
E 2 3 4 4
T 5 5
T 8 8 6 7 8 8
F 10 9
TALF. Tema 7 n 29
7.4.1.4. Algoritmo de anlisis sintctico LL. Ejemplo.
Anlisis de una cadena
Contruir una tabla con 3 columnas
Pila
Entrada procesada
Salida
Ejemplo anterior: anlisis para la cadena n+n*n $
pila entrada salida
E$ n+n*n $ E := TE
TE$ n+n*n $ T := FT
FTE$ n+n*n $ F := n
nTE$ n+n*n $ Emparejar(n)
TE$ +n*n $ T :=

TALF. Tema 7 n 30
LR(k)
la cadena de entrada se recorre de izquierda a derecha (Left
to Right)
cuando una palabra es reconocida, en la cadena de
derivaciones que nos conduce a ella a partir del axioma
siempre se desarrolla el smbolo no terminal ms a la
derecha (Rightmost symbol)
k alude al nmero de smbolos dc lectura adelantada que
necesita el reconocedor para funcionar de manera
determinista
bottom-up pues parten de la cadena de entrada e intentan
reducirla al axioma de la gramtica aplicando las reglas de
produccin en sentido inverso
7.4.2. Reconocimiento ascendente. Gramticas LR(k).
7.4.2.1. Introduccin. Concepto de analizador LR(k)
TALF. Tema 7 n 31
Mtodos de anlisis sintctico LR:
Ventajas:
Se puede construir analizadores LR para reconocer prcticamente todos los
lenguajes de programacin para los que se pueden construir GIC.
Es el mtodo de anlisis por desplazamiento y reduccin sin retroceso ms
general.
Las clases de gramticas que pueden analizarse es un supraconjunto de la
clase de gramticas que se pueden analizar con analizadores sintcticos
predictivos.
Puede detectar un error sintctico tan pronto como sea posible hacerlo en un
examen de izquierda a derecha de la entrada.
Inconvenientes:
Demasiado trabajo realizar manualmente para una gramtica de un lenguaje de programacin tpico, se necesita un
generador de analizadores sintcticos LR.
7.4.2.1. Introduccin
TALF. Tema 7 n 32
Continuamente mira si lo que hay en las
ltimas casillas de la pila concuerda con la parte
derecha de alguna de las reglas de produccin
de la gramtica analizada.
Si existe concordancia, elimina de la cima de la
pila esa cadena y la cambia por la parte
izquierda de la regla de produccin. A esta
accin se le llama reduccin (reduction en la
terminologa inglesa).
Si no existe concordancia alguna, lee un
carcter ms de la entrada y lo apila. A esta
accin se le suele llamar desplazamiento (shift
en la terminologa inglesa).
autmatas de pila
Cabeza de lectura
CINTA DE ENTRADA
PILA
Indicador de stado
CIMA
Mecanismo de control
Si con este proceso se consigue agotar el contenido de la cinta de entrada y
en la cima de la pila queda el axioma de la gramtica, la palabra es
reconocida. En otro caso no lo es.
7.4.2.2. Proceso de Anlisis Sintctico
TALF. Tema 7 n 33
7.4.2.2. Proceso de Anlisis Sintctico.
Ejemplo: G = ({a}, {S}, S, {S ::= Sa | a})
cadena de entrada= aa
PILA ENTRADA ACCIN
aa$ Desplazar a
a a$ Reduce S::=a
S a$ Desplazar a
Sa $ reduce S::=Sa
S $ aceptar
TALF. Tema 7 n 34
1. Construir los cuatro estados del autmata: i el inicial, f el de aceptacin y p
y q dos estados intermedios.
2. Se introducen las transiciones estndar para marcar la cima de la pila, para
determinar cundo aparece en ella el axioma y para determinar cundo
queda vaca: (i, ,; p,#), (p,,,S; q, ) y (q, ,,#; f, ).
3. Por cada smbolo terminal a eE
T
, introducimos una transicin de la forma
(p,a, ; p,a). Esta transicin se corresponde con las acciones
desplazamiento
4. Por cada regla de la forma A::= oe P, aadimos la transicin (p,,o ; p,A).
Estas transiciones se corresponden con las acciones reduce
i p q f
, ; # , S; , #;
a eE
T
a, ; a
, o ; A A e P
7.4.2.3. Analizadores LR y autmatas de pila no deterministas
TALF. Tema 7 n 35
a, ; a
b, ; b
z, ; z
i
p q f
, ; #
, S;
, #;
, zMNz; S , bNb; M
, aMa;M , z;N
, z; M
7.4.2.3. Analizadores LR y autmatas de pila no deterministas
Ejemplo:
G = ({a, b, z}, {S, M, N}, S, {S ::= zMNz, M ::= aMa | z, N ::= bNb | z})
TALF. Tema 7 n 36
estado Pila Entrada Accin
I - zazabzbz$ Push #
p # zazabzbz$ shift z
*p #z azabzbz$ shift a | reduce::= M::= z | reduce N::=z
p #za zabzbz$ shift z
*p #zaz abzbz$ shift a | reduce M::= z | reduce N::=z
p #zaM abzbz$ shift a
*p #zaMa bzbz$ shift b | reduce M::= aMa
p #zM bzbz$ Shift b
p #zMb zbz$ shift z
*p #zMbz bz$ Shift z | reduce M::= z | reduce N::=z
P #zMbN bz$ Shift b
*p #zMbNb z$ Shift z | reduce N::= Bnb
P #zMN z$ Shift z
P #zMNz $ Reduce S::= zMNz | reduce M::=z | reduce N::=z
P #S $ Pop S
Q # $ Pop #
F - $ Accept
(p,a,; p,a)
(p,,, z; p, M)
(p,,, z; p,N)
indeterminacin
7.4.2.3. Analizadores LR y autmatas de pila no deterministas
TALF. Tema 7 n 37
A Ac cc ci i n n
Push #
shift z
shift a | reduce::= M::= z | reduce N::=z
shift z
shift a | reduce M::= z | reduce N::=z
shift a
shift b | reduce M::= aMa
Shift b
shift z
shift z | reduce M::= z | reduce N::=z
shift b
shift z | reduce N::= bNb
shift z
Reduce S::= zMNz | reduce M::=z | reduce N::=z
Si aceptamos una cadena usando este
autmata podremos reconstruir la
secuencia de derivaciones que nos conduce
a ella a partir de S. Para conseguirlo tan
slo hay que estudiar las acciones reduce
en orden inverso:
a
M
z
N
a
M
z
N
b b z z
S
7.4.2.3. Analizadores LR y autmatas de pila no deterministas
TALF. Tema 7 n 38
a
M
z
N
a
M
z
N
b b z z
S
1
2
3
4
5
S zMNz zMbNbz zMbzbz zaMabzbz azabzbz
7.4.2.3. Analizadores LR y autmatas de pila no deterministas
TALF. Tema 7 n 39
PROBLEMAS PARA LA IMPLEMENTACIN
1. AUTMATA NO DETERMINISTA
Explosin Combinatoria
2. MANEJO DE LA PILA
Reconocimiento de patrones
Preanlisis(K)
SOLUCIONES
Marcas=ER
7.4.2.4. Implementacin de Analizadores LR
TALF. Tema 7 n 40
x, ; x
y, ; y
, xSy; S
, xy;S
i p q
f
, ; #
, S;
, #;
7.4.2.4. Implementacin de Analizadores LR
Ejemplo 2. G = ({x, y}, {S}, S, {S ::= xSy|xy})
TALF. Tema 7 n 41
0=
1= #
2 = #xx*
3 = #xx*y
4 = #xx*S
5 = #xx*S
7.4.2.4. Implementacin de Analizadores LR.
Estado Pila Marca Entrada Accin
i - 0 xxxyyy$ Push #
p # 1 xxxyyy$ shift x
p #x 2 xxyyy$ shift x
p #xx 2 xyyy$ shift x
p #xxx 2 yyy$ shift y
*p #xxxy 3 yy$ Reduce S::=xy
p #xxS 4 yy$ shift y
*p #xxSy 5 y$ Reduce S::=xSy
p #xS 4 y$ shift y
p #xSy 5 $ Reduce S::=xSy
p #S 4 $ Pop S
q # 1 $ Pop #
f - 0 $ Accept
TALF. Tema 7 n 42
Estado_Pila
=
Marca
Expresiones Regulares
+
Acciones
TABLA
SIMULADOR DEL AUTMATA
7.4.2.4. Implementacin de Analizadores LR.
TALF. Tema 7 n 43
Modelo de un analizador sintctico LR
7.4.2.5. Algoritmo de anlisis sintctico LR
a
1
....... a
i
...... $ a
n
ENTRADA
SALIDA
accin ir_a
TABLA LR
Programa para
anlisis sintctico LR
PILA
S
m
X
0
S
0
S
m-1
X
m-1
....
S
1
TALF. Tema 7 n 44
El programa conductor es el mismo para todo los analizadores
sintcticos LR, slo cambian las tablas de un analizador a otro.
El programa analizador lee caracteres de entrada de uno en uno, utiliza
una pila para almacenar una cadena de la forma
s
0
X
1
s
1
X
2
s
2
... X
m
s
m
donde s
m
est en la cima de la pila.
Cada X
i
es un smbolo gramatical y cada s
i
es un smbolo llamado estado
(o marca de la pila) que resume la informacin contenida debajo de l en
la pila.
Se usan la combinacin de marca en la cima de pila y el smbolo en
curso de la entrada para indexar la tabla de anlisis sintctico y
determinar la decisin de desplazamiento a reduccin del analizador.
Modelo de un analizador sintctico LR
7.4.2.5. Algoritmo de anlisis sintctico LR
TALF. Tema 7 n 45
a
1
a
2
..
.
a
n
$ A
1
A
2
... A
n
0 accin
0, a1
accin
0, a2
accin
0, an
accin
0,$
ir_a
0, A1
ir_a
0, A2
ir_a
0, An
1 accin
1, a1
accin
1, a2
accin
1, an
accin
1,$
ir_a
1, A1
ir_a
1, A2
ir_a
1, An
.
.
k accin
k, a1
accin
k, a2
accin
k, an
accin
k,$
ir_a
k, A1
ir_a
k, A2
ir_a
k, An
Accin Ir_a
TABLA LR
7.4.2.5. Algoritmo de anlisis sintctico LR
TALF. Tema 7 n 46
Comenzar siempre introduciendo en la pila del autmata la marca
inicial, a la que se suele llamar 0. A partir de este momento, cada vez
que se introduce un smbolo en la pila, se mete a continuacin un
smbolo de estado o marca. Por lo tanto, en cualquier instante, la pila
contendr alternativamente smbolos de la gramtica y marcas.
Determina la fila m a estudiar, que vendr siempre dada por la marca
que aparezca en la cima de la pila y la columna c dada por el smbolo en
curso de la entrada. Despus consulta la entrada accin[m,c] y opera
as:
Anlisis de la cadena de entrada
7.4.2.5. Algoritmo de anlisis sintctico LR
TALF. Tema 7 n 47
aceptar entonces parar, pues la cadena de entrada pertenece al
lenguaje estudiado y el anlisis sintctico ha terminado.
nada, entonces error, la cadena de entrada no pertenece al lenguaje
estudiado y el analizador llama a una rutina de recuperacin de errores.
desplazar i, entonces apilar el carcter actual de la entrada y despus
la marca i en la cima de la pila, avanzando al siguiente smbolo de
entrada.
reducir i entonces estudiar la i-sima regla de produccin de la
gramtica. Si sta es de la forma A::= o entonces se desapilan 2*|o|
smbolos, con lo que en la cima quedar una marca temporal m. A
continuacin se introduce en la pila el smbolo A y se apila la marca de la
casilla ir_a[m,A].
Si en la casilla existe ms de una accin se deberan realizar todas en
paralelo, pero en la prctica este problema suele resolverse usando
mtodos heursticos.
Si Accin(m,c) es:
7.4.2.5. Algoritmo de anlisis sintctico LR
TALF. Tema 7 n 48
Si west en L(G), un anlisis ascendente de w,
de lo contrario se indica error
Una cadena de entrada w
Una gramtica G = (E
T
,, E
N
, S, P)
Una tabla de anlisis sintctico LR para G
Analizador sintctico
7.4.2.5. Algoritmo de anlisis sintctico LR
Pseudocdigo del Algoritmo de anlisis sintctico LR
TALF. Tema 7 n 49
marca := 0; push (marca); simbolo:=read(); entrada:=accin[marca,simbolo];
mientras entrada = aceptar . entrada = error hacer
si entrada= desplazar i entonces
push(simbolo); push(i); marca := i;
simbolo :=read(); /*leer el siguiente smbolo de entrada */
si no si entrada = reducir i entonces /* sea A::= o la regla n i e P */
pop (2*|o|); m ::= top(); push (A); marca::= ir_a [m,A];
push(marca); /* meter el siguiente estado en la cima de la pila */
/* emitir_la_produccin A::= o para ver anlisis ascendente */
si no si entrada es conflictiva entonces
aplicar heurstica
fin si;
entrada ::= accin [marca,simbolo];
fin mientras;
si entrada = aceptar entonces
return /*palabra reconocida*/
si no error()
fin si;
7.4.2.5. Algoritmo de anlisis sintctico LR
TALF. Tema 7 n 50
7.4.2.5. Algoritmo de anlisis sintctico LR
Ejemplo:
G = ({x, y}, {S, S}, S, {S ::= S , S ::= x S y | x y})
Entrada xxyy
x y $ S S
0 Shift 2 1
1 aceptar
2 Shift 2 Shift 3 4
3 Reduce 3 Reduce 3
4 Shift 5
5 Reduce 2 Reduce 2
Algoritmo de anlisis
push (0)
a := token();
REPEAT
Sea s el estado en el tope de la pila
IF Accin [s, a] = dj
push (j)
a := token ();
ELSEIF Accin [s,a] = rk
FOR i := 1 TO Longitud (Parte
derecha de k)
pop ();
p = cima ();
Sea A parte izquierda de k
push (irA [p, A])
ELSEIF Accin [s,a] = aceptar
Terminar con xito
ELSE error
UNTIL true
1 S::=S
2 S::=xSy
3 S::=xy
Pila Entrada Accin
0 xxyy$ Shift 2
0x2 xyy$ Shift 2
0x2x2 yy$ Shift 3
0x2x2y3 y$ Reduce S::=xy
0x2S4 y$ Shift 5
0x2S4y5 $ Reduce S::=xSy
0S1 $ aceptar
TALF. Tema 7 n 51
Marca i=ER o
i
Secuencias de smbolos de la pila = lenguaje regular
Lenguaje de la pila=o= o
i
+ o
2
+....+ o
n
o
0
=
o
i
= S
o
2
= xx*
o
3
= xx*y
o
4
= xx*S
o
5
= xx*Sy
Ejemplo anterior: AUTOMTA FINITO PARA EL LENGUAJE DE LA PILA
0 2 3
x
y
5 4 1
S
S
y
7.4.2.6. CONSTRUCCIN DE TABLAS LR.
TALF. Tema 7 n 52
Gramtica Construir un AF para el lenguaje de la pila
Construir la tabla
gramtica aumentada
Elementos LR(0)
Cerradura(I)
funcin ir_a
Construccin cannica de conjuntos de elementos
7.4.2.6. CONSTRUCCIN DE TABLAS LR
TALF. Tema 7 n 53
7.4.2.6. CONSTRUCCIN DE TABLAS LR
Definiciones previas:
Si G es una gramtica con smbolo inicial S, entonces G, la gramtica
aumentada para G, es G con un nuevo smbolo inicial S y la produccin
S S. El propsito de esta nueva produccin inicial es indicar al
analizador cundo debe detener el anlisis sintctico y anunciar la
aceptacin de la cadena.
Un elemento del anlisis sintctico LR(0) de una gramtica G es una
regla gramatical de G a la que se aade como informacin adicional un
punto que puede aparecer en cualquier lugar de la parte derecha.
Ejemplo, para la regla S ::= xSy, los elementos LR(0) son:
S ::= -xSy, S::=x-Sy, S::=xS-y y S::=xSy-.
Las reglas de la forma A ::= tan slo tienen un elemento LR(0) que
se puede escribir de tres formas distintas:
A:: = -
A:: = -
A ::= -
TALF. Tema 7 n 54
7.4.2.6. CONSTRUCCIN DE TABLAS LR
Funcin Cerradura: Si I es un conjunto de elementos LR(0) para una gramtica G,
entonces Cerradura(I) es el conjunto de elementos LR(0) construido a partir de I por
las dos reglas:
1. Inicialmente, todo elemento LR(0) de I se aade a Cerradura(I).
2. Si A::= o - B| est en Cerradura(I) y B:: = es una produccin, entonces se
aade el elemento B:: = - a Cerradura(I), si todava no est ah. Se aplica esta
regla hasta que no se puedan aadir ms elementos a Cerradura(I).
Ejemplo
Dado el estado I= {S::=-AB} y el conjunto de producciones {A::=a|B, B::=b},
Cerradura(I) = {S::=-AB, A ::=-a, A ::= -B, B ::= -b}
Al introducir el elemento A ::= -B, es preciso aadir todas las B_producciones a la
Cerradura. En el caso general, es necesario repetir este proceso hasta que resulte
imposible aadir ms elementos al conjunto Cerradura.
Se define ir_a(I,X) como la cerradura del conjunto de todos los elementos [A::= oX-|]
tales que [A::= o - X| ] est en I
Ejemplo
Si I es el conjunto de elementos {[ S::= -S; S::= -xSy; S::= -xy]}
entonces ir_a(I,x) = {S::=x -Sy ; S::= -xSy ; S::= -xy ; S::=x -y}
TALF. Tema 7 n 55
Entrada:
I // Estado al que calcular la Cerradura
P // Reglas de produccin de la gramtica
Proceso:
J:=I
Repetir
para cada elemento A:: = o - B| e J
para cada produccin B::= e P tal que B::= - e J
J := J {B::= -}
fin para
fin para
hasta que sea imposible aadir ms elementos LR(0) a J
Salida: J
Pseudocdigo del algoritmo Cerradura(I):
Ejemplo: G= ({x,y}, {S, S}, S, {S ::=S, S ::=xSy | xy}).
Si I es el conjunto de un elemento {[S::=-S]}
entonces Cerradura(I) { S::= -S ; S::= -xSy ; S::= -xy}
7.4.2.6. CONSTRUCCIN DE TABLAS LR
TALF. Tema 7 n 56
Procedure elementos (G)
Begin
C:={cerradura({[S::=-S]})};
Repetir
Para cada conjunto de elementos I en C y cada smbolo gramatical X tal que ir_a (I,X) = C y no est en C hacer
Aadir ir_a(I,X) a C
Hasta que no se puedan aadir ms conjuntos de elementos a C
end
Pseudocdigo del algoritmo para construir C, coleccin cannica de conjuntos de elementos LR(0) para una gramtica
aumentada G
7.4.2.6. CONSTRUCCIN DE TABLAS LR.
A partir de la Coleccin cannica de elementos con transiciones dadas por ir_a se construye el AF.
TALF. Tema 7 n 57
Entrada: G = (E
T
,, E
N
, S, P)
Proceso:
q
0
:= Cerradura ({S::=-S}, P)
EM := C // Estados marcados (estudiados)
ENM := {q
0
} // Estados no marcados (no estudiados)
f := {} // Funcin de transicin
mientras ENM = C
sacar un estado T de ENM;
EM:=EM T;
para cada A::= o-x| e T
ir_a(T,x):= Cerradura({ A::= ox - | },P);
Si ir_a(T,x) e(EM ENM) entonces
ENM ::= ENM ir_a(T,x);
fin si
f(T,x) = ir_a(T,x);
fin para
fin mientras
Salida: A =(Q, E, f, F, q
0
) // Q=EM; F=EM; E = E
T
E
N
Construccin del AFD para G
7.4.2.6. CONSTRUCCIN DE TABLAS LR
TALF. Tema 7 n 58
Ejemplo: Aplicar el algoritmo a G = ({x, y}, {S, S}, S, {S ::= S , S ::= x S y | x y})
1. Estado inicial del autmata Cierre({S::=S) (Aadiendo al estado todos los elementos LR(0) iniciales de todas las S_producciones de la gramtica.)
S' ::= S
S ::= -xSy
S ::= -xy
0
2. Dado que en este estado el punto de los elementos LR(0) est a la izquierda del smbolo S y del smbolo x, son posibles dos
transiciones etiquetadas con estos caracteres. La primera nos conduce hacia un estado etiquetado con S::= S . La segunda
inicialmente nos conducira hacia un estado etiquetado con los elementos {S::=x-Sy, S::=x- . En esta situacin, el punto ha
quedado a la izquierda del smbolo no terminal S por lo que siguiendo los pasos del algoritmo deberamos aadir a este estado los
elementos LR(0) iniciales de todas las S-producciones .
7.4.2.6. CONSTRUCCIN DE TABLAS LR. Ejemplo.
S ::=x -Sy
S ::=x -y
S ::= -xSy
S ::= -xy
S ::= S-
1
2
S
S' ::= -S
S ::=
-xSy
S ::= -xy
0
x
TALF. Tema 7 n 59
3. Si se contina el estado 2 y todos los que a partir de ste aparezcan, se
obtiene el siguiente autmata completo para el lenguaje de la pila:
S::=xSy
-
S ::=x -Sy
S ::=x -y
S ::= -xSy
S ::= -xy
S ::= S-
1
2
S
S' ::= -S
S::= -xSy
S ::= -xy
0
x
5
S ::= xy-
4
y
y
S ::=xS-y
S
3
x
7.4.2.6. CONSTRUCCIN DE TABLAS LR
TALF. Tema 7 n 60
Algoritmo para la construccin de la tabla LR
Entrada: Una gramtica aumentada G.
Salida: Las funciones accin e ir_a de la tabla de anlisis sintctico LR para G.
Proceso:
1. Construir el AFD para las palabras de la pila.
2. Los nmeros de los estados del AFD constituirn las marcas o estados de la pila, cualquier numeracin que realicemos ser vlida.
3. Las acciones de anlisis sintctico para el estado i se determinan como sigue:
3.1. Si [A::=o - a|] est en i y f (i ,a)=j , entonces accin[i,a]= desplazar j, a e
T
.
GRAMATICA AMPLIADA GAFD TABLA LR
7.4.2.6. CONSTRUCCIN DE TABLAS LR
a
i
j Por cada transicin de la forma
a e E
T
aadir a accin (i,,j )= shift j
3.2. Si [A::=o -] est en en i ,distinto de S::=S - , entonces accin[i,a]=reducir k a e SIG(A) siendo k el nmero de la regla A::=o en el conjunto de
reglas de produccin.
3.3. Si [S::=S -] est en i , entonces accin[i,$]= aceptar.
4. Las transiciones ir_a para el estado i se construyen Ae
N
utilizando la regla:
Si f(i ,A)= j , entonces ir_a[ i , A ]= j.
A
i j
Por cada ransicin de la forma
A e E
N
asignamos a la entrada ir_a(i,A) el valor j
5. Todas las entradas no definidas por las reglas 2 y 3 son consideradas error.
6. El estado inicial del analizador es el estado inicial del AFD, que contiene [S::= -S ].
TALF. Tema 7 n 61
CONFLICTOS
En cada paso se aade nuevas acciones
desplazar i / reducir j (d/r) reducir i / reducir j (r/r)
LA GRAMTICA NO ES LR
7.4.2.6. CONSTRUCCIN DE TABLAS LR
CONFLICTOS
INTENTAR TODAS LAS OPCIONES POSIBLES
APLICAR REGLAS HEURSTICAS
Si accin[i,a] = desplazar i / reducir j se consulta la entrada, y si el
carcter que aparece es a entonces se lleva a cabo la accin desplazar i. En
otro caso se opta por reducir.
Si accin[i,a] = reducir i / reducir j, se reduce la regla a la que se haya
asignado un nmero ms bajo. Esto es, si i < j se reduce la regla nmero i, en
otro caso la regla nmero j.
TALF. Tema 7 n 62
Analizadores LR(0)
Gramticas LR libres de conflictos
gramticas independientes del contexto
problema
mtodo LR(0)
conflictos d/r
solucin
reduccin de una regla como A::=o tan slo cuando el carcter
que se encuentra en la cinta de entrada pertenezca al conjunto
siguiente (A).
7.4.2.6. CONSTRUCCIN DE TABLAS LR
TALF. Tema 7 n 63
Ejemplo: G = ({x, y}, {S, S}, S, {S ::= S , S ::= x S y | x y})
S::=xSy-
S ::=x -Sy
S ::=x -y
S ::= -xSy
S ::= -xy
S ::= S-
1
2
S
S' ::=
-S
S::=-xS
y
S ::=
-xy
0
x
5
S ::= xy-
4
y
y
S
:=xS-y
S
3
x
7.4.2.6. CONSTRUCCIN DE TABLAS LR
x y $ S S
0 Shift2 1
1 S::=S 1 aceptar
2 S::=xSy 2 Shift2 Shift3 4
3 S::=xy 3 Reduce3 Reduce3
4 Shift5
5 Reduce2 Reduce2
TALF. Tema 7 n 64
S ::= a-
S ::= i-SeS
S ::= i-S
S ::= -iSeS
S ::= -iS
S ::= -a
3
S ::=iSeS-
6
S ::= S-
1
2
S
S
e
S' ::= -S
S ::= - iSeS
S ::= - iS
S ::= -a
0
4
a
5
S ::=iS -eS S ::=iS
-
S ::= iSe-S S ::=
-iSeS
S ::= -iS
S ::= -a
a
i
i
i
S
a
CONFLICTO S/R
7.4.2.6. CONSTRUCCIN DE TABLAS LR
1 S::=S
2 S::=iSeS
3 S::=iS
4 S::= a
Ejemplo:
Construir el autmata para reconocer la sentencia if-then-else
sent :: = if exp then sent else sent
| if exp then sent
| otra_sent
De forma reducida G = ({i, e, a}, {S,S}, {S::=S,S::= iSeS | iS | a})
i e a $ S S
0 Shiift 2 Shiift 3 1
1 aceptar
2 Shiift 2 Shiift 3 4
3 Reduce 4 Reduce 4
4
Shiift 5
Reduce 3
Reduce 3
5 Shiift 2 Shiift 3 6
6 Reduce 2 Reduce 2
TALF. Tema 7 n 65
Ejemplo: analizar la traza del autmata guiado por la tabla de la gramtica de if-then-else para la cadena de entrada iiaeaea$. Esta cadena se corresponde con la sentencia:
if exp then
if exp then
sent
else
sent
else
sent
7.4.2.6. CONSTRUCCIN DE TABLAS LR
La identacin recoge el anidamiento deseado para esta sentencia pero no
siempre corresponde con el que realiza el analizador.
Pila Entrada Accin
0
iiaeaea$
Shift 2
0i2
iaeaea$
Shift 2
0i2i2 aeaea$ Shift 3
0i2i2a3
eaea$
Reduce S::=a
0i2i2S4
eaea$
Shift 5 / Reduce S::=iS
0i2i2S4e5
aea$
Shift 3
0i2i2S4e5a3
ea$
Reduce S::=a
0i2i2S4e5S6
ea$
Reduce S::=iSeS
0i2S4
ea$
Shift 5 / Reduce S::=iS
0i2S4e5
a$
Shift 2
0i2S4e5a3
$
Reduce S::=iSeS
0S1
$
aceptar
Pila Entrada Accin
0
iiaeaea$
Shift 2
0i2
iaeaea$
Shift 2
0i2i2 aeaea$ Shift 3
0i2i2a3
eaea$
Reduce S::=a
0i2i2S4
eaea$
Shift 5 / Reduce S::=iS
0i2S4
eaea$
Shift 5 / Reduce S::=iS
0S1
eaea$
error
TALF. Tema 7 n 66
Ejemplo: obtener un analizador para listas de elementos que pueden estar vacas.
La estructura sintctica es: Lista::= lista elemento |
G = ({i}, {S, S }, S, {S ::= S, S::=Si | })
S ::= S- S' ::=
S-i
1
S
S' ::= -S S' ::=
-Si S' ::= -
0
S ::= Si-
2
i
S::= Elemento LR(0) =S::= Reduccin con la marca 0
7.4.2.6. CONSTRUCCIN DE TABLAS LR
i $ S S
1 S::=S 0 Reduce3 Reduce3 1
2 S::=Si 1 Shiift 2 aceptar
3 S::= 2 Reduce2 Reduce2
Pila Entrada Accin
0
iii$
Reduce S::=
0S1
iii$
Shift 2
0S1i2 Ii$ Reduce S::=Si
0S1
ii$
Shift 2
0S1i2
i$
Reduce S::=Si
0S1
i$
Shift 2
0S1i2
$
Reduce S::=Si
0S1
$
aceptar
TABLA LR(0)
Traza con iii$
TALF. Tema 7 n 67
Ejemplo: la misma gramtica anterior pero con recursividad por la
dercha
G = ({i}, {S, S }, S, {S ::= S, S::=iS | })
S ::= i-S
S ::= -iS
S ::= -
3
S ::= S-
1
2
S
S' ::= -S
S ::= -iS
S ::= -
0
S ::= iS-
i
i
S
7.4.2.6. CONSTRUCCIN DE TABLAS LR
i $ S S
0 Shiift 2 / Reduce 3 Reduce 3 1
1 aceptar
2 Shiift 2 / Reduce 3 Reduce 3 3
3 Reduce 2 Reduce 2
Pila Entrada Accin
0
iii$
Shift 2
0i2
ii$
Shift 2
0i2i2 i$ Shift 2
0i2i2i2
$
Reduce S::=
0i2i2i2S3
$
Reduce S::=iS
0i2i2S3
$
Reduce S::=iS
0i2S3
$
Reduce S::=iS
0S1
$
aceptar

Das könnte Ihnen auch gefallen