%{ #include #include "xisc.h" void yyerror(char *); /* ver abaixo */ %} %union { int inteiro; char *string; } %token CALL LOCALS RET SET_ARG %token PUSH_VAR PUSH_ARG PUSH_INT STORE_VAR STORE_ARG %token ADD SUB MULT DIV %token JEQ JLT JUMP %token PUT PUT_STR PUT_NL %token IDENTIFICADOR STRING %token INTEIRO %token ERRO %% programa: programa etiqueta instrucao | etiqueta: IDENTIFICADOR ':' | instrucao: CALL INTEIRO IDENTIFICADOR | LOCALS INTEIRO INTEIRO | RET | SET_ARG INTEIRO | PUSH_VAR INTEIRO INTEIRO | PUSH_ARG INTEIRO INTEIRO | PUSH_INT INTEIRO | STORE_VAR INTEIRO INTEIRO | STORE_ARG INTEIRO INTEIRO | ADD | SUB | MULT | DIV | JEQ IDENTIFICADOR | JLT IDENTIFICADOR | JUMP IDENTIFICADOR | PUT | PUT_STR STRING | PUT_NL %% /* função usada pelo bison para dar mensagens de erro */ void yyerror(char *msg) { fprintf(stderr, "erro: %s\n", msg); }