flex中的早期EOF错误

use*_*785 2 apache-flex eof

当我在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)

Moj*_*ojo 6

代码的第三行有问题.它应该是%}而不是}%

试试这个 :

%{
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)