Sei sulla pagina 1di 67

TEMA 7

AUTMATAS CON PILA

7. AUTMATAS CON PILA


7.1.
7.2.
7.3.
7.4.

Introduccin
Definicin de Autmatas con pila.
Lenguaje aceptado por un autmata con pila.
Autmatas con pila y lenguajes libres del contexto.
7.4.1. Reconocimiento descendente. Gramticas LL(k).
7.4.1.1.
7.4.1.2.
7.4.1.3.

Proceso de Anlisis Sintctico Descendente.


Analizadores LL y autmatas de pila no deterministas
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.
7.4.2.2.
7.4.2.3.
7.4.2.4.
7.4.2.5.
7.4.2.6.

TALF. Tema 7

Introduccin
Proceso de Anlisis Sintctico Ascendente.
Analizadores LR y autmatas de pila no deterministas
Implementacin de Analizadores LR
Algoritmo de anlisis sintctico LR
Construccin de Tablas LR.

n 2

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

x, s; t

Grficamente:
autmatas con pila
Cadena de ENTRADA

Cadena de ENTRADA

x
Cabeza de lectura

Cabeza de lectura
CIMA

r
p
q
Mecanismo de control

TALF. Tema 7

s
s
PILA

CIMA
r
p

t
s
PILA

q
Mecanismo de control

n 3

7.2. Definicin de Autmatas con pila.

Definicin: Un Autmata a Pila se define como la sptupla:(, P, Q, A0, q0, f, F)


donde:

: alfabeto de entrada.

P: alfabeto de la pila.

Q: conjunto de estados.

A0: smbolo inicial de la pila (#).

q0: 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 (ni1), 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 (ni1), 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 4

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

qQ, AP, cardinal(f(q, , A))>0 f(q, a, A) =, a.

2.

qQ, AP, a{} cardinal(f(q, a, A))<2.

TALF. Tema 7

n 5

7.3. Lenguaje aceptado por un autmata con pila.

Lenguaje aceptado por un AP (M=(, P, Q, A0, q0, f, F)


Lenguaje aceptado por criterio de estado final
LEF(M) = (x / (q0, x, A0) * (p, , X), pF, X P*}
Lenguaje aceptado por criterio de pila vaca
LPV(M) = (x / (q0, x, A0) * (p, , ), pQ}
Equivalencia
LEFLPV
,; #
i

1.

q0

Nuevo estado i tal que:

2.

Nuevo estado p tal que:

3.

xP crear las transiciones:

,;

,;
,x;
p

4.

Nuevo estado f que ser el final tal que:

LPVLEF

1.
2.

Igual que el anterior.


Nuevo estado f tal que qQ:

,; #

, #;

qi
qj

TALF. Tema 7

, #;

q0
f

, #;

n 6

7.3. Lenguaje aceptado por un autmata con pila. Ejemplo.

Ejemplo: Autmata con pila que reconoce el lenguaje L={xnym, n>m}

Aplicamos el algoritmo de LEFLPV

x, ;x

y,x;

y,x;

x, ;x

TALF. Tema 7

, ; #

, ;

y,x;

,x;

y,x;

, #;

n 7

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:

TALF. Tema 7

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.
n 8

7.4.1.1. Proceso de Anlisis Sintctico Descendente.


autmatas con pila
El proceso comienza apilando el axioma de
la gramtica. Continuamente mira lo que hay
en las ltimas casillas de la pila:

CINTA DE ENTRADA

Cabeza de lectura

CIMA
Indicador de stado

Mecanismo de control

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.

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.

TALF. Tema 7

n 9

7.4.1.1. Proceso de Anlisis Sintctico.


Ejemplo: G = ({a}, {S}, S, {S ::= aS | a})
cadena de entrada= aa
PILA

ENTRADA
aa$

Apilar S

aa$

S::=aS

aS

aa$

Desapilar a; Leer()

S
a

a$

S::=a
Desapilar a; Leer()

a$
$

TALF. Tema 7

ACCIN

aceptar

n 10

7.4.1.2. Analizadores LL y autmatas de pila no deterministas

1.
2.

3.
4.

Construir los cuatro estados del autmata: i el inicial, f el de aceptacin y p


y q dos estados intermedios.
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, ).
Por cada smbolo terminal a T , introducimos una transicin de la forma
(q,a,a;q,).
Por cada regla de la forma A::= P, aadimos la transicin (q,,A;q,).
, A;

, ; #

, S;

A P

, #;

q
a, a;

TALF. Tema 7

f
a T

n 11

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})
a,a;
b,b;
z,z;

