У меня есть следующие правила лексера в моем файле грамматики:mismatchedtoken с Antlr синтаксическими предикатами
LINE : 'F' | 'G';
RULE : (('->' ('F' | 'G')) => 'F' | 'G')
| LINE LINE + | LINE * (ROTATE + LINE+)+ ;
fragment ROTATE : ('/' | '\\');
Я в основном пытаюсь соответствовать постановки, которые выглядят как F -> F/F \ F \ F/F. Он успешно сопоставляет такие вещи, как выше, но я предполагаю, что есть проблема с моим синтаксическим предикатом, так как G -> G создает исключение MismatchedTokenException. Предикат служит для устранения неоднозначности между отдельными буквами на lhs из «->», который я хочу распознать как токен LINE, а также те из них, которые должны быть ПРАВИЛАМИ.
Любая идея, что я делаю неправильно?
не должен быть ЛИНИЯ фрагмент слишком? –
@ Аnders: Нет, другие части моей грамматики нуждаются в этом, чтобы быть токеном. – varzan