Как определить альтернативную метку в скобках
Это часть моей грамматики парсера:
expression:
multiplyingExpression
(
PLUS multiplyingExpression #plus
| MINUS multiplyingExpression #minus
)*;
Я хочу определить плюс и минус Альтернативная метка, по-видимому, это не позволяет мне сделать это.
в #plus и @minus это дает мне ошибку:
отсутствует RPAREN в '#', пока ищется элемент правила
Кто-нибудь знает, как этого добиться, не меняя структуру определения этого правила?
1 ответ
Метка alt может быть определена только на внешнем крае (не вложенном) alt. Следовательно, не может быть сделано без изменения структуры правила.
Что можно сделать, так это использовать обычную этикетку для эффективного достижения желаемого результата.
expression:
multiplyingExpression
( type+=PLUS multiplyingExpression
| type+=MINUS multiplyingExpression
)*;
Результатом является то, что ExpressionContext
будет содержать List<Token> type;
чьи последовательные значения, посредством логического вывода, идентифицируют совпадающие альты.