ANTLR4:如何打印树在一个方便的格式

问题描述:

我试图打印生成的树格式如下:ANTLR4:如何打印树在一个方便的格式

picture

所以我需要有一个ассеss约的一个节点的信息树。我生成,如下所示:

public static void main(String[] args) throws Exception{ 
    CharStream cs = new ANTLRFileStream("test.txt"); 
    ExampleLexer lexer = new ExampleLexer(cs); 
    TokenStream tokens = new CommonTokenStream(lexer); 
    ExampleParser parser = new ExampleParser(tokens); 
    ParseTree tree = parser.mainRule(); 
} 

我可以使用tree.getChild(int childNumber)方法来访问子树和tree.getChild(int childNumber).getText()方法得到他们的文字,但我无法获取有关节点的任何信息(我需要知道的类型(如果节点是令牌)和规则名称(如果不是令牌))。我怎样才能做到这一点?

预先感谢您。

该节点的类型被“编码”为节点类别......实际上代表Token的是TermninalRuleImpl

您可以通过getSymbol()访问Token,所以这样的事情应该工作:

if(node instanceof TerminalNodeImpl) { 
    Token representedToken = ((TerminalNodeImpl) node).getSymbol(); 
} 

如果需要令牌类型,你可以检查它通过使用TokengetType()方法,它会吐出一个在解析器类中定义为常量的数字。

+0

谢谢你的回答:) – sibstudent1