ANTLR4:如何打印树在一个方便的格式
问题描述:
我试图打印生成的树格式如下:ANTLR4:如何打印树在一个方便的格式
所以我需要有一个ассе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();
}
如果需要令牌类型,你可以检查它通过使用Token
的getType()
方法,它会吐出一个在解析器类中定义为常量的数字。
谢谢你的回答:) – sibstudent1