Antlr4 如何在使用BaseListener浏览ParserRuleContext时修改或插入它

Antlr4 如何在使用BaseListener浏览ParserRuleContext时修改或插入它,antlr4,antlr4cs,Antlr4,Antlr4cs,我有以下扩展ProcessBaseListener的代码: var myProcessListener = new MyProcessListener(); walker = new ParseTreeWalker(); walker.Walk(myProcessListener , tree); 我已经重写了一个方法: public override void ExitLineNumberOrLabel(ProcessParser.LineNumberOrLabelContext conte

我有以下扩展ProcessBaseListener的代码:

var myProcessListener = new MyProcessListener();
walker = new ParseTreeWalker();
walker.Walk(myProcessListener , tree);
我已经重写了一个方法:

public override void ExitLineNumberOrLabel(ProcessParser.LineNumberOrLabelContext context)
{
    var lineNumberOrLabel = context.GetText().ToUpper();
}
如何操作该上下文或其父上下文?所有方法都是只读的

例如,我可能希望修改LineNumberLabel或将其从其父上下文中删除。我甚至可能想在它之前或之后插入一个不同类型的新上下文


我尝试过使用TokenStreamRewriter,但这并没有修改流。我必须调用ToString()来查看更改,然后重新解析它???为什么我不能修改ParserRuleContext?我曾经用SableCC来做这件事。

在惯用用法中,一旦生成解析树,解析树是不可变的。将解析树/上下文节点更改的其他意图记录为。有关用法,请参阅嵌入式JavaDoc


至于原因,Antlr提供了自己的处理分析阶段/树遍历的方法,如中所述。

谢谢。我认为这会很好,我已经在一些地方这样做了。我只需要坚持到底。