-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathverbosifierprocessor.py
330 lines (325 loc) · 12.4 KB
/
verbosifierprocessor.py
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
from charcoaltoken import CharcoalToken as CT
import re
UnicodeGrammars = {
CT.Arrow: [
lambda r: [("a", ":Left")],
lambda r: [("a", ":Up")],
lambda r: [("a", ":Right")],
lambda r: [("a", ":Down")],
lambda r: [("a", ":UpLeft")],
lambda r: [("a", ":UpRight")],
lambda r: [("a", ":DownRight")],
lambda r: [("a", ":DownLeft")],
lambda r: [("a", ":DownLeft")],
lambda r: [("$", "Direction"), ("<", "(")] + r[1] + [(">", ")")]
],
CT.Multidirectional: [
lambda r: r[0] + [(";", ",")] + r[1],
lambda r: r[0] + [("a", ":Orthogonal"), (";", ",")] + r[1],
lambda r: r[0] + [("a", ":Diagonal"), (";", ",")] + r[1],
lambda r: r[0] + [("a", ":All"), (";", ",")] + r[1],
lambda r: r[0] + [("a", ":Vertical"), (";", ",")] + r[1],
lambda r: r[0] + [("a", ":Horizontal"), (";", ",")] + r[1]
] + [
(lambda i: lambda r: [("a", ":" + "\\/<>^KTVY7"[i]), (";", ",")] + r[1])(i)
for i in range(10)
] + [
lambda r: r[0] + [("a", ":DownAndLeft"), (";", ",")] + r[1],
lambda r: r[0] + [("a", ":UpAndRight"), (";", ",")] + r[1],
lambda r: r[0] + [("a", ":RightAndDown"), (";", ",")] + r[1],
lambda r: [("<", "[")] + r[1] + [(">", "]")],
lambda r: [("<", "[")] + r[1] + [(">", "]")],
lambda r: [("$", "Directions"), ("<", "(")] + r[1] + [(">", ")")],
lambda r: []
],
CT.Side: [lambda r: r[0] + r[1]],
CT.S: [lambda r: [(";", ";")]] * 2,
CT.Span: [
lambda r: r[0] + [("$", ";;")] + r[2] + [("$", ";;")] + r[4],
lambda r: r[0] + [("$", ";;"), ("$", ";;")] + r[3],
lambda r: r[0] + [("$", ";;")] + r[2],
lambda r: r[0] + [("$", ";;")],
lambda r: [("$", ";;")] + r[1] + [("$", ";;")] + r[3],
lambda r: [("$", ";;")] + r[1],
lambda r: [("$", ";;"), ("$", ";;")] + r[2],
lambda r: [("$", ";;"), ("$", ";;")]
],
CT.Arrows: [lambda r: r[0] + [(";", ",")] + r[1], lambda r: r[0]],
CT.Sides: [lambda r: r[0] + [(";", ",")] + r[1], lambda r: r[0]],
CT.Expressions: [lambda r: r[0] + [(";", ";")] + r[1], lambda r: r[0]],
CT.WolframExpressions: [lambda r: r[0] + [(";", ";")] + r[1], lambda r: r[0]],
CT.PairExpressions: [
lambda r: r[0] + [(";", ":")] + r[1] + [(";", ",")] + r[2],
lambda r: r[0] + [(";", ":")] + r[1]
],
CT.Cases: [lambda r: r[0] + [(";", ":")] + r[1], lambda r: []],
CT.WolframList: [
lambda r: [("<", "[")] + r[1] + [(">", "]")],
lambda r: [("<", "["), (">", "]")]
] * 2,
CT.List: [
lambda r: [("<", "[")] + r[1] + [(">", "]")],
lambda r: [("<", "["), (">", "]")]
] * 2,
CT.Dictionary: [
lambda r: [("<", "{")] + r[1] + [(">", "}")],
lambda r: [("<", "{"), (">", "}")]
] * 2,
CT.WolframExpression: [lambda r: r[0] + r[1], lambda r: r[0]],
CT.Expression: [
lambda r: r[0] + r[1]
] * 4 + [
lambda r: [("<", "[")] + r[1] + [(">", "]")] + r[3],
lambda r: [("<", "[")] + r[1] + [(">", "]")],
lambda r: r[0] + r[1],
lambda r: [("<", "{")] + r[1] + [(">", "}")] + r[3],
lambda r: [("<", "{")] + r[1] + [(">", "}")],
lambda r: r[0] + r[1],
lambda r: r[0] + r[1],
lambda r: r[0] + r[1] + r[2] + r[3] + r[4],
lambda r: r[0] + r[1] + r[2] + r[3] + r[4],
lambda r: r[0] + r[1] + r[2] + r[3],
lambda r: r[0] + r[1] + r[2] + r[3],
lambda r: r[0] + r[1] + r[2],
lambda r: r[0] + r[1] + r[2],
lambda r: r[0] + r[1],
lambda r: r[0] + r[1],
lambda r: r[0],
lambda r: r[0] + r[1],
lambda r: r[0] + r[1],
lambda r: r[0] + r[1] + r[2] + r[3] + r[4],
lambda r: r[0] + r[1] + r[2] + r[3] + r[4],
lambda r: r[0] + r[1] + r[2] + r[3],
lambda r: r[0] + r[1] + r[2] + r[3],
lambda r: r[0] + r[1] + r[2],
lambda r: r[0] + r[1] + r[2],
lambda r: r[0] + r[1],
lambda r: r[0] + r[1]
],
CT.ExpressionOrEOF: [[CT.Expression], [CT.EOF]],
CT.Nilary: [
lambda r: [("o", "InputString")],
lambda r: [("o", "InputNumber")],
lambda r: [("o", "Input")],
lambda r: [("o", "Random")],
lambda r: [("o", "PeekAll")],
lambda r: [("o", "PeekMoore")],
lambda r: [("o", "PeekVonNeumann")],
lambda r: [("o", "Peek")],
lambda r: [("o", "i")],
lambda r: [("o", "j")]
],
CT.Unary: [
lambda r: [("o", "Negate")],
lambda r: [("o", "Length")],
lambda r: [("o", "Not")],
lambda r: [("o", "Cast")],
lambda r: [("o", "Random")],
lambda r: [("o", "Evaluate")],
lambda r: [("o", "Pop")],
lambda r: [("o", "Lowercase")],
lambda r: [("o", "Uppercase")],
lambda r: [("o", "Floor")],
lambda r: [("o", "Ceiling")],
lambda r: [("o", "Character")],
lambda r: [("o", "Reverse")],
lambda r: [("o", "GetVariable")],
lambda r: [("o", "Repeated")],
lambda r: [("o", "RepeatedNull")],
lambda r: [("o", "Slice")],
lambda r: [("o", "InclusiveRange")],
lambda r: [("o", "Range")],
lambda r: [("o", "BitwiseNot")],
lambda r: [("o", "Absolute")],
lambda r: [("o", "Sum")],
lambda r: [("o", "Product")],
lambda r: [("o", "Incremented")],
lambda r: [("o", "Decremented")],
lambda r: [("o", "Doubled")],
lambda r: [("o", "Halved")],
lambda r: [("o", "PythonEvaluate")],
lambda r: [("o", "SquareRoot")]
],
CT.Binary: [
lambda r: [("o", "Plus")],
lambda r: [("o", "Minus")],
lambda r: [("o", "Times")],
lambda r: [("o", "Divide")],
lambda r: [("o", "Modulo")],
lambda r: [("o", "Equals")],
lambda r: [("o", "Less")],
lambda r: [("o", "Greater")],
lambda r: [("o", "BitwiseAnd")],
lambda r: [("o", "BitwiseNot")],
lambda r: [("o", "InclusiveRange")],
lambda r: [("o", "Range")],
lambda r: [("o", "Exponentiate")],
lambda r: [("o", "AtIndex")],
lambda r: [("o", "PushOperator")],
lambda r: [("o", "Join")],
lambda r: [("o", "Split")],
lambda r: [("o", "FindAll")],
lambda r: [("o", "Find")],
lambda r: [("o", "PadLeft")],
lambda r: [("o", "PadRight")],
lambda r: [("o", "Count")],
lambda r: [("o", "Rule")],
lambda r: [("o", "DelayedRule")],
lambda r: [("o", "PatternTest")],
lambda r: [("o", "Slice")],
lambda r: [("o", "Base")],
lambda r: [("o", "BaseString")]
],
CT.Ternary: [lambda r: [("o", "Slice")]],
CT.Quarternary: [lambda r: [("o", "Slice")]],
CT.LazyUnary: [],
CT.LazyBinary: [lambda r: [("o", "And")], lambda r: [("o", "Or")]],
CT.LazyTernary: [lambda r: [("o", "Ternary")]],
CT.LazyQuarternary: [],
CT.OtherOperator: [
["KD", CT.Expression, CT.Arrow],
["E", CT.Expression, CT.Expression],
["⭆", CT.Expression, CT.Expression],
["⊙", CT.Expression, CT.Expression],
["⬤", CT.Expression, CT.Expression],
["Φ", CT.Expression, CT.Expression],
["▷", CT.Expression, CT.WolframList],
["▷", CT.Expression, CT.WolframExpression],
["▷", CT.Expression]
],
CT.Program: [[CT.Command, CT.S, CT.Program], []],
CT.NonEmptyProgram: [[CT.Command, CT.S, CT.Program], [CT.Command]],
CT.Body: [
["«", CT.Program, "»"],
["«", CT.Program, CT.EOF],
[CT.Command, CT.S]
],
CT.Command: [
["S", CT.Name],
["N", CT.Name],
["A", CT.Name],
["V", CT.Expression],
[CT.Arrow, CT.Expression],
[CT.Expression],
["P", CT.Multidirectional, CT.Expression],
["P", CT.Expression],
["G", CT.Sides, CT.Expression],
["G", CT.Multidirectional, CT.Expression, CT.Expression],
["GH", CT.Sides, CT.Expression],
["GH", CT.Multidirectional, CT.Expression, CT.Expression],
["UR", CT.Expression, CT.Expression],
["UR", CT.Expression],
["UO", CT.Expression, CT.Expression, CT.Expression],
["UO", CT.Expression, CT.Expression],
["B", CT.Expression, CT.Expression, CT.Expression],
["B", CT.Expression, CT.Expression],
[CT.Arrow],
["M", CT.Arrow],
["M", CT.Expression, CT.Arrow],
["M", CT.Expression, CT.Expression],
["↶", CT.Expression],
["↶"],
["↷", CT.Expression],
["↷"],
["J", CT.Expression, CT.Expression],
["⟲T", CT.Expression],
["⟲T"],
["‖T", CT.Multidirectional],
["‖T", CT.Arrow],
["‖T"],
["⟲P", CT.Arrow, CT.Number],
["⟲P", CT.Arrow, CT.Expression],
["⟲P", CT.Arrow],
["⟲P", CT.Number],
["⟲P", CT.Expression],
["⟲P"],
["‖M", CT.Multidirectional],
["‖M", CT.Arrow],
["‖M"],
["⟲C", CT.Arrow, CT.Number],
["⟲C", CT.Arrow, CT.Expression],
["⟲C", CT.Arrow],
["⟲C", CT.Number],
["⟲C", CT.Expression],
["⟲C"],
["‖C", CT.Multidirectional],
["‖C", CT.Arrow],
["‖C"],
["⟲OO", CT.Arrow, CT.Number, CT.S, CT.Expression],
["⟲OO", CT.Arrow, CT.Expression, CT.Expression],
["⟲OO", CT.Arrow, CT.Expression],
["⟲OO", CT.Number, CT.S, CT.Expression],
["⟲OO", CT.Expression, CT.Expression],
["⟲OO", CT.Expression],
["⟲O", CT.Arrow, CT.Number],
["⟲O", CT.Arrow, CT.Expression],
["⟲O", CT.Arrow],
["⟲O", CT.Number],
["⟲O", CT.Expression],
["⟲O"],
["⟲SO", CT.Arrow, CT.Number, CT.S, CT.Expression],
["⟲SO", CT.Arrow, CT.Expression, CT.Expression],
["⟲SO", CT.Arrow, CT.Expression],
["⟲SO", CT.Number, CT.S, CT.Expression],
["⟲SO", CT.Expression, CT.Expression],
["⟲SO", CT.Expression],
["⟲S", CT.Arrow, CT.Number],
["⟲S", CT.Arrow, CT.Expression],
["⟲S", CT.Arrow],
["⟲S", CT.Number],
["⟲S", CT.Expression],
["⟲S"],
["‖OO", CT.Multidirectional, CT.Expression],
["‖OO", CT.Arrow, CT.Expression],
["‖OO", CT.Expression],
["‖O", CT.Multidirectional],
["‖O", CT.Arrow],
["‖O"],
["‖BO", CT.Multidirectional, CT.Expression],
["‖BO", CT.Arrow, CT.Expression],
["‖BO", CT.Expression],
["‖B", CT.Multidirectional],
["‖B", CT.Arrow],
["‖B"],
["⟲", CT.Expression],
["⟲"],
["‖", CT.Arrow],
["‖"],
["C", CT.Expression, CT.Expression],
["F", CT.Expression, CT.Body],
["W", CT.Expression, CT.Body],
["¿", CT.Expression, CT.Body, CT.Body],
["¿", CT.Expression, CT.Body],
["§≔", CT.Expression, CT.Expression, CT.Expression],
["≔", CT.Expression, CT.Name],
["≔", CT.Expression, CT.Expression],
["¤", CT.Expression],
["UB", CT.Expression],
["D"],
["RF", CT.Expression, CT.Expression, CT.Body],
["RW", CT.Expression, CT.Expression, CT.Body],
["R", CT.Expression],
["R"],
["UT"],
["T", CT.Expression, CT.Expression],
["T", CT.Expression],
["⎚"],
["UE", CT.Expression, CT.Expression],
["UE", CT.Expression],
["⊞", CT.Expression, CT.Expression],
["≡", "«", CT.Expression, CT.Cases, CT.Body, "»"],
["≡", "«", CT.Expression, CT.Cases, "»"],
["≡", "«", CT.Expression, CT.Cases, CT.Body, CT.EOF],
["≡", "«", CT.Expression, CT.Cases, CT.EOF],
["≡", CT.Expression, CT.Cases, CT.Body],
["≡", CT.Expression, CT.Cases],
["UM", CT.Expression, CT.Expression],
["▶", CT.Expression, CT.WolframList],
["▶", CT.Expression, CT.WolframExpression],
["≦", CT.Binary, CT.Expression, CT.Name],
["≦", CT.Unary, CT.Name],
["≧", CT.Binary, CT.Expression, CT.Name],
["≧", CT.Unary, CT.Name],
["UX", CT.Expression]
]
}