我正在尝试以这种格式打印生成的树:
所以我需要了解有关树节点的信息。我按如下方式生成它:
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(如果节点是令牌)和规则名称(如果不是令牌))。我怎么能这样做?
提前谢谢。
答案 0 :(得分:0)
节点的类型是"编码"作为节点类......实际代表Token
的那些是TermninalRuleImpl
。
您可以通过Token
访问getSymbol()
,因此应该有效:
if(node instanceof TerminalNodeImpl) {
Token representedToken = ((TerminalNodeImpl) node).getSymbol();
}
如果您需要令牌类型,可以使用getType()
的{{1}}方法进行检查,该方法将吐出一个在解析器类中定义为常量的数字。