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