Я написал следующее ParserRule в моем файле грамматики Xtext:
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) (',' | '}'))?) &
);
Но я не уверен, является ли это предпочтительным способом сделать это.Можно ли добиться этого с помощью валидации или другими более элегантными способами?