Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 确保ParserRule中的条目以逗号分隔_Java_Validation_Grammar_Xtext - Fatal编程技术网

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

Java 确保ParserRule中的条目以逗号分隔,java,validation,grammar,xtext,Java,Validation,Grammar,Xtext,我在Xtext语法文件中编写了以下语法分析器: TestSpec: '{' ...... (('"my"' ':' myValue=(MySpec) (',' | '}'))?) & ...... '}' MySpec: '{' ( (('"suffix"' ':' suffixValue=(STRING) (',')?)?) & (('"prefix"' ':' prefixValue=(STRING) (',')?)?) & (('"none

我在Xtext语法文件中编写了以下语法分析器:

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)*;