, ; #

, ;S

, #;

, S; zMNz
,N; bNb
, M; aMa
, N; z
, M; z

TALF. Tema 7

n 12

7.4.1.2. Analizadores LL y autmatas de pila no deterministas


estado

Pila

Entrada

Accin

zazabzbz$

(i, , ; p, #)

zazabzbz$

(p, , ; q, S)

S#

zazabzbz$

zMNz#

zazabzbz$

(q, z,z;q,)

MNz#

azabzbz$

(q,,M;q, aMa) | (q, , M ; q, z)

aMaNz#

azabzbz$

(q, a,a;q,)

MaNz#

zabzbz$

(q, , M ; q, z)| (q,,M;q, aMa)

zaNz#

zabzbz$

(q, z,z;q,)

aNz#

abzbz$

(q, a,a;q,)

Nz#

bzbz$

(q,,N;q, bNb) | (q, , N ; q, z)

bNbz#

bzbz$

(q, b,b;q,)

Nbz#

zbz$

(q, , N ; q, z)

zbz#

zbz$

(q, z,z;q,)

bz#

bz$

(q, b,b;q,)

z#

z$

(q, z,z;q,)

(q, , #; f, )

TALF. Tema 7

indeterminacin

(q, , S ; q, zMNz)

(q,,M;q, aMa)
(q, ,M; q, z)

Aceptar

n 13

7.4.1.2. Analizadores LL y autmatas de pila no deterministas


Accin
(i, , ; p, #)
(p, , ; q, S)
(q, , S ; q, zMNz)

Si aceptamos una cadena usando este


autmata
podremos
reconstruir
la
secuencia de derivaciones que nos conduce
a ella a partir de S.

(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 14

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 15

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.

TALF. Tema 7

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.
n 16

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)
(2)
(3)
(4)

S cAd
A aB
Aa
Bb

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 17

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 es una cadena de smbolos gramaticales, se llama PRIMERO()


al conjunto de smbolos terminales por los que comienzan las cadenas derivadas
de .

Si *, entonces tambin pertenece a PRIMERO().

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 T tales que haya una derivacin de la


forma S*Aa para algunas cadenas 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 $SIGUIENTE(A) siendo $ el smbolo que delimita la entrada por la
derecha.

TALF. Tema 7

n 18

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 Y1Y2 Yk

Si existe un i tal que a PRIMERO(Yi) y adems


Y1Y2 Yi-1 * esto es, si est en PRIMERO(Y1 ).. PRIMERO(Yi-1)

entonces:
PRIMERO(X) = PRIMERO(X) {a}

Si PRIMERO(Yj) para j = 1; 2;..; k entonces:

PRIMERO(X) = PRIMERO(X) {}

TALF. Tema 7

Por ejemplo, todo los smbolos de PRIMERO(Y1) sin duda pertenecern a


PRIMERO(X). Si Y1 no deriva a , entonces no se aade nada ms a
PRIMERO(X), pero si Y1 * , entonces se aaden los elementos de
PRIMERO(Y2) y as sucesivamente.
n 19

7.4.1.3. Implementacin de Analizadores LL

Se puede calcular el conjunto PRIMERO para cualquier cadena de la forma


X1X2..Xn del siguiente modo:
Aadir a PRIMERO(X1X2Xn) los smbolos a PRIMERO(X1).
Si PRIMERO(X1), aadir los smbolos de PRIMERO(X2).
Si est tanto en PRIMERO(X1) como en PRIMERO(X2), aadir
tambin los smbolos distintos de de PRIMERO(X3) y as
sucesivamente.
Por ltimo, aadir a PRIMERO(X1X2Xn) si i, PRIMERO(Xi)
contiene a .

Ejemplo:
gramtica:

TALF. Tema 7

Primero

A BCc | gDB

gbcda

B bCDE |

C ca | DaB

cda

D dD |

E gAf | c

gc
n 20

7.4.1.3. Implementacin de Analizadores LL

Clculo de los Siguientes:para calcular SIGUIENTE(A) A 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 B (con ) entonces todo los


smbolos de PRIMERO( ) excepto se incluyen en SIGUIENTE(B).

3.

Si hay una produccin de la forma A B o bien A B con


PRIMERO(), 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 21

7.4.1.3. Implementacin de Analizadores LL


Construccin de los conjuntos PRIMERO Y SIGUIENTE

Ejemplo:
Primero

Siguiente

A BCc | gDB

gbcda

$f

B bCDE |

cdaf$g

C ca | DaB

cda

cdg

D dD |

bgca$f

E gAf | c

gc

cdaf$g

TALF. Tema 7

n 22

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

Conjunto Siguiente SIG (A)

Regla

DIR ( A := ) =

TALF. Tema 7

SI PRIM() ENTONCES = PRIM () {}SIG(A)

SINO = PRIM ()

n 23

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 1 | 2|.....|n se debe cumplir que
1. PRIM(i) PRIM(j)= i j i *
2. Si PIM(j) entonces
PRIM(i) SIG(A)= i j

TALF. Tema 7

n 24

7.4.1.3. Implementacin de Analizadores LL

Analizador descendente predictivo dirigido por tabla

Utiliza una tabla (tabla LL(1)) para decidir


i

Entrada

Salida
Analizador sintctico

$
Tabla LL(1)
(gramtica LL(1))

Pila

TALF. Tema 7

n 25

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:

TALF. Tema 7

A
a terminal PRIM()
TABLA[A,a]=
fin
Si PRIM()
b terminal SIG(A)
TABLA[A,a]=
fin
Fsi
fin
n 26

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 27

7.4.1.4. Algoritmo de anlisis sintctico LL. Ejemplo.


2.

1.

Gramtica
E := E + E
E := E - E
E := E * E
E := E / E
E := n
E := (E)

3.

Primeros y Siguientes

PRIM

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

SIG

(n

)$

+-

)$

n(

+-)$

*/

+-)$

n(

+-*/)$

4.
+

E := TE
E := +TE
| -TE
|
T := FT
T := *FT
| /FT
|
F := n
|(E)

Tabla LL(1)
-

E
E
T

1
2

3
8

5
8

T
F

TALF. Tema 7

Gramtica equivalente

4
5

8
10

8
9

n 28

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 29

7.4.2. Reconocimiento ascendente. Gramticas LR(k).

7.4.2.1. Introduccin. Concepto de analizador LR(k)


la cadena de entrada se recorre de izquierda a derecha (Left
to Right)

LR(k)

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

TALF. Tema 7

n 30

7.4.2.1. Introduccin
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.

TALF. Tema 7

n 31

7.4.2.2. Proceso de Anlisis Sintctico

autmatas de pila
CINTA DE ENTRADA

Cabeza de lectura

CIMA
Indicador de stado

Mecanismo de control

PILA

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

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.
TALF. Tema 7

n 32

7.4.2.2. Proceso de Anlisis Sintctico.


Ejemplo: G = ({a}, {S}, S, {S ::= Sa | a})
cadena de entrada= aa

PILA

TALF. Tema 7

ENTRADA

ACCIN

aa$

Desplazar a

a$

Reduce S::=a

a$

Desplazar a

Sa

reduce S::=Sa

aceptar

n 33

7.4.2.3. Analizadores LR y autmatas de pila no deterministas


1.
2.

3.

4.

Construir los cuatro estados del autmata: i el inicial, f el de aceptacin y p


y q dos estados intermedios.
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, ).
Por cada smbolo terminal a T , introducimos una transicin de la forma
(p,a, ; p,a). Esta transicin se corresponde con las acciones
desplazamiento
Por cada regla de la forma A::= P, aadimos la transicin (p,, ; p,A).
Estas transiciones se corresponden con las acciones reduce
, ; A A P

