问题描述
- bison简易计算器 新手问题
-
最近看了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 %cn",*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("= %dn", $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: %sn", s); }
解决方案
http://blog.chinaunix.net/uid-24774106-id-3566855.html
时间: 2024-08-03 22:05:12