c++ - 如何让 yacc/bison 和 lex/flex 暂停文件扫描?

标签 c++ bison yacc lex flex-lexer

我正在尝试使用 Bison/Yacc 解析文件,但我想暂停解析一段时间。我想这样做的原因是我想顺序处理一个巨大的文件并使用 hasNext() 和 next() 方法模拟一个 Java 迭代器。

一个简单的例子是,使用 yacc 按行拆分文件,这样我就可以调用:

while(myYaccObj.hasNext())
{
    std::string line = myYaccObj.next()
}

我找不到如何“暂停”文件扫描。有办法吗?

最佳答案

最简单的方法就是直接在您的操作代码中执行暂停。例如,您可以有一个规则:

rule:  whatever  { Pause(); }
;

这将调用您的 Pause 函数,该函数可以暂停和/或执行您想要的任何操作。当您想继续解析时,只需让 Pause 函数返回即可。

关于c++ - 如何让 yacc/bison 和 lex/flex 暂停文件扫描?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4125910/

相关文章:

c++ - 如何从 std::vector 创建 QList

c++ - 如何将 strncpy() 转换为 WCHAR

c++ - 运行 key 密码解密知道 key ?

c++ - boost::iostreams::stream<boost::iostreams::array_source> 不设置 EOF

parsing - Bison语法错误处理

parsing - Bison Shift/Reduce 简单语法冲突

c - yacc文件解析

bison - 构建抽象语法树需要考虑哪些要点

c - 在 Lex 中解析命令行参数

c - 在 yacc 中返回指针时出现段错误