, ; #

, S;

, #;

a, ; a a T

TALF. Tema 7

n 34

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

a, ; a
b, ; b
z, ; z

, ; #

, zMNz; S
, aMa;M
, z; M
TALF. Tema 7

, S;

, #;

, bNb; M
, z;N
n 35

7.4.2.3. Analizadores LR y autmatas de pila no deterministas


estado

Pila

Entrada

Accin

zazabzbz$

Push #

zazabzbz$

shift z

*p

#z

azabzbz$

shift a | reduce::= M::= z | reduce N::=z

#za

zabzbz$

shift z

*p

#zaz

abzbz$

shift a | reduce M::= z | reduce N::=z

#zaM

abzbz$

shift a

*p

#zaMa

bzbz$

shift b | reduce M::= aMa

#zM

bzbz$

Shift b

#zMb

zbz$

shift z

*p

#zMbz

bz$

Shift z | reduce M::= z | reduce N::=z

#zMbN

bz$

Shift b

*p

#zMbNb

z$

Shift z | reduce N::= Bnb

#zMN

z$

Shift z

#zMNz

Reduce S::= zMNz | reduce M::=z | reduce N::=z

#S

Pop S

Pop #

Accept

TALF. Tema 7

indeterminacin

(p,a,; p,a)

(p,,, z; p, M)

