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)