***** lex part ***** %{ #include #define NUM 257 double yylval; %} INT [0-9]+ NUM ([+-]?)(\.{INT}|{INT}(\.{INT}?)?) %% {NUM} {yylval = atof(yytext); return NUM;} [ \t]* ; .|\n {return yytext[0];} %% int yywrap() {return 1;} ***** yacc part ***** %{ #include void yyerror(char*s) {printf("%s\n",s);} extern int yylex(); extern int yywrap(); #define YYSTYPE double %} %token NUM %% input: /**/ | input line ; line: '\n' | rpn '\n' {printf("%f\n",$1);} | error '\n' {yyerrok;} ; rpn: NUM | rpn rpn '+' {$$=$1+$2;} | rpn rpn '-' {$$=$1-$2;} | rpn rpn '*' {$$=$1*$2;} | rpn rpn '/' {$$=$1/$2;} ; %% int main() {yyparse(); return 0;}