2016-10-18 12 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

一つの一般的なパターンは、構文的に1つの汎用の参照を持つことであること、すべての可能なターゲットの抽象スーパータイプ(変数の共通スーパータイプ|列挙|名前空間)を指します。

例えば:

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

はまた、モデリングと名前空間を参照するが、多くの場合、本当に必要されていないことに注意してください。代わりに、完全修飾名を使用できます。

など。

VariableReference: 
    ref=[AbstractElement|QualifiedName]