Нет, AFAIK, это невозможно "из коробки". Один из них имеет упреждающий контроль над потоком токенов в лексере или парсере, используя атрибут input
и вызывая LA(int)
(упреждающий просмотр). Например, следующее правило лексера:
Token
: {input.LA(2) == 'b'}? .
;
соответствует любому отдельному символу, если за этим единственным символом следует b
. К сожалению, в потоке токенов отсутствует функция input.LA(-1)
. {...}?
часть называется "синтаксическим предикатом" на тот случай, если вам интересно или вы хотите найти его в Google.
Дискуссия и некоторые советы о том, как ее решить, приведены здесь: http://www.antlr.org/pipermail/antlr-interest/2004-July/008673.html
Обратите внимание, что это {greedy=false;}
, а не (greedy=false;)
.