Está en la página 1de 2

%{ Codigo C, prologo (opcional) Definicion de macros especificar el tipo de datos, #define YYSTYPE XXXX para todos lo s posibles valores

semnticos, tokens y no terminales si no se especifica, el tipo por defecto es int Declaracion de funciones Declaracion de variables #includes, estructuras o variables %}

Declaraciones (opcional) Declaracion de simbolos terminales (tokens), y no terminales tokens y caracteres se declaran si es necesario asignarles valor semantico, caracteres entre comillas simples '' Definicion tipos de valores semnticos Definicion prioridad de operadores Crear varios tipos de datos %union{ int itype; double dtype; } Declaracion de simbolos terminales que tiene asociado tipo de da tos por default %token NUM Declaracion de simbolos terminales que tiene asociado un determi nado tipo de datos (los declarados en la directiva %union) %token <tipo> NUM No es necesario declarar simbolos no terminales, pero si es nece sario especificar su tipo en caso de que tengan asociado un valor semantico %type <tipo> NUM Precedencia de operadores Asociatividad %left %left '-' '+' %right %right '=' %nonassoc Prioridad Por orden de aparicion, de arriba hacia abajo %start identifica el simbolo no terminal por el cual empieza la gramatica, por default bison utiliza el que esta del lado izquierdo de la prime ra regla

%% Reglas y acciones de la gramtica Definicion de reglas (al menos una) no terminal: <conjunto de terminales y no terminales>; Para asociar semantica a una regla, se pone codigo C++ entre lla ves {}, las acciones Para poner multiples reglas asociado con un token se utiliza "|" Acciones:

Codigo C++ que se ejecutara cada vez que se reconosca un a instancia de esa regla, si las acciones se situan al final de la regla se ejec utan cuando se reconoce completamente la parte derecha de la regla, si se situan en otra posicion se ejecutan cuando se reconozca la fraccion de la regla asocia da Pseudovariables: ( $$, $1, $2, ...$N) Permiten que dentro de las acciones se pueda acceder a l os valores semnticos asociados a los smbolos de la regla, el tipo de estas pseudov ariables es del tipo que se le haya asociado al simbolo correspondiente en la s eccion de declaraciones (%token, %type, %left, etc...) $$ -> contiene el valor semntico asociado al no terminal del lado izquierdo de la regla $1, $2, ...$N -> contiene los valores semnticos asociados a los smbolos terminales y no terminales del lado derecho de la regla Cuando no se indica ninguna accin en una regla, BISON aade por defecto la accin $$=$1, en caso de que concuerden los tipos %%

Rutinas, epilogo (opcional) Se definen funciones de C++, o funciones llamadas desde las acciones de las reglas, main(), yyerror(), yylex()

También podría gustarte