2014-01-22 41 views
4

我想知道我们是否可以使用Antlr版本4构建AST。我无法找到任何有关使用antlr4构建它的参考。 一个SO回答说,它很容易使用antlr4只产生解析树,但我的问题是什么效率在antlr4中构建AST

它迫使我们抓取的,而不是抽象语法树是不是通过整个树走路和使用访客执行任务有效的方式全解析树。

回答

10

有我想先指出两个关键项目:

  1. 效率占地面积不是执行简单的速度更。它也可以应用于内存开销,可维护性以及团队创建和/或使用一个软件所使用的长期开发策略的有效性。

  2. 您是挥手在你的论点,即解析树比AST的慢。我一直在测试ANTLR 3和4 ANTLR性能好几年,并有在这一点毫无疑问,ANTLR 4的解析树在ANTLR的AST的性能3.

这就是说,在ANTLR 4中专门使用解析树的决定基于以下观察结果:ANTLR 3中分离的解析器和树解析器与AST的可维护性不符合预期的可维护性,并且因此总体效率降低到它们是不再是推荐的做法。

此外,自动解析树建设ANTLR 4让我实现declarative rule versioning,然后我applied to code throughout ANTLRWorks 2。这使我能够依靠分析树的形状来创建大型代码库的rapidly correct every portion,而不会在最终产品中引入回归错误。