c语言 - 野牛抛出语法错误,但我看不到我的错误



我写了一个简单的程序,希望它是输出后缀表示及其值的中缀计算器。我不知道为什么,但当我运行它并将简单的数据传递给它时,我会出现语法错误。以下是我传递的内容,以及我从src文件中得到的内容。

执行:

2+2+2
2 2 + 
4
syntax error

Bison文件:

%{
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
extern int yylex();
extern int yyparse();
void yyerror(const char *msg);
%}
%union {
int ival;
}
%token <ival> NUM
%type <ival> N M P A
%%
S : A               {printf("n%dn", $1);}
;
A   : P '-' P       {printf("- "); $$ = (int)($1 - $3);}
| P '+' P       {printf("+ "); $$ = (int)($1 + $3);}
| P             {$$ = $1;}
;
P   : M '/' M       {printf("/ "); $$ = (int)($1 / $3);}
| M '*' M       {printf("* "); $$ = (int)($1 * $3);}
| M '%' M       {printf("% "); $$ = (int)($1 % $3);}
| M             {$$ = $1;}
;
M   : N '^' N       {printf("^ "); $$ = (int)pow($1, $3);}
| N             {$$ = $1;}
;
N   : '(' A ')'     {$$ = $2;}
| '-' N         {printf("-%d ", $2); (int)($$ = -$2);}
| NUM           {printf("%d ", $1); (int)($$ = $1);}
;
%%
void main() {
yyparse();
return;
}
void yyerror(const char *msg) {
fprintf(stderr, "%sn", msg);
}

Flex文件:

%{
#include <stdio.h>
#include <stdlib.h>
#include "bison.tab.h"
%}
%%
#.*n
"\"n
[0-9]+      {
yylval.ival = atoi(yytext); 
return NUM;
}
[-+*/^%()]  {
return yytext[0];
}
[ tn]
%%

你能看出我的错误吗?梅比,我只是没有很好地阅读Bison的文档。很难找到任何关于它的教程。

好的,我找到了解决方案,但我不知道为什么它有效。如果有人想澄清,我很感激我不擅长正式语言。我改变的是:

P   : M '/' M       {printf("/ "); $$ = (int)($1 / $3);}
| M '*' M       {printf("* "); $$ = (int)($1 * $3);}
| M '%' M       {printf("% "); $$ = (int)($1 % $3);}
| M             {$$ = $1;}
;

更改为:

P   : P '/' M       {printf("/ "); $$ = (int)($1 / $3);}
| P '*' M       {printf("* "); $$ = (int)($1 * $3);}
| P '%' M       {printf("% "); $$ = (int)($1 % $3);}
| M             {$$ = $1;}
;

并对每个非终结符都做了相应的处理。

相关内容

最新更新