我想在访问树时解析器刚刚获得的解析树中插入新节点.该位置可能是当前节点的父节点或兄弟节点,或者就在它之前,因此我需要通过调用getParent和getChild方法来检查是否存在与新节点的规则名称匹配的节点ParseRuleContext.getParent返回ParseRuleContext,但getChild返回ParseTree.为什么这两种方法返回不同的类型?
顺便说一句,当前节点也可能被新节点替换.
在解析树上实现这种修改的最佳方法是什么?谢谢!
ANTLR 4中的解析树由终端节点和规则节点组成.由于终端节点(代表单个令牌)不能有任何子节点,我们知道任何子节点的父节点RuleNode也是RuleNode.ParserRuleContext是一个特定的实现RuleNode,并且用ParserRuleContext表示规则节点构造的解析树仅将该表示用于规则节点,因此a的父节点ParserRuleContext也必须是a ParserRuleContext.
a的子ParserRuleContext元素是ParserRuleContext或者的实例TerminalNode,并且它们的最常见的接口是ParseTree.