2010-05-01 5 views
4

내 DSL을 정의하기 위해 Xtext을 사용하고 있습니다. Xtext는 내 입력 DSL의 EMF 모델을 탐색 할 수있는 파서를 생성합니다. 이 EMF 모델을 다른 트리로 변환하고 싶습니다. 이 변환을하려면 트리를 가로 질러야합니다. 그러나 Xtext에서 생성 된 EMF 모델에 대한 방문자 클래스를 찾을 수 없습니다. 내가 찾은 가장 가까운 것은 하나의 노드를 방문하는 Switch 클래스이다. EMF 모델을 직접 트래버스하고 방문하는 각 노드에서 Switch 클래스를 호출 할 수 있습니다. 그러나 모델 탐색을 구현하는 Xtext에 방문자 기능이 있는지 궁금합니다.Xtext에서 생성 된 EMF 객체 트리를 어떻게 트래버스 할 수 있습니까?

답변

3

this thread을 고려하면 스위치 (예 : used here)는 XText의 공식 방문자 패턴입니다.
는 또한 custom Validation process 있습니다

AbstractDeclarativeValidator의 목적은 당신이 선언적인 방법으로 제약을 쓸 수 있도록하는 것입니다 - 클래스 이름이 이미 알 수 있듯이.
철저한 if-else 구문을 작성하거나 생성 된 EMF 스위치를 확장하는 대신 @Check 주석을 모든 메서드에 추가하면 유효성 검사가 수행 될 때 자동으로 호출됩니다.

정확하게 필요한 것은 아닙니다.

+0

@VonC, 내가 이미 언급 한 스레드를 읽었습니다. Switch 클래스에 대해 잘 알고 있습니다. 순회 논리를 구현하는 클래스가있는 경우 방황했습니다. – reprogrammer

+0

@reprogrammer : 나는 스위치의 명백한 "유일한 XText 방문자"상태를 지적하고 싶었다. – VonC

0

음, EMF API를 사용하는 것으로 충분하지 않습니까? 모델을 변형하려면 Xtend와 같은 변형 언어를 사용하고 있습니까?

+0

Xtend를 사용하여 EMF 모델을 다른 모델로 변환하는 방법은 무엇입니까? – reprogrammer

+0

@reprogrammer는 문서를 체크 아웃합니다 : http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.xpand.doc/help/ch01s05.html –

3

EcoreUtil.getAllProperContents (Resource, false)는 귀하가 찾고있는 것일 수 있습니다. 리소스의 내용을 트래버스하는 TreeIterator가 생성됩니다. iter.next()의 결과를 스위치로 전달하고 요소 유형에 따라 변환 논리를 수행하십시오.

+0

마찬가지로, 'TreeIterator'를 얻을 수 있습니다. 모델의'Resource.getAllContents()'에서. – plagal