假设我有一个像^(Root child1 child2)
这样的树节点,child1
的根节点可能有几个子节点。问题是,当我使用以下规则重写上述树时,child1
的所有子项都将被child2
替换,但我希望它们被保留并child2
的树被附加到child1
的子列表中。我该怎么做?
^(Root ch1=child1 ch2=child2)
-> ^($ch1 $ch2)
答案 0 :(得分:0)
将$ch1
作为^(
运算符之后的第一个元素,您已经告诉ANTLR您希望该元素被视为节点而不是像树。如果存在,此用法始终会自动丢弃所有子项。要获得您所需的功能,您必须根据其根节点和子树分解child1
。
^(Root ^(Child1Root (ch1c+=.)*) child2)
-> ^(Child1Root $ch1c* child2)