c - 在文件之间重置 Flex 扫描仪的正确方法

标签 c lex flex-lexer

我正在使用 Flex 扫描仪扫描一堆文件。我目前循环文件并调用 yylex(),但看起来 Flex 中的状态没有重置。设置一个函数来调用 <EOF> 以重置任何变量,并在下次调用 BEGIN INITIAL 之前调用 yylex() 是正确的做法吗?

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

最佳答案

有一个使用 <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不重置启动条件。​​

关于c - 在文件之间重置 Flex 扫描仪的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15394762/

相关文章:

c - 为什么我在这个程序的 Console 中从来没有看到 Hello 文本?

create_module - 为什么使用 copy_from_user?

c - 在词法分析器中打印 union/结构的一部分

c - 如何在 CMAKE 中使用 FLEX

c - 调用 yylex() 后全局指针设置为 NULL

c++ - 将整型转换为浮点类型时检测溢出

c - 如何将“放在C中的字符串内

c++ - 解析器生成器的选择

c - lex 程序错误

flex-lexer - 如何对同一文本调用多个词法分析器?