%{ #include %} %token DIGIT %% line : expr '\n' { printf("%d\n", $1); } ; expr : expr '+' term { $$ = $1 + $3; } | term ; term : term '*' factor { $$ = $1 * $3; } | factor ; factor : '(' expr ')' { $$ = $2; } | DIGIT ; %% yylex() { int c; c = getchar(); if(c >= '0' && c <= '9') { yylval = c - '0'; return DIGIT; } return c; } yyerror(char* errmsg) { fprintf(stderr, "%s\n", errmsg); } main(int argc, char** argv) { yyparse(); return 0; }