0

Xtext 文法ファイルに次の ParserRule を記述しました。

TestSpec:
'{'
    ......
    (('"my"' ':' myValue=(MySpec) (',' | '}'))?) &
    ......
'}'

MySpec:
'{'
(
(('"suffix"' ':' suffixValue=(STRING) (',')?)?) &
(('"prefix"' ':' prefixValue=(STRING) (',')?)?) &
(('"none"' ':' noneValue=(STRING) (',')?)?) &
)
'}';

Xtext エディターで、"my" のエントリが最後のものを除いてコンマで終わるようにしたいと考えています。次のエントリの例のように、"suffix" と "prefix" の間にコンマがない場合はエラーが発生します。

"my": {
    "suffix": "testString"  ---> I want this to give an error for missing comma (,)
    "prefix": "prefixString",
    "none": "noneString"
}

解決策: 私が考えた解決策の 1 つは、文法を次のように変更することです。

MySpec:
'{'
(
(('"suffix"' ':' suffixValue=(STRING) (',' | '}'))?) &
(('"prefix"' ':' prefixValue=(STRING) (',' | '}'))?) &
(('"none"' ':' noneValue=(STRING) (',' | '}'))?) &
);

しかし、これが好ましい方法であるかどうかはわかりません。検証または他のよりエレガントな方法でこれを達成することは可能ですか?

4

1 に答える 1

1

この質問はXtext Eclipse Community Forumsで回答されています。コンマ区切りリストの次の標準パターンを使用して解決することにしました。

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