当我在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;
}
Run Code Online (Sandbox Code Playgroud)
代码的第三行有问题.它应该是%}而不是}%
试试这个 :
%{
x = 0;
%}
%%
[a] {x++; printf("id %d",x); }
%%
int main(void)
{
yylex();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不知道你打算做什么,但是为输入文件中遇到的每一个打印一个id的工作示例将有点像这样:
%{
x = 0;
%}
%%
[a] {x++; printf("id %d ",x); }
%%
int main(int argc,char * argv[])
{
yyin = fopen(argv[1],"r");
yylex();
fclose(yyin);
return 0;
}
Run Code Online (Sandbox Code Playgroud)