2011-12-13 1 views
0

구분됩니다 내가 확인하고 싶은, 내 Xtext 편집기에서 이제확인 항목은 쉼표 내 Xtext 문법 파일에 다음 ParserRule를 작성했습니다

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

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

이 "내"쉼표로 끝나는의 항목 를 제외하고 마지막와 쉼표 예를 들어 항목을 다음과 같이 "접미사"와 "접두사를"말 사이에 누락 된 경우이 오류를 제공해야합니다 :

"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)*;