了解简单的XText交叉引用

时间:2013-11-07 18:26:06

标签: dsl xtext cross-reference

我对Eclipse的Xtext有疑问。

我有一个简单的例子,我认为,非常密切地关注在线文档和howtos中给出的例子(例如:http://blog.efftinge.de/2012/05/implementing-fowlers-state-machine-dsl.html)。

我的语法如下所示:

MyModel : 
 properties += PropertyDefinition+
  rules += Rule+
;

PropertyDefinition :
 'property' name=ID '{'
   propertyValues += PropertyValue+
 '}'
;

PropertyValue :
 name=ID code=ID ';'
;

Rule :
 'rule:' value=[PropertyValue]
;

我的问题是规则“规则”中的交叉引用不起作用。所以我的问题基本上是,我对交叉引用的使用与上面链接中提供的交叉引用有什么区别。

他们的示例在没有自定义范围或类似的情况下开箱即用。所以我想,我也应该这样。

提前谢谢! :)

1 个答案:

答案 0 :(得分:2)

PropertyValue包含在一个命名元素(PropertyDefinition)中,默认情况下会将PropertyValue的名称转换为限定名称,即

PropertDefintion.name+'.'+PropertyValue.name

如果要引用限定名称,交叉引用需要使用语法规则:

Rule : 'rule' value=[PropertyValue|QualifiedName]

如果您不想使用限定名称,则必须更改IQualifiedNameStrategy。 只需在运行时模块中绑定不同的实现,例如:

public Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() {
  return SimpleNameProvider.class;
}