2016-10-18 4 views
0

여러 유형의 변수가있는 모델링 언어에 대한 xtext 문법이 있습니다. 어떤 경우에는 변수가 가질 수있는 유형을 구분하려고합니다. 현재 워크 플로우는 VariableQualifier (아래의 문법 에서처럼)를 사용하고 유효성 검사기를 사용하여 원하는 유형 만 허용합니다. 그런 다음 참조에 액세스 할 때마다 명시 적으로 캐스팅해야합니다.Xtext 타입 안전 변수 한정자

더 좋은 솔루션이 있습니까? 문제는 이런 종류의에 대한

VariableReference: 
    ref=[Variable] 
; 
VariableQualifier: 
    (namespace+=NamespaceReference '.')* element=VariableReference 
; 
EnumerationReference: 
    ref=[Enumeration] 
; 
EnumerationQualifier: 
    (namespace+=NamespaceReference '.')* element=EnumerationReference 
; 
NamespaceReference: 
    ref=[Namespace] 
; 

답변

0

한 일반적인 패턴은 구문 적으로 하나 개의 일반적인 기준을 가지고하는 것입니다 가능한 모든 대상의 추상 슈퍼 타입 (변수의 공통의 슈퍼 타입 | 열거 | 네임 스페이스)을 가리 킵니다.

예 :은 :

VariableReference: 
    ref=[AbstractElement] ({VariableReference.parent=current} '.' ref=[AbstractElement])*; 

또한 그 모델링을 기록하고 네임 스페이스를 참조하는 것은 종종 정말 필요하지 않습니다. 대신 정규화 된 이름을 사용할 수 있습니다.

예.

VariableReference: 
    ref=[AbstractElement|QualifiedName]