Professional Documents
Culture Documents
A.XYZ
AX.YZ
AXY.Z
AXYZ.
ConjuntoDeElementos CERRADURA(I) {
J=I
repeat
for (cada elemento 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
}
Ejemplo:
E´ E
EE+T|T
TT*F|F
F ( E ) | id
Ejemplo:
Si I={E’E., EE.+T} entonces ir__A(I,+)={EE+.T, T.T*F, T.F,
F.(E), F.id}
I1
+ T
E E’E. I6 I9
I0 EE.+T EE+.T EE+T.
E’.E id T.T*F TT.*F
E.E+T T.F +
E.T *
F.(E)
T.T*F T F.id
T.F I2
F.(E) ET.
F.id ET.*F *
I7
id
TT*.F I10
id F.(E) F TT*F.
( T F.id
I5
id
Fid.
I4
F F(.E)
E.E+T E
E.T ) I11
I8
( T.T*F ) F(E).
EE.+T
T.F ) F(E.)
F.(E)
F.id
I3 F
TF.
El algoritmo de análisis sintáctico LR
Códigos para las acciones:
1. si significa desplazar y meter el estado i en la pila.
2. rj significa reducir mediante la produccion enumerada como j,
3. acc significa aceptar
4. Espacio en blanco significa error
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:
1. Construir C={I0, I1, …, In}, la colección de conjuntos de elementos
LR(0) para G’.
2. El estado i se construye a partir de Ii. Las acciones de análisis
sintáctico i se determinan de la siguiente forma:
a) Si [Aα.aβ] está en Ii e ir__A(Ii,a)=Ij, entonces establecer
ACCION[i.a] a “desplazar j”. Aquí, a debe ser un terminal.
b) Si [A α.] esta en Ii, entonces establecer ACCION[i,a] a “reducir
A α” para toda a en SIGUIENTE(A); aquí, A tal vez no sea S’.
c) Si [S’S.] esta en Ii, entonces establecer ACCION[i,$] 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.
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__A[i,A]=j.
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].
Entrada ACCION Ir__A
id + * ( ) $ E T F
0 s5 s4 1 2 3
1 s6 acc
(1) EE + T
2 r2 s7 r2 r2 (2) ET
3 r4 r4 r4 r4
(3) TT * F
(4) TF
4 s5 s4 8 2 3 (5) F( E )
5 r6 r6 r6 r6 (6) Fid
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
Algoritmo 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.