C Bison和Flex在达到EOF时不会停止,只说;读一个标记:“quot;然后等待输入
嗯,我已经找了我的问题很长时间了,但我什么也没找到。我在下面看到的问题无助于我的处境: 情况说明:C Bison和Flex在达到EOF时不会停止,只说;读一个标记:“quot;然后等待输入,c,parsing,bison,flex-lexer,eof,C,Parsing,Bison,Flex Lexer,Eof,嗯,我已经找了我的问题很长时间了,但我什么也没找到。我在下面看到的问题无助于我的处境: 情况说明: 我使用Bison和Flex解析一种定制语言,比如说这种语言的名字是MYLAN 在MYLAN语法中,我编写了%start-system\u-decl和system\u-decl:module\u-decls{…}在bison file.ypp中,没有表示“系统开始”或“系统结束”的标记,正如您所看到的,系统只是模块的组合。用MYLAN编写的文件可能如下所示: module ... end m
%start-system\u-decl
和system\u-decl:module\u-decls{…}代码>在bison file.ypp中,没有表示“系统开始”或“系统结束”的标记,正如您所看到的,系统只是模块的组合。用MYLAN编写的文件可能如下所示:
module
...
end
module
...
end
module
...
end
EOF
,但我不确定,因为我尝试了
,但问题仍然存在),它无法停止,它一直在等待令牌:
[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:
它只是卡在这里,解析器不会停止,有人能帮忙吗?非常感谢 在解析器调用
yylex
之前,立即打印读取标记:
字符串。在yylex
返回后,它将打印返回的令牌(或EOF),因此出现的情况是,当到达EOF时,您的lexer挂起
这样做的最可能的原因是有一个
规则或yywrap
函数,告诉lexer继续读取输入,但实际上不重置输入以指向其他内容(因此它只是读取另一个EOF并再次调用
规则或yywrap
函数,从而产生无限循环。)
显示你的lexer(.l文件和yywrap函数),可能有人会告诉你它有什么问题