【发布时间】:2017-02-07 12:15:23
【问题描述】:
为了对输入执行算术运算,编写了以下两个代码,但它一直给我语法错误 这是 lex 程序
%{
#include "y.tab.h"
#include <stdlib.h>
%}
%%
[0-9]+ {yylval = atoi(yytext);return ID;}
[*-+/()] {return yytext[0];}
'\n' {return END;}
. {return yytext[0];}
%%
这是 yacc 程序:
%{
#include <stdio.h>
#include <stdlib.h>
#include "y.tab.h"
%}
%token ID END
%%
S: expr END { printf("Answer is : %d\n",$$); exit(1); }
expr: ID
|
| expr '+' expr { $$ = $1+$3;}
| expr '-' expr { $$ = $1-$3;}
| expr '*' expr { $$ = $1*$3;}
| expr '/' expr { $$ = $1/$3;}
| '(' expr ')' {$$ = $2;}
;
%%
int main()
{
yyparse();
}
输出:
2+3
2+3
Syntax error
可能是什么问题?
【问题讨论】:
-
你已经显示了输出——很好。不清楚您的输入是什么。
-
2+3 是我的输入。如果正确,它应该显示:答案是 5
-
除了我在回答中提到的错误之外,您还需要通过定义运算符优先级来解决移位减少冲突。