@@ -18,15 +18,55 @@ decorated: decorators (classdef | funcdef | async_funcdef)
1818async_funcdef: ASYNC funcdef
1919funcdef: 'def' NAME parameters ['->' test] ':' suite
2020parameters: '(' [typedargslist] ')'
21- typedargslist: ((tfpdef ['=' test] ',')*
22- ('*' [tname] (',' tname ['=' test])* [',' ['**' tname [',']]] | '**' tname [','])
23- | tfpdef ['=' test] (',' tfpdef ['=' test])* [','])
21+
22+ # The following definition for typedarglist is equivalent to this set of rules:
23+ #
24+ # arguments = argument (',' argument)*
25+ # argument = tfpdef ['=' test]
26+ # kwargs = '**' tname [',']
27+ # args = '*' [tname]
28+ # kwonly_kwargs = (',' argument)* [',' [kwargs]]
29+ # args_kwonly_kwargs = args kwonly_kwargs | kwargs
30+ # poskeyword_args_kwonly_kwargs = arguments [',' [args_kwonly_kwargs]]
31+ # typedargslist_no_posonly = poskeyword_args_kwonly_kwargs | args_kwonly_kwargs
32+ # typedarglist = arguments ',' '/' [',' [typedargslist_no_posonly]])|(typedargslist_no_posonly)"
33+ #
34+ # It needs to be fully expanded to allow our LL(1) parser to work on it.
35+
36+ typedargslist: tfpdef ['=' test] (',' tfpdef ['=' test])* ',' '/' [
37+ ',' [((tfpdef ['=' test] ',')* ('*' [tname] (',' tname ['=' test])*
38+ [',' ['**' tname [',']]] | '**' tname [','])
39+ | tfpdef ['=' test] (',' tfpdef ['=' test])* [','])]
40+ ] | ((tfpdef ['=' test] ',')* ('*' [tname] (',' tname ['=' test])*
41+ [',' ['**' tname [',']]] | '**' tname [','])
42+ | tfpdef ['=' test] (',' tfpdef ['=' test])* [','])
43+
2444tname: NAME [':' test]
2545tfpdef: tname | '(' tfplist ')'
2646tfplist: tfpdef (',' tfpdef)* [',']
27- varargslist: ((vfpdef ['=' test] ',')*
28- ('*' [vname] (',' vname ['=' test])* [',' ['**' vname [',']]] | '**' vname [','])
29- | vfpdef ['=' test] (',' vfpdef ['=' test])* [','])
47+
48+ # The following definition for varargslist is equivalent to this set of rules:
49+ #
50+ # arguments = argument (',' argument )*
51+ # argument = vfpdef ['=' test]
52+ # kwargs = '**' vname [',']
53+ # args = '*' [vname]
54+ # kwonly_kwargs = (',' argument )* [',' [kwargs]]
55+ # args_kwonly_kwargs = args kwonly_kwargs | kwargs
56+ # poskeyword_args_kwonly_kwargs = arguments [',' [args_kwonly_kwargs]]
57+ # vararglist_no_posonly = poskeyword_args_kwonly_kwargs | args_kwonly_kwargs
58+ # varargslist = arguments ',' '/' [','[(vararglist_no_posonly)]] | (vararglist_no_posonly)
59+ #
60+ # It needs to be fully expanded to allow our LL(1) parser to work on it.
61+
62+ varargslist: vfpdef ['=' test ](',' vfpdef ['=' test])* ',' '/' [',' [
63+ ((vfpdef ['=' test] ',')* ('*' [vname] (',' vname ['=' test])*
64+ [',' ['**' vname [',']]] | '**' vname [','])
65+ | vfpdef ['=' test] (',' vfpdef ['=' test])* [','])
66+ ]] | ((vfpdef ['=' test] ',')*
67+ ('*' [vname] (',' vname ['=' test])* [',' ['**' vname [',']]]| '**' vname [','])
68+ | vfpdef ['=' test] (',' vfpdef ['=' test])* [','])
69+
3070vname: NAME
3171vfpdef: vname | '(' vfplist ')'
3272vfplist: vfpdef (',' vfpdef)* [',']
0 commit comments