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

questionAnswers(1)

yourAnswerToTheQuestion