【发布时间】:2018-07-11 02:15:46
【问题描述】:
我正在尝试使用最新版本的 ANTLR (v4) 构建 AST,我在 stack-overflow 和网上找到了几个链接,向您展示了如何为简单的语法做这件事。但是,我想要一个用于 Java.g4 语法(Java 语言)的 AST。目前,我正在关注这里推荐的方法(https://codevomit.wordpress.com/2015/04/25/antlr4-project-with-maven-tutorial-episode-3/)。然而,基于这种方法,我需要标记所有具有替代方案的生产规则。
因此,如果有人告诉我是否有使用 ANTLR4 构建 AST 的不同替代方案,或者是否有已标记的 java.g4 语法,我将不胜感激。
【问题讨论】:
-
您可以将此语法用于 java github.com/antlr/grammars-v4/blob/master/java/Java.g4 。还有java8的语法github.com/antlr/grammars-v4/tree/master/java8
-
@VincentAranega 谢谢。但是,我已经在玩这些语法了。我需要的是一个用于替代生产规则的标记语法,以便在 antlr4 生成 JavaVisitor.java 时可以为不同的标签提供不同的访问者方法。这将允许我拥有我想要的抽象。
-
ANTLR4 会为你构建解析树,非常方便;构建真正的 AST 需要付出努力,而且付出的努力可能不会像您希望的那样得到回报。见stackoverflow.com/a/1916687/120163
-
@IraBaxter 谢谢。除了使用 ANTLR4 之外,有没有更方便的方法来为 函数体(方法的 AST 表示)构建 AST。
-
@user1577269:您似乎有 3 个问题:a)您可以使用 ANTLR4 来解析 just 函数体,b)是否有一种方便的方法来使用 ANTLR4 构建 AST, c) 除了 ANTLR4 之外,还有其他方法可以做到这一点。关于a),您可以通过使目标规则也允许“功能”(大概是方法)来弯曲语法。 b) AFAIK,不,但我已经在之前的评论中对此做出了回应。 c) 如果你想获得 ASTs,我知道的唯一方便的答案是我们的 DMS Software Reengineering Toolkit,是的,你可以要求它只解析一个方法。如果你问我,我会详细回答。
标签: parsing tree abstract-syntax-tree antlr4