到达EOF时Bison和Flex不会停止,只会说“读取令牌:”并等待输入

时间:2013-12-29 12:12:56

标签: c parsing bison flex-lexer eof

嗯,我已经搜索了很长时间的问题了,但我什么都没得到。我在下面看到的问题无助于我的情况:

bison end of file

Lex/Flex - Scanning for the EOF character

Flex/Bison EOF propagation from stdin vs a file

END OF FILE token with flex and bison (only works without it)

情境描述:

  1. 我使用Bison和Flex解​​析客户语言,说这个语言的名字是MYLAN;

  2. 在MYLAN语法中,我在野牛文件.ypp中写了%start system_declsystem_decl:module_decls{...};,没有表示"系统开始的标记"或者"系统结束"如您所见,系统只是模块的组合。用MYLAN编写的文件可能如下所示:

    module
    ...
    end
    module
    ...
    end
    module
    ...
    end
    
  3. 解析器适用于.ypp中描述的所有语法,但是当它到达文件末尾时(它应该是EOF但我不确定,因为我尝试了{{1但问题仍然存在),它无法停止,它保持了对令牌的支持:

    <<EOF>>
  4. 它只是停留在这里,解析器不会停止,任何人都可以帮忙吗?非常感谢提前!

1 个答案:

答案 0 :(得分:2)

在解析器调用Reading a token:之前立即打印yylex字符串。在yylex返回后,它将打印返回的令牌(或EOF),因此看起来正在发生的是你的词法分析器在到达EOF时挂起。

这样的事情最可能的原因是有一个<<EOF>>规则或yywrap函数告诉词法分析器继续从输入读取但实际上没有重置输入以指向其他东西(因此它只是读取另一个EOF并再次调用<<EOF>>规则或yywrap函数,从而导致无限循环。)

显示你的词法分析器(.l文件和yywrap函数),有人可能会告诉你它有什么问题。