//one.lex %{ #include void yyerror(char *); #include "y.tab.h" %} %% [0-9]+ { yylval= atoi(yytext) ; return INTEGER; } [-+*/\n] return *yytext; [ \t] ; /*skip whitespace */ . yyerror(" invalid charecter"); %% int yywrap(void) { return 1; } %{ #include void yyerror(char *); #include "y.tab.h" %} %% [0-9]+ { yylval= atoi(yytext) ; return INTEGER; } [-+*/\n] return *yytext; [ \t] ; /*skip whitespace */ . yyerror(" invalid charecter"); %% int yywrap(void) { return 1; } //two.y %{ #include int yylex(void); void yyerror(char *); %} %token INTEGER %% program: program expr '\n' { printf("%d\n",$2);} | ; expr: INTEGER { $$=$1; } | expr '+' expr {$$ = $1 + $3;} | expr '-' expr {$$ = $1 - $3;} | expr '*' expr {$$ = $1 * $3;} | expr '/' expr {$$ = $1 / $3;} ; %% void yyerror(char *s){ fprintf(stderr,"%s\n", s); } int main(void){ yyparse(); return 0; } %{ #include int yylex(void); void yyerror(char *); %} %token INTEGER %% program: program expr '\n' { printf("%d\n",$2);} | ; expr: INTEGER { $$=$1; } | expr '+' expr {$$ = $1 + $3;} | expr '-' expr {$$ = $1 - $3;} | expr '*' expr {$$ = $1 * $3;} | expr '/' expr {$$ = $1 / $3;} ; %% void yyerror(char *s){ fprintf(stderr,"%s\n", s); } int main(void){ yyparse(); return 0; }