(p,,, z; p,N)

n 36

7.4.2.3. Analizadores LR y autmatas de pila no deterministas


Accin

Push #
shift z
shift a | 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:

shift z
shift a | reduce M::= z | reduce N::=z

a b

shift a
shift b | reduce M::= aMa
Shift b

M
M

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
TALF. Tema 7

S
n 37

7.4.2.3. Analizadores LR y autmatas de pila no deterministas

z a z a b z b z

2
3

M
N

S zMNz zMbNbz zMbzbz zaMabzbz azabzbz


TALF. Tema 7

n 38

7.4.2.4. Implementacin de Analizadores LR

PROBLEMAS PARA LA IMPLEMENTACIN


1. AUTMATA NO DETERMINISTA
Explosin Combinatoria

SOLUCIONES

Preanlisis(K)

2. MANEJO DE LA PILA

Reconocimiento de patrones
TALF. Tema 7

Marcas=ER
n 39

7.4.2.4. Implementacin de Analizadores LR

Ejemplo 2. G = ({x, y}, {S}, S, {S ::= xSy|xy})

x, ; x
y, ; y

, ; #

, S;
p

, #;

, xSy; S
, xy;S

TALF. Tema 7

n 40

7.4.2.4. Implementacin de Analizadores LR.


Estado

Pila

Marca

Entrada

Accin

xxxyyy$

Push #

xxxyyy$

shift x

#x

xxyyy$

shift x

#xx

xyyy$

shift x

#xxx

yyy$

shift y

*p

#xxxy

yy$

#xxS

yy$

*p

#xxSy

y$

#xS

y$

#xSy

#S

Pop S

Pop #

Accept

TALF. Tema 7

Reduce S::=xy
shift y

0=
1= #
2 = #xx*
3 = #xx*y

Reduce S::=xSy
shift y

4 = #xx*S

Reduce S::=xSy

5 = #xx*S

n 41

7.4.2.4. Implementacin de Analizadores LR.

Estado_Pila

Expresiones Regulares

Marca

Acciones

TABLA

SIMULADOR DEL AUTMATA

TALF. Tema 7

n 42

7.4.2.5. Algoritmo de anlisis sintctico LR


ENTRADA
a1
Sm-1
Xm-1
....
Sm

