我正在使用flex扫描仪扫描一堆文件。我目前循环遍历文件并调用yylex()
但似乎flex中的状态没有重置。是否应该设置一个函数来调用<EOF>
来重置任何变量,BEGIN INITIAL
在下次调用yylex()
之前是否正确?
在测试时,似乎这会让我进入一个无限循环,因为我最终回到INITIAL,文件中没有更多的匹配,所以它永远不会退出。
答案 0 :(得分:1)
有一个使用<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
不会重置启动条件。