Java 确保ParserRule中的条目以逗号分隔
我在Xtext语法文件中编写了以下语法分析器:Java 确保ParserRule中的条目以逗号分隔,java,validation,grammar,xtext,Java,Validation,Grammar,Xtext,我在Xtext语法文件中编写了以下语法分析器: TestSpec: '{' ...... (('"my"' ':' myValue=(MySpec) (',' | '}'))?) & ...... '}' MySpec: '{' ( (('"suffix"' ':' suffixValue=(STRING) (',')?)?) & (('"prefix"' ':' prefixValue=(STRING) (',')?)?) & (('"none
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) (',' | '}'))?) &
);
但我不确定这是否是首选的方式。是否有可能通过验证或其他更优雅的方式来实现这一点?这个问题的答案是。 我选择使用以下逗号分隔列表的标准模式来解决此问题:
List:
listItems+=ListItem (',' listItems+=ListItem)*;