在我的DSL中,我有一些类似于:
x = 14
y = $x + 1
因此,元素只定义其名称,但当引用时,必须添加一些sigil。在引用元素时,禁止在sigil和名称之间使用任何空格。
如何在Xtext中做到这一点,同时仍然允许在这些元素之间进行交叉引用?
因为在我看来,我要么需要使用两个不同的终端来匹配x
,另一个用来匹配$x
,但是交叉引用机制如何将它们联系在一起呢?或者,如果我定义:
ElementRef: '$' [Element|ELEMENT_NAME];
然后Xtext将允许在sigil和名称之间使用空格,这在我的DSL中是非法的。我想像“此时不接受空格”这样的选项是很好的,但是我在Xtext文档中找不到类似的东西。
发布于 2012-07-22 03:18:50
您必须对交叉引用令牌使用数据类型规则,并注册一个去除$符号的值转换器。
ElementRef: [Element|ReferenceID];
ReferenceID hidden(): '$' ID;
值转换器负责对令牌的抽象语法( ID)和具体语法($ID)之间的转换。详情请参阅文档。
https://stackoverflow.com/questions/11598869
复制相似问题