(1/8)
Parsing ascendente
- A diferencia del método descendente, arma el árbol gramatical desde las hojas hacia la raíz, reduciendo la hilera a un símbolo de aceptación
- El método más común para parsing ascendente se conoce como reducción-desplazamiento
(2/8)
Algoritmo de reducción-desplazamiento
- Llamado así por las operaciones que pueden realizarse en este
- Al iniciar, se crea una pila que inicia con un símbolo $
- Al reducir, se reemplaza una sección de la hilera que coincida con el lado derecho de la producción (handle/mango) por su lado izquierdo
- Al desplazar, se inserta una sección de la hilera en la pila
- El ciclo se repite hasta que la pila sólo contenga $ y la hilera esté vacía, o hasta que se encuentre la instrución de aceptar o de error
(3/8)
Gramáticas LR(k)
- Escanean de izquierda a derecha (L), generan una derivación más derecha en reversa (R) y puede revisar k elementos por adelantado en la hilera
- Es el método más general para parsing de reducción-desplazamiento, y puede implementarse tan eficientemente como otros métodos
- Utiliza una tabla interna donde cada combinación de estado/entrada especifica una reducción, un desplazamiento o una aceptación a realizar
- Por separado se tiene una lista de reducciones, en el formato A → B
(4/8)
Ejemplo de sistema LR(1)