正确的方法来重置一个柔性扫描器之间的文件



我正在使用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不会重置启动条件。

相关内容

最新更新