我正在尝试设置具有以下特征的xtext语法。
草图(!):
Class:
properties += Property*
;
Resource:
properties += Property*
;
Link :
// no classes here, so no common for Resource and Class
[Resource] <-> [Resource]
;
BasicType:
'int' | 'long'
;
Property:
// this is not supported
name ':' BasicType | [Resource] | [Class]
// i tried
// name ':' EObject
;
我的问题是:
如何解决这种情况,将属性类型交叉引用为“资源”或“类”或BasicType?
我尝试使用EObject作为BaseType并解析自定义ScopeProvider中的交叉引用, 但后来我不知道如何使用BasicTypes(int或long)作为属性的类型。
答案 0 :(得分:1)
首先,您可以通过定义不要调用的规则
来引入常见的超类型Parent: Child1 | Child2
然后你只能引用其他地方定义的东西。 因此你必须明确地定义它们或改变语法