.......

ai

......

an

Programa para
anlisis sintctico LR

SALIDA

S1
X0
S0

PILA

accin

ir_a
TABLA LR

Modelo de un analizador sintctico LR


TALF. Tema 7

n 43

7.4.2.5. Algoritmo de anlisis sintctico LR


Modelo de un analizador sintctico LR
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


s0X1s1X2s2... Xmsm donde sm est en la cima de la pila.
Cada Xi es un smbolo gramatical y cada si 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.

TALF. Tema 7

n 44

7.4.2.5. Algoritmo de anlisis sintctico LR

TABLA LR
..
.

an

A1

A2

...

An

a1

a2

accin0, a1

accin0, a2

accin0, an

accin0,$

ir_a0, A1

ir_a0, A2

ir_a0, An

accin1, a1

accin1, a2

accin1, an

accin1,$

ir_a1, A1

ir_a1, A2

ir_a1, An

accink, a1

accink, a2

accink, an

accink,$

ir_ak, A1

ir_ak, A2

ir_ak, An

.
.

Accin
TALF. Tema 7

Ir_a
n 45

7.4.2.5. Algoritmo de anlisis sintctico LR


Anlisis de la cadena de entrada

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:

TALF. Tema 7

n 46

7.4.2.5. Algoritmo de anlisis sintctico LR


Si Accin(m,c) es:
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::= entonces se desapilan 2*||
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.
TALF. Tema 7

n 47

7.4.2.5. Algoritmo de anlisis sintctico LR


Pseudocdigo del Algoritmo de anlisis sintctico LR
Una cadena de entrada w
Una gramtica G = (T,, N , S, P)
Una tabla de anlisis sintctico LR para G

Analizador sintctico

Si w est en L(G), un anlisis ascendente de w,


de lo contrario se indica error

TALF. Tema 7

n 48

7.4.2.5. Algoritmo de anlisis sintctico LR


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::= la regla n i P */
pop (2*||); 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::= 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;
TALF. Tema 7

n 49

7.4.2.5. Algoritmo de anlisis sintctico LR

1 S::=S

Ejemplo:

G = ({x, y}, {S, S}, S, {S ::= S , S ::= x S y | x y})

Entrada xxyy

2 S::=xSy
3 S::=xy

Shift 2

Pila

0
0x2

Shift 2

Shift 3

xxyy$

Shift 2

xyy$

Shift 2

yy$

Shift 3

0x2x2y3

y$ Reduce S::=xy

0x2S4

y$

Reduce 3 Reduce 3
Shift 5

Shift 5
$ Reduce S::=xSy

Reduce 2 Reduce 2
0S1

TALF. Tema 7

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

0x2S4y5
5

Accin

aceptar
0x2x2

Entrada

aceptar

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

n 50

7.4.2.6. CONSTRUCCIN DE TABLAS LR.

Marca i=ER i

Secuencias de smbolos de la pila = lenguaje regular

Lenguaje de la pila= = i + 2 +....+ n


Ejemplo anterior:

AUTOMTA FINITO PARA EL LENGUAJE DE LA PILA

0 =
i = S

1
S

2 = xx*
3 = xx*y
4 = xx*S
5 = xx*Sy
TALF. Tema 7

S
x

y
2

n 51

7.4.2.6. CONSTRUCCIN DE TABLAS LR

Gramtica

Construir un AF para el lenguaje de la pila

Construir la tabla

gramtica aumentada
Elementos LR(0)
Cerradura(I)

Construccin cannica de conjuntos de elementos

funcin ir_a

TALF. Tema 7

n 52

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::=xSy, S::=xSy 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 53

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::= 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::= X]
tales que [A::= 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 54

7.4.2.6. CONSTRUCCIN DE TABLAS LR


Pseudocdigo del algoritmo Cerradura(I):
Entrada:
Proceso:

Salida: J

I
P

// Estado al que calcular la Cerradura


// Reglas de produccin de la gramtica

J:=I
Repetir

para cada elemento A:: = B J


para cada produccin B::= P tal que B::= J
J := J {B::= }
fin para
fin para
hasta que sea imposible aadir ms elementos LR(0) a J

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}

