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