Kea*_*eks 18
您还可以查看以下链接:
它在很大程度上取决于语法.我倾向于喜欢递归下降解析器,它通常是手工编写的(尽管可以从语法描述中生成一个).
如果您打算使用解析器生成器,那么有两个不错的选择:Byacc和Antlr.如果你想要(合理地)与yacc兼容的东西,Byacc(到目前为止)是你的最佳选择.如果你从头开始,既没有现有的代码也没有使用与yacc兼容的东西的经验,那么Antlr几乎肯定是你最好的选择.
既然已经提到了,我还会谈谈Bison.我会像瘟疫那样避免野牛.布鲁克斯对"计划扔掉一个人"的建议适用于此.Robert Corbett(Byacc的作者)将Bison写成了他在解析器生成器上的第一次尝试.不幸的是,他把它交给了GNU,而不是扔掉它.在一个典型的市场营销方面取得了卓越的技术优势,Bison被广泛使用(甚至被那些不太了解的人推荐),而Byacc仍然相对模糊.
编辑:我讨厌这样做,但既然已经提到过,我也会评论Boost.spirit.虽然这可能是模板元编程最酷的例子,但它有一些问题导致我建议不要试图将其严格使用.
相信我:事实上,你可以写出像灵一样的东西,正好在令人印象深刻和惊人之间的边界 - 但我仍然只使用它,如果我确定我正在处理的语法是(并将永远保留)非常小而简单.