使用 Boost Spirit X3 编写解析器的未来安全性如何?

2023-11-29

我正在考虑编写本质上是我的第一个解析器(=自从 Uni 的编译器类以来我已经忘记了)。

由于我使用C++,所以我正在考虑使用Boost Spirit。然后我注意到有“常规”2.5.2,还有代码名为 Spirit X3 的神奇子集。

我还注意到 Boost Spirit X3 已经在两年前宣布/讨论/预发布了,但 Boost Spirit 的正式版本是 2.5.2。最后,我读到:

增强精神3在哪里?是被遗弃了吗?

所以我“知道”这不是一个废弃的项目 - 但不是一个非常积极维护的项目。用 Spirit X3 编写解析器对我来说有多“安全”?是否有可能会失败/被放弃/被放弃,还是一定会成为Boost Spirit发布的主线?


它已经发布了,所以它消失的可能性很小。

即使在生产代码中,我也大量使用 X3:毕竟,我们确实有测试是有原因的。

也就是说,我知道围绕分布在不同翻译单元的规则的链接存在许多棘手的问题。

这是让我考虑的事情的清单not在以下情况下使用 X3:

  • 其中 Qi 的属性转换逻辑更有吸引力(使得规则更具可读性)。参见例如
  • 需要凤凰城整合Boost Spirit X3 无法编译具有可变因子的重复指令
  • 需要跨 TU 共享规则

在以下情况下,差异稍微不那么紧迫:

  • 当地人参与其中(“X3 变得真正乏味,(如果不是完全难以忍受的话)有状态规则(我指的是“当地人”的规则)”)。很多问题都可以通过使用来解决with<>: Boost Spirit X3 无法编译具有可变因子的重复指令但我不相信它是可重入的
  • 需要调用惰性规则²
  • 需要 Lexer(即我不会将 Qi/Lex 语法移植到 X3,除非重写)

但请注意,X3 有一些明显的亮点:

  • 编译时间
  • 易于生成动态规则/自定义指令(请参阅boost::spirit::x3 属性兼容性规则、直觉还是代码? or 递归 x3 解析器,结果传递)
  • 易于创建自定义解析器(例如Spirit-Qi:如何编写非终结符解析器?)

1 请参阅邮件列表,例如x3 链接器错误与单独的 TU and 使用 boost Spirit x3 单独解析器时链接错误

² 事实上,通过创建一个自定义解析器来创建一个解析器可能是“容易”的,建立在with<> and any_parser<>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Boost Spirit X3 编写解析器的未来安全性如何? 的相关文章

随机推荐