出于性能原因,我正在将 C# 库移植到 C++。在正常操作期间,除其他外,该库需要解析大约 150'000 个平均长度小于 150 个字符的数学表达式(想想 excel 公式)。
在 C# 版本中,我使用 GOLD 解析器生成解析代码。它可以在一秒钟内解析所有 150'000 个表达式。
因为我们正在考虑扩展我们的语言,所以我认为转向 C++ 可能是改用 ANTLR 的好机会。我已将(简单)语法移植到 ANTLR 并从中生成 C 代码。解析 150'000 个表达式需要超过 12 秒,因为对于每个表达式,我需要创建一个新的 ANTL3_INPUT_STREAM、令牌流、词法分析器和解析器 - 至少在 3.4 版中,没有办法重用它们。
如果有人可以给我一个建议,我将不胜感激 - GOLD 当然是一种选择,尽管生成 C++ 或 C 代码似乎比 C# 品种复杂得多。我的语法是 LALR 和 LL(1) 兼容的。最重要的是解析小输入的性能。