Anteriormente, vimos la derivación descendente, a continuación aprenderemos la reducción que consiste en ir desde la cadena de entrada hasta el símbolo inicial del árbol sintáctico.
Parsing Bottom-Up:
Usa la gramática en su versión mas natural por lo que no es necesaria la factorizacion a diferencia del top down.
Establece reglas de prioridad y asociatividad de los operadores. Podemos asociarlo con una operación matemática.
5x8x3Para nosotros no es difícil determinar que el orden de los factores no alterara el producto, sin embargo, el computador no tiene esa capacidad, por lo que debemos establecer reglas de prioridad y asociatividad indicando en que dirección se hará las operaciones. Esto se hace para evitar la ambigüedad en la gramática.
Recordando, una gramática es ambigua cuando genera dos arboles sintácticos para una misma entrada.
La estrategia:
Algo a notar es que la reducción se debe hacer por la derecha.
Reducción por desplazamiento:
Si hacemos las derivaciones por la derecha, debe haber una secuencia de símbolos terminales por la derecha, y por la izquierda símbolos tanto terminales como no terminales.
Si lo tuviéramos que visualizar, seria como una barra que atraviesa la cadena de entrada. Podemos indicar también el área a la derecha de la barra como área no examinada.
Si lo tuviéramos que visualizar, seria como una barra que atraviesa la cadena de entrada. Podemos indicar también el área a la derecha de la barra como área no examinada.
|int * int + int -> int * T | + int
Para la reduccion por desplazamiento, existen dos movimientos.
Movimientos reduce: reemplaza la parte derecha de una produccion por la parte izquierda de un paso de reduccion.
Movimientos shift: basicamente rueda la barra a la derecha. Generalmente se hace al no encontrar produccion, se hace hasta no haber mas entrada sin analizar.
Si se puede hacer hacer shift/reduce en un paso, esto se puede resolver con precedencia.
Si es un caso en el que se puede hacer reduce/reduce este sera mas complicado, para el proximo articulo se indicara la forma de resolver el problema.
Recurso usado:
- Lamina: Parsing Bottom-Up
Terminos a investigar:
- Prefijo viable
- Item: implementa un algoritmo con los automatas finitos deterministas.
No hay comentarios.:
Publicar un comentario