Parser.l
%{
#include<stdio.h>
#include "y.tab.h"
%}
%%
[0-9]+ {yylval.dval=atof(yytext);
return DIGIT;
}
\n|. return yytext[0];
%%
parser.y
%{
#include<stdio.h>
%}
%union
{
double dval;
}
%token <dval> DIGIT
%type <dval> expr
%type <dval> term
%type <dval> factor
%%
line: expr '\n' {
printf("%g\n",$1);
}
;
expr: expr '+' term {$$=$1 + $3 ;}
| term
;
term: term '*' factor {$$=$1 * $3 ;}
| factor
;
factor: '(' expr ')' {$$=$2 ;}
| DIGIT
;
%%
int main()
{
yyparse();
}
yyerror(char *s)
{
printf("%s",s);
printf("\n Type mismatch");
}
UGFyc2VyLmwKJXsKI2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGUgInkudGFiLmgiCiV9CiUlClswLTldKyB7eXlsdmFsLmR2YWw9YXRvZih5eXRleHQpOwpyZXR1cm4gRElHSVQ7Cn0KXG58LiByZXR1cm4geXl0ZXh0WzBdOwolJQpwYXJzZXIueQolewojaW5jbHVkZTxzdGRpby5oPgolfQoldW5pb24Kewpkb3VibGUgZHZhbDsKfQoldG9rZW4gPGR2YWw+IERJR0lUCiV0eXBlIDxkdmFsPiBleHByCiV0eXBlIDxkdmFsPiB0ZXJtCiV0eXBlIDxkdmFsPiBmYWN0b3IKJSUKbGluZTogZXhwciAnXG4nIHsKcHJpbnRmKCIlZ1xuIiwkMSk7Cn0KOwpleHByOiBleHByICcrJyB0ZXJtIHskJD0kMSArICQzIDt9CnwgdGVybQoKOwp0ZXJtOiB0ZXJtICcqJyBmYWN0b3IgeyQkPSQxICogJDMgO30KfCBmYWN0b3IKOwpmYWN0b3I6ICcoJyBleHByICcpJyB7JCQ9JDIgO30KfCBESUdJVAo7CiUlCmludCBtYWluKCkKewp5eXBhcnNlKCk7Cn0KeXllcnJvcihjaGFyICpzKQp7CnByaW50ZigiJXMiLHMpOwpwcmludGYoIlxuIFR5cGUgbWlzbWF0Y2giKTsKfQ==