Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
Condiciones LL(1).
7.4.1.4. Algoritmo de anlisis sintctico LL
Construccin de Tablas LL.
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).
p=estado inicial
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
: alfabeto de entrada.
P: alfabeto de la pila.
Q: conjunto de estados.
TALF. Tema 7
n 4
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.
2.
TALF. Tema 7
n 5
1.
q0
2.
3.
,;
,;
,x;
p
4.
LPVLEF
1.
2.
,; #
, #;
qi
qj
TALF. Tema 7
, #;
q0
f
, #;
n 6
x, ;x
y,x;
y,x;
x, ;x
TALF. Tema 7
, ; #
, ;
y,x;
,x;
y,x;
, #;
n 7
Teorema
TALF. Tema 7
CINTA DE ENTRADA
Cabeza de lectura
CIMA
Indicador de stado
Mecanismo de control
PILA
TALF. Tema 7
n 9
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
1.
2.
3.
4.
, ; #
, S;
A P
, #;
q
a, a;
TALF. Tema 7
f
a T
n 11
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
Pila
Entrada
Accin
zazabzbz$
(i, , ; p, #)
zazabzbz$
(p, , ; q, S)
S#
zazabzbz$
zMNz#
zazabzbz$
(q, z,z;q,)
MNz#
azabzbz$
aMaNz#
azabzbz$
(q, a,a;q,)
MaNz#
zabzbz$
zaNz#
zabzbz$
(q, z,z;q,)
aNz#
abzbz$
(q, a,a;q,)
Nz#
bzbz$
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
(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
TALF. Tema 7
n 14
TALF. Tema 7
n 15
Ejemplo:
gramtica
(1) S cAd
(2) A bcB
(3) A a
(4) B b
Anlisis de la sentencia cad.
TALF. Tema 7
S cAd
A aB
Aa
Bb
TALF. Tema 7
n 17
TALF. Tema 7
n 18
2.
3.
Si X es un no terminal y X Y1Y2 Yk
entonces:
PRIMERO(X) = PRIMERO(X) {a}
PRIMERO(X) = PRIMERO(X) {}
TALF. Tema 7
Ejemplo:
gramtica:
TALF. Tema 7
Primero
A BCc | gDB
gbcda
B bCDE |
C ca | DaB
cda
D dD |
E gAf | c
gc
n 20
2.
3.
TALF. Tema 7
n 21
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
Condiciones LL(1)
Smbolos directores
Ayudan a decidir qu regla utilizar en cada paso
Construccin
Regla
DIR ( A := ) =
TALF. Tema 7
SINO = PRIM ()
n 23
No ambigua
No recursiva a izquierdas
TALF. Tema 7
n 24
Entrada
Salida
Analizador sintctico
$
Tabla LL(1)
(gramtica LL(1))
Pila
TALF. Tema 7
n 25
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
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
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
Pila
Entrada procesada
Salida
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
LR(k)
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
autmatas de pila
CINTA DE ENTRADA
Cabeza de lectura
CIMA
Indicador de stado
Mecanismo de control
PILA
n 32
PILA
TALF. Tema 7
ENTRADA
ACCIN
aa$
Desplazar a
a$
Reduce S::=a
a$
Desplazar a
Sa
reduce S::=Sa
aceptar
n 33
3.
4.
, ; #
, S;
, #;
a, ; a a T
TALF. Tema 7
n 34
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
Pila
Entrada
Accin
zazabzbz$
Push #
zazabzbz$
shift z
*p
#z
azabzbz$
#za
zabzbz$
shift z
*p
#zaz
abzbz$
#zaM
abzbz$
shift a
*p
#zaMa
bzbz$
#zM
bzbz$
Shift b
#zMb
zbz$
shift z
*p
#zMbz
bz$
#zMbN
bz$
Shift b
*p
#zMbNb
z$
#zMN
z$
Shift z
#zMNz
#S
Pop S
Pop #
Accept
TALF. Tema 7
indeterminacin
(p,a,; p,a)
(p,,, z; p, M)
(p,,, z; p,N)
n 36
Push #
shift z
shift a | reduce::= M::= z | reduce N::=z
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 b
shift z | reduce N::= bNb
shift z
Reduce S::= zMNz | reduce M::=z | reduce N::=z
TALF. Tema 7
S
n 37
z a z a b z b z
2
3
M
N
n 38
SOLUCIONES
Preanlisis(K)
2. MANEJO DE LA PILA
Reconocimiento de patrones
TALF. Tema 7
Marcas=ER
n 39
x, ; x
y, ; y
, ; #
, S;
p
, #;
, xSy; S
, xy;S
TALF. Tema 7
n 40
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
Estado_Pila
Expresiones Regulares
Marca
Acciones
TABLA
TALF. Tema 7
n 42
.......
ai
......
an
Programa para
anlisis sintctico LR
SALIDA
S1
X0
S0
PILA
accin
ir_a
TABLA LR
n 43
TALF. Tema 7
n 44
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
TALF. Tema 7
n 46
n 47
Analizador sintctico
TALF. Tema 7
n 48
n 49
1 S::=S
Ejemplo:
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
n 50
Marca i=ER i
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
Gramtica
Construir la tabla
gramtica aumentada
Elementos LR(0)
Cerradura(I)
funcin ir_a
TALF. Tema 7
n 52
Definiciones previas:
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
2.
Ejemplo
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
TALF. Tema 7
n 54
Salida: J
I
P
J:=I
Repetir
TALF. Tema 7
n 55
aumentada G
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
n 57
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
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
TABLA LR
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
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
LA GRAMTICA NO ES LR
INTENTAR TODAS LAS OPCIONES POSIBLES
CONFLICTOS
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
n 61
Analizadores LR(0)
mtodo LR(0)
solucin
problema
conflictos d/r
TALF. Tema 7
n 62
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
Shiift 2
Shiift 3
1
aceptar
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
n 64
Entrada
Accin
iiaeaea$
Shift 2
0i2
iaeaea$
Shift 2
0i2i2
aeaea$
Shift 3
0i2i2a3
eaea$
Reduce S::=a
0i2i2S4
eaea$
0i2i2S4e5
aea$
Pila
Entrada
Accin
iiaeaea$
Shift 2
0i2
iaeaea$
Shift 2
0i2i2
aeaea$
Shift 3
0i2i2a3
eaea$
Reduce S::=a
0i2i2S4
eaea$
Shift 3
0i2i2S4e5a3
ea$
Reduce S::=a
0i2i2S4e5S6
ea$
Reduce S::=iSeS
0i2S4
ea$
0i2S4e5
a$
Shift 2
0i2S4
eaea$
0S1
eaea$
error
0i2S4e5a3
Reduce S::=iSeS
0S1
aceptar
TALF. Tema 7
n 65
1
S
2
i
S ::= Si
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
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