有没有办法在Antlr ParseTree上编辑节点?

问题描述 投票:0回答:1

我递归遍历一个antlr解析树,我想编辑树中的TerminalNodes文本。我希望能够为任何ParseTree执行此操作,并且我不想为我可能遇到的每个ParseTree编写特定的访问者。

我查看了The Definitive ANTLR4 Reference并发现antlr没有直接支持树重写。我正在寻找任何可能的解决方法或替代解决方案。

private void editTree(ParseTree tree){

    for(int i = 0; i < tree.getChildCount();i++){

        ParseTree child = tree.getChild(i);
        if(child instanceof TerminalNode){

             //Edit child's text

        } else {

            editTree(child);
        }

    }
}
antlr antlr4
1个回答
1
投票

TerminalNode有一个成员getSymbol(),它返回lexed标记。这通常是一个CommonToken实例,它允许设置文本和其他属性,如行号,类型等.ParseTree.getText()除了要求符号提供文本(这反过来是您可以设置或来自输入的内容)时别无其他流)。

© www.soinside.com 2019 - 2024. All rights reserved.