我正在使用flex扫描仪扫描一堆文件。我目前在文件上循环并调用yylex()
,但似乎flex内的状态没有重置。设置一个函数调用<EOF>
重置任何变量,BEGIN INITIAL
在下次调用yylex()
之前是正确的吗?
在测试时,它似乎把我送进了一个无限循环,因为我最终回到INITIAL,文件中没有更多的匹配项,所以它永远不会退出。
在flex手册中有一个使用<EOF>
匹配来切换缓冲区的例子;它使用以下代码:
<<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
不会重置启动条件。