В javacc есть концепция SYNTACTIC LOOKAHEAD. Вы можете использовать это для достижения того же поведения.
Для примера предположим, что ваше правило грамматики выглядит следующим образом.
void Expr ():
{}
{
Call () | Вар ()
}
Если вам нужно заглянуть в неизвестное время, вы можете сделать что-то вроде
void Expr():
{}
{
LOOKAHEAD(Call())
Call () | Var()
}
Для получения дополнительной информации, пожалуйста, обратитесь http://javacc.java.net/doc/lookahead.html