Está en la página 1de 58

Procesadores de lenguaje

Tema 3 Anlisis sintctico (Parte II)


Salvador Snchez, Daniel Rodrguez
Departamento de Ciencias de la Computacin
Universidad de Alcal
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Resumen
Anlisis sintctico ascendente
Analizadores ascendentes LR: LR(0)
Analizador SLR(1)
Analizador LALR(1)
Recuperacin de errores
Generadores automticos de analizadores sintcticos
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Recordatorio: tipos de analizador
Analizadores sintcticos descendentes (Top-down)
Construyen el rbol sintctico de la raz (arriba) a las hojas (abajo).
Parten del smbolo inicial de la gramtica (axioma) y van expandiendo
producciones hasta llegar a la cadena de entrada.
Analizadores sintcticos ascendentes (Bottom-up)
Construyen el rbol sintctico comenzando por las hojas.
Parten de los terminales de la entrada y mediante reducciones llegan
hasta el smbolo inicial.
En ambos casos se examina la entrada de izquierda a
derecha, tomando los smbolos de uno en uno.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Analizadores sintcticos ascendentes
Comprueban si una cadena de smbolos pertenece a un lenguaje aplicando
reducciones sobre la entrada hasta alcanzar el axioma de la gramtica.
En general son ms potentes que los mtodos descendentes.
Pueden manejar gramticas recursivas a izquierdas.
Los algoritmos de implementacin son ms complejos que los de los
mtodos ascendentes.
La implementacin a mano de estos algoritmos es demasiado compleja por lo que
generalmente se utilizan generadores automticos.
LL(1) LR(1)
G. Libres de
Contexto
Gramticas
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Analizador ascendente: funcionamiento
Busca aquellas subcadenas de la entrada que sean la parte derecha
de una produccin y las sustituye por la parte izquierda
correspondiente.
S aAcBe
AAb|b
Bd
Problema: varias subcadenas que coinciden en una parte derecha.
No es lo mismo sustituir una u otra: una podra llevar al xito y la otra no
abbcde
aAbcde
aAcde
aAcBe
S
( XITO )
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Implementacin
Dos formas de implementar los analizadores sintcticos
ascendentes:
Analizadores con retroceso:
Prueban todas las posibilidades con un algoritmo de backtracking.
Fciles de implementar.
Los mismos defectos que el analizador descendente equivalente.
Analizadores predictivos:
Utilizan informacin de la cadena de entrada para predecir qu
subcadena lleva al xito.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Analizadores ascendentes predictivos
LR(k)
Leen la entrada de izquierda a derecha (Left to rigth)
Aplican derivaciones por la derecha para cada entrada (Right)
Utilizan k componentes lxicos de bsqueda hacia adelante.
SLR(1)
LR(1) Sencillo.
Mejora el LR(1) pero hace uso de la bsqueda hacia delante.
LALR(1)
Look Ahead LR(1): Anlisis sintctico de bsqueda hacia adelante
Ms potente que SLR(1) y ms sencillo que LR(1).
Es un compromiso entre SLR(1) y LR(1)
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Analizadores ascendentes predictivos
Se puede generar un analizador sintctico ascendente
predictivo para prcticamente todas las gramticas de
libre contexto.
Inconveniente: requieren mucho ms trabajo de
implementacin que los analizadores descendentes.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
La pila en los analizadores predictivos
Un analizador ascendente utiliza una pila similar a la
utilizada por el analizador LL(1), que incluye:
Smbolos terminales y no terminales
Informacin de estado
Estado de la pila:
Al comenzar el anlisis la pila est vaca.
Al final de un anlisis con xito contiene el smbolo inicial.
Dos posibles acciones adems de xito:
Desplazar: pasa un terminal de la entrada a la cima de la pila
Reducir: sustituye una cadena en la pila por un no-terminal
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Ejemplo de uso de la pila
S A
A Aab | b
XITO $ $S
reducir SA $ $A
reducir AAab $ $Aab
desplazar b$ $Aa
desplazar ab$ $A
reducir Ab ab$ $b
desplazar bab$ $
Accin Entrada Pila
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
La pila en los analizadores predictivos
Anlisis del ejemplo anterior:
Con un mismo valor en la pila $A se han realizado acciones
diferentes:
desplazar
reducir SA
El analizador desplaza terminales hasta que es posible aplicar una
reduccin, pero esto no implica retrocesos.
Algunas reducciones obligan a mirar no slo la cima de la pila, sino
ms elementos: reducir AAab
Conclusiones:
Es necesaria una tabla de anlisis que permita hacer predicciones
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LR(0)
Elemento LR(0):
Regla de produccin con una posicin distinguida por un punto en su
lado derecho: S A.ab
Un elemento registra un paso intermedio en el reconocimiento del
lado derecho de una regla.
A.xy (elemento LR(0) inicial)
A xy (regla) Ax.y (elemento)
Axy. (elemento LR(0) final)
Elementos iniciales:
Los que tienen la forma A.XY
Elementos completos o finales:
Los que tienen la forma AXY.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LR(0)
Los elementos LR(0) se pueden emplear como estados de un
autmata finito que mantienen informacin sobre:
La pila de anlisis sintctico.
El progreso del anlisis.
Construccin del autmata finito no determinista:
Para todo elemento AB.CD con BCD terminales o no-terminales, existe una
transicin para el smbolo C:
Para todo C no-terminal en una produccin AB.CD, para toda regla con C
en la parte izquierda (C.XY) habr una transicin:
AB.CD ABC.D
C
AB.CD C.XY

