gpt4 book ai didi

java - ANTLR4:如何以方便的格式打印树

转载 作者:太空宇宙 更新时间:2023-11-04 11:14:27 25 4
gpt4 key购买 nike

我正在尝试以这种格式打印生成的树:

picture

所以我需要访问有关树节点的信息。我生成它如下:

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 的类型(如果节点是 token )和规则名称(如果不是 token ))。我怎样才能做到这一点?

提前谢谢您。

最佳答案

节点的类型被“编码”为节点类...实际表示 Token 的是 TermninalRuleImpl

您可以通过 getSymbol() 访问 Token,因此类似的操作应该有效:

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

如果您需要 token 类型,您可以使用 TokengetType() 方法来检查它,该方法将输出一个在解析器类中定义为常量的数字。

关于java - ANTLR4:如何以方便的格式打印树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45639813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com