Убедитесь, что записи в ParserRule разделены запятыми - PullRequest
0 голосов
/ 14 декабря 2011

Я написал следующее 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) (',' | '}'))?) &
);

Но я не уверен, является ли это предпочтительным способом сделать это.Можно ли добиться этого с помощью валидации или другими более элегантными способами?

1 Ответ

1 голос
/ 21 декабря 2011

Ответ на этот вопрос на Xtext Eclipse Community Forums . Я решил решить эту проблему, используя следующий стандартный шаблон для разделенных запятыми списков:

List:
    listItems+=ListItem (',' listItems+=ListItem)*;
...