确保ParserRule中的条目以逗号分隔

时间:2011-12-13 21:02:28

标签: java validation grammar xtext

我在我的Xtext语法文件中写了以下ParserRule:

TestSpec:
'{'
    ......
    (('"my"' ':' myValue=(MySpec) (',' | '}'))?) &
    ......
'}'

MySpec:
'{'
(
(('"suffix"' ':' suffixValue=(STRING) (',')?)?) &
(('"prefix"' ':' prefixValue=(STRING) (',')?)?) &
(('"none"' ':' noneValue=(STRING) (',')?)?) &
)
'}';

现在在我的Xtext编辑器中, 我想确保“my”中的条目以逗号结尾,除了最后一个 ,如果逗号是,则应该给出错误在“后缀”和“前缀”之间缺少,如下面的示例条目:

"my": {
    "suffix": "testString"  ---> I want this to give an error for missing comma (,)
    "prefix": "prefixString",
    "none": "noneString"
}

解决方案: 我想到的一个解决方案是将语法改为以下:

MySpec:
'{'
(
(('"suffix"' ':' suffixValue=(STRING) (',' | '}'))?) &
(('"prefix"' ':' prefixValue=(STRING) (',' | '}'))?) &
(('"none"' ':' noneValue=(STRING) (',' | '}'))?) &
);

但我不确定这是否是首选方式。是否有可能通过Validations或其他更优雅的方式实现这一目标?

1 个答案:

答案 0 :(得分:1)

Xtext Eclipse Community Forums回答了这个问题。 我选择使用逗号分隔列表的以下标准模式来解决它:

List:
    listItems+=ListItem (',' listItems+=ListItem)*;