繁体   English   中英

围绕lex / yacc解析器的线程安全C ++包装器

[英]Thread-safe C++ wrapper around a lex/yacc parser

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

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

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

干杯。

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

我没有直接与yacc一起工作的经验,但是我知道bison支持线程安全的可重入解析器 看起来lex支持可重入lexer ,而且我想如果将两者放在一起,效果会很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM