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