добавление (…) {…} литералов функций при воздержании от возврата

Составляя ответ, найденный в Как иметь как вызовы функций, так и группировку в скобках без возврата назад, Я хотел бы добавить функциональные литералы, которые не являются средствами LL (*), реализованными как

...

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

То, что я хотел бы сделать, это разрешить литералам анонимных функций, которые имеют список аргументов (например,() или(a) или(a, b, c)) сопровождаемыйcompound_stmt. Так(a, b, c){...} хороший. Но(x)(y){} не так много. (Конечно(x) * (y){} "действителен" с точки зрения синтаксического анализатора, так же как((y){})()[1].x было бы.

Ответы на вопрос(1)

Ваш ответ на вопрос