Você está na página 1de 11

UNIVERSIDAD NACIONAL DE EDUCACIN A DISTANCIA Escuela Tcnica Superior de Ingeniera Informtica Procesadores de Lenguajes

Tema 3
Parte II Anlisis Sintctico Descendente

Javier Vlez Reyes jvelez@lsi.uned.es

Javier Vlez Reyes jvelez@lsi.uned.es

Objetivos del Tema


Entender la tcnica de anlisis descendente Presentar los analizadores con retroceso Aprender el clculo de los conjuntos de prediccin Presentar las condiciones LL(1) Aprender la modificacin de gramticas no LL(1) Presentar los analizadores predictivos
Recursivos Dirigidos por tabla

Javier Vlez Reyes jvelez@lsi.uned.es

ndice General
Introduccin Analizador con retroceso Tcnica de anlisis predictivo Analizadores predictivos

Javier Vlez Reyes jvelez@lsi.uned.es

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

Javier Vlez Reyes jvelez@lsi.uned.es

ndice General
Introduccin Analizador con retroceso Tcnica de anlisis predictivo Analizadores predictivos

Javier Vlez Reyes jvelez@lsi.uned.es

Analizador con retroceso


Analizador con retroceso
Usa retroceso para resolver la incertidumbre Sencillo de implementar R1. S := c A d S R2. A := a b Muy ineficiente R3. A := a S S c Ad R1 R2 c Ad
cad

c Ad
cad

cad

S c Ad
a b R3

S c Ad
a cad

S c Ad
a cad

cad

Javier Vlez Reyes jvelez@lsi.uned.es

ndice General
Introduccin Analizador con retroceso Tcnica de anlisis predictivo
Clculo de los conjuntos de prediccin
Conjunto Primero Conjunto Siguiente Conjunto Prediccin

Condiciones LL(1) Modificacin de gramticas no LL(1)


Eliminacin de ambigedad Factorizacin por la izquierda Eliminacin de la recursividad

Analizadores predictivos

Javier Vlez Reyes jvelez@lsi.uned.es

Tcnicas de anlisis predictivo


Propsito
Crear un analizador descendente O(n) Debe decidir qu regla aplicar segn token La gramtica debe ser LL(1)
L. Anlisis de izquierda a derecha L. Derivaciones por la izquierda 1. Un token permite decidir la regla de produccin

Se elimina la recursividad

Javier Vlez Reyes jvelez@lsi.uned.es

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

PRIM () SIG (A)

Javier Vlez Reyes jvelez@lsi.uned.es

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

Javier Vlez Reyes jvelez@lsi.uned.es

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)

Javier Vlez Reyes jvelez@lsi.uned.es

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}

Javier Vlez Reyes jvelez@lsi.uned.es

Modificacin de gramticas no LL(1)


Condiciones necesarias para ser LL(1)
No ambigua Factorizada por la izquierda No recursiva a izquierdas

E E E E E E

:= := := := := :=

E+E E-E E*E E/E n (E)

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

Javier Vlez Reyes jvelez@lsi.uned.es

Factorizacin por la izquierda


Objetivo
Se trata de rescribir las producciones de la gramtica con igual comienzo para retrasar la decisin hasta haber visto lo suficiente de la entrada como para elegir la opcin correcta

Procedimiento
A := 1 |2 | | n | i

A := A | i A := 1 | 2 | | n

Javier Vlez Reyes jvelez@lsi.uned.es

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

Javier Vlez Reyes jvelez@lsi.uned.es

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 :=

Javier Vlez Reyes jvelez@lsi.uned.es

ndice General
Introduccin Analizador con retroceso Tcnica de anlisis predictivo Analizadores predictivos
Analizador descendente recursivo Analizador descendente predictivo dirigido por tabla

Javier Vlez Reyes jvelez@lsi.uned.es

Analizador descendente Recursivo


Elementos
Token Preanlisis

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

Javier Vlez Reyes jvelez@lsi.uned.es

Analizador dirigido por tabla


Utiliza una tabla para decidir
id + id * id $ Entrada

Salida

$ Pila

Tabla (gramtica)

Javier Vlez Reyes jvelez@lsi.uned.es

Analizador dirigido por tabla


Tabla
1 fila por cada No terminal 1 columna por cada terminal y $ Cada celda una regla de produccin o error

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

Javier Vlez Reyes jvelez@lsi.uned.es

Analizador dirigido por tabla


Anlisis de una cadena
Contruir una tabla con 3 columnas
Pila Entrada procesada Salida PILA $E $ET $ETF $ETn $ET ENTRADA n+n*n$ n+n*n$ n+n*n$ n+n*n$ +n*n$ SALIDA E := TE T := FT F := n Emparejar(n) T :=

Javier Vlez Reyes jvelez@lsi.uned.es

Bibliografa
[AJO] AHO, SETHI, ULLMAN: Compiladores: Principios, tcnicas y herramientas,: Addison-Wesley Iberoamericana, 1990

[GARRIDO]

A. Garrido, J. Iesta, F. Moreno y J. Prez. 2002. Diseo de compiladores. Universidad de Alicante.

Você também pode gostar