Procesadores de lenguaje Tema Anlisis sintctico (Parte II)


Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LR(0)
Estado inicial:
En este estado la pila est vaca y falta por reconocer un estado S
En principio cualquier elemento inicial S.X podra servir
Si hay ms de uno cul elegir?
SOLUCION: Ampliar la gramtica con una produccin SS
Estado final:
El autmata no tiene estados especficos de aceptacin
El propsito del autmata es el seguimiento del anlisis, no el reconocimiento
directo de las cadenas de entrada
El autmata, por tanto, tiene informacin acerca de la aceptacin pero no
estados de aceptacin
El analizador LR(0) trabaja con una gramtica aumentada.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LR(0)
Para una gramtica como:
S(S)S |
Tenemos los siguientes elementos:
S.S
SS.
S.(S)S
S(.S)S
S(S.)S
S(S).S
S(S)S.
S.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LR(0)
El autmata finito no determinista es:
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LR(0)
Para una gramtica como:
EE+n | n
Tenemos los siguientes elementos:
E.E
EE.
E.E+n
EE.+n
EE+.n
EE+n.
E.n
En.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LR(0)
El autmata finito no determinista es:
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LR(0)
Es posible construir un autmata finito determinista a partir del autmata no
determinista mediante la cerradura de cada estado nuclear.
Elementos de ncleo: los que se agregan a un estado tras una transicin que
no es vaca (transicin no ).
Elementos de cerradura: los que se agregan a un estado tras una transicin
vaca (transicin ).
Para cada estado nuclear (slo hay ncleo) se calcula la cerradura:
Para todos aquellos elementos que tengan un no terminal a la derecha del
punto, a ese no terminal le llamaremos smbolo de cerradura.
Se aaden al conjunto cerradura y por tanto al estado todas los elementos
LR(0) iniciales correspondientes al smbolo de cerradura. Por tanto, si
aadimos A XY lo que se aade es el elemento: A .XY
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LR(0)
Algoritmo de construccin del autmata:
1. Se construye el ncleo del estado inicial con S.S
2. Para cada ncleo nuevo:
a. Se hace la cerradura del ncleo
b. Se repite la cerradura para los nuevos elementos aadidos hasta
que no se aadan nuevos elementos al estado y se considera que
el estado est completo.
3. Para cada estado completo n:
a. Se crean nuevos ncleos de estados a partir de n mediante las
transiciones no . (Las transiciones ya no se realizan porque estn
representadas por la cerradura).
a. Si el ncleo creado ya existe en otro estado no se aade y la
transicin se dirige al estado existente.
b. Se realizan las acciones descritas en el punto 2
c. Se realiza 3 hasta que no se puedan aadir nuevos estados al autmata.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LR(0)
En el primer ejemplo anterior:
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LR(0)
En el segundo ejemplo anterior:
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LR(0)
Se puede generar la tabla de anlisis sintctico a partir
del autmata finito determinista.
Estados del autmata LR(0):
De desplazamiento (sin elementos completos)
De reduccin (un elemento completo)
Las filas de la tabla se etiquetan con los estados.
En cuanto a las columnas, 2 bloques:
Parte de Entrada (una por terminal) se indican acciones de
desplazamiento, reduccin o aceptacin
Parte Ir_a con transiciones de no-terminales indican transiciones
entre estados.
Las entradas vacas de la tabla representan errores.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LR(0)
AA
A(A) | a
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LR(0)
AA
A(A) | a
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LR(0)
Ejemplo anlisis:
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Conflictos en LR(0)
Si un estado contiene un elemento completo (A.) :
Si adems tiene un elemento no completo se produce un conflicto
de reduccin por desplazamiento.
Si adems contiene otros elementos completos (B.) hay un
conflicto de reduccin- reduccin.
Una gramtica es LR(0) si y slo si cada estado es un
estado de desplazamiento (contiene nicamente
elementos de desplazamiento) o un estado de reduccin
(contiene nicamente un elemento completo).
Es decir, en LR(0) no puede haber estados mixtos.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico SLR(1)
Anlisis sintctico LR(1) simple o SLR(1).
Capaz de analizar prcticamente todas las construcciones que se
presentan en un lenguaje
No obstante, hay situaciones en las que no sirve y por tanto no es analizable.
Un estado puede tener tanto reducciones como desplazamientos.
Utiliza el autmata finito determinista del LR(0) con mayor potencia,
empleando el token siguiente en la entrada para guiar sus acciones:
Consulta el token de entrada antes de cada desplazamiento para asegurar
que existe una transicin adecuada
Utiliza el conjunto siguiente de un no terminal para decidir si se debera
realizar una reduccin o no.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico SLR(1)
Construccin de la Tabla de Anlisis:
Construir la tabla LR(0) teniendo en cuenta que un estado puede ahora tener
desplazamientos y reducciones
No son necesarias las columnas accin y regla
El smbolo $ es un smbolo vlido de lectura adelantada, luego debe formar
parte de las entradas.
Poner en cada entrada de la tabla una etiqueta R o D
Si es una reduccin con la forma AXYZ. , incluir la regla gramatical
AXYZ para todas las entradas en el Siguiente (A)
En un estado que contiene el elemento SS. hay que poner
aceptacin cuando la entrada sea $
Si es un desplazamiento, poner el estado al que transita
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico SLR(1)
Construccin de la tabla de anlisis para el siguiente autmata:
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico SLR(1)
R: EE+n
R: En
Aceptar
$
Ir a
1
E
4
3
2
1
0
R: EE+n
D-4
R: En
D-3
D-2
n +
Siguiente(E) = { $ }
Siguiente(E) = { + , $ }
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis de una entrada SLR(1)
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico SLR(1)
Algoritmo SLR(1) para el estado actual E:
Si E contiene un elemento de la forma A.X (X es un terminal) y X es el
siguiente token de la entrada:
Desplazar X a la pila
El siguiente estado es AX.
Si E contiene un elemento completo A. y el token siguiente de la entrada
est en Siguiente(A):
Reducir por la regla A
El nuevo estado se calcula eliminando de la pila y todos sus estados
Retroceder al estado donde comenz la construccin de
Una reduccin por la regla SS con entrada=$ implica aceptacin.
Si el siguiente token de la entrada no permite aplicar ninguna de las reglas
anteriores, error sintctico.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico SLR(1)
Una gramtica es SLR(1) si y slo si:
1. Para cualquier elemento A.X en un estado E con un terminal X no hay
elemento completo B. en E con X en Siguiente(B)
2. Para cualesquiera dos elementos completos A y B en un estado E,
Siguiente(A) Siguiente(B) =
Conflictos:
Reduccin por desplazamiento: si se viola la regla 1.
Reduccin-reduccin: si se viola la regla 2.
No obstante, SLR(1) permite postponer la decisin hasta el ltimo
momento: mayor potencia.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico SLR(1)
Los conflictos en SLR(1) pueden eliminarse mediante reglas de
eliminacin de la ambigedad:
Reduccin por desplazamiento: preferir el desplazamiento.
Reduccin-reduccin: generalmente indican un error en el diseo de la
gramtica, aunque no siempre.
Preferir el desplazamiento en un conflicto D-R selecciona
automticamente la regla de anidamiento ms cercana en
sentencias if..then..else.
sentencia sentencia_if | otro
sentencia_if if (expresion) sentencia |
if (expresion) sentencia else sentencia
expresin true | false
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico SLR(1)
Simplificada y aumentada:
S S
S I | otro
I if (E) S | if (E) S else S
E true | false
Eliminando la condicin obtenemos una gramtica
igualmente ambigua:
S S
S I | otro
I if S | if S else S
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico SLR(1)
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico SLR(1)
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LALR(1)
Look Ahead LR: mtodo ms utilizado, especialmente por los
generadores automticos como CUP o Yacc.
SLR(1): aplica las bsquedas hacia delante despus de construir el
autmata de elementos LR(0)
Mismo autmata que LR(0), slo cambia la construccin de la tabla.
El autmata ignora la bsqueda hacia delante.
La capacidad de los mtodos LR(k) radica en la construccin de un
autmata que integra las bsquedas hacia delante.
Se utilizan nuevos elementos, denominados LR(1).
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LALR(1)
Cada elemento LR(1) incluye un token de bsqueda
hacia delante:
[A., a]
En las transiciones entre estados tambin se tiene en
cuenta la bsqueda hacia delante.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LALR(1)
Transiciones no (entre estados) :
Idnticas a las del autmata LR(0)
Dado un elemento [A.X, a], donde X es cualquier smbolo, existe una
transicin con X al elemento [AX., a]
Estas transiciones no provocan la aparicin de nuevas bsquedas hacia
delante, pues a aparece en ambos elementos.
Transiciones (se hace la cerradura) segn (dentro del estado):
Dado un elemento [A.B, a], donde B es un no terminal, se aade al
estado elementos [B.,b] para cada produccin B y para cada token en
Primero(a). Nota: a concatenado con a
El elemento [A.B, a] indica que podramos querer reconocer una B pero
slo si va seguida de una cadena derivable de a.
El smbolo inicial es [S.S,$]
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LALR(1)
Gramtica: A(A)|a
Estado 0:
[ A .A, $ ]
[ A .(A), $ ]
[ A .a, $ ]
Estado 1: (Estado 0 con transicin A)
[ A A., $ ]
Estado 2: (Estado 0 con transicin ( )
[ A (.A), $ ]
[ A .(A), ) ]
[ A .a, ) ]
Estado 3: (Estado 0 con transicin a)
[ A a., $ ]
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LALR(1)
Estado 4: (Estado 2 con transicin A)
[ A (A.), $ ]
Estado 5: (Estado 2 con transicin ( )
[ A (.A), ) ]
[ A .(A), ) ]
[ A .a, ) ]
Estado 6: (Estado 2 con transicin a )
[ A a., ) ]
Estado 7: (Estado 4 con transicin ))
[ A (A)., $ ]
Estado 8: (Estado 5 con transicin A)
[ A (A.), ) ]
Estado 9: (Estado 8 con transicin ) )
[ A (A)., ) ]
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LALR(1)
Autmata:
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Construccin del autmata LALR(1)
El algoritmo de construccin del autmata ser:
1. Se construye el ncleo del estado inicial con S.S,$
2. Para cada ncleo nuevo:
a. Se hace la cerradura del ncleo segn lo visto para elementos LR(1).
b. Se repite la cerradura para los nuevos elementos aadidos hasta que no se
aadan nuevos elementos al estado y se considera que el estado est
completo.
3. Para cada estado completo n:
a. Se crean nuevos ncleos de estados a partir de n mediante las transiciones
no . (Las transiciones ya no se realizan porque son representadas por
la cerradura).
a. Si el ncleo creado ya existe en otro estado no se aade y la
transicin se dirige al estado existente.
b. Se vuelve a 2
c. Se realiza 3 hasta que no se puedan aadir nuevos estados al autmata.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LALR(1)
El anlisis LALR(1) se basa en que el tamao del autmata LR(1)
puede simplificarse unificando todos los estados con igual ncleo
para los que existen varios elementos de bsqueda hacia delante.
Primer principio del anlisis LALR(1) :
El ncleo de un estado del autmata de elementos LR(1) es un estado del
autmata de elementos LR(0)
Segundo principio del anlisis LALR(1) :
Si hay dos estados S1 y S2 del autmata LR(1) con el mismo ncleo y,
Si hay una transicin con un smbolo X desde S1 hasta T1,
Entonces tambin hay una transicin con un smbolo X desde S2 hasta T2 y
T1 y T2 tienen el mismo ncleo.
Por tanto se unifican S1 y S2 y T1 y T2.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LALR(1)
Ejemplo:
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LALR(1)
El algoritmo de anlisis es similar al SLR(1) pero utilizando los tokens de
bsqueda hacia delante en lugar de los conjuntos Siguiente.
Para el estado actual E:
Si E contiene un elemento de la forma [A.X,a] y X es un terminal y X es el siguiente
token de la entrada:
Desplazar X a la pila
El siguiente estado es [AX. ,a]
Si E contiene un elemento completo [A.,a] y el token siguiente de la entrada es a:
Reducir por la regla A
El nuevo estado se calcula eliminando de la pila y todos sus estados
Retroceder al estado donde comenz la construccin de
Una reduccin por la regla SE con entrada=$ implica aceptacin.
Si el siguiente token de la entrada no permite aplicar ninguna de las reglas anteriores,
error sintctico.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LALR(1)
Tabla de anlisis:
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Anlisis sintctico LALR(1)
Conflictos:
Desplazamiento-reduccin (en un estado): cuando el smbolo de
look-ahead del elemento completo es tambin smbolo de transicin.
Reduccin-reduccin (en un estado): cuando dos elementos
completos tienen el mismo smbolo de look-ahead.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Resumen de mtodos
Una gramtica es LL(1) si y slo si los conjuntos de prediccin de las alternativas de
produccin sobre el mismo smbolo son disjuntos.
Si tiene recursividad por la izquierda no es LL(1).
No obstante, que no sea LL(1) no significa necesariamente que sea recursiva por la izquierda.
Gramtica LR(0) - Todos los estados del autmata son bien de reduccin o bien de
desplazamiento.
Una gramtica es SLR(1) si es posible construir una tabla de anlisis SLR sin
entradas mltiples.
Gramtica LR(1) No es usada en la prctica debido al gran nmero de estados que
produce, sino que se utiliza una gramtica simplificada, LALR(1); ms potente que
LR(0) pero menos que LR(1). .
Una gramtica es LALR(1) si no incluye conflictos de anlisis. Es la ms importante y
la que implementan la mayora de los generadores como CUP, Bison, y Yacc
reconocen gramticas LALR(1).
Una gramtica ambigua no es LL(1) ni SLR ni LR(1).
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Recuperacin de errores
El anlisis sintctico es la fase de compilacin que contempla un
mayor nmero de errores
Los programadores suelen cometer un mayor nmero de errores sintcticos
que de otro tipo.
Objetivos principales de todo manejador de errores:
Detectar los errores lo antes posible (mensajes de error ms significativos)
Informar de los errores con claridad y exactitud.
Recuperarse del error sintctico.
No retrasar el procesamiento de programas correctos.
Los compiladores a la hora de informar del error, muestran la lnea
donde se comete el error y un mensaje explicativo del diagnstico.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Recuperacin de errores
Recuperacin en modo pnico: mtodo ms sencillo de
recuperacin.
Consiste en desechar componentes lxicos de la entrada hasta
encontrar uno que permita continuar con el proceso de compilacin.
Generalmente estructuras de cierre: punto y coma, end o delimitadores.
Intenta aislar la frase que contiene el error, determinando qu
cadena derivable de A tiene el error y asumiendo que se ha
reconocido un A completo.
Es un mtodo muy sencillo, y no puede producir bucles infinitos de
recuperacin, pero desecha muchos smbolos de la entrada.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Recuperacin de errores
Recuperacin a nivel de frase: Este mtodo realiza una
correccin local de la entrada restante.
Sustituye parte de la entrada invlida por otra que
permita continuar:
= :=
Este nivel de recuperacin depende de las sustituciones
implementadas por el diseador.
Puede producir ciclos infinitos de recuperacin
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Recuperacin de errores
Recuperacin por producciones de error: mtodo que aade a la
gramtica reglas o producciones errneas, permitiendo trabajar en
situaciones no locales.
Produccin de error:
A error
Marca un contexto en el que los tokens de error pueden eliminarse
hasta que se encuentre uno correcto.
Se amplia la gramtica con reglas de error que aparezcan con
frecuencia y en cada regla se aplica una recuperacin especifica.
Principal mtodo disponible en YACC/CUP para la recuperacin de
errores.
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Generadores automticos
Un generador automtico de analizadores sintcticos es
un programa que toma como entrada la especificacin de
un lenguaje y proporciona un procedimiento de anlisis
sintctico para el mismo.
Histricamente denominados compiladores de
compiladores:
YACC: Yet another compiler-compiler
Implementaciones de dominio pblico (GNU):
Bison (C/C++)
CUP (Java)
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Generadores automticos
Esquema de funcionamiento combinado:
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca
Bibliografa
Bsica:
Compiladores: principios, tcnicas y herramientas. A.V. Aho, R. Sethi,
J.D. Ullman. Addison-Wesley Iberoamerica. 1990.
Construccin de compiladores. Principios y prctica. Kenneth C.
Louden. Thomson-Paraninfo. 2004.
Complementaria:
Modern Compiler Implementation in Java, A.W. Appel, Cambridge
University Press, NY, ISBN 0-521-58388-8
Introduction to compiling techniques: a first course using ANSI C, LEX
and YACC. Bennet. McGraw-Hill International (UK). 1990.

También podría gustarte