若yywrap()无操作且返回0,Flex解析会出现什么情况?
Flex中yywrap()返回0且不修改yyin的行为分析
当Flex解析到当前输入流(由yyin指向)的EOF时,会自动调用yywrap()函数,它的返回值决定了后续行为:
- 返回1:Flex判定没有更多输入,直接终止解析流程
- 返回0:Flex会尝试继续读取输入,此时它会使用当前的
yyin指针去获取新数据
如果你的yywrap()函数不对yyin做任何修改却返回0,那么yyin仍然指向那个已经读到EOF的输入流。接下来Flex会再次尝试从这个流读取数据,结果还是EOF,于是又会触发yywrap()调用——这个过程会无限重复,直接进入无限循环,因为没有新的输入流被指定,也没有终止解析的信号。
要避免这种情况,你有几种选择:
- 让
yywrap()返回1,明确告知Flex终止解析 - 在
yywrap()内部将yyin切换到一个新的有效输入流(比如打开另一个文件并赋值给yyin) - 在Flex源码开头添加
%noyywrap指令,让Flex跳过yywrap()的调用,读到EOF就直接终止
内容的提问来源于stack exchange,提问作者Algo
相关产品推荐
相关产品推荐

