%option noyywrap
%{
#include<stdlib.h>
#define INTEGER 1
#define PLUS 2
struct data
{
int value;
}dataObj;
%}
%%
[0-9]+ dataObj.value=atoi(yytext);return INTEGER;
[+] return PLUS;
%%
int main()
{
int ret_value;
while(ret_value = yylex() !=0)
printf("value:%d \t token type:%d\n",dataObj.value,ret_value);
}
如果我使用表达式3 + 5,则将3和5的值赋予1,这是正确的,但它将[+]的值设为1,而不应该是2.我使用的是flex版本2.5.4 < / p>
答案 0 :(得分:0)
正如你所解释的,但不是很清楚,在你的评论中,错误是在while循环中。如果以最初发布的方式运行代码,则使用flex中启用的调试,将生成以下输出:
--(end of buffer or a NUL)
3+5
--accepting rule at line 13 ("3")
value:3 token type:1
--accepting rule at line 14 ("+")
value:3 token type:1
--accepting rule at line 13 ("5")
value:5 token type:1
--accepting default rule ("
")
--(end of buffer or a NUL)
--EOF (start condition 0)
但是,如果主程序更改为:
int main()
{
int ret_value;
while((ret_value = yylex()) !=0)
printf("value:%d \t token type:%d\n",dataObj.value,ret_value);
}
生成以下输出,这是正确的:
--(end of buffer or a NUL)
3+5
--accepting rule at line 13 ("3")
value:3 token type:1
--accepting rule at line 14 ("+")
value:3 token type:2
--accepting rule at line 13 ("5")
value:5 token type:1
--(end of buffer or a NUL)
你的错,正如你猜测的那样是主程序中的错字。