You are on page 1of 43

1

Compiladores e Intrpretes
3
er
curso
2 cuatrimestre
Tema 8. Anlisis sintctico descendente
8.1 Introduccin
8.2 Anlisis descendente no determinista: backtracking
8.3 Anlisis descendente determinista: LL(1)
8.3.1 Gramticas LL(1)
8.3.2 Uso de la tabla de anlisis
2
3
8.1
Introduccin
4
Hasta ahora hemos estudiado cmo hacer anlisis ascendente con las tcnicas LR,
SLR y LALR. Ahora vamos a ver varios enfoques descendentes.
La principal diferencia es que ahora el anlisis parte del axioma, y hay que encontrar
una derivacin que lleve hasta el programa proporcionado como entrada.
El problema es que el nmero de posibles derivaciones es muy grande.
Ya se ha estudiado en asignaturas como IA la existencia de estrategias generales
(para cualquier problema) de bsqueda ciega y sus propiedades de las que se
mencionan algunas:
Las dos estrategias bsicas son en anchura y en profundidad.
La bsqueda en anchura expande todos los nodos del mismo nivel antes de
descender a los hijos. De esta forma, siempre se puede conseguir encontrar la
solucin ptima (aquella para la que se requiere un menor nmero de pasos).
La bsqueda en profundidad expande todos los nodos hijos de un nodo antes
que los nodos hermanos. En profundidad, excepto rboles infinitos, se suele
tener oportunidad de encontrar alguna solucin con menos esfuerzo.
Anlisis sintctico descendente
Introduccin (I)
3
5
Anlisis sintctico descendente
Veamos un ejemplo de anlisis descendente:
+ *
E
E
E
E-> E+E
Introduccin (II)
id id id
Gramtica:
E -> E + E
E -> E * E
E -> -E
E -> (E)
E -> id
6
Anlisis sintctico descendente
+ *
E
E
E
E-> id
Introduccin (III)
id id id
Gramtica:
E -> E + E
E -> E * E
E -> -E
E -> (E)
E -> id
4
7
Anlisis sintctico descendente
+ *
E E
E
E
E
E-> E*E
Introduccin (IV)
id id id
Gramtica:
E -> E + E
E -> E * E
E -> -E
E -> (E)
E -> id
8
Anlisis sintctico descendente
+ *
E E
E
E
E
E-> id
Introduccin (V)
id id id
Gramtica:
E -> E + E
E -> E * E
E -> -E
E -> (E)
E -> id
5
9
Anlisis sintctico descendente
+ *
E E
E
E
E
E-> id
Introduccin (VI)
id id id
Gramtica:
E -> E + E
E -> E * E
E -> -E
E -> (E)
E -> id
10
En las tcnicas vistas hasta ahora (ascendentes) siempre se ha sabido en cada
circunstancia qu regla de la gramtica utilizar (reducir)
En las tcnicas descendentes se tiene el mismo problema: hay que asegurarse de
que siempre se conoce qu regla de la gramtica aplicar en funcin del smbolo de
la entrada que se est analizando y el estado del anlisis en el que nos encontremos
Una aproximacin simple e intuitiva al anlisis descendente puede abordar este
problema probando reglas y, en caso de no poder aplicar ms para analizar la
cadena de entrada, volver hacia atrs para probar otras (backtracking).
Sin embargo, usar backtracking es poco eficiente, por lo que la tcnica descendente
ms importante que veremos es la LL(1):
Con procesamiento Left-To-Right (como los analizadores que ya hemos visto).
Expandiendo el smbolo no terminal ms a la izquierda (Leftmost) primero.
Requiere que la gramtica sea LL(1).
Anlisis sintctico descendente
Introduccin (VII)
6
11
8.2
Anlisis descendente con
backtracking (o con vuelta a atrs)
12
Podramos considerar el anlisis sintctico top-down con vuelta atrs lenta como un
caso particular de bsqueda ciega en profundidad (se desempata de izquierda a
derecha)
El criterio para decidir si una regla es aplicable en una posicin es la coincidencia de
esa posicin con el no terminal que est en la parte izquierda de la regla.
No podemos continuar por un camino cuando tengamos terminales que discrepen
con el programa (podemos suponer el orden de recorrido natural del programa (de
izquierda a derecha)
Habremos terminado el proceso en dos situaciones:
Si el rbol de derivacin se cierra porque se ha llegado a eliminar todos los no
terminales y se obtiene la misma secuencia de terminales del programa. En este
caso se ha construido un rbol sintctico para el programa que resulta ser
correcto
Si no se ha podido cerrar el rbol de derivacin pero se han probado todas las
reglas en cada posicin y no se puede aplicar ninguna otra opcin. En ese caso
se ha demostrado que el programa es sintcticamente incorrecto.
Anlisis sintctico descendente
Top-down con vuelta atrs lenta: conceptos
7
13
1. Smbolo actual = axioma
2. Encontrar las reglas que expanden el smbolo actual.
3. Si slo hay una regla, aplicarla.
4. Si hay varias reglas, aplicar la primera y mantener las otras en reserva.
5. Por cada smbolo de la parte derecha de la regla, repetir desde el paso 2.
6. Cuando el anlisis falle porque la regla requiere que el siguiente smbolo de
la entrada sea un cierto terminal pero no lo es, o la expansin del axioma es
correcta pero no cubre toda la cadena de entrada:
1. Deshacer la aplicacin de esta regla.
2. Volver al punto de eleccin de la regla.
3. Elegir la siguiente alternativa.
7. El anlisis termina con xito si:
1. Se pueden generar todos los smbolos terminales de la cadena de
entrada a partir de la expansin de los no terminales.
2. No se puede analizar la cadena/programa de entrada puesto que es
invlida y aunque se han intentado probar todas las reglas en cada
paso, no hay ninguna derivacin posible.
Anlisis sintctico descendente
Top-down con vuelta atrs lenta: algoritmo
14
i+--i
Anlisis top-down, vuelta atrs lenta
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E E
- E
+
E
i E E
- E
E
- E
Ejemplos previos
8
15
i+--i
Anlisis top-down, vuelta atrs lenta
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E E
- E
+
E
i E
E
- E
E
i
Ejemplos previos
16
i+--i
Anlisis top-down, vuelta atrs lenta
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E E
- E
+
E
i E
E
- E
E
i
Ejemplos previos
9
17
i+--i
Anlisis top-down, vuelta atrs lenta
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E E
- E
+
E
i
E
- E
E
i
- E
E
Ejemplos previos
18
i+--i
Anlisis top-down, vuelta atrs lenta
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E E
- E
+
E
i
E
- E
E
i
- E
E
Ejemplos previos
10
19
i+--i
Anlisis top-down, vuelta atrs lenta
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E E
- E
+
E
i
E
- E
E
i
- E
E
- E
Ejemplos previos
20
i+--i
Anlisis top-down, vuelta atrs lenta
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E E
- E
+
E
i
E
- E
E
i
- E
E
- E
- E
Ejemplos previos
11
21
i+--i
Anlisis top-down, vuelta atrs lenta
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E E
- E
+
E
i
E
- E
E
i
- E
E
- E
- E
E
- E
Ejemplos previos
22
i+--i
Anlisis top-down, vuelta atrs lenta
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E E
- E
+
E
i
E
- E
E
i
- E
E
- E E
- E
i
Ejemplos previos
12
23
i+--i
Anlisis top-down, vuelta atrs lenta
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E E
- E
+
E
i
E
- E
E
i
- E
E
- E E
- E
i
ACEPTADA
Ejemplos previos
24
i++i
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
13
25
i++i
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
- E
26
i++i
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
- E
E
- E
14
27
i++i
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
E
- E
i
28
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
i
E
- E
E
i
i++i
15
29
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
E
- E
E
i
i++i
+ E E
30
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
E
- E
E
i
i++i
+ E E
- E
16
31
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
E
- E
E
i
i++i
+ E E
- E
E
- E
32
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
E
- E
E
i
i++i
+ E E
E
- E i
17
33
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
E
- E
E
i
i++i
+ E E
E
- E i
34
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
E
- E
E
i
i++i
+ E E
E
- E i
- E
E
- E
18
35
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
E
- E
E
i
i++i
+ E E
E
- E i i
E
- E
36
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
E
- E
E
i
i++i
+ E E
E
- E i i
E
- E
E
i
19
37
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
E
- E
E
i
i++i
+ E E
E
- E i
E
- E
E
i + E E
38
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
E
- E
E
i
i++i
+ E E
E
- E i
E
- E
E
i + E E
- E
20
39
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
E
- E
E
i
i++i
+ E E
E
- E i
E
- E
E
i + E E
- E
E
- E
40
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
E
- E
E
i
i++i
+ E E
E
- E i
E
- E
E
i + E E
i
E
- E
21
41
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
E
- E
E
i
i++i
+ E E
E
- E i
E
- E
E
i + E E
i
E
- E
E
i
42
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
E
- E
E
i
i++i
+ E E
E
- E i
E
- E
E
i + E E E
- E
E
i + E E
22
43
Anlisis top-down, vuelta atrs lenta
Considerar el anlisis para i++i
G=<{E},{-,+,i}
{E -E
|i
|E+E},
E>
E
Ejemplos previos
E
- E
E
i
i++i
+ E E
E
- E i
E
- E
E
i + E E E
- E
E
i + E E
E
+ E E
E
- E
E
i
BUCLE
44
Como el alumno habr observado, la presencia en la gramtica de reglas recursivas
por la izquierda hace que este tipo de anlisis encuentre bucles infinitos de los que
no puede salir.
Hay maneras de solucionar este problema (entre otros) y construir analizadores
sintcticos descendentes. Este tipo de analizadores suele llamarse LL(k)
Uno de los objetivos de este tema es demostrar que se pueden construir fcilmente
analizadores de tipo LL(1) (la entrada se lee desde la izquierda left las
derivaciones en el rbol se hacen de izquierda left a derecha y se necesita
conocer slo 1 smbolo de la entrada por anticipado) si la gramtica se puede
expresar en forma adecuada
Anlisis top-down, vuelta atrs lenta
Conclusiones
23
45
8.3
Anlisis descendente determinista:
LL(1) (sin vuelta atrs)
46
Anlisis top-down selectivo
Concepto
Tambin se llama sin vuelta atrs, en oposicin a la tcnica descrita al
principio del tema.
Tambin se llama descenso recursivo por la tcnica de paso
automtico de la gramtica LL(1) al analizador.
Intuitivamente, la razn de su eficiencia reside en que las partes
derechas de cada no terminal pueden considerarse indexadas por el
siguiente terminal.
De hecho con LL(1) se puede construir una tabla de doble entrada (no
terminales / terminales ) en la que, cada celda, est ocupada solamente
por una regla que es la nica opcin que se puede aplicar cuando en el
rbol sintctico corresponda tratar el no terminal y en el recorrido del
programa toque tratar el terminal.
24
47
8.3.1
Gramtica LL(1) mediante la construccin
de la tabla de anlisis descendente
48
Anlisis LL(1) con tabla de anlisis
Algoritmo de clculo
Describiremos ahora el algoritmo de clculo de la tabla de anlisis TM
|N||T|+1
(matriz con una filas para los no terminales y columnas para los terminales
aadiendo el delimitador $):
Se aplica los siguientes pasos
1. AP realizar el proceso
1. aprimero()
T
A T[A,a].
2. Si primero()
Entonces bsiguiente(A) A T[A,b] (obsrvese que b
puede ser tambin $)
25
49
Anlisis LL(1) con tabla de anlisis
Ejemplos
En la gramtica de los ejemplos anteriores
G=<{E,E,T,T,F},{-,*,i}
{ E TE
E +TE|
T FT
T *FT|
F i|(E)},
E>
primero(E)= {i,(}
primero(E)= {+, }
primero(T)= {i,(}
primero(T)= {*, }
primero(F)= {i,(}
siguiente(E)= {),$}
siguiente(E)={),$}
siguiente(T)= {),$,+}
siguiente(T)={),$,+}
siguiente(F)= {),$,+,*}
50
Anlisis LL(1) con tabla de anlisis
Ejemplos
En la gramtica de los ejemplos anteriores
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
26
51
Anlisis LL(1) con tabla de anlisis
Ejemplos
Dada la siguiente gramtica
G=< {P,P,E},
{i,t,a,e,b}
{ P iEtPP | a
P eP |
E b
P>
primero(P)= {i,a}
primero(P)= { ,e}
primero(E)= {b}
siguiente(P)= {$,e}
siguiente(P)={$,e}
siguiente(E)= {t}
52
Anlisis LL(1) con tabla de anlisis
Ejemplos
Puede obtenerse la siguiente tabla
E b E
P
p
p eP
p
P iEtPP P a P
$ t i e b a

T
{$}

N
27
53
Anlisis LL(1) con tabla de anlisis
Definicin
Podemos definir las gramticas LL(1) como aqullas que cumplen
Que la tabla de anlisis construida con el algoritmo explicado anteriormente es
determinista (todas las casillas tienen, a lo ms, una regla)
Ejemplos
Es fcil deducir que
La gramtica del primer ejemplo de tabla es LL(1)
La segunda no lo es.
54
8.3.2
Uso de la tabla de anlisis descendente
28
55
Anlisis LL(1) con tabla de anlisis
Algoritmo de anlisis
A partir de la tabla de anlisis puede utilizarse el siguiente algoritmo
AnalisisLL(1)(char * cadena.$)
{
char * simbolo_actual;
pila pila_analisis;
simbolo_actual = cadena;
push( pila_analisis, $);
push( pila_analisis, S ); /* S es el axioma */
while (cima(pila_analisis) != $) {
if ( terminal(cima(pila_analisis)) || cima(pila_analisis) == $ )
if ( cima(pila_analisis) == *simbolo_actual ) {
pop(pila_analisis); simbolo_actual++; }
else salir_error();
else
if ( M[cima(pila_analisis), *simbolo_actual] != null) {
pop( pila_analisis );
push_cadena
(*)
(
pila_analisis,
reverse( parte_derecha(M[cima(pila_analisis), *simbolo_actual]) ) );
else salir_error();
}
}
(*) push_cadena(pila, cadena) inserta en la pila una cadena
56
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
29
57
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
58
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
30
59
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E T
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
60
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E T
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
31
61
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
62
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E T F
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
32
63
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E T
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
64
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E T id
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
33
65
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E T
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
66
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
34
67
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E T +
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
68
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E T
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
35
69
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
70
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E T F
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
36
71
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E T
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
72
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E T id
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
37
73
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E T
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
74
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
38
75
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E T F *
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
76
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E T F
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
39
77
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E T
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
78
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E T id
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
40
79
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E T
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
80
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$ E
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
41
81
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
82
Anlisis LL(1) con tabla de anlisis
$ id * id + id
$
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Cadena aceptada
Ejemplo
42
83
Anlisis LL(1) con tabla de anlisis
$ id +
$ E
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
Ejemplo
84
Anlisis LL(1) con tabla de anlisis
$ id +
$ E
F (E) F id F
T T T *FT T T
T FT T FT T
E E E +TE E
E TE E TE E
$ ) ( * + id

T
{$}

N
salir_error(): cadena rechazada
Ejemplo
43
85
Anlisis sintctico
[Alf] Teora de Autmatas y lenguajes formales M. Alfonseca y otros
[Hop] Introduccin a la teora de autmatas, lenguajes y computacin Hopcroft, J.;
Motwani, R.; Ullman, J.
[Aho] Compiladores. Principios, tcnicas y herramientas A. V. Aho; R. Sefthi; J. D.
Ullman
Bibliografa

You might also like