我阅读的大多数与这些工具相关的帖子通常建议使用其他方法来获得相同的效果。例如,提到这些工具的问题通常至少有一个答案包含以下内容之一:
- 使用boost库(插入适当的boost库)
- 不要创建DSL使用(插入喜欢的脚本语言)
- Antlr更好
假设开发人员...
- ...熟悉C语言
- ...知道至少一种脚本语言(例如Python、Perl等)
- ...几乎每个项目都必须编写一些解析代码
因此,我的问题是:
- 哪些情况适合使用这些工具?
- 是否存在任何(合理的)情况,没有比yacc和lex(或其派生物)更好的解决方案来解决问题?
- 在实际解析问题中,有多少次可以预计会遇到yacc和lex的任何缺点,这些缺点通过更近期的解决方案更好地解决?
- 对于尚未熟悉这些工具的开发人员而言,值得投资时间学习它们的语法/习惯用法吗?这些工具与其他解决方案相比如何?