%{ #include %} %token NUMBER %left '+' '-' %left '*' DIV MOD /* gives higher precedence to '*', DIV and MOD */ %left SQR %% comm: comm '\n' | /* empty */ | comm expr '\n' { printf("%d\n", $2); } | comm error '\n' { yyerrok; printf("Try again\n"); } ; expr: '(' expr ')' { $$ = $2; } | expr '+' expr { $$ = $1 + $3; } | expr '-' expr { $$ = $1 - $3; } | expr '*' expr { $$ = $1 * $3; } | expr DIV expr { $$ = $1 / $3; } | expr MOD expr { $$ = $1 % $3; } | SQR expr { $$ = $2 * $2; } | NUMBER ; %% #include "lex.yy.c" yyerror(s) char *s; {printf("%s\n", s); } main() { return yyparse(); }