Hinzufügen von (…) {…} Funktionsliteralen unter Verzicht auf das Zurückverfolgen

Aufbauend auf der Antwort inFunktionsaufrufe und Gruppierung in Klammern ohne RückverfolgungIch möchte Funktionsliterale hinzufügen, die in einem Nicht-LL (*) -Mittel wie implementiert sind

...

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*)
 ;

Ich möchte anonyme Funktionsliterale mit einer Argumentliste zulassen (z.() oder(a) oder(a, b, c)) gefolgt von einemcompound_stmt. So(a, b, c){...} ist gut. Aber(x)(y){} nicht so viel. (Na sicher(x) * (y){} ist "gültig" in Bezug auf den Parser, genauso wie((y){})()[1].x wäre.)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage