【问题标题】:Premature EOF error in flexflex中的过早EOF错误
【发布时间】:2012-09-14 12:10:20
【问题描述】:

当我在 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;
}

【问题讨论】:

    标签: apache-flex eof


    【解决方案1】:

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

    试试这个:

    %{
    x = 0;
    %}
    
    %%
    [a]  {x++; printf("id %d",x); }
    %%
    
    int main(void)
    {
        yylex();
        return 0;
    }
    

    我不知道你打算做什么,但一个工作示例将为输入文件中遇到的每个 a 打印一个 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;
    }
    

    【讨论】:

      【解决方案2】:

      您想从 yywrap 返回 true (1),而不是 0。

      来自flex manual

      当扫描器收到来自YY_INPUT 的文件结束指示时,它会检查yywrap() 函数。如果yywrap() 返回假(零),则假定该函数已执行并设置yyin 指向另一个输入文件,然后继续扫描。如果它返回真(非零),则扫描器终止,向其调用者返回 0。

      【讨论】:

        猜你喜欢
        • 2012-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-31
        • 1970-01-01
        相关资源
        最近更新 更多