最好的解析器生成器,用于解析C++中的许多小文本?

use*_*098 1 c++ performance antlr parser-generator gold-parser

出于性能原因,我将C#库移植到C++.在正常操作期间,此库需要解析大约150'000个数学表达式(想想excel公式),平均长度小于150个字符.

在C#版本中,我使用GOLD解析器生成解析代码.它可以在一秒钟内解析所有150'000个表达式.

因为我们正在考虑扩展我们的语言,所以我认为转向C++可能是改为ANTLR的好机会.我已将(简单)语法移植到ANTLR并从中生成C代码.解析150'000表达式需要12秒,因为对于每个表达式,我需要创建一个新的ANTL3_INPUT_STREAM,令牌流,词法分析器和解析器 - 至少在版本3.4中,没有办法重用它们.

我很感激有人可以给我一个推荐使用的内容 - GOLD当然是一个选项,虽然生成C++或C代码似乎比C#变种复杂得多.我的语法是LALR和LL(1)兼容.最重要的是解析小输入的性能.

Tri*_*ner 9

我会尝试boost :: spirit.它通常非常快(即使解析像整数这样的简单事物,它也可能比C函数atoi http://alexott.blogspot.com/2010/01/boostspirit2-vs-atoi.html更快)

http://boost-spirit.com/home/

它有很好的东西:只有标题,所以依赖地狱,自由许可.

但是请注意,学习曲线很难.它是现代的C++(没有指针,但很多模板和非常令人沮丧的编译错误),所以来自C或C#,你可能不太舒服.