Xtext类型安全变量限定符

时间:2016-10-18 09:45:22

标签: grammar xtext

我有一个xtext语法,用于具有多种类型变量的建模语言。在某些情况下,我想界定变量可以具有的类型。 当前的工作流程只是使用VariableQualifier(如下面的语法),并使用验证器只允许我想要的类型。然后每次我访问引用时我都必须明确地转换它。

有更好的解决方案吗?

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

1 个答案:

答案 0 :(得分:0)

这类问题的一个通用模式是在语法上有一个通用引用,指向所有可能目标的抽象超类型(变量|枚举|命名空间的常见超类型)。

E.g:

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

另请注意,通常不需要建模和引用命名空间。您可以改为使用完全限定的名称。

E.g。

VariableReference:
   ref=[AbstractElement|QualifiedName]