有没有办法编辑 Antlr ParseTree 上的节点?
Is there a way to edit nodes on an Antlr ParseTree?
我正在递归遍历一个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);
}
}
}
TerminalNode
有一个成员 getSymbol()
,它 returns 是词法化的标记。这通常是一个 CommonToken
实例,它允许设置文本和其他属性,如行号、类型等。 ParseTree.getText()
除了要求符号提供文本(这反过来就是你可以设置或来自输入流的内容)。
我正在递归遍历一个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);
}
}
}
TerminalNode
有一个成员 getSymbol()
,它 returns 是词法化的标记。这通常是一个 CommonToken
实例,它允许设置文本和其他属性,如行号、类型等。 ParseTree.getText()
除了要求符号提供文本(这反过来就是你可以设置或来自输入流的内容)。