0

假设我有一个类似的树节点,^(Root child1 child2)并且它的根节点child1可能有几个孩子。问题是,当我使用以下规则重写上述树时, 的所有子级child1都将替换为child2,但我希望保留它们并将child2' 的树附加到child1' 的子级列表中。我该怎么做?

^(Root ch1=child1 ch2=child2)
  -> ^($ch1 $ch2)
4

1 回答 1

0

通过放置在运算符$ch1之后的第一个元素^(,您已经告诉 ANTLR 您希望将该元素视为节点而不是。这种用法总是自动丢弃所有存在的子节点。child1要获得您所追求的功能,您必须根据其根节点和子树来分解它。

^(Root ^(Child1Root (ch1c+=.)*) child2)
  -> ^(Child1Root $ch1c* child2)
于 2013-08-11T16:00:03.100 回答