%{ #include #include "util.h" #include "symbol.h" #include "errormsg.h" #include "absyn.h" int yylex(void); /* function prototype */ A_exp absyn_root; void yyerror(char *s) { EM_error(EM_tokPos, "%s", s); } %} %union { int pos; int ival; string sval; A_var var; A_exp exp; /* et cetera */ } %token ID STRING %token INT %token COMMA COLON SEMICOLON LPAREN RPAREN LBRACK RBRACK LBRACE RBRACE DOT PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR ASSIGN ARRAY IF THEN ELSE WHILE FOR TO DO LET IN END OF BREAK NIL FUNCTION VAR TYPE %type exp program /* et cetera */ %start program %% program: exp {absyn_root=$1;} exp: ID {$$=A_VarExp(EM_tokPos,A_SimpleVar(EM_tokPos,S_Symbol($1)));}