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