Title: An
1Análisis sintáctico LR SLR (LR simple)
2Ventajas de los analizadores sintácticos LR
- Los analizadores sintácticos son construidos por
tablas, similar a los analizadores sintácticos LL
no recursivos. - El análisis sintáctico LR es atractivo por varias
razones - Pueden construirse analizadores sintácticos LR
para reconocer prácticamente todas las
construcciones de lenguajes de programación para
las cuales puedan escribirse gramáticas libres de
contexto. - El método de análisis sintáctico LR es el método
de análisis sintáctico de desplazamiento
reducción sin rastreo hacia atrás más general que
se conoce a la fecha. - Un AS LR puede detectar un error sintáctico tan
pronto como sea posible en una exploración de
izquierda a derecha en la entrada. - La clase de gramáticas que pueden analizarse
mediante los métodos LR es un superconjunto
propio de la clase de gramáticas que pueden
analizarse con métodos predictivos o LL.
3Desventajas
Su principal desventaja es que es demasiado
trabajo construir un analizador sintáctico LR en
forma manual para una gramática común de un
lenguaje de programación.
4Los elementos y el autómata LR(0)
Un elemento LR (0) de una gramática G es una
producción de G con un punto en cierta posición
del cuerpo. Por ejemplo la producción A? XYZ
produce los siguientes elementos A?.XYZ A?X.YZ A
?XY.Z A?XYZ. La producción A?e genera solo un
elemento A?.
5Una colección de conjuntos de elementos LR(0),
conocida como la colección LR(0) canónica,
proporciona la base para construir un autómata
finito determinístico, el cual se utiliza para
tomar decisiones en el análisis sintáctico. Para
construir la colección LR(0) canónica de una
gramática, definimos una gramática aumentada y
dos funciones, CERRADURA e ir__A. Si G es una
gramática con el símbolo inicial S, entonces G
es G con un nuevo símbolo inicial S y la
producción S?S
6Cerradura de I
ConjuntoDeElementos CERRADURA(I) JI
repeat for (cada elemento A? a.Bß en
J) for (cada producción B? .? de G) if (B?
.? no está en J) agregar B? .? a J
until no se agreguen mas elementos a J en una
ronda return J
7Ejemplo E? E E ? E T T T ? T F F F ? (
E ) id Si IE?.E, entonces CERRADURA (I)
Contiene el conjunto E?.E, E?.ET, E?.T,
T?.TF, T?.F, F?.(E), F?.id
8La función ir__A
Función ir__A(I,X), donde I es un conjunto de
elementos y X es un símbolo gramatical. ir__A
(I,X) se define como la cerradura del conjunto de
todos los elementos A? aX.ß, de tal forma que A?
a.Xß se encuentre en I. Ejemplo Si IE?E.,
E?E.T entonces ir__A(I,)E?E.T, T?.TF,
T?.F, F?.(E), F?.id
9I1 E?E. E?E.T
T
I6 E?E.T T?.TF T?.F F?.(E) F?.id
I9 E?ET. T?T.F
E
I0 E?.E E?.ET E?.T T?.TF T?.F F?.(E) F?.id
id
T
I2 E?T. E?T.F
I7 T?T.F F?.(E) F?.id
id
I10 T?TF.
F
id
(
T
I5 F?id.
id
I4 F?(.E) E?.ET E?.T T?.TF T?.F F?.(E) F?.id
F
E
I11 F?(E).
)
I8 E?E.T F?(E.)
)
(
)
F
F
I3 T?F.
10El algoritmo de análisis sintáctico LR
- Códigos para las acciones
- si significa desplazar y meter el estado i en la
pila. - rj significa reducir mediante la produccion
enumerada como j, - acc significa aceptar
- Espacio en blanco significa error
11- Algoritmo Construcción de una tabla de análisis
sintáctico SLR - Entrada Una gramática aumentada G
- Salida Las funciones ACCION e ir_A para G de la
tabla de análisis sintáctico SLR. - Método
- Construir CI0, I1, , In, la colección de
conjuntos de elementos LR(0) para G. - El estado i se construye a partir de Ii. Las
acciones de análisis sintáctico i se determinan
de la siguiente forma - Si A?a.aß está en Ii e ir__A(Ii,a)Ij, entonces
establecer ACCIONi.a a desplazar j. Aquí, a
debe ser un terminal. - Si A? a. esta en Ii, entonces establecer
ACCIONi,a a reducir A? a para toda a en
SIGUIENTE(A) aquí, A tal vez no sea S. - Si S?S. esta en Ii, entonces establecer
ACCIONi, a aceptar. - Si resulta cualquier acción conflictiva debido a
las reglas anteriores, decimos que la gramática
no es SLR(1). El algoritmo no produce un
analizador sintáctico en este caso.
12- 3. Las transiciones de ir__A para el estado i se
construyen para todos lo no terminales A usando
la regla Si ir__A(Ii, A)Ij, entonces
ir__Ai,Aj. - 4. Todas las entradas que no esten definidas por
las reglas (2) y (3) se dejan como error. - 5. El estado inicial del analizador sintáctico es
el que se construyó a partir del conjunto de
elementos que contienen S?.S.
13Entrada ACCION ACCION ACCION ACCION ACCION ACCION Ir__A Ir__A Ir__A
Entrada id ( ) E T F
0 s5 s4 1 2 3
1 s6 acc
2 r2 s7 r2 r2
3 r4 r4 r4 r4
4 s5 s4 8 2 3
5 r6 r6 r6 r6
6 s5 s4 9 3
7 s5 s4 10
8 s6 s11
9 r1 s7 r1 r1
10 r3 r3 r3 r3
11 r5 r5 r5 r5
- E?E T
- E?T
- T?T F
- T?F
- F?( E )
- F?id
14Algoritmo de análisis sintáctico LR. Entrada
Una cadena de entrada w y una tabla de análisis
sintáctico LR con las funciones ACCION e ir__A,
para una gramática G. Salida Si w está en L(G),
los pasos de reducción de un análisis sintáctico
ascendentes para w, en cualquier otro caso, una
indicación de error. Método Al principio, el
analizador sintáctico tiene s0 en su pila, en
donde s0 es el estado inicial y w está en el
búfer de entrada. hacer que a sea el primer
símbolo de w while (1) hacer que s sea el
estado en la parte superior de la pila if
(ACCIONs,adesplazar t) meter t en la
pila hacer que a sea el siguiente símbolo de
entrada else if (ACCIONs,areducir A?ß
) sacar ß estados de la pila y sustituir los
símbolos ß por A sea t el estado que esta en el
tope de la pila meter ir__At,A en la
pila enviar de salida la producción A?ß
else if (ACCIONs,aaceptar) break else
llamar a la rutina de recuperación de errores
15Pila Símbolos Entrada Accion 0 idid s
5 0 5 id id r6 0 F id r4 0
3 T id s7 0 2 7 T id s5 0 2 7
5 Tid r6 0 2 7 TF r3 0 2 7
10 T r2 0 2 T 0 1 E acc