gpt4 book ai didi

c - Bison和Flex到达EOF时不会停止,只说 "Reading a token:"并等待输入

转载 作者:行者123 更新时间:2023-12-03 00:11:15 24 4
gpt4 key购买 nike

好吧,我已经搜索了我的问题很长一段时间,但一无所获。我在下面看到的问题无法帮助我的情况:

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 语法中,我写了 %start system_declsystem_decl:module_decls{...};在 bison 文件 .ypp 中,如您所见,没有表示“系统开始”或“系统结束”的标记,系统只是模块的组合。用 MYLAN 编写的文件可能如下所示:

    module
    ...
    end
    module
    ...
    end
    module
    ...
    end
  3. 解析器对于 .ypp 中描述的所有语法都工作得很好,但是当它到达文件末尾时(应该是 EOF 但我不确定,因为我尝试了 <<EOF>> 但问题仍然存在存在),它无法停止,它一直在等待 token :

    [MYLANParser] $ ./MYLANParser example.mylan
    ...
    Stack now 0 3
    Entering state 6
    Reducing stack by rule 50 (line 458):
    $1 = nterm module_decls ()
    $2 = nterm module_decl ()
    $$ = nterm module_decls ()
    Stack now 0
    Entering state 3
    Reading a token:

它只是卡在这里,解析器不会停止,任何人都可以帮忙吗?非常感谢!

最佳答案

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

发生类似情况的最可能原因是 <<EOF>>规则或 yywrap函数告诉词法分析器继续从输入读取,但实际上并没有将输入重置为指向其他内容(因此它只是读取另一个 EOF 并再次调用 <<EOF>> 规则或 yywrap 函数,从而导致无限循环.)

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

关于c - Bison和Flex到达EOF时不会停止,只说 "Reading a token:"并等待输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20825045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com