@@ -246,8 +246,7 @@ star_etc[StarEtc*]:
246246 _PyPegen_star_etc(p, NULL, b, c) }
247247 | a=kwds { _PyPegen_star_etc(p, NULL, NULL, a) }
248248
249- kwds[arg_ty]:
250- | '**' a=param_no_default { a }
249+ kwds[arg_ty]: '**' a=param_no_default { a }
251250
252251# One parameter. This *includes* a following comma and type comment.
253252#
@@ -325,32 +324,47 @@ expression[expr_ty] (memo):
325324
326325lambdef[expr_ty]:
327326 | 'lambda' a=[lambda_parameters] ':' b=expression { _Py_Lambda((a) ? a : CHECK(_PyPegen_empty_arguments(p)), b, EXTRA) }
327+
328+ # lambda_parameters etc. duplicates parameters but without annotations
329+ # or type comments, and if there's no comma after a parameter, we expect
330+ # a colon, not a close parenthesis. (For more, see parameters above.)
331+ #
328332lambda_parameters[arguments_ty]:
329- | a=lambda_slash_without_default b=[',' x=lambda_plain_names { x }] c=[',' y=lambda_names_with_default { y }] d=[',' z=[ lambda_star_etc] { z } ] {
333+ | a=lambda_slash_no_default b=lambda_param_no_default* c=lambda_param_with_default* d=[lambda_star_etc] {
330334 _PyPegen_make_arguments(p, a, NULL, b, c, d) }
331- | a=lambda_slash_with_default b=[',' y=lambda_names_with_default { y }] c=[',' z=[ lambda_star_etc] { z } ] {
335+ | a=lambda_slash_with_default b=lambda_param_with_default* c=[lambda_star_etc] {
332336 _PyPegen_make_arguments(p, NULL, a, NULL, b, c) }
333- | a=lambda_plain_names b=[',' y=lambda_names_with_default { y }] c=[',' z=[ lambda_star_etc] { z } ] {
337+ | a=lambda_param_no_default+ b=lambda_param_with_default* c=[lambda_star_etc] {
334338 _PyPegen_make_arguments(p, NULL, NULL, a, b, c) }
335- | a=lambda_names_with_default b=[',' z=[ lambda_star_etc] { z } ] { _PyPegen_make_arguments(p, NULL, NULL, NULL, a, b)}
339+ | a=lambda_param_with_default+ b=[lambda_star_etc] { _PyPegen_make_arguments(p, NULL, NULL, NULL, a, b)}
336340 | a=lambda_star_etc { _PyPegen_make_arguments(p, NULL, NULL, NULL, NULL, a) }
337- lambda_slash_without_default[asdl_seq*]: a=lambda_plain_names ',' '/' { a }
338- lambda_slash_with_default[SlashWithDefault*]: a=[n=lambda_plain_names ',' { n }] b=lambda_names_with_default ',' '/' {
339- _PyPegen_slash_with_default(p, a, b) }
341+
342+ lambda_slash_no_default[asdl_seq*]:
343+ | a=lambda_param_no_default+ '/' ',' { a }
344+ | a=lambda_param_no_default+ '/' &':' { a }
345+ lambda_slash_with_default[SlashWithDefault*]:
346+ | a=lambda_param_no_default* b=lambda_param_with_default+ '/' ',' { _PyPegen_slash_with_default(p, a, b) }
347+ | a=lambda_param_no_default* b=lambda_param_with_default+ '/' &':' { _PyPegen_slash_with_default(p, a, b) }
348+
340349lambda_star_etc[StarEtc*]:
341- | '*' a=lambda_plain_name b=lambda_name_with_optional_default * c=[',' d= lambda_kwds { d }] [',' ] {
350+ | '*' a=lambda_param_no_default b=lambda_param_maybe_default * c=[lambda_kwds] {
342351 _PyPegen_star_etc(p, a, b, c) }
343- | '*' b=lambda_name_with_optional_default + c=[',' d= lambda_kwds { d }] [',' ] {
352+ | '*' ',' b=lambda_param_maybe_default + c=[lambda_kwds] {
344353 _PyPegen_star_etc(p, NULL, b, c) }
345- | a=lambda_kwds [','] { _PyPegen_star_etc(p, NULL, NULL, a) }
346- lambda_name_with_optional_default[NameDefaultPair*]:
347- | ',' a=lambda_plain_name b=['=' e=expression { e }] { _PyPegen_name_default_pair(p, a, b, NULL) }
348- lambda_names_with_default[asdl_seq*]: a=','.lambda_name_with_default+ { a }
349- lambda_name_with_default[NameDefaultPair*]:
350- | n=lambda_plain_name '=' e=expression { _PyPegen_name_default_pair(p, n, e, NULL) }
351- lambda_plain_names[asdl_seq*]: a=','.(lambda_plain_name !'=')+ { a }
352- lambda_plain_name[arg_ty]: a=NAME { _Py_arg(a->v.Name.id, NULL, NULL, EXTRA) }
353- lambda_kwds[arg_ty]: '**' a=lambda_plain_name { a }
354+ | a=lambda_kwds { _PyPegen_star_etc(p, NULL, NULL, a) }
355+
356+ lambda_kwds[arg_ty]: '**' a=lambda_param_no_default { a }
357+
358+ lambda_param_no_default[arg_ty]:
359+ | a=lambda_param ',' { a }
360+ | a=lambda_param &':' { a }
361+ lambda_param_with_default[NameDefaultPair*]:
362+ | a=lambda_param c=default ',' { _PyPegen_name_default_pair(p, a, c, NULL) }
363+ | a=lambda_param c=default &':' { _PyPegen_name_default_pair(p, a, c, NULL) }
364+ lambda_param_maybe_default[NameDefaultPair*]:
365+ | a=lambda_param c=default? ',' { _PyPegen_name_default_pair(p, a, c, NULL) }
366+ | a=lambda_param c=default? &':' { _PyPegen_name_default_pair(p, a, c, NULL) }
367+ lambda_param[arg_ty]: a=NAME { _Py_arg(a->v.Name.id, NULL, NULL, EXTRA) }
354368
355369disjunction[expr_ty] (memo):
356370 | a=conjunction b=('or' c=conjunction { c })+ { _Py_BoolOp(
0 commit comments