1

我正在使用 flex 扫描仪扫描一堆文件。我目前遍历文件并调用yylex(),但似乎 flex 中的状态没有重置。在下一次调用之前设置一个函数来<EOF>重置任何变量是否正确?BEGIN INITIALyylex()

在测试这个时,似乎这让我进入了一个无限循环,因为我最终回到 INITIAL 文件中没有更多匹配项,所以它永远不会退出。

4

1 回答 1

2

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不会重置开始条件。

于 2013-03-13T20:09:29.540 回答