martes, 14 de enero de 2014

Implementación En Bison.

PRECEDENCIA
La precedencia de una regla , esta determina por la precedencia  del terminal mas a derecha de dicha regla.
La precedencia de los terminales , esta determina por el orden en que se declararon , el primer terminal declarado es el de mayor precedencia y así sucesivamente.
Entendiendo estos conceptos es suficiente para nuestro propósito.Podemos jugar el orden de declaración de los terminales para favorecer un shift o un reduce
    Ejemplo
        Reglas :
               1 ) exp_a -> exp_a + exp_a
               2 ) exp_a -> exp_a * exp_a
        Entrada t : = x + t *p
        En algún momento y tras varias reducciones ,nos encontraremos en esta situación :
                      exp_a + exp_a .*  p
        En este punto el parse puede reducir(incorrecto) por la regla 1 o seguir leyendo (correcto) he intentar
        alcanzar la regla 2 .
        La precedencia de la regla 1 , es la de su terminal más a la derecha "+" ,mientras que la precedencia de         la regla 2 esta determinada por la precedencia del terminal "*".
        En esta situación , debemos continuar leyendo ya que la multiplicación debe de realizar antes que la
        suma.En la sección de "declaraciones de token" de nuestro fichero "fichero.y" , la declaración del token
        "*" debe de preceder a la declaración del token   "+".
        Incorrecto :
           ....
          %token  SUMA
          %token  MULTIPLICACION
           ....
        %%
   
        Solución :
           ....
          %token  MULTIPLICACION
          %token  SUMA
           ....
        %%  
      El archivo de bison lo puede descargar aqui

No hay comentarios:

Publicar un comentario