在antlr4中构建AST

在antlr4中构建AST,antlr,antlr4,abstract-syntax-tree,Antlr,Antlr4,Abstract Syntax Tree,我想知道我们是否可以使用Antlr版本4构建AST。我找不到任何关于使用antlr4构建它的参考。 一个答案是,使用只生成解析树的antlr4很容易,但我的问题是效率如何 它迫使我们爬行整个解析树,而不是抽象语法树,这不是遍历整个树并使用访问者执行任务的有效方法。首先我要指出两个关键项目: 效率不仅仅包括简单的执行速度。它还可以应用于内存开销、可维护性以及创建和/或使用软件的团队所使用的长期开发策略的有效性 你的论点是解析树比AST慢,你在挥手致意。多年来,我一直在测试ANTLR 3和ANTLR

我想知道我们是否可以使用Antlr版本4构建AST。我找不到任何关于使用antlr4构建它的参考。 一个答案是,使用只生成解析树的antlr4很容易,但我的问题是效率如何


它迫使我们爬行整个解析树,而不是抽象语法树,这不是遍历整个树并使用访问者执行任务的有效方法。

首先我要指出两个关键项目:

  • 效率不仅仅包括简单的执行速度。它还可以应用于内存开销、可维护性以及创建和/或使用软件的团队所使用的长期开发策略的有效性

  • 你的论点是解析树比AST慢,你在挥手致意。多年来,我一直在测试ANTLR 3和ANTLR 4的性能,毫无疑问,ANTLR 4的解析树消除了ANTLR 3中AST的性能

  • 这就是说,在ANTLR 4中专门使用解析树的决定是基于这样的观察,即在ANTLR 3中分离的解析器和带有AST的树解析器的实际可维护性没有达到预期的可维护性,因此降低了总体效率,以至于它们不再是推荐的做法

    此外,ANTLR 4中的自动解析树构造允许我实现,我随后就实现了。这使我能够根据解析树的形状来创建一个大型代码库,而不会在最终产品中引入回归错误