2011-12-13 53 views
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) (',' | '}'))?) & 
); 

但我不知道這是否做它的首選方式。是否有可能通過驗證或其他更優雅的方式來實現這一點?

回答

1

此問題在Xtext Eclipse Community Forums上回答。 我選擇用逗號分隔列表的下列標準模式來解決它:

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