好吧,我已经搜索了我的问题很长一段时间,但一无所获。我在下面看到的问题无法帮助我的情况:
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)
情况描述:
我使用Bison和Flex来解析客户语言,假设该语言的名称是MYLAN;
在 MYLAN 语法中,我写了
%start system_decl
和system_decl:module_decls{...};
在 bison 文件 .ypp 中,如您所见,没有表示“系统开始”或“系统结束”的标记,系统只是模块的组合。用 MYLAN 编写的文件可能如下所示:module ... end module ... end module ... end
解析器对于 .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/