针对lex / yacc解析器的线程安全C ++包装器

时间:2011-01-22 07:55:06

标签: c++ yacc lex

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

  1. 最终YY_INPUT正在从全局对象中读取。我想不出另一种方法。
  2. 我不知道生成的lex / yacc代码最终会使用多少个全局变量。
  3. 如果大家可以分享他们做类似事情的经历,那就太棒了。

    干杯。

    PS。我们不会使用STL /字符串或任何模板。我们使用自己的基于变体的容器。我们在四个主要的Unices上使用lex + yacc而不是flex + bison。

1 个答案:

答案 0 :(得分:3)

我没有太多使用yacc直接工作的经验,但我知道bison支持线程安全的reentrant parsers。它看起来也像lex supports a reentrant lexer as well,我想如果你把它们放在一起它应该可以正常工作。