%{ #include #define YYDEBUG 1 %} %token NUM LF %left ADD SUB MUL DIV %% line_list : line | line_list line ; line : LF | exp LF {printf("> %d\n", $1);} | error LF {yyclearin; yyerrok;} ; exp : NUM | exp ADD exp {$$ = $1 + $3;} | exp SUB exp {$$ = $1 - $3;} | exp MUL exp {$$ = $1 * $3;} | exp DIV exp {$$ = $1 / $3;} ; %% int yyerror(const char *s){ extern char *yytext; printf("yyerror:%s token:%d yytext:%s\n", s, yychar, yytext); return -1; } int main(int argc, char **argv){ return yyparse(); }