1

我想将新节点插入到解析器在访问树时刚刚获得的解析树中。该位置可能是当前节点的父节点或兄弟节点,也可能是在它之前,所以我需要通过调用getParentgetChild方法来检查是否有一个节点与新节点的规则名称匹配ParseRuleContextgetParent返回ParseRuleContext,但getChild返回ParseTree。为什么这两种方法返回不同的类型?

顺便说一句,也有可能当前节点应该被新节点替换。

在解析树上实现这种修改的最佳方法是什么?谢谢!

4

1 回答 1

6

ANTLR 4 中的解析树由终端节点和规则节点组成。由于终端节点(表示单个令牌)不能有任何子节点,因此我们知道 any 的父节点RuleNode也是RuleNode. ParserRuleContext是 的特定实现RuleNode,并且用ParserRuleContext表示规则节点构造的解析树仅使用规则节点的表示,因此 a 的父级ParserRuleContext也必须是 a ParserRuleContext

a 的子级是orParserRuleContext的实例,并且这些最派生的通用接口是。ParserRuleContextTerminalNodeParseTree

于 2013-07-13T01:19:47.483 回答