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

时间:2019-02-18 18:29:57

标签: antlr antlr4

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

我仔细阅读了《权威ANTLR4参考》,发现antlr对树重写没有任何直接支持。我正在寻找任何可能的解决方法或替代解决方案。

'~(?:^|\b) (?<![\'"]) (\w+) (?![\'"]) :~mx'

1 个答案:

答案 0 :(得分:1)

TerminalNode具有成员getSymbol(),该成员返回词法化标记。通常,这是一个CommonToken实例,它允许设置文本和其他属性,例如行号,类型等。ParseTree.getText()除了要求符号提供文本外,什么也不做(这就是您所要做的)可以设置或来自输入流的内容。