Escolar Documentos
Profissional Documentos
Cultura Documentos
Tema 3
Parte II Anlisis Sintctico Descendente
ndice General
Introduccin Analizador con retroceso Tcnica de anlisis predictivo Analizadores predictivos
Introduccin
Anlisis sintctico descendente
Partir del axioma de la gramtica Escoger reglas gramaticales Hacer derivaciones por la izquierda Procesar la entrada de izquierda a derecha Obtener el rbol de anlisis sintctico o error
R1. R2. R3. R4. E := E + E E := E * E E := n E := (E) E (R1)1 E (R3)2 + E (R2)3 E (R3)5 5
2+3*5 2
E (R3)4 * 3
ndice General
Introduccin Analizador con retroceso Tcnica de anlisis predictivo Analizadores predictivos
c Ad
cad
cad
S c Ad
a b R3
S c Ad
a cad
S c Ad
a cad
cad
ndice General
Introduccin Analizador con retroceso Tcnica de anlisis predictivo
Clculo de los conjuntos de prediccin
Conjunto Primero Conjunto Siguiente Conjunto Prediccin
Analizadores predictivos
Se elimina la recursividad
Conjuntos de prediccin
Conjuntos de prediccin
Ayudan a decidir qu regla utilizar en cada paso
Construccin
Conjunto Primero Conjunto Siguiente Regla
PRED ( A := ) = SI PRIM ( ) ENTONCES = PRIM ( ) { } SIG ( A) SINO = PRIM ( )
Conjunto Primero
Definicin
Si es una forma sentencial compuesta por una concatenacin de smbolos PRIM () es el conjunto de terminales (o ) que pueden aparecer iniciando las cadenas que pueden derivar de
Construccin
PRIM PRIM PRIM PRIM () = {} (a) = {a} (A) = PRIM (i) Para todo A := i (A) = PRIM (A) {} PRIM ()
Conjunto Siguiente
Definicin
Si A es un smbolo no terminal de la gramtica SIG (A) es el conjunto de terminales (y $) que pueden aparecer a continuacin de A en alguna forma sentencial derivada del axioma
Construccin
1.Inicialmente SIG (A) = { } 2. Si A es el axioma SIG (A) = SIG (A) {$} 3. Para cada regla B := A SIG (A) = SIG (A) {PRIM () - } 4. Para cada regla B := A o B:= A con PRIM () SIG (A) = SIG (A) SIG (B) 5. Repetir 3 y 4 hasta que no se aumentar SIG (A)
Condiciones LL(1)
Determinacin de la condicin LL(1)
Se determina a partir de los conjuntos de prediccin Permite distinguir siempre la regla a aplicar Los conjuntos de prediccin de las reglas de produccin de cada no terminal deben ser disjuntos entre s
Ejemplo
A A B B := := := := abB Bb b c {a} {b, c} {b} {c}
E E E E E E
:= := := := := :=
Procedimiento
A := 1 |2 | | n | i
A := A | i A := 1 | 2 | | n
Eliminacin de la recursividad
Tipos de recursividad
Directa. Una gramtica G es recursiva si tiene alguna regla de produccin que sea recursiva por la izquierda A := A Indirecta. Si, a partir de una forma sentencial que empieza por un no terminal se puede derivar una nueva forma no sentencial donde reaparece al principio el no terminal A =>* A
Eliminacin de la recursividad
Eliminacin de la recursividad
Directa A := A | Indirecta
Ordenar No terminales: A1, A2, An For i := 1 To n Do For j := 1 To i 1 Do Sustituir cada Ai := Aj por Ai := 1 | 2 | k donde Aj := 1 | 2 | | k producciones actuales de Aj Eliminar la recursividad directa de Ai
A := A A := A A :=
ndice General
Introduccin Analizador con retroceso Tcnica de anlisis predictivo Analizadores predictivos
Analizador descendente recursivo Analizador descendente predictivo dirigido por tabla
Funciones
Empareja (Token t) Una por cada regla de produccin
Recursivas Siguen la parte derecha de la regla Se utilizan los conjuntos de prediccin para determinar la regla
Salida
$ Pila
Tabla (gramtica)
Construccin
Calcular los conjuntos de prediccin de cada regla Para cada A := para cada a PRED (A := ) Tabla[A,a] = A := Rellenar los huecos vacos con error
Bibliografa
[AJO] AHO, SETHI, ULLMAN: Compiladores: Principios, tcnicas y herramientas,: Addison-Wesley Iberoamericana, 1990
[GARRIDO]