Está en la página 1de 18

ANLISIS SINTCTICO

ANALIZADOR SINTCTICO
El analizador sintctico obtiene una cadena de
componentes lxicos del analizador lxico y
comprueba si la cadena pueda ser generada por la
gramtica del lenguaje fuente.

Mtodos usados generalmente en los
compiladores se clasifican como:
Descendentes. Construyen rboles de anlisis
sintctico desde arriba (raz) hasta abajo (hojas).
Ascendentes. Comienzan en las hojas y suben hacia la
raz.

En ambos casos, se examina la entrada al analizador
sintctico de izquierda a derecha y un smbolo a la vez.

ANALIZADOR DESCENDENTE
Anlisis sintctico por descenso recursivo
Analizadores sintcticos predictivos
Anlisis sintctico predictivo no recursivo

Anlisis sintctico por descenso recursivo
Se puede considerar el anlisis sintctico descendente
como un intento de construir un rbol de anlisis
sintctico para la entrada comenzando desde la raz y
creando los nodos del rbol en orden previo.
Una gramtica recursiva por la izquierda puede hacer
que un analizador sintctico por descenso recursivo,
incluso uno con retroceso, entre en un lazo infinito.

Ejemplo:
ScAd w=cad
Aab | a

S S S

c A d c A d c A d

a b a
Analizadores sintcticos predictivos
Hay que escribir con cuidado una gramtica,
eliminando su recursin por la izquierda y
factorizando por la izquierda la gramtica resultante
para usar un analizador sintctico sin retroceso, o sea,
predictivo.
Para construir un analizador sintctico predictivo, se
debe conocer, dado el smbolo actual a de entrada y el
no terminal A a expandir/sustituir, cul de las opciones
de las producciones es la nica alternativa que da lugar
a una cadena que comience con a.

Ejemplo:
If
Anlisis sintctico predictivo no recursivo
Para construir un analizador de este tipo se mantiene
una pila, en lugar de hacerlo implcitamente mediante
llamadas recursivas. El chiste es determinar la
produccin que debe aplicarse a un no terminal.
Se busca la produccin que debe aplicarse en una tabla
de anlisis sintctico.

Ejemplo:
ETE
E+TE |
TFT
T*FT |
F( E ) | id

No
terminal
id + * ( ) $
E ETE ETE

E E+TE E E

T TFT TFT
T T T*FT T T
F Fid F(E)
SMBOLO DE ENTRADA
TABLA DE ANLISIS SINTCTICO PREDICTIVO
PILA ENTRADA SALIDA
$E id+id*id$
$ET id+id*id$ ETE
$ETF id+id*id$ TFT
$ETid id+id*id$ F id
$ET +id*id$
$E +id*id$ T
$ET+ +id*id$ E+TE
$ET id*id$
$ETF id*id$ TFT
$ETid id*id$ F id
$ET *id$
$ETF* *id$ T*FT
$ETF id$
$ETid id$ F id
$ET $
$E $ T
$ $ E
EJEMPLO:
id + id * id
ANALIZADOR ASCENDENTE
El anlisis sintctico por desplazamiento y reduccin
intenta construir un rbol de anlisis sintctico para una
cadena de entrada que comienza por las hojas y avanza
hacia la raz. (esto es el proceso de reduccin, del fondo a la
cima, reducir una cadena w al smbolo inicial de la
gramtica)

En cada paso de reduccin se sustituye una subcadena
determinada que concuerde con el lado derecho de una
produccin por el smbolo del lado izquierdo de dicha
produccin y si en cada paso se elige correctamente la
subcadena, se traza una derivacin por la derecha en
sentido inverso.
EJEMPLO
SaABe
AAbc | b
Bd w=abbcde

abbcde
aAbcde
aAde
aABe
S

MANEJO DE ERRORES SINTCTICOS Y SU
RECUPERACIN
Recuperacin de errores en el anlisis sintctico por
precedencia de operadores

Existen 2 puntos en los procesos de anlisis sintctico en
los que un analizador por precedencia de operadores puede
descubrir errores sintcticos:

1. Si no se cumple ninguna relacin de precedencia entre
el terminal de la cima de la pila y la entrada en curso.
2. Si se ha encontrado un mango, pero no existe ninguna
produccin con este mango como lado derecho.

Recuperacin de errores en el anlisis
sintctico predictivo
Durante el anlisis sintctico predictivo se detecta un error
cuando el terminal de la cima de la pila no concuerda con el
siguiente smbolo de entrada o cuando el no terminal A
est en la cima de la pila, a es el siguiente smbolo de
entrada, y la entrada M[A,a] de la tabla de anlisis
sintctico est vaca.

Se utiliza una recuperacin en modo de pnico que se basa
en la idea de saltarse smbolos de la entrada hasta que
aparezca un componente lxico que pertenezca a un
conjunto seleccionado de componentes lxicos de
sincronizacin.
Su efectividad depende de la eleccin del conjunto de
sincronizacin.

GENERADORES DE CDIGO
PARA ANALIZADORES
SINTCTICOS: YACC Y BISON

También podría gustarte