añadiendo (...) {...} funciones literales mientras se abstiene de dar marcha atrás

Construyendo a partir de la respuesta encontrada enCómo tener llamadas de función y agrupación parentética sin retroceso, Me gustaría agregar literales de función que estén en un medio que no sea 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*)
 ;

Lo que me gustaría hacer es permitir literales de funciones anónimas que tengan una lista de argumentos (por ejemplo,() o(a) o(a, b, c)) seguido de unacompound_stmt. Asi que(a, b, c){...} es bueno. Pero(x)(y){} no tanto. (Por supuesto(x) * (y){} es "válido" en términos del analizador, al igual que((y){})()[1].x sería.)

Respuestas a la pregunta(1)

Su respuesta a la pregunta