我正在使用 Flex 扫描仪扫描一堆文件。我目前循环文件并调用 yylex()
,但看起来 Flex 中的状态没有重置。设置一个函数来调用 <EOF>
以重置任何变量,并在下次调用 BEGIN INITIAL
之前调用 yylex()
是正确的做法吗?
在测试这个时,这似乎让我陷入了无限循环,因为我最终回到了 INITIAL,文件中没有更多匹配项,所以它永远不会退出。
最佳答案
有一个使用 <EOF>
的示例匹配 flex manual 中的开关缓冲区;它使用以下代码:
<<EOF>> {
if ( --include_stack_ptr 0 )
{
yyterminate();
}
else
{
yy_delete_buffer( YY_CURRENT_BUFFER );
yy_switch_to_buffer(
include_stack[include_stack_ptr] );
}
}
您需要添加BEGIN(INITIAL)
到else
分支,自 yy_switch_to_buffer
不重置启动条件。
关于c - 在文件之间重置 Flex 扫描仪的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15394762/