2013-08-11 4 views
0

^(Root child1 child2)과 같은 트리 노드가 있고 child1의 루트 노드에 여러 개의 자식이있을 수 있다고 가정합니다. 문제는 위의 트리를 다음 규칙을 사용하여 다시 작성할 때 의 모든 하위 노드는 child2으로 바뀌지 만 보존하려면 의 트리를 child1의 자식 목록에 추가해야합니다. 어떻게해야합니까? ^( 운영자 후 첫 번째 요소로 $ch1을 배치함으로써AST 다시 쓰기 중 노드 제거

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

답변

0

, 당신은 당신이 노드처럼 대신 나무처럼 취급하는 요소를 원하는 ANTLR을 말 했어요. 이 사용법은 모든 자식이 있으면 항상 자동으로 삭제합니다. 이후의 기능을 사용하려면 루트 노드와 하위 트리를 기반으로 child1을 해체해야합니다.

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