@@ -18,15 +18,55 @@ decorated: decorators (classdef | funcdef | async_funcdef)
18
18
async_funcdef: ASYNC funcdef
19
19
funcdef: 'def' NAME parameters ['->' test] ':' suite
20
20
parameters: '(' [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
+
24
44
tname: NAME [':' test]
25
45
tfpdef: tname | '(' tfplist ')'
26
46
tfplist: 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
+
30
70
vname: NAME
31
71
vfpdef: vname | '(' vfplist ')'
32
72
vfplist: vfpdef (',' vfpdef)* [',']
0 commit comments