%{ #include using namespace std; extern int yylex(); extern int lineno; void yyerror(char*s); #include "stab.h" Symbol_Table stab; %} %union { int value; char name; } %token EQUAL PLUS TIMES CR RPAREN LPAREN %token ID %token INT %type expr term factor %% lines : lines line | line ; line : expr CR {cout << "= " << $1 << endl; } | ID EQUAL expr CR {stab.assign($1,$3); } ; expr : expr PLUS term {$$ = $1 + $3;} | term ; term : term TIMES factor {$$ = $1 * $3;} | factor ; factor : LPAREN expr RPAREN {$$ = $2;} | INT | ID { $$=stab.lookup($1); } ; %% int main() { yyparse(); } void yyerror(char *s) { cout << "Syntax error on line " << lineno << endl; }