Xtext无序的可选项列表

时间:2013-07-26 17:09:57

标签: xtext

我正在尝试修改Xtext域模型示例,以便实体属性可以有两个以上的属性(除了示例中已包含的'many'之外)。所有属性都必须是可选的,并且它们的顺序无关紧要。似乎无论我做什么,第一个属性必须是首先列出的属性。所以,例如,如果我在xtext中有这个:

(many ?= 'many')? & (aBool ?= 'isBool')? & (anEnum = EnumType)?

如果我使用'many',那么它必须是第一个属性,否则我会收到错误。如果我完全放弃,我没有错误。

那么,如何在无序组中告诉xtext我想要三个可选属性?

2 个答案:

答案 0 :(得分:4)

显然,我所要做的只是将小组括在括号中:/

((many ?= 'many')? & (aBool ?= 'isBool')? & (anEnum = EnumType)?)

This帮了解。

答案 1 :(得分:0)

&运算符在Xtext中非常有问题!因为解析器必须实现所有可能的排列。最好是实现一个抽象的Parser Rule'OrctElement',它可以在列表中经常出现无限。然后将此解析器规则指定为“Many”,“Bool”或“Enum”。然后语法看起来像这样:

AnyRule: /* some stuff */ optElement+=OptionalElement*;
OptionalElement: Many | Bool | Enum;
Many: {Many} 'many';
Bool: {Bool} 'isBool';
Enum: anEnum=EnumType;

然后你只需要在验证器类(... mydsl.validation.MyDslValidator)中实现一个check方法,它检查Many,Bool或Enum是否发生最大值。一次在'optElement'列表中。

类/方法/字段修饰符在Java语法中以相同的方式定义。