Ответ 1
В ANTLR v4 уже нет стробированных семантических предикатов { ... }?=>
, а также нет синтаксических предикатов ( ... )=>
, потому что алгоритм синтаксического анализа, используемый в v4, может разрешить неоднозначность (необходимость в таких предикатах больше не нужен). Итак, это должно сработать для вас:
expr
: refIdentifier
| refIdentifier
| lambdaExpression
;
Обратите внимание, что в v4 есть только один тип предикатов: семантические предикаты, { ... }?
. Если вам нужно проверить содержимое токена, например, вы можете сделать это следующим образом:
id_capitals_only
: {_input.LT(1).getText().matches("[A-Z]+")}? ID
;
ID
: [a-zA-Z]+
;
ИЗМЕНИТЬ
И как говорит Сэм Харвелл в комментариях:
Семантические предикаты {...}? в V4 работают как стробированные семантические предикаты в V3. Негативные предикаты из V3 не имеют аналога в ANTLR 4.