2013-07-26 2 views
2

Xtext 도메인 모델 예제를 수정하려고 했으므로 엔티티 속성에 두 개의 특성 (이 예제에 이미 포함되어있는 'many'이외에)이 추가로 포함될 수 있습니다. 모든 속성은 선택 사항이어야하며 순서는 부적합해야합니다. 내가하는 일과 상관없이 첫 번째 속성이 먼저 나열되어야합니다. Xtext 정렬되지 않은 선택 항목 목록

(many ?= 'many')? & (aBool ?= 'isBool')? & (anEnum = EnumType)? 

나는 '많은'을 사용하는 경우

은 다음 첫 번째 속성이거나 오류가 발생합니다 : 그래서, 예를 들어, 나는 xtext이 있습니다. 내가 완전히 내버려두면 오류가 없습니다.

그래서 순서가 지정되지 않은 그룹에서 3 가지 옵션 속성을 원한다는 것을 xtext에게 알려주려면 어떻게해야합니까?

답변

3

분명히 내가했던 일은, 괄호 안에 그룹을 둘러싸입니다 :/

((many ?= 'many')? & (aBool ?= 'isBool')? & (anEnum = EnumType)?) 

This을 도왔다.

0

& 연산자는 Xtext에서 매우 문제가됩니다! 왜냐하면 파서는 가능한 모든 순열을 구현해야하기 때문입니다. 목록에서 무한히 자주 발생할 수있는 추상 구문 분석 규칙 'OptionalElement'를 구현하는 것이 좋습니다. 이 파서 규칙은 'Many', 'Bool'또는 'Enum'으로 지정됩니다. 문법은 다음과 같을 것이다 :

AnyRule: /* some stuff */ optElement+=OptionalElement*; 
OptionalElement: Many | Bool | Enum; 
Many: {Many} 'many'; 
Bool: {Bool} 'isBool'; 
Enum: anEnum=EnumType; 

그런 다음 당신은 단지, 부울 또는 열거가 최대 많은 occures 여부를 확인 발리 클래스 (... mydsl.validation.MyDslValidator)에 체크 메소드를 구현해야합니다. 'optElement'목록에서 한 번.

클래스/메소드/필드 수정자는 Java 문법과 같은 방식으로 정의됩니다.

관련 문제