我想知道我们是否可以使用Antlr版本4构建AST。我找不到使用antlr4构建它的任何参考。 一个SO答案说,使用只生成解析树的antlr4很容易,但我的问题是效率呢?
它强制我们抓取整个解析树而不是抽象语法树,这不是一种有效的方式来遍历整个树并使用访问者执行任务。
答案 0 :(得分:10)
首先我想指出两个关键项目:
效率不仅仅包括简单的执行速度。它还可以应用于内存开销,可维护性以及团队创建和/或使用软件所使用的长期开发策略的有效性。
你在论证中正在挥手,解析树比AST慢。多年来我一直在测试ANTLR 3和ANTLR 4的性能,此时毫无疑问,ANTLR 4的解析树消除了ANTLR 3中AST的性能。
也就是说,在ANTLR 4中专门使用解析树的决定是基于以下观察结果:ANTLR 3中具有AST的分离解析器和树解析器的实际可维护性不符合预期可维护性,因此降低了整体效率,使其不再是推荐的做法。
此外,ANTLR 4中的自动解析树构造允许我实现declarative rule versioning,然后我applied to code throughout ANTLRWorks 2。这允许我依赖于解析树的形状rapidly correct every portion大型代码库,而不会在最终产品中引入回归错误。