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

有没有办法编辑Antlr ParseTree上的节点?,antlr,antlr4,Antlr,Antlr4,我递归地遍历antlr解析树,我想编辑树中TerminalNodes的文本。我希望能够为任何ParseTree做到这一点,并且我不希望为可能遇到的每个ParseTree编写特定的访问者 我查看了权威的ANTLR4参考,发现antlr对树重写没有任何直接支持。我正在寻找任何可能的解决办法或替代方案 private void editTree(ParseTree tree){ for(int i = 0; i < tree.getChildCount();i++){

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

我查看了权威的ANTLR4参考,发现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);
        }

    }
}
私有void编辑树(ParseTree树){
对于(int i=0;i
TerminalNode
有一个成员
getSymbol()
,它返回lexed令牌。这通常是一个
CommonToken
实例,它允许设置文本和其他属性,如行号、类型等。
ParseTree.getText()
只要求符号提供文本(这反过来就是您可以设置的或来自输入流的内容).

我一直认为
CommonToken
也没有
setXXX
方法。很高兴知道是这样。