TALF. Tema 7

n 55

7.4.2.6. CONSTRUCCIN DE TABLAS LR.


Pseudocdigo del algoritmo para construir C, coleccin cannica de conjuntos de elementos LR(0) para una gramtica

aumentada G

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)
Aadir ir_a(I,X) a C
Hasta que no se puedan aadir ms conjuntos de elementos a C
end

y no est en C

hacer

A partir de la Coleccin cannica de elementos con transiciones dadas por ir_a se construye el AF.

TALF. Tema 7

n 56

7.4.2.6. CONSTRUCCIN DE TABLAS LR

Construccin del AFD para G


Entrada: G = (T,, N , S, P)
Proceso:
q0 := Cerradura ({S::=S}, P)
EM :=
// Estados marcados (estudiados)
ENM := {q0 }
// Estados no marcados (no estudiados)
f := {}
// Funcin de transicin
mientras ENM
sacar un estado T de ENM;
EM:=EM T;
para cada A::= x T
ir_a(T,x):= Cerradura({ A::= x },P);
Si ir_a(T,x) (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, , f, F, q0) // Q=EM; F=EM; = T N
TALF. Tema 7

n 57

7.4.2.6. CONSTRUCCIN DE TABLAS LR. Ejemplo.


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

0
S' ::= S
S ::= xSy
S ::= xy

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::=xSy, 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 .

0
1
S' ::= S
S
::=
xSy
S ::= xy
x

S ::= S

2
S ::=x Sy
S ::=x y
S ::= xSy
S ::= xy
TALF. Tema 7

n 58

7.4.2.6. CONSTRUCCIN DE TABLAS LR


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:

1
S' ::= S
S::= xSy
S ::= xy

S ::= S
5

4
x
2

S ::=xSy

S
S ::=x Sy
S ::=x y
S ::= xSy
S ::= xy

S::=xSy

3
y

S ::= xy

TALF. Tema 7

n 59

7.4.2.6. CONSTRUCCIN DE TABLAS LR


GRAMATICA AMPLIADA G AFD

TABLA LR

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::= a] est en i y f (i ,a)=j , entonces accin[i,a]= desplazar j, a T.
Por cada transicin de la forma

a T aadir a accin (i,,j )= shift j

3.2. Si [A::= ] est en en i ,distinto de S::=S , entonces accin[i,a]=reducir k a SIG(A) siendo k el nmero
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 AN utilizando la regla:
Si f(i ,A)= j , entonces ir_a[ i , A ]= j.
Por cada ransicin de la forma

de la regla A::= en el conjunto de

A 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 60

7.4.2.6. CONSTRUCCIN DE TABLAS LR

En cada paso se aade nuevas acciones


CONFLICTOS
desplazar i / reducir j (d/r)

reducir i / reducir j (r/r)

LA GRAMTICA NO ES LR
INTENTAR TODAS LAS OPCIONES POSIBLES
CONFLICTOS

APLICAR REGLAS HEURSTICAS

Si accin[i,a] = desplazar i / reducir j se consulta la entrada, y si el Si accin[i,a] = reducir i / reducir j, se reduce la regla a la que se haya
carcter que aparece es a entonces se lleva a cabo la accin desplazar i. En
otro caso se opta por reducir.

TALF. Tema 7

asignado un nmero ms bajo. Esto es, si i < j se reduce la regla nmero i, en


otro caso la regla nmero j.

n 61

7.4.2.6. CONSTRUCCIN DE TABLAS LR

gramticas independientes del contexto


Gramticas LR libres de conflictos

Analizadores LR(0)

mtodo LR(0)
solucin
problema
conflictos d/r

TALF. Tema 7

reduccin de una regla como A::= tan slo cuando el carcter


que se encuentra en la cinta de entrada pertenezca al conjunto
siguiente (A).

n 62

