0

我在我的 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) (',' | '}'))?) &
);

但我不确定这是否是首选方式。是否可以通过验证或其他更优雅的方式来实现这一点?

4

1 回答 1

1

这个问题在Xtext Eclipse 社区论坛上得到了解答。我选择使用以下逗号分隔列表的标准模式来解决它:

List:
    listItems+=ListItem (',' listItems+=ListItem)*;
于 2011-12-21T13:44:57.473 回答