Xtext список элементов или только один элемент - PullRequest
0 голосов
/ 16 февраля 2012

Я пытаюсь создать грамматику, которая бы анализировала следующее:

reference: java.util.String

а также

reference: {java.util.String, java.lang.Integer}

Другими словами, я хочу, чтобы он анализировал как список квалифицированных имен, так и только один элемент (в данном случае не отмеченный '{').

Я попробовал вот что:

Reference:
    'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)* '}') | (values+=QualifiedName);

Однако я получаю ошибку: отсутствует '{' в 'java' при использовании первой формы ссылки (без {). Любые предложения, что я должен попробовать?

РЕДАКТИРОВАТЬ: также пытался

Reference:
    'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)* '}') | ((!'{')values+=QualifiedName);

но при вводе '!' Не получится альтернативы. ошибка в определении грамматики.

EDIT2: У меня нет проблем с «списком через запятую», я пробовал это отдельно, и он работает хорошо. Моя единственная проблема - провести различие между двумя частями правила на основе символа '{'.

Ответы [ 2 ]

8 голосов
/ 16 февраля 2012

Это поможет:

Reference:
'reference' ':' (
     '{' values+=QualifiedName (',' values+=QualifiedName)* '}' 
   | values+=QualifiedName
);

Пожалуйста, помните о приоритетах групп и альтернатив.

0 голосов
/ 16 февраля 2012

Я совершенно новичок в Xtext, поэтому просто попробую:

Reference:
    'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)* '}') | (values=QualifiedName);

или

Reference:
    'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)+ '}') | (values=QualifiedName);
...