7.4.2.6. CONSTRUCCIN DE TABLAS LR


Ejemplo: G = ({x, y}, {S, S}, S, {S ::= S , S ::= x S y | x y})

0
S

S'
::=
S
S::=xS
y
S ::=
xy

S ::= S

0
4

x
2

5
y

S
:=xSy

S
S ::=x Sy
S ::=x y
S ::= xSy
S ::= xy

S::=xSy

3
y

S ::= xy

1 S::=S

2 S::=xSy

3 S::=xy

3
4
5

S S

Shift2

1
aceptar

Shift2

Shift3

Reduce3 Reduce3
Shift5
Reduce2 Reduce2

TALF. Tema 7

n 63

7.4.2.6. CONSTRUCCIN DE TABLAS LR


Ejemplo:

Construir el autmata para reconocer la sentencia if-then-else


0

sent :: = if exp then sent else sent


| if exp then sent
| otra_sent

Shiift 2

Shiift 3

1
aceptar

De forma reducida G = ({i, e, a}, {S,S}, {S::=S,S::= iSeS | iS | a})


2
0

1
S

S' ::= S
S ::= iSeS
S ::= iS
S ::= a

S ::= S

S::=S

S::=iSeS

S::=iS

S::= a

S ::= iSeS
S ::= iS
S ::= iSeS
S ::= iS
S ::= a

S ::= a

Shiift 2

S ::=iSeS

Shiift 3
Reduce 2

6
Reduce 2

CONFLICTO S/R

e
i

Reduce 3

S ::=iS eS S ::=iS

TALF. Tema 7

4
Reduce 4

Shiift 5
Reduce 3

Shiift 3
Reduce 4

5
i

Shiift 2

S ::= iSeS S ::=


iSeS
S ::= iS
S ::= a

n 64

7.4.2.6. CONSTRUCCIN DE TABLAS LR


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
Pila

La identacin recoge el anidamiento deseado para esta sentencia pero no


siempre corresponde con el que realiza el analizador.

Entrada

Accin

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$

Pila

Entrada

Accin

iiaeaea$

Shift 2

0i2

iaeaea$

Shift 2

0i2i2

aeaea$

Shift 3

0i2i2a3

eaea$

Reduce S::=a

0i2i2S4

eaea$

Shift 5 / Reduce S::=iS

Shift 3

0i2i2S4e5a3

ea$

Reduce S::=a

0i2i2S4e5S6

ea$

Reduce S::=iSeS

0i2S4

ea$

Shift 5 / Reduce S::=iS

0i2S4e5

a$

Shift 2

0i2S4

eaea$

Shift 5 / Reduce S::=iS

0S1

eaea$

error

0i2S4e5a3

Reduce S::=iSeS

0S1

aceptar

TALF. Tema 7

n 65

7.4.2.6. CONSTRUCCIN DE TABLAS LR


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


0

1
S

S' ::= S S' ::=


Si S' ::=

2
i

S ::= S S' ::=


Si

S ::= Si

S::= Elemento LR(0) =S::= Reduccin con la marca 0


Traza con iii$
Pila

TABLA LR(0)
i

1 S::=S

0 Reduce 3 Reduce 3

2 S::=Si

3 S::=

2 Reduce 2 Reduce 2

TALF. Tema 7

Shiift 2

aceptar

S
1

Entrada

Accin

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

n 66

7.4.2.6. CONSTRUCCIN DE TABLAS LR


Ejemplo: la misma gramtica anterior pero con recursividad por la
dercha
G = ({i}, {S, S }, S, {S ::= S, S::=iS | })

1
S

S' ::= S
S ::= iS
S ::=

S ::= S

S ::= iS
2

i
Pila

Entrada

S
i

S ::= iS
S ::= iS
S ::=

Accin

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

TALF. Tema 7

i
0

Shiift

2/

Reduce 3

Reduce

aceptar
Shiift

2/

Reduce

Reduce 3

Reduce

Reduce

n 67

Potrebbero piacerti anche