expression-py 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
expression/parser.py ADDED
@@ -0,0 +1,968 @@
1
+ #!/usr/bin/env python3.8
2
+ # @generated by pegen from expression/grammar.peg
3
+
4
+ import ast
5
+ import sys
6
+ import tokenize
7
+
8
+ from typing import Any, Optional
9
+
10
+ from pegen.parser import memoize, memoize_left_rec, logger, Parser
11
+ from expression.helpers import (
12
+ with_type, is_typed, is_number, is_string_type, is_array_type,
13
+ validate_number, validate_types, maybe_regex, do_check_equal,
14
+ do_match, do_power, loose_equal, to_array,
15
+ )
16
+
17
+ # Keywords and soft keywords are listed at the end of the parser definition.
18
+ class ExpressionParser(Parser):
19
+
20
+ @memoize
21
+ def start(self) -> Optional[object]:
22
+ # start: start_rule $
23
+ mark = self._mark()
24
+ if (
25
+ (a := self.start_rule())
26
+ and
27
+ (self.expect('ENDMARKER'))
28
+ ):
29
+ return a;
30
+ self._reset(mark)
31
+ return None;
32
+
33
+ @memoize
34
+ def start_rule(self) -> Optional[object]:
35
+ # start_rule: function_assignment | variable_assignment | expr ';' | expr
36
+ mark = self._mark()
37
+ if (
38
+ (function_assignment := self.function_assignment())
39
+ ):
40
+ return function_assignment;
41
+ self._reset(mark)
42
+ if (
43
+ (variable_assignment := self.variable_assignment())
44
+ ):
45
+ return variable_assignment;
46
+ self._reset(mark)
47
+ if (
48
+ (a := self.expr())
49
+ and
50
+ (self.expect(';'))
51
+ ):
52
+ return a;
53
+ self._reset(mark)
54
+ if (
55
+ (expr := self.expr())
56
+ ):
57
+ return expr;
58
+ self._reset(mark)
59
+ return None;
60
+
61
+ @memoize
62
+ def function_assignment(self) -> Optional[object]:
63
+ # function_assignment: NAME '(' param_list_inner ')' '=' func_rest | NAME '(' ')' '=' func_rest
64
+ mark = self._mark()
65
+ if (
66
+ (name := self.name())
67
+ and
68
+ (self.expect('('))
69
+ and
70
+ (params := self.param_list_inner())
71
+ and
72
+ (self.expect(')'))
73
+ and
74
+ (self.expect('='))
75
+ and
76
+ (self.func_rest())
77
+ ):
78
+ return self . _func_assign ( name . string , params );
79
+ self._reset(mark)
80
+ if (
81
+ (name := self.name())
82
+ and
83
+ (self.expect('('))
84
+ and
85
+ (self.expect(')'))
86
+ and
87
+ (self.expect('='))
88
+ and
89
+ (self.func_rest())
90
+ ):
91
+ return self . _func_assign ( name . string , [] );
92
+ self._reset(mark)
93
+ return None;
94
+
95
+ @memoize
96
+ def param_list_inner(self) -> Optional[list]:
97
+ # param_list_inner: NAME ',' param_list_inner | NAME
98
+ mark = self._mark()
99
+ if (
100
+ (a := self.name())
101
+ and
102
+ (self.expect(','))
103
+ and
104
+ (b := self.param_list_inner())
105
+ ):
106
+ return [a . string] + b;
107
+ self._reset(mark)
108
+ if (
109
+ (a := self.name())
110
+ ):
111
+ return [a . string];
112
+ self._reset(mark)
113
+ return None;
114
+
115
+ @memoize
116
+ def func_rest(self) -> Optional[object]:
117
+ # func_rest: expr ';' | expr
118
+ mark = self._mark()
119
+ if (
120
+ (a := self.expr())
121
+ and
122
+ (self.expect(';'))
123
+ ):
124
+ return a;
125
+ self._reset(mark)
126
+ if (
127
+ (a := self.expr())
128
+ ):
129
+ return a;
130
+ self._reset(mark)
131
+ return None;
132
+
133
+ @memoize
134
+ def variable_assignment(self) -> Optional[object]:
135
+ # variable_assignment: NAME '=' !'=' !'~' expr ';' | NAME '=' !'=' !'~' expr
136
+ mark = self._mark()
137
+ if (
138
+ (name := self.name())
139
+ and
140
+ (self.expect('='))
141
+ and
142
+ (self.negative_lookahead(self.expect, '='))
143
+ and
144
+ (self.negative_lookahead(self.expect, '~'))
145
+ and
146
+ (value := self.expr())
147
+ and
148
+ (self.expect(';'))
149
+ ):
150
+ return self . _var_assign ( name . string , value );
151
+ self._reset(mark)
152
+ if (
153
+ (name := self.name())
154
+ and
155
+ (self.expect('='))
156
+ and
157
+ (self.negative_lookahead(self.expect, '='))
158
+ and
159
+ (self.negative_lookahead(self.expect, '~'))
160
+ and
161
+ (value := self.expr())
162
+ ):
163
+ return self . _var_assign ( name . string , value );
164
+ self._reset(mark)
165
+ return None;
166
+
167
+ @memoize
168
+ def expr(self) -> Optional[object]:
169
+ # expr: ternary
170
+ mark = self._mark()
171
+ if (
172
+ (ternary := self.ternary())
173
+ ):
174
+ return ternary;
175
+ self._reset(mark)
176
+ return None;
177
+
178
+ @memoize
179
+ def ternary(self) -> Optional[object]:
180
+ # ternary: boolean '?' expr ':' ternary | boolean
181
+ mark = self._mark()
182
+ if (
183
+ (a := self.boolean())
184
+ and
185
+ (self.expect('?'))
186
+ and
187
+ (b := self.expr())
188
+ and
189
+ (self.expect(':'))
190
+ and
191
+ (c := self.ternary())
192
+ ):
193
+ return b if a ['value'] else c;
194
+ self._reset(mark)
195
+ if (
196
+ (boolean := self.boolean())
197
+ ):
198
+ return boolean;
199
+ self._reset(mark)
200
+ return None;
201
+
202
+ @memoize_left_rec
203
+ def boolean(self) -> Optional[object]:
204
+ # boolean: boolean '&&' compare | boolean '||' compare | compare
205
+ mark = self._mark()
206
+ if (
207
+ (a := self.boolean())
208
+ and
209
+ (self.expect('&&'))
210
+ and
211
+ (b := self.compare())
212
+ ):
213
+ return with_type ( b ['value'] if a ['value'] else a ['value'] );
214
+ self._reset(mark)
215
+ if (
216
+ (a := self.boolean())
217
+ and
218
+ (self.expect('||'))
219
+ and
220
+ (b := self.compare())
221
+ ):
222
+ return with_type ( a ['value'] if a ['value'] else b ['value'] );
223
+ self._reset(mark)
224
+ if (
225
+ (compare := self.compare())
226
+ ):
227
+ return compare;
228
+ self._reset(mark)
229
+ return None;
230
+
231
+ @memoize_left_rec
232
+ def compare(self) -> Optional[object]:
233
+ # compare: compare '===' bitshift | compare '!==' bitshift | compare '<=>' bitshift | compare '==' bitshift | compare '=~' bitshift | compare '!=' bitshift | compare '>=' bitshift | compare '<=' bitshift | compare '>' bitshift | compare '<' bitshift | compare 'in' bitshift | bitshift
234
+ mark = self._mark()
235
+ if (
236
+ (a := self.compare())
237
+ and
238
+ (self.expect('==='))
239
+ and
240
+ (b := self.bitshift())
241
+ ):
242
+ return with_type ( type ( a ['value'] ) == type ( b ['value'] ) and a ['value'] == b ['value'] );
243
+ self._reset(mark)
244
+ if (
245
+ (a := self.compare())
246
+ and
247
+ (self.expect('!=='))
248
+ and
249
+ (b := self.bitshift())
250
+ ):
251
+ return with_type ( not ( type ( a ['value'] ) == type ( b ['value'] ) and a ['value'] == b ['value'] ) );
252
+ self._reset(mark)
253
+ if (
254
+ (a := self.compare())
255
+ and
256
+ (self.expect('<=>'))
257
+ and
258
+ (b := self.bitshift())
259
+ ):
260
+ return self . _spaceship ( a , b );
261
+ self._reset(mark)
262
+ if (
263
+ (a := self.compare())
264
+ and
265
+ (self.expect('=='))
266
+ and
267
+ (b := self.bitshift())
268
+ ):
269
+ return do_check_equal ( a , b , lambda x , y : loose_equal ( x , y ) );
270
+ self._reset(mark)
271
+ if (
272
+ (a := self.compare())
273
+ and
274
+ (self.expect('=~'))
275
+ and
276
+ (b := self.bitshift())
277
+ ):
278
+ return do_match ( a , b , self . variables );
279
+ self._reset(mark)
280
+ if (
281
+ (a := self.compare())
282
+ and
283
+ (self.expect('!='))
284
+ and
285
+ (b := self.bitshift())
286
+ ):
287
+ return do_check_equal ( a , b , lambda x , y : not loose_equal ( x , y ) );
288
+ self._reset(mark)
289
+ if (
290
+ (a := self.compare())
291
+ and
292
+ (self.expect('>='))
293
+ and
294
+ (b := self.bitshift())
295
+ ):
296
+ return self . _compare_op ( '>=' , a , b , lambda x , y : x >= y );
297
+ self._reset(mark)
298
+ if (
299
+ (a := self.compare())
300
+ and
301
+ (self.expect('<='))
302
+ and
303
+ (b := self.bitshift())
304
+ ):
305
+ return self . _compare_op ( '<=' , a , b , lambda x , y : x <= y );
306
+ self._reset(mark)
307
+ if (
308
+ (a := self.compare())
309
+ and
310
+ (self.expect('>'))
311
+ and
312
+ (b := self.bitshift())
313
+ ):
314
+ return self . _compare_op ( '>' , a , b , lambda x , y : x > y );
315
+ self._reset(mark)
316
+ if (
317
+ (a := self.compare())
318
+ and
319
+ (self.expect('<'))
320
+ and
321
+ (b := self.bitshift())
322
+ ):
323
+ return self . _compare_op ( '<' , a , b , lambda x , y : x < y );
324
+ self._reset(mark)
325
+ if (
326
+ (a := self.compare())
327
+ and
328
+ (self.expect('in'))
329
+ and
330
+ (b := self.bitshift())
331
+ ):
332
+ return self . _in ( a , b );
333
+ self._reset(mark)
334
+ if (
335
+ (bitshift := self.bitshift())
336
+ ):
337
+ return bitshift;
338
+ self._reset(mark)
339
+ return None;
340
+
341
+ @memoize_left_rec
342
+ def bitshift(self) -> Optional[object]:
343
+ # bitshift: bitshift '<<' sum_expr | bitshift '>>' sum_expr | sum_expr
344
+ mark = self._mark()
345
+ if (
346
+ (a := self.bitshift())
347
+ and
348
+ (self.expect('<<'))
349
+ and
350
+ (b := self.sum_expr())
351
+ ):
352
+ return self . _lshift ( a , b );
353
+ self._reset(mark)
354
+ if (
355
+ (a := self.bitshift())
356
+ and
357
+ (self.expect('>>'))
358
+ and
359
+ (b := self.sum_expr())
360
+ ):
361
+ return self . _shift_op ( '>>' , a , b , lambda x , y : x >> y );
362
+ self._reset(mark)
363
+ if (
364
+ (sum_expr := self.sum_expr())
365
+ ):
366
+ return sum_expr;
367
+ self._reset(mark)
368
+ return None;
369
+
370
+ @memoize_left_rec
371
+ def sum_expr(self) -> Optional[object]:
372
+ # sum_expr: sum_expr '+' product | sum_expr '-' product | sum_expr '|' product | product
373
+ mark = self._mark()
374
+ if (
375
+ (a := self.sum_expr())
376
+ and
377
+ (self.expect('+'))
378
+ and
379
+ (b := self.product())
380
+ ):
381
+ return self . _plus ( a , b );
382
+ self._reset(mark)
383
+ if (
384
+ (a := self.sum_expr())
385
+ and
386
+ (self.expect('-'))
387
+ and
388
+ (b := self.product())
389
+ ):
390
+ return self . _minus ( a , b );
391
+ self._reset(mark)
392
+ if (
393
+ (a := self.sum_expr())
394
+ and
395
+ (self.expect('|'))
396
+ and
397
+ (b := self.product())
398
+ ):
399
+ return self . _union ( a , b );
400
+ self._reset(mark)
401
+ if (
402
+ (product := self.product())
403
+ ):
404
+ return product;
405
+ self._reset(mark)
406
+ return None;
407
+
408
+ @memoize_left_rec
409
+ def product(self) -> Optional[object]:
410
+ # product: product '*' !'*' unary | product '/' unary | product '%' unary | product '&' unary | product '[' expr ']' | product implicit_mul | unary
411
+ mark = self._mark()
412
+ if (
413
+ (a := self.product())
414
+ and
415
+ (self.expect('*'))
416
+ and
417
+ (self.negative_lookahead(self.expect, '*'))
418
+ and
419
+ (b := self.unary())
420
+ ):
421
+ return self . _mul ( a , b );
422
+ self._reset(mark)
423
+ if (
424
+ (a := self.product())
425
+ and
426
+ (self.expect('/'))
427
+ and
428
+ (b := self.unary())
429
+ ):
430
+ return self . _div ( a , b );
431
+ self._reset(mark)
432
+ if (
433
+ (a := self.product())
434
+ and
435
+ (self.expect('%'))
436
+ and
437
+ (b := self.unary())
438
+ ):
439
+ return self . _mod ( a , b );
440
+ self._reset(mark)
441
+ if (
442
+ (a := self.product())
443
+ and
444
+ (self.expect('&'))
445
+ and
446
+ (b := self.unary())
447
+ ):
448
+ return self . _intersect ( a , b );
449
+ self._reset(mark)
450
+ if (
451
+ (a := self.product())
452
+ and
453
+ (self.expect('['))
454
+ and
455
+ (b := self.expr())
456
+ and
457
+ (self.expect(']'))
458
+ ):
459
+ return self . _property_access ( a , b );
460
+ self._reset(mark)
461
+ if (
462
+ (a := self.product())
463
+ and
464
+ (b := self.implicit_mul())
465
+ ):
466
+ return self . _implicit_mul ( a , b );
467
+ self._reset(mark)
468
+ if (
469
+ (unary := self.unary())
470
+ ):
471
+ return unary;
472
+ self._reset(mark)
473
+ return None;
474
+
475
+ @memoize
476
+ def implicit_mul(self) -> Optional[object]:
477
+ # implicit_mul: paren_expr_pow | func_call_pow | var_ref_pow
478
+ mark = self._mark()
479
+ if (
480
+ (paren_expr_pow := self.paren_expr_pow())
481
+ ):
482
+ return paren_expr_pow;
483
+ self._reset(mark)
484
+ if (
485
+ (func_call_pow := self.func_call_pow())
486
+ ):
487
+ return func_call_pow;
488
+ self._reset(mark)
489
+ if (
490
+ (var_ref_pow := self.var_ref_pow())
491
+ ):
492
+ return var_ref_pow;
493
+ self._reset(mark)
494
+ return None;
495
+
496
+ @memoize
497
+ def paren_expr_pow(self) -> Optional[object]:
498
+ # paren_expr_pow: paren_expr '**' value | paren_expr '^' value | paren_expr
499
+ mark = self._mark()
500
+ if (
501
+ (a := self.paren_expr())
502
+ and
503
+ (self.expect('**'))
504
+ and
505
+ (b := self.value())
506
+ ):
507
+ return do_power ( a , b );
508
+ self._reset(mark)
509
+ if (
510
+ (a := self.paren_expr())
511
+ and
512
+ (self.expect('^'))
513
+ and
514
+ (b := self.value())
515
+ ):
516
+ return do_power ( a , b );
517
+ self._reset(mark)
518
+ if (
519
+ (paren_expr := self.paren_expr())
520
+ ):
521
+ return paren_expr;
522
+ self._reset(mark)
523
+ return None;
524
+
525
+ @memoize
526
+ def func_call_pow(self) -> Optional[object]:
527
+ # func_call_pow: function_call '**' value | function_call '^' value | function_call
528
+ mark = self._mark()
529
+ if (
530
+ (a := self.function_call())
531
+ and
532
+ (self.expect('**'))
533
+ and
534
+ (b := self.value())
535
+ ):
536
+ return do_power ( a , b );
537
+ self._reset(mark)
538
+ if (
539
+ (a := self.function_call())
540
+ and
541
+ (self.expect('^'))
542
+ and
543
+ (b := self.value())
544
+ ):
545
+ return do_power ( a , b );
546
+ self._reset(mark)
547
+ if (
548
+ (function_call := self.function_call())
549
+ ):
550
+ return function_call;
551
+ self._reset(mark)
552
+ return None;
553
+
554
+ @memoize
555
+ def var_ref_pow(self) -> Optional[object]:
556
+ # var_ref_pow: var_ref '**' value | var_ref '^' value | var_ref
557
+ mark = self._mark()
558
+ if (
559
+ (a := self.var_ref())
560
+ and
561
+ (self.expect('**'))
562
+ and
563
+ (b := self.value())
564
+ ):
565
+ return do_power ( a , b );
566
+ self._reset(mark)
567
+ if (
568
+ (a := self.var_ref())
569
+ and
570
+ (self.expect('^'))
571
+ and
572
+ (b := self.value())
573
+ ):
574
+ return do_power ( a , b );
575
+ self._reset(mark)
576
+ if (
577
+ (var_ref := self.var_ref())
578
+ ):
579
+ return var_ref;
580
+ self._reset(mark)
581
+ return None;
582
+
583
+ @memoize
584
+ def unary(self) -> Optional[object]:
585
+ # unary: '!' unary | '-' unary | '+' unary | power
586
+ mark = self._mark()
587
+ if (
588
+ (self.expect('!'))
589
+ and
590
+ (a := self.unary())
591
+ ):
592
+ return with_type ( not a ['value'] );
593
+ self._reset(mark)
594
+ if (
595
+ (self.expect('-'))
596
+ and
597
+ (a := self.unary())
598
+ ):
599
+ return self . _unary_minus ( a );
600
+ self._reset(mark)
601
+ if (
602
+ (self.expect('+'))
603
+ and
604
+ (a := self.unary())
605
+ ):
606
+ return self . _unary_plus ( a );
607
+ self._reset(mark)
608
+ if (
609
+ (power := self.power())
610
+ ):
611
+ return power;
612
+ self._reset(mark)
613
+ return None;
614
+
615
+ @memoize
616
+ def power(self) -> Optional[object]:
617
+ # power: value '**' power | value '^' power | value
618
+ mark = self._mark()
619
+ if (
620
+ (a := self.value())
621
+ and
622
+ (self.expect('**'))
623
+ and
624
+ (b := self.power())
625
+ ):
626
+ return do_power ( a , b );
627
+ self._reset(mark)
628
+ if (
629
+ (a := self.value())
630
+ and
631
+ (self.expect('^'))
632
+ and
633
+ (b := self.power())
634
+ ):
635
+ return do_power ( a , b );
636
+ self._reset(mark)
637
+ if (
638
+ (value := self.value())
639
+ ):
640
+ return value;
641
+ self._reset(mark)
642
+ return None;
643
+
644
+ @memoize
645
+ def value(self) -> Optional[object]:
646
+ # value: json_value | const_value | regex_value | string_value | number_value | function_call | var_ref | paren_expr
647
+ mark = self._mark()
648
+ if (
649
+ (json_value := self.json_value())
650
+ ):
651
+ return json_value;
652
+ self._reset(mark)
653
+ if (
654
+ (const_value := self.const_value())
655
+ ):
656
+ return const_value;
657
+ self._reset(mark)
658
+ if (
659
+ (regex_value := self.regex_value())
660
+ ):
661
+ return regex_value;
662
+ self._reset(mark)
663
+ if (
664
+ (string_value := self.string_value())
665
+ ):
666
+ return string_value;
667
+ self._reset(mark)
668
+ if (
669
+ (number_value := self.number_value())
670
+ ):
671
+ return number_value;
672
+ self._reset(mark)
673
+ if (
674
+ (function_call := self.function_call())
675
+ ):
676
+ return function_call;
677
+ self._reset(mark)
678
+ if (
679
+ (var_ref := self.var_ref())
680
+ ):
681
+ return var_ref;
682
+ self._reset(mark)
683
+ if (
684
+ (paren_expr := self.paren_expr())
685
+ ):
686
+ return paren_expr;
687
+ self._reset(mark)
688
+ return None;
689
+
690
+ @memoize
691
+ def paren_expr(self) -> Optional[object]:
692
+ # paren_expr: '(' expr ')'
693
+ mark = self._mark()
694
+ if (
695
+ (self.expect('('))
696
+ and
697
+ (a := self.expr())
698
+ and
699
+ (self.expect(')'))
700
+ ):
701
+ return a;
702
+ self._reset(mark)
703
+ return None;
704
+
705
+ @memoize
706
+ def json_value(self) -> Optional[object]:
707
+ # json_value: '{' json_obj_body '}' | '{' '}' | '[' json_arr_body ']' | '[' ']'
708
+ mark = self._mark()
709
+ if (
710
+ (self.expect('{'))
711
+ and
712
+ (a := self.json_obj_body())
713
+ and
714
+ (self.expect('}'))
715
+ ):
716
+ return with_type ( a , 'array' );
717
+ self._reset(mark)
718
+ if (
719
+ (self.expect('{'))
720
+ and
721
+ (self.expect('}'))
722
+ ):
723
+ return with_type ( {} , 'array' );
724
+ self._reset(mark)
725
+ if (
726
+ (self.expect('['))
727
+ and
728
+ (a := self.json_arr_body())
729
+ and
730
+ (self.expect(']'))
731
+ ):
732
+ return with_type ( a , 'array' );
733
+ self._reset(mark)
734
+ if (
735
+ (self.expect('['))
736
+ and
737
+ (self.expect(']'))
738
+ ):
739
+ return with_type ( [] , 'array' );
740
+ self._reset(mark)
741
+ return None;
742
+
743
+ @memoize
744
+ def json_obj_body(self) -> Optional[dict]:
745
+ # json_obj_body: STRING ':' json_element ',' json_obj_body | STRING ':' json_element
746
+ mark = self._mark()
747
+ if (
748
+ (a := self.string())
749
+ and
750
+ (self.expect(':'))
751
+ and
752
+ (b := self.json_element())
753
+ and
754
+ (self.expect(','))
755
+ and
756
+ (c := self.json_obj_body())
757
+ ):
758
+ return self . _merge_obj ( a , b , c );
759
+ self._reset(mark)
760
+ if (
761
+ (a := self.string())
762
+ and
763
+ (self.expect(':'))
764
+ and
765
+ (b := self.json_element())
766
+ ):
767
+ return self . _make_obj ( a , b );
768
+ self._reset(mark)
769
+ return None;
770
+
771
+ @memoize
772
+ def json_arr_body(self) -> Optional[list]:
773
+ # json_arr_body: json_element ',' json_arr_body | json_element
774
+ mark = self._mark()
775
+ if (
776
+ (a := self.json_element())
777
+ and
778
+ (self.expect(','))
779
+ and
780
+ (b := self.json_arr_body())
781
+ ):
782
+ return [a] + b;
783
+ self._reset(mark)
784
+ if (
785
+ (a := self.json_element())
786
+ ):
787
+ return [a];
788
+ self._reset(mark)
789
+ return None;
790
+
791
+ @memoize
792
+ def json_element(self) -> Optional[object]:
793
+ # json_element: '{' json_obj_body '}' | '[' json_arr_body ']' | STRING | NUMBER | 'true' | 'false' | 'null'
794
+ mark = self._mark()
795
+ if (
796
+ (self.expect('{'))
797
+ and
798
+ (a := self.json_obj_body())
799
+ and
800
+ (self.expect('}'))
801
+ ):
802
+ return dict ( a );
803
+ self._reset(mark)
804
+ if (
805
+ (self.expect('['))
806
+ and
807
+ (a := self.json_arr_body())
808
+ and
809
+ (self.expect(']'))
810
+ ):
811
+ return list ( a );
812
+ self._reset(mark)
813
+ if (
814
+ (a := self.string())
815
+ ):
816
+ return self . _json_string_val ( a );
817
+ self._reset(mark)
818
+ if (
819
+ (a := self.number())
820
+ ):
821
+ return self . _json_number_val ( a );
822
+ self._reset(mark)
823
+ if (
824
+ (self.expect('true'))
825
+ ):
826
+ return True;
827
+ self._reset(mark)
828
+ if (
829
+ (self.expect('false'))
830
+ ):
831
+ return False;
832
+ self._reset(mark)
833
+ if (
834
+ (self.expect('null'))
835
+ ):
836
+ return None;
837
+ self._reset(mark)
838
+ return None;
839
+
840
+ @memoize
841
+ def const_value(self) -> Optional[object]:
842
+ # const_value: 'true' | 'false' | 'null'
843
+ mark = self._mark()
844
+ if (
845
+ (self.expect('true'))
846
+ ):
847
+ return with_type ( True );
848
+ self._reset(mark)
849
+ if (
850
+ (self.expect('false'))
851
+ ):
852
+ return with_type ( False );
853
+ self._reset(mark)
854
+ if (
855
+ (self.expect('null'))
856
+ ):
857
+ return with_type ( None );
858
+ self._reset(mark)
859
+ return None;
860
+
861
+ @memoize
862
+ def regex_value(self) -> Optional[object]:
863
+ # regex_value: regex_literal
864
+ mark = self._mark()
865
+ if (
866
+ (a := self.regex_literal())
867
+ ):
868
+ return with_type ( a . string , 'regex' );
869
+ self._reset(mark)
870
+ return None;
871
+
872
+ @memoize
873
+ def regex_literal(self) -> Optional[object]:
874
+ # regex_literal: OP
875
+ mark = self._mark()
876
+ if (
877
+ (a := self.op())
878
+ ):
879
+ return a;
880
+ self._reset(mark)
881
+ return None;
882
+
883
+ @memoize
884
+ def string_value(self) -> Optional[object]:
885
+ # string_value: STRING
886
+ mark = self._mark()
887
+ if (
888
+ (a := self.string())
889
+ ):
890
+ return self . _parse_string ( a );
891
+ self._reset(mark)
892
+ return None;
893
+
894
+ @memoize
895
+ def number_value(self) -> Optional[object]:
896
+ # number_value: NUMBER
897
+ mark = self._mark()
898
+ if (
899
+ (a := self.number())
900
+ ):
901
+ return self . _parse_number ( a );
902
+ self._reset(mark)
903
+ return None;
904
+
905
+ @memoize
906
+ def function_call(self) -> Optional[object]:
907
+ # function_call: NAME '(' arg_list_inner ')' | NAME '(' ')'
908
+ mark = self._mark()
909
+ if (
910
+ (name := self.name())
911
+ and
912
+ (self.expect('('))
913
+ and
914
+ (args := self.arg_list_inner())
915
+ and
916
+ (self.expect(')'))
917
+ ):
918
+ return self . _call_function ( name . string , args );
919
+ self._reset(mark)
920
+ if (
921
+ (name := self.name())
922
+ and
923
+ (self.expect('('))
924
+ and
925
+ (self.expect(')'))
926
+ ):
927
+ return self . _call_function ( name . string , [] );
928
+ self._reset(mark)
929
+ return None;
930
+
931
+ @memoize
932
+ def arg_list_inner(self) -> Optional[list]:
933
+ # arg_list_inner: expr ',' arg_list_inner | expr
934
+ mark = self._mark()
935
+ if (
936
+ (a := self.expr())
937
+ and
938
+ (self.expect(','))
939
+ and
940
+ (b := self.arg_list_inner())
941
+ ):
942
+ return [a] + b;
943
+ self._reset(mark)
944
+ if (
945
+ (a := self.expr())
946
+ ):
947
+ return [a];
948
+ self._reset(mark)
949
+ return None;
950
+
951
+ @memoize
952
+ def var_ref(self) -> Optional[object]:
953
+ # var_ref: NAME
954
+ mark = self._mark()
955
+ if (
956
+ (a := self.name())
957
+ ):
958
+ return self . _resolve_var ( a . string );
959
+ self._reset(mark)
960
+ return None;
961
+
962
+ KEYWORDS = ('false', 'in', 'null', 'true')
963
+ SOFT_KEYWORDS = ()
964
+
965
+
966
+ if __name__ == '__main__':
967
+ from pegen.parser import simple_parser_main
968
+ simple_parser_main(ExpressionParser)