Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Es un parser ascendente basado en un autómata a Pilas, el cual es guiado por la función ACCION la
cual esta dentro de una Tabla de Análisis.
Ejem.
Dado: (1) S -- > ( S )
(2) S -- > ID donde ID es un identificador, es decir un nombre cualesquiera.
Algoritmo:
1. Precondicion: Empilar S0, llamar al scanner.
2. Obtener acción(Sm, token), el cual puede ser:
a) d n == > desplazamiento == > empilar(token), empilar(Sn), llamar al scanner.
b) r m == > reducción == > desempilar pivote
reducir usando la regla m: A -- > pivote
empilar(A)
obtener nuevo estado = GOTO(Sj, A ),
donde Sj es el estado que quedo al tope cuando se saco el pivote.
empilar nuevo estado
c) Aceptar == > Pertenece
d) Error == > No pertenece. Error es una celda vacía.
Luego construiremos el diagrama de estados, a partir del cual llenaremos la tabla. Lo haremos a
través de un ejemplo:
(1) S -- > AB
(2) A -- > a
(3) B -- > b
Consideramos temporalmente un nuevo símbolo distinguido Z, el cual lo definimos como Z S.
Ademas hay que recordar que Seguidor (S) = { $ }
0: Z -- > • S
S -- > • AB
A -- > • a
Ahora vemos que simbolos nos permiten avanzar el punto. Estos definen transiciones hacia
nuevos estados, los cuales empiezan con el ítem siguiente, el que tiene el punto avanzado y luego
le calculamos la cerradura de ese siguiente item.
En las filas colocamos los estados. En las columnas para la función ACCION colocamos los
terminales y para la función GOTO colocamos los No Terminales.
Los desplazamientos son cambios de estado con un terminal. Por ejem del estado 0 al estado 3
hay una transición con el símbolo a. Entonces en la fila de estado 0 y en la columna del terminal a
colocamos d3. Esto significa que si estamos en el estado 0 y llega el símbolo a entonces hacemos
un desplazamiento hacia el estado 3.
Las reducciones son cuando dentro de un estado hay un ítem con el punto al final. Por ejem. En el
estado 4 hay una reducción S AB • es decir en la fila del estado 4 colocaremos en toda la fila
r1, es decir reduccion usando la regla 1.
Hay que notar que en el estado 1 se tiene una reduccion del simbolo distinguido, eso es Aceptar y
ocurre solo cuando se tiene el fin de cadena, por lo cual Aceptar debera ir en esa columna.
Los cambios de estado con un No Terminal, son parte de la function GOTO. Por ejemplo del estado
0 con el No terminal A pasamos al estado 2.
Ejem.
Para la siguiente gramatica:
Conflicto desplazamiento-reducción
Conflicto reducción-reducción.
PARSER SLR(1)
Al hacer esto ya no estaremos con un parser LR(0) sino con un parser SLR(1).
(1) S → E
(2) E → 1 E
(3) E → 1
Si hubiese conflictos, entonces resolverlos para obtener un parser SLR(1)
Seguidores ( E ) = { $ }
Entonces solo dejamos la reduccion r3 en las columnas bajo los seguidores de E. Esto elimina el
conflicto. Sin embargo, para completar el proceso, también debemos realizar lo mismo sobre las
otras reducciones.
r1: S → E Seguidores ( S ) = { $ }
r2: E → 1 E Seguidores ( E ) = { $ }
Donde ya no observamos conflictos, pero hay que notar que este es un parser SLR(1).
y supongamos:
(3) A → x seguidores ( A ) = { 1 }
(4) B → y seguidores ( B ) = { $ }
Se debe observar que para que el conflicto desaparezca ambos conjuntos de seguidores deben
ser disjuntos.
Tipos de Parser LR
Existen 3 tipos:
1. SLR(K), es el parser LR simple
2. LALR(k), Look Ahead LR.
3. LR(k) canonico