最近看了flex bison,然后这个计算器结果一直是0,为什么。
这是1.l:
%{
# include "2.tab.h"
%}
%%
"+" { return ADD; }
"-" { return SUB; }
"*" { return MUL; }
"/" { return DIV; }
"|" { return ABS; }
[0-9]+ {yylval=atoi(yytext); return NUMBER;}
\t {/* ignore whitespace */}
. {printf("character %c\n",*yytext);}
\n {return EOL;}
%%
int yywrap(void){
return 0;
}
%{
#include <stdio.h>
int yylex (void);
void yyerror (char const *);
%}
/* declare tokens */
%token NUMBER
%token ADD SUB MUL DIV ABS
%token EOL
%%
calclist: /* nothing */
| calclist exp EOL { printf("= %d\n", $1); }
;
exp: factor
| exp ADD factor { $$ = $1 + $3; }
| exp SUB factor { $$ = $1 - $3; }
;
factor: term
| factor MUL term { $$ = $1 * $3; }
| factor DIV term { $$ = $1 / $3; }
;
term: NUMBER
| ABS term { $$ = $2 >= 0? $2 : - $2; }
;
%%
main(int argc, char **argv)
{
yyparse();
}
void yyerror(char const *s)
{
fprintf(stderr, "error: %s\n", s);
}