在我的DSL中,我有类似的东西:
x = 14
y = $x + 1
所以一个元素定义只有它的名字,但当引用时,必须添加一些sigil。在引用元素时,禁止在sigil和name之间的任何空格。
如何在Xtext中执行此操作,同时仍允许这些元素之间的交叉引用?
因为在我看来,我要么必须使用两个不同的终端 - 一个匹配x
而另一个匹配$x
- 但那么交叉引用机制如何关联它们一起?或者,如果我定义:
ElementRef: '$' [Element|ELEMENT_NAME];
然后Xtext将允许sigil和名称之间的空格,这在我的DSL中是非法的。我想一个诸如“此时不接受空格”的选项会很棒,但我在Xtext文档中找不到类似的东西。
答案 0 :(得分:1)
您必须为交叉引用令牌使用数据类型规则,并注册一个剥离$符号的值转换器。
ElementRef: [Element|ReferenceID];
ReferenceID hidden(): '$' ID;
值转换器负责令牌的抽象语法(ID)和具体语法($ ID)之间的转换。有关详细信息,请参阅docs。