-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgrammar_specification.txt
More file actions
146 lines (115 loc) · 3.57 KB
/
Copy pathgrammar_specification.txt
File metadata and controls
146 lines (115 loc) · 3.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# aeonius grammar specification
grammar: ε
| aeonius grammar
| PYTHONCODE grammar
aeonius: BEGIN EOL code END
code: ε
| assignment code
assignment: pattern '=' exp EOL
| DEF IDENTIFIER ':' EOL INDENT defbody UNDENT
| DEF IDENTIFIER ':' pattern match
| OP '(' operator ')' ':' EOL INDENT defbody UNDENT
| OP '(' operator ')' ':' pattern match
defbody: multipatternmatch code
multipatternmatch: pattern match
| multipatternmatch pattern match
multicondmatch: exp match
| multicondmatch '|' exp match
| multicondmatch '|' match
match: RESULTARROW INDENT exp EOL code UNDENT
| RESULTARROW EOL INDENT exp EOL code UNDENT
| RIGHTARROW INDENT defbody UNDENT
| RIGHTARROW EOL INDENT defbody UNDENT
| '|' INDENT multicondmatch code UNDENT
primitive: INTEGER
| FLOAT
| STRING
| FALSE
| TRUE
| NONE
| '[' ']'
| '{' '}'
exp: IDENTIFIER
| primitive %prec PRIMITIVE
| '(' tupleexp ')'
| '[' iterexp ']'
| '{' dictexp '}'
| exp exp %prec FUNC #function call
| '(' exp ')' #Wrapped in brackets
| LAMBDA pattern ':' exp
| exp IF exp ELSE exp
| exp FOR pattern IN exp
| exp FOR pattern IN exp IF exp
| '{' IDENTIFIER ':' exp FOR pattern IN exp '}'
| '{' IDENTIFIER ':' exp FOR pattern IN exp IF exp '}'
| '(' operator ')' #operator function
# | operator exp #unary operator call
| exp OPIDENT exp
| exp OPIDENT_L1 exp
| exp OPIDENT_L2 exp
| exp OPIDENT_L3 exp
| exp OPIDENT_L4 exp
| exp OPIDENT_L5 exp
| exp OPIDENT_R1 exp
| exp OPIDENT_R2 exp
| exp OPIDENT_R3 exp
| exp OPIDENT_R4 exp
| exp OPIDENT_R5 exp
| exp UNPACKITER exp
| exp UNPACKDICT exp
| exp '|' exp
operator: OPIDENT
| OPIDENT_L1
| OPIDENT_L2
| OPIDENT_L3
| OPIDENT_L4
| OPIDENT_L5
| OPIDENT_R1
| OPIDENT_R2
| OPIDENT_R3
| OPIDENT_R4
| OPIDENT_R5
| UNPACKITER
| UNPACKDICT
| '|'
elemexp: exp
| UNPACKITER exp
tupleexp: elemexp ','
| nonsingletupleexp
| nonsingletupleexp ','
nonsingletupleexp: elemexp ',' elemexp
| nonsingletupleexp ',' elemexp
iterexp: nonemptyiterexp
| nonemptyiterexp ','
nonemptyiterexp: elemexp
| nonemptyiterexp ',' elemexp
dictexp: nonemptydictexp
| nonemptydictexp ','
nonemptydictexp: exp ':' exp
| nonemptydictexp ',' exp ':' exp
| nonemptydictexp ',' UNPACKDICT exp
pattern: primitive %prec PRIMITIVE
| '_'
| IDENTIFIER
# | nonemptyiterpattern #TODO
| '(' pattern ')'
| '(' tuplepattern ')'
| '[' iterpattern ']'
| '{' dictpattern '}'
tuplepattern: pattern ','
| pattern ',' UNPACKITER pattern
| nonsingletuplepattern
| nonsingletuplepattern ','
| nonsingletuplepattern ',' UNPACKITER pattern
nonsingletuplepattern: pattern ',' pattern
| nonsingletuplepattern ',' pattern
iterpattern: nonemptyiterpattern
| nonemptyiterpattern ','
| nonemptyiterpattern ',' UNPACKITER pattern
nonemptyiterpattern: pattern
| nonemptyiterpattern ',' pattern
dictpattern: nonemptydictpattern
| nonemptydictpattern ','
nonemptydictpattern: pattern ':' pattern
| nonemptydictpattern ',' pattern ':' pattern
| nonemptydictpattern ',' UNPACKDICT pattern