当我在flex中运行下面的代码时,我在最后一行得到过早的EOF作为错误。如果删除定义部分,则不会生成错误。为什么会这样?
%{
#include <stdio.h>
int x = 0;
}%
%%
"a" {x=x+1; printf("id %d",x); }
%%
int yywrap(void)
{
return 0;
}
int main(void)
{
int x = 0;
yylex();
return 0;
}
当我在flex中运行下面的代码时,我在最后一行得到过早的EOF作为错误。如果删除定义部分,则不会生成错误。为什么会这样?
%{
#include <stdio.h>
int x = 0;
}%
%%
"a" {x=x+1; printf("id %d",x); }
%%
int yywrap(void)
{
return 0;
}
int main(void)
{
int x = 0;
yylex();
return 0;
}
2条答案
按热度按时间70gysomp1#
代码的第三行有问题。它应该是%}而不是}%
试试看:
我不知道你打算做什么,但是一个工作示例将为输入文件中遇到的每个 a 打印一个 id,看起来有点像这样:
qmb5sa222#
您希望从yywrap返回true(1),而不是0。
来自Flex手册:
当扫描程序从
YY_INPUT
接收到文件结束指示时,它会检查yywrap()
函数。如果yywrap()
返回false(零),则认为该函数已继续并设置yyin
指向另一个输入文件,扫描程序继续。如果它返回true(非零),则扫描程序终止,并向其调用程序返回0。