我有一个xtext语法,用于具有多种类型变量的建模语言。在某些情况下,我想界定变量可以具有的类型。 当前的工作流程只是使用VariableQualifier(如下面的语法),并使用验证器只允许我想要的类型。然后每次我访问引用时我都必须明确地转换它。
有更好的解决方案吗?
VariableReference:
ref=[Variable]
;
VariableQualifier:
(namespace+=NamespaceReference '.')* element=VariableReference
;
EnumerationReference:
ref=[Enumeration]
;
EnumerationQualifier:
(namespace+=NamespaceReference '.')* element=EnumerationReference
;
NamespaceReference:
ref=[Namespace]
;
答案 0 :(得分:0)
这类问题的一个通用模式是在语法上有一个通用引用,指向所有可能目标的抽象超类型(变量|枚举|命名空间的常见超类型)。
E.g:
VariableReference:
ref=[AbstractElement] ({VariableReference.parent=current} '.' ref=[AbstractElement])*;
另请注意,通常不需要建模和引用命名空间。您可以改为使用完全限定的名称。
E.g。
VariableReference:
ref=[AbstractElement|QualifiedName]