0

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

x = 14
y = $x + 1

所以一个元素只用它的名字来定义,但是当被引用时,必须添加一些符号。引用元素时,禁止符号和名称之间的任何空格。

如何在 Xtext 中做到这一点,同时仍然允许这些元素之间的交叉引用?

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

ElementRef: '$' [Element|ELEMENT_NAME];

然后 Xtext 将允许符号和名称之间有空格,这在我的 DSL 中是非法的。我想诸如“此时不接受空格”之类的选项会很棒,但是我在 Xtext 文档中找不到有关此类内容的任何内容。

4

1 回答 1

1

您必须为交叉引用标记使用数据类型规则并注册一个去除 $ 符号的值转换器。

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

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

于 2012-07-22T11:18:50.707 回答