我在我的 Xtext 语法文件中编写了以下 ParserRule:
TestSpec:
'{'
......
(('"my"' ':' myValue=(MySpec) (',' | '}'))?) &
......
'}'
MySpec:
'{'
(
(('"suffix"' ':' suffixValue=(STRING) (',')?)?) &
(('"prefix"' ':' prefixValue=(STRING) (',')?)?) &
(('"none"' ':' noneValue=(STRING) (',')?)?) &
)
'}';
现在在我的 Xtext 编辑器中,我想确保“我的”中的条目以逗号结尾,最后一个除外,如果在“后缀”和“前缀”之间缺少逗号,它应该会给出错误,如下例条目所示:
"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) (',' | '}'))?) &
);
但我不确定这是否是首选方式。是否可以通过验证或其他更优雅的方式来实现这一点?