Antlr AST重写期间的节点删除

Antlr AST重写期间的节点删除,antlr,antlr3,Antlr,Antlr3,假设我有一个类似于^(Root child1 child2)的树节点,child1的根节点可能有几个子节点。问题是,当我使用以下规则重写上述树时,child1的所有子级都将被child2替换,但我希望保留它们,并将child2的树附加到child1的子级列表中。我该怎么做 ^(Root ch1=child1 ch2=child2) -> ^($ch1 $ch2) 将$ch1作为^(operator,您已经告诉ANTLR您希望将该元素视为节点而不是树。此用法始终自动丢弃所有子元素(如果

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

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

$ch1
作为
^(
operator,您已经告诉ANTLR您希望将该元素视为节点而不是树。此用法始终自动丢弃所有子元素(如果存在)。要获得所需的功能,您必须根据其根节点和子树分解
child1

^(Root ^(Child1Root (ch1c+=.)*) child2)
  -> ^(Child1Root $ch1c* child2)