Java ANTLR打印树

Java ANTLR打印树,java,antlr,grammar,abstract-syntax-tree,Java,Antlr,Grammar,Abstract Syntax Tree,我正在寻找ANTLR语法,它们可以以可读的格式打印树。当我试图打印Java.g时(http://openjdk.java.net/projects/compiler-grammar/antlrworks/Java.g)结果很不方便。但我发现有一种语法(包括java项目)很好。这个语法是来自Marton Papp的Pascal语法(http://www.antlr.org/grammar/1279217060704/pascal3.zip) 比如: VARDECL text="Var"

我正在寻找ANTLR语法,它们可以以可读的格式打印树。当我试图打印Java.g时(http://openjdk.java.net/projects/compiler-grammar/antlrworks/Java.g)结果很不方便。但我发现有一种语法(包括java项目)很好。这个语法是来自Marton Papp的Pascal语法(http://www.antlr.org/grammar/1279217060704/pascal3.zip)

比如:

VARDECL text="Var"
       VARLIST text=""
       VAR text="a" 
       VAR text="b" 
       VARTYPE text="Integer"
它是用于Pascal(pascal3.zip)的

你见过这样的东西吗:C,Java,C#,VB。也许,你会在其他语言中看到它

  • 所需的目标语言(解析器和Lexer)仅为Java

您可以非常轻松地更改Java语法(假设您了解一点ANTLR)。lexer和parser语法的编写是最难的部分,在本例中,已经为您完成了


如果您想知道如何让解析器语法输出AST而不是简单的解析树,请参阅前面的问答:

@BartKiers,您是对的。这正是我所说的Java语法。所以我的问题是:我找到了fortran解析器,它似乎适合以下条件:(它是用Java编写的)。有人能为所提到的语言提供语法建议吗?这些语言构建了真正有用的AST(包含程序结构)?您的教程“如何输出使用antlr构建的AST?”非常棒。我认为我可以为Java.g实现这样的修改。但是,也许,在这种情况下,我做双重工作。如果我只需要一个语法,也许可以做到,但对于:C,Java,C#,VB。我想知道,是否没有语法可以打印这些语言的AST。问题是:也许有人在万维网上看到了它?@МааааФааааа,也许有一些AST生成C和CŠ语法,我不知道。然而,我非常确定VB没有ANTLR语法,如果有,我怀疑它在解析VB源文件方面做得不好。VB的语法很糟糕!