2 u013052928 u013052928 于 2016.02.28 23:11 提问

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 %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);
}


图片说明

1个回答

devmiao
devmiao   Ds   Rxr 2016.02.28 23:23
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!