%{ #define YYSTYPE double #include #include void yyerror(char* s) { printf("%s\n", s); } int yylex(void); %} %token NUMBER %token EOL %left '+' '-' %left '*' '/' %% input : | input line {} ; line : EOL { exit (0); } | expr EOL { printf ("\t%g\n", $1); fflush(stdout); } ; expr : NUMBER { $$ = $1; } | expr '+' expr { $$ = $1 + $3; } | expr '-' expr { $$ = $1 - $3; } | expr '*' expr { $$ = $1 * $3; } | expr '/' expr { $$ = $1 / $3; } | '(' expr ')' { $$ = $2; } ; %% int main(void) { printf("Ctrl-c to exit.\n"); fflush(stdout); yyparse(); return 0; }