dodawanie (…) {…} literałów funkcji przy jednoczesnym powstrzymaniu się od śledzenia wstecznego
Budowanie odpowiedzi znalezionej wJak mieć zarówno wywołania funkcji, jak i grupowanie w nawiasach bez cofania, Chciałbym dodać literały funkcji, które są w nie LL (*) oznacza zaimplementowane jak
...
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*)
;
Chciałbym zezwolić na literały funkcji anonimowych, które mają listę argumentów (np.()
lub(a)
lub(a, b, c)
) a następnie acompound_stmt
. Więc(a, b, c){...}
jest dobry. Ale(x)(y){}
nie tak bardzo. (Oczywiście(x) * (y){}
jest „poprawny” pod względem parsera, podobnie jak((y){})()[1].x
byłoby.)