Я пытаюсь создать грамматику, которая бы анализировала следующее:
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: У меня нет проблем с «списком через запятую», я пробовал это отдельно, и он работает хорошо. Моя единственная проблема - провести различие между двумя частями правила на основе символа '{'.