Antlr грамматика с одинарными кавычками, удваивающимися как операторы - PullRequest
1 голос
/ 22 июля 2010

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

operand:     DIGIT | STRINGLIT | reference;
expression:  operand SQUOTE;
STRINGLIT:   '\''  ~('\\'|'\'')* '\'';

Выражения типа 1' анализируются правильно, но когда есть ввод, который соответствует ~('\\'|'\'')* после кавычки, такой как 1'+2, лексер пытается сопоставить STRINGLIT и завершается неудачно. Я хотел бы иметь возможность восстановить и испустить SQUOTE. Есть идеи как это сделать?

Спасибо.

1 Ответ

0 голосов
/ 02 августа 2010

После небольшого тестирования этой грамматики в Antlrworks, я думаю, что ваша проблема в том, что вы слишком ограничены. Antlr сможет проанализировать 1'+2, если у вас есть правило, которое принимает что-то после того, как оно увидит operand SQUOTE. Поскольку ANTLR не знает, что делать с +2, он выдает исключение.

...