有没有办法编辑Antlr ParseTree上的节点?
我递归地遍历antlr解析树,我想编辑树中TerminalNodes的文本。我希望能够为任何ParseTree做到这一点,并且我不希望为可能遇到的每个ParseTree编写特定的访问者 我查看了权威的ANTLR4参考,发现antlr对树重写没有任何直接支持。我正在寻找任何可能的解决办法或替代方案有没有办法编辑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++){
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
方法。很高兴知道是这样。