tipos de análisis sintáctico

Transcripción

tipos de análisis sintáctico
TIPOS DE ANÁLISIS
SINTÁCTICO
M.C. Yolanda Moyao martínez
Análisis descendente

Partimos de la raíz del árbol y se van
aplicando reglas por la izquierda de
forma que se obtiene una derivación por
la izquierda de la entrada.

Recorriendo el árbol de A.S resultante,
en profundidad de izquierda a derecha,
encontraremos los tokens que devuelve
el A.S en ese mismo orden.
Análisis ascendente

Partiendo de la cadena de entrada, se
construye el árbol de A.S empezando
por las hojas (donde están los tokens) y
se van creando nodos intermedios hasta
llegar a la raíz o axioma.
Analizador Sintáctico Descendente
Predictivo (ASDP)

Para que el algoritmo tenga una
complejidad lineal, el analizador debe
realizar una predicción de la regla a
aplicar.

Se debe conocer el token de la entrada, a,
que esté siendo analizado, y el N a expandir
A, cuál de las alternativas de producción
A
α1 | α2 | … αn es la única posible
que da lugar a que el resto de la cadena que
se está analizando empiece por a.
Ejemplo
Sent if Expres then Sent
Q | while Expres do Sent
| begin Sent end.
Gramáticas LL(1)
LL ( 1 )
Análisis de
izquierda a
derecha
para la
cadena de
entrada
Derivación
por la
izquierda
Basta con
solo ver un
token.
Conjuntos de predicción

Son conjuntos de tokens que ayudan a
predecir qué regla se debe aplicar para
la variable que hay que derivar.

Se construyen, a partir de los símbolos
de la parte derecha de las producciones
de la G.
Cálculo del conjunto de PRIMEROS

La función PRIMEROS se aplica a
cadenas de símbolos de la gramática
α  (T  N)* y devuelve un conjunto
que puede contener cualesquiera T de
la gramática y puede contener a la
cadena vacía  .
Definición
Si α es una forma sentencial compuesta por
una concatenación de símbolos,
PRIMEROS (α) es el conjunto de T ó  que
pueden aparecer iniciando las cadenas que
pueden derivar (en 0 o más pasos) de α .

Definición formal: a  PRIMEROS(α)
si a  ( T  { } ) /  α * aβ para alguna
tira β
Algoritmo
1. Si T, PRIMEROS () = {}
2. Si N:

Inicialmente, PRIMEROS () =
 Si aparece la producción 
PRIMEROS () = PRIMEROS () {}
 Si a1 a2 ... an entonces PRIMEROS() =
PRIMEROS() PRIMEROS(a1 a2 ...an) y para el
cálculo de PRIMEROS(a1 a2 ... an) pueden darse
dos casos:
a) Si PRIMEROS(a1) entonces
PRIMEROS() = PRIMEROS() 
PRIMEROS(a1)
b) Si PRIMEROS(a1) entonces
PRIMEROS() = PRIMEROS() (
PRIMEROS(a1) - {}) PRIMEROS(a2...an)
y de nuevo pueden darse estos dos casos para
PRIMEROS(a2 ... an) y siguientes, hasta an.
Si "i, PRIMEROS(ai) entonces
PRIMEROS() = PRIMEROS() {}
3. Para recoger todos los casos posibles
habría que considerar que
Si  1 | 2 | ... | n entonces
PRIMEROS () = PRIMEROS(i)
Ejemplo 1
E T E’
E’ + T E’ 
T F T’
T’ F T’ 
F ( E ) ident
Calcular el conjunto de PRIMEROS
Primeros
PRIMEROS(E’) = { + ,  }
PRIMEROS(T’) = { * ,  }
PRIMEROS(T) = { ( , ident }
PRIMEROS(F) = { ( , ident }
PRIMEROS(E) = { ( , ident }

Documentos relacionados