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.)