我在我的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或其他更优雅的方式实现这一目标?
答案 0 :(得分:1)
Xtext Eclipse Community Forums回答了这个问题。 我选择使用逗号分隔列表的以下标准模式来解决它:
List:
listItems+=ListItem (',' listItems+=ListItem)*;