当需要引用而不是定义时,如何创建交叉引用?

时间:2012-07-22 08:46:25

标签: xtext

在我的DSL中,我有类似的东西:

x = 14
y = $x + 1

所以一个元素定义只有它的名字,但当引用时,必须添加一些sigil。在引用元素时,禁止在sigil和name之间的任何空格。

如何在Xtext中执行此操作,同时仍允许这些元素之间的交叉引用?

因为在我看来,我要么必须使用两个不同的终端 - 一个匹配x而另一个匹配$x - 但那么交叉引用机制如何关联它们一起?或者,如果我定义:

ElementRef: '$' [Element|ELEMENT_NAME];

然后Xtext将允许sigil和名称之间的空格,这在我的DSL中是非法的。我想一个诸如“此时不接受空格”的选项会很棒,但我在Xtext文档中找不到类似的东西。

1 个答案:

答案 0 :(得分:1)

您必须为交叉引用令牌使用数据类型规则,并注册一个剥离$符号的值转换器。

ElementRef: [Element|ReferenceID];
ReferenceID hidden(): '$' ID;

值转换器负责令牌的抽象语法(ID)和具体语法($ ID)之间的转换。有关详细信息,请参阅docs