adicionando (…) {…} literais de função enquanto se abstém de retroceder

Construindo a resposta encontrada emComo ter chamadas de função e agrupamento entre parênteses sem voltar atrás, Eu gostaria de adicionar literais de função que estão em um meio não LL (*) implementado como

...

tokens {
 ...
 FN;
 ID_LIST;
}

stmt
 : expr SEMI // SEMI=';'
 ;

callable
 : ...
 | fn
 ;

fn
 : OPAREN opt_id_list CPAREN compound_stmt
   -> ^(FN opt_id_list compound_stmt)
 ;

compound_stmt
 : OBRACE stmt* CBRACE

opt_id_list
 : (ID (COMMA ID)*)? -> ^(ID_LIST ID*)
 ;

O que eu gostaria de fazer é permitir literais de função anônimos que tenham uma lista de argumentos (por exemplo,() ou(a) ou(a, b, c)) seguido de umcompound_stmt. assim(a, b, c){...} é bom. Mas(x)(y){} não muito. (Claro(x) * (y){} é "válido" em termos do analisador, assim como((y){})()[1].x seria.)

questionAnswers(1)

yourAnswerToTheQuestion