В Что такое "семантический предикат" в ANTLR3? Bart Kiers дает очень хороший обзор различных семантических предикатов в Antlr3.
Слишком плохо синтаксис/семантика, казалось бы, были изменены в Antlr4, поэтому это не скомпилируется:
end_of_statement
: ';'
| EOF
| {input.LT(1).getType() == RBRACE}? =>
;
RBRACE
: '}'
;
Может кто-нибудь рассказать мне, как сделать третий случай end_of_statement: принять, если следующий токен - это '}', но не потреблять его.