【问题标题】:Thread-safe C++ wrapper around a lex/yacc parser围绕 lex/yacc 解析器的线程安全 C++ 包装器
【发布时间】:2011-06-13 14:23:31
【问题描述】:

我正在尝试编写一个 JSON 解析器(而不是使用免费提供的解析器之一,因为某些项目限制)并且已经使用简单的包装 C++ 类编写了基于 lex+yacc 的版本。我已经为 lex 重新定义了 YY_INPUT 宏以从内存缓冲区中读取。现在的交易是确保解析器是线程安全的,我不确定确保这一点有多容易。有两个问题:

  1. 最终 YY_INPUT 正在从全局对象中读取。我想不出另一种方法。
  2. 我不知道生成的 lex/yacc 代码最终使用了多少个全局变量。

如果人们可以分享他们做类似事情的经验,那就太好了。

干杯。

PS。我们不使用 STL/string 或任何模板。我们使用自己的基于变体的容器。我们在四大 Unices 上使用 lex+yacc 而不是 flex+bison。

【问题讨论】:

  • 线程安全和可重入是两种不同的野兽。更改了标题以使用正确的术语。

标签: c++ yacc lex


【解决方案1】:

我没有太多直接使用yacc 的经验,但我知道bison 支持线程安全的reentrant parsers。它也看起来像lex supports a reentrant lexer as well,我猜如果你把两者放在一起应该会很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    相关资源
    最近更新 更多