Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/json5/parser.py: 99%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# Generated by glop version 0.9.0
2# https://github.com/dpranke/glop
3# `glop -o json5/parser.py --no-main --no-memoize -c json5/json5.g`
5# pylint: disable=line-too-long,too-many-lines
6# pylint: disable=unnecessary-lambda,unnecessary-direct-lambda-call
7# ruff: disable[PLC3002] (equivalent of unnecessary-direct-lambda-call)
9import unicodedata
12class Parser:
13 def __init__(self, msg, fname, pos=0):
14 self.msg = msg
15 self.end = len(self.msg)
16 self.fname = fname
17 self.val = None
18 self.pos = pos
19 self.failed = False
20 self.errpos = pos
21 self._scopes = []
22 self._cache = {}
23 self._global_vars = {}
25 def parse(self, global_vars=None):
26 self._global_vars = global_vars or {}
27 self._grammar_()
28 if self.failed:
29 return None, self._err_str(), self.errpos
30 return self.val, None, self.pos
32 def _err_str(self):
33 lineno, colno = self._err_offsets()
34 if self.errpos == len(self.msg):
35 thing = 'end of input'
36 else:
37 thing = f'"{self.msg[self.errpos]}"'
38 return f'{self.fname}:{lineno} Unexpected {thing} at column {colno}'
40 def _err_offsets(self):
41 lineno = 1
42 colno = 1
43 for i in range(self.errpos):
44 if self.msg[i] == '\n':
45 lineno += 1
46 colno = 1
47 else:
48 colno += 1
49 return lineno, colno
51 def _succeed(self, v, newpos=None):
52 self.val = v
53 self.failed = False
54 if newpos is not None:
55 self.pos = newpos
57 def _fail(self):
58 self.val = None
59 self.failed = True
60 self.errpos = max(self.errpos, self.pos)
62 def _rewind(self, newpos):
63 self._succeed(None, newpos)
65 def _bind(self, rule, var):
66 rule()
67 if not self.failed:
68 self._set(var, self.val)
70 def _not(self, rule):
71 p = self.pos
72 errpos = self.errpos
73 rule()
74 if self.failed:
75 self._succeed(None, p)
76 else:
77 self._rewind(p)
78 self.errpos = errpos
79 self._fail()
81 def _opt(self, rule):
82 p = self.pos
83 rule()
84 if self.failed:
85 self._succeed([], p)
86 else:
87 self._succeed([self.val])
89 def _plus(self, rule):
90 vs = []
91 rule()
92 vs.append(self.val)
93 if self.failed:
94 return
95 self._star(rule, vs)
97 def _star(self, rule, vs=None):
98 vs = vs or []
99 while True:
100 p = self.pos
101 rule()
102 if self.failed:
103 self._rewind(p)
104 break
105 vs.append(self.val)
106 self._succeed(vs)
108 def _seq(self, rules):
109 for rule in rules:
110 rule()
111 if self.failed:
112 return
114 def _choose(self, rules):
115 p = self.pos
116 for rule in rules[:-1]:
117 rule()
118 if not self.failed:
119 return
120 self._rewind(p)
121 rules[-1]()
123 def _ch(self, ch):
124 p = self.pos
125 if p < self.end and self.msg[p] == ch:
126 self._succeed(ch, self.pos + 1)
127 else:
128 self._fail()
130 def _str(self, s):
131 for ch in s:
132 self._ch(ch)
133 if self.failed:
134 return
135 self.val = s
137 def _range(self, i, j):
138 p = self.pos
139 if p != self.end and ord(i) <= ord(self.msg[p]) <= ord(j):
140 self._succeed(self.msg[p], self.pos + 1)
141 else:
142 self._fail()
144 def _push(self, name):
145 self._scopes.append((name, {}))
147 def _pop(self, name):
148 actual_name, _ = self._scopes.pop()
149 assert name == actual_name
151 def _get(self, var):
152 if self._scopes and var in self._scopes[-1][1]:
153 return self._scopes[-1][1][var]
154 return self._global_vars[var]
156 def _set(self, var, val):
157 self._scopes[-1][1][var] = val
159 def _is_unicat(self, var, cat):
160 return unicodedata.category(var) == cat
162 def _join(self, s, vs):
163 return s.join(vs)
165 def _xtou(self, s):
166 return chr(int(s, base=16))
168 def _grammar_(self):
169 self._push('grammar')
170 self._seq(
171 [
172 self._sp_,
173 lambda: self._bind(self._value_, 'v'),
174 self._trailing_,
175 lambda: self._succeed(self._get('v')),
176 ]
177 )
178 self._pop('grammar')
180 def _trailing_(self):
181 self._choose([self._trailing__c0_, self._trailing__c1_])
183 def _trailing__c0_(self):
184 self._seq([self._trailing__c0__s0_, self._sp_, self._end_])
186 def _trailing__c0__s0_(self):
187 v = self._get('_consume_trailing')
188 if v:
189 self._succeed(v)
190 else:
191 self._fail()
193 def _trailing__c1_(self):
194 self._not(self._trailing__c1_n_)
196 def _trailing__c1_n_(self):
197 v = self._get('_consume_trailing')
198 if v:
199 self._succeed(v)
200 else:
201 self._fail()
203 def _sp_(self):
204 self._star(self._ws_)
206 def _ws_(self):
207 self._choose(
208 [
209 self._ws__c0_,
210 self._eol_,
211 self._comment_,
212 self._ws__c3_,
213 self._ws__c4_,
214 self._ws__c5_,
215 self._ws__c6_,
216 self._ws__c7_,
217 self._ws__c8_,
218 ]
219 )
221 def _ws__c0_(self):
222 self._ch(' ')
224 def _ws__c3_(self):
225 self._ch('\t')
227 def _ws__c4_(self):
228 self._ch('\v')
230 def _ws__c5_(self):
231 self._ch('\f')
233 def _ws__c6_(self):
234 self._ch('\xa0')
236 def _ws__c7_(self):
237 self._ch('\ufeff')
239 def _ws__c8_(self):
240 self._push('ws__c8')
241 self._seq(
242 [
243 self._ws__c8__s0_,
244 lambda: self._bind(self._anything_, 'x'),
245 lambda: self._succeed(self._get('x')),
246 ]
247 )
248 self._pop('ws__c8')
250 def _ws__c8__s0_(self):
251 self._not(lambda: self._not(self._ws__c8__s0_n_n_))
253 def _ws__c8__s0_n_n_(self):
254 (lambda: self._choose([self._ws__c8__s0_n_n_g__c0_]))()
256 def _ws__c8__s0_n_n_g__c0_(self):
257 self._seq(
258 [
259 lambda: self._bind(self._anything_, 'x'),
260 self._ws__c8__s0_n_n_g__c0__s1_,
261 ]
262 )
264 def _ws__c8__s0_n_n_g__c0__s1_(self):
265 v = self._is_unicat(self._get('x'), 'Zs')
266 if v:
267 self._succeed(v)
268 else:
269 self._fail()
271 def _eol_(self):
272 self._choose(
273 [
274 self._eol__c0_,
275 self._eol__c1_,
276 self._eol__c2_,
277 self._eol__c3_,
278 self._eol__c4_,
279 ]
280 )
282 def _eol__c0_(self):
283 self._seq([lambda: self._ch('\r'), lambda: self._ch('\n')])
285 def _eol__c1_(self):
286 self._ch('\r')
288 def _eol__c2_(self):
289 self._ch('\n')
291 def _eol__c3_(self):
292 self._ch('\u2028')
294 def _eol__c4_(self):
295 self._ch('\u2029')
297 def _comment_(self):
298 self._choose([self._comment__c0_, self._comment__c1_])
300 def _comment__c0_(self):
301 self._seq(
302 [
303 lambda: self._str('//'),
304 lambda: self._star(self._comment__c0__s1_p_),
305 ]
306 )
308 def _comment__c0__s1_p_(self):
309 self._seq([lambda: self._not(self._eol_), self._anything_])
311 def _comment__c1_(self):
312 self._seq(
313 [
314 lambda: self._str('/*'),
315 self._comment__c1__s1_,
316 lambda: self._str('*/'),
317 ]
318 )
320 def _comment__c1__s1_(self):
321 self._star(
322 lambda: self._seq([self._comment__c1__s1_p__s0_, self._anything_])
323 )
325 def _comment__c1__s1_p__s0_(self):
326 self._not(lambda: self._str('*/'))
328 def _value_(self):
329 self._choose(
330 [
331 self._value__c0_,
332 self._value__c1_,
333 self._value__c2_,
334 self._value__c3_,
335 self._value__c4_,
336 self._value__c5_,
337 self._value__c6_,
338 ]
339 )
341 def _value__c0_(self):
342 self._seq([lambda: self._str('null'), lambda: self._succeed('None')])
344 def _value__c1_(self):
345 self._seq([lambda: self._str('true'), lambda: self._succeed('True')])
347 def _value__c2_(self):
348 self._seq([lambda: self._str('false'), lambda: self._succeed('False')])
350 def _value__c3_(self):
351 self._push('value__c3')
352 self._seq(
353 [
354 lambda: self._bind(self._object_, 'v'),
355 lambda: self._succeed(['object', self._get('v')]),
356 ]
357 )
358 self._pop('value__c3')
360 def _value__c4_(self):
361 self._push('value__c4')
362 self._seq(
363 [
364 lambda: self._bind(self._array_, 'v'),
365 lambda: self._succeed(['array', self._get('v')]),
366 ]
367 )
368 self._pop('value__c4')
370 def _value__c5_(self):
371 self._push('value__c5')
372 self._seq(
373 [
374 lambda: self._bind(self._string_, 'v'),
375 lambda: self._succeed(['string', self._get('v')]),
376 ]
377 )
378 self._pop('value__c5')
380 def _value__c6_(self):
381 self._push('value__c6')
382 self._seq(
383 [
384 lambda: self._bind(self._num_literal_, 'v'),
385 lambda: self._succeed(['number', self._get('v')]),
386 ]
387 )
388 self._pop('value__c6')
390 def _object_(self):
391 self._choose([self._object__c0_, self._object__c1_])
393 def _object__c0_(self):
394 self._push('object__c0')
395 self._seq(
396 [
397 lambda: self._ch('{'),
398 self._sp_,
399 lambda: self._bind(self._member_list_, 'v'),
400 self._sp_,
401 lambda: self._ch('}'),
402 lambda: self._succeed(self._get('v')),
403 ]
404 )
405 self._pop('object__c0')
407 def _object__c1_(self):
408 self._seq(
409 [
410 lambda: self._ch('{'),
411 self._sp_,
412 lambda: self._ch('}'),
413 lambda: self._succeed([]),
414 ]
415 )
417 def _array_(self):
418 self._choose([self._array__c0_, self._array__c1_])
420 def _array__c0_(self):
421 self._push('array__c0')
422 self._seq(
423 [
424 lambda: self._ch('['),
425 self._sp_,
426 lambda: self._bind(self._element_list_, 'v'),
427 self._sp_,
428 lambda: self._ch(']'),
429 lambda: self._succeed(self._get('v')),
430 ]
431 )
432 self._pop('array__c0')
434 def _array__c1_(self):
435 self._seq(
436 [
437 lambda: self._ch('['),
438 self._sp_,
439 lambda: self._ch(']'),
440 lambda: self._succeed([]),
441 ]
442 )
444 def _string_(self):
445 self._choose([self._string__c0_, self._string__c1_])
447 def _string__c0_(self):
448 self._push('string__c0')
449 self._seq(
450 [
451 self._squote_,
452 self._string__c0__s1_,
453 self._squote_,
454 lambda: self._succeed(self._join('', self._get('cs'))),
455 ]
456 )
457 self._pop('string__c0')
459 def _string__c0__s1_(self):
460 self._bind(lambda: self._star(self._sqchar_), 'cs')
462 def _string__c1_(self):
463 self._push('string__c1')
464 self._seq(
465 [
466 self._dquote_,
467 self._string__c1__s1_,
468 self._dquote_,
469 lambda: self._succeed(self._join('', self._get('cs'))),
470 ]
471 )
472 self._pop('string__c1')
474 def _string__c1__s1_(self):
475 self._bind(lambda: self._star(self._dqchar_), 'cs')
477 def _sqchar_(self):
478 self._choose([self._sqchar__c0_, self._sqchar__c1_, self._sqchar__c2_])
480 def _sqchar__c0_(self):
481 self._push('sqchar__c0')
482 self._seq(
483 [
484 self._sqchar__c0__s0_,
485 lambda: self._bind(self._anything_, 'c'),
486 lambda: self._succeed(self._get('c')),
487 ]
488 )
489 self._pop('sqchar__c0')
491 def _sqchar__c0__s0_(self):
492 self._not(lambda: (self._sqchar__c0__s0_n_g_)())
494 def _sqchar__c0__s0_n_g_(self):
495 self._choose(
496 [
497 lambda: self._seq([self._bslash_]),
498 lambda: self._seq([self._squote_]),
499 self._sqchar__c0__s0_n_g__c2_,
500 ]
501 )
503 def _sqchar__c0__s0_n_g__c2_(self):
504 self._seq(
505 [
506 self._sqchar__c0__s0_n_g__c2__s0_,
507 lambda: (self._sqchar__c0__s0_n_g__c2__s1_g_)(),
508 ]
509 )
511 def _sqchar__c0__s0_n_g__c2__s0_(self):
512 v = self._get('_strict')
513 if v:
514 self._succeed(v)
515 else:
516 self._fail()
518 def _sqchar__c0__s0_n_g__c2__s1_g_(self):
519 self._choose(
520 [
521 self._sqchar__c0__s0_n_g__c2__s1_g__c0_,
522 self._sqchar__c0__s0_n_g__c2__s1_g__c1_,
523 ]
524 )
526 def _sqchar__c0__s0_n_g__c2__s1_g__c0_(self):
527 self._seq([lambda: self._ch('\r')])
529 def _sqchar__c0__s0_n_g__c2__s1_g__c1_(self):
530 self._seq([lambda: self._ch('\n')])
532 def _sqchar__c1_(self):
533 self._push('sqchar__c1')
534 self._seq(
535 [
536 self._bslash_,
537 lambda: self._bind(self._esc_char_, 'c'),
538 lambda: self._succeed(self._get('c')),
539 ]
540 )
541 self._pop('sqchar__c1')
543 def _sqchar__c2_(self):
544 self._seq([self._bslash_, self._eol_, lambda: self._succeed('')])
546 def _dqchar_(self):
547 self._choose([self._dqchar__c0_, self._dqchar__c1_, self._dqchar__c2_])
549 def _dqchar__c0_(self):
550 self._push('dqchar__c0')
551 self._seq(
552 [
553 self._dqchar__c0__s0_,
554 lambda: self._bind(self._anything_, 'c'),
555 lambda: self._succeed(self._get('c')),
556 ]
557 )
558 self._pop('dqchar__c0')
560 def _dqchar__c0__s0_(self):
561 self._not(lambda: (self._dqchar__c0__s0_n_g_)())
563 def _dqchar__c0__s0_n_g_(self):
564 self._choose(
565 [
566 lambda: self._seq([self._bslash_]),
567 lambda: self._seq([self._dquote_]),
568 self._dqchar__c0__s0_n_g__c2_,
569 ]
570 )
572 def _dqchar__c0__s0_n_g__c2_(self):
573 self._seq(
574 [
575 self._dqchar__c0__s0_n_g__c2__s0_,
576 lambda: (self._dqchar__c0__s0_n_g__c2__s1_g_)(),
577 ]
578 )
580 def _dqchar__c0__s0_n_g__c2__s0_(self):
581 v = self._get('_strict')
582 if v:
583 self._succeed(v)
584 else:
585 self._fail()
587 def _dqchar__c0__s0_n_g__c2__s1_g_(self):
588 self._choose(
589 [
590 self._dqchar__c0__s0_n_g__c2__s1_g__c0_,
591 self._dqchar__c0__s0_n_g__c2__s1_g__c1_,
592 ]
593 )
595 def _dqchar__c0__s0_n_g__c2__s1_g__c0_(self):
596 self._seq([lambda: self._ch('\r')])
598 def _dqchar__c0__s0_n_g__c2__s1_g__c1_(self):
599 self._seq([lambda: self._ch('\n')])
601 def _dqchar__c1_(self):
602 self._push('dqchar__c1')
603 self._seq(
604 [
605 self._bslash_,
606 lambda: self._bind(self._esc_char_, 'c'),
607 lambda: self._succeed(self._get('c')),
608 ]
609 )
610 self._pop('dqchar__c1')
612 def _dqchar__c2_(self):
613 self._seq([self._bslash_, self._eol_, lambda: self._succeed('')])
615 def _bslash_(self):
616 self._ch('\\')
618 def _squote_(self):
619 self._ch("'")
621 def _dquote_(self):
622 self._ch('"')
624 def _esc_char_(self):
625 self._choose(
626 [
627 self._esc_char__c0_,
628 self._esc_char__c1_,
629 self._esc_char__c2_,
630 self._esc_char__c3_,
631 self._esc_char__c4_,
632 self._esc_char__c5_,
633 self._esc_char__c6_,
634 self._esc_char__c7_,
635 self._esc_char__c8_,
636 self._esc_char__c9_,
637 self._esc_char__c10_,
638 self._esc_char__c11_,
639 self._esc_char__c12_,
640 ]
641 )
643 def _esc_char__c0_(self):
644 self._seq([lambda: self._ch('b'), lambda: self._succeed('\b')])
646 def _esc_char__c1_(self):
647 self._seq([lambda: self._ch('f'), lambda: self._succeed('\f')])
649 def _esc_char__c10_(self):
650 self._seq(
651 [
652 lambda: self._ch('0'),
653 lambda: self._not(self._digit_),
654 lambda: self._succeed('\x00'),
655 ]
656 )
658 def _esc_char__c11_(self):
659 self._push('esc_char__c11')
660 self._seq(
661 [
662 lambda: self._bind(self._hex_esc_, 'c'),
663 lambda: self._succeed(self._get('c')),
664 ]
665 )
666 self._pop('esc_char__c11')
668 def _esc_char__c12_(self):
669 self._push('esc_char__c12')
670 self._seq(
671 [
672 lambda: self._bind(self._unicode_esc_, 'c'),
673 lambda: self._succeed(self._get('c')),
674 ]
675 )
676 self._pop('esc_char__c12')
678 def _esc_char__c2_(self):
679 self._seq([lambda: self._ch('n'), lambda: self._succeed('\n')])
681 def _esc_char__c3_(self):
682 self._seq([lambda: self._ch('r'), lambda: self._succeed('\r')])
684 def _esc_char__c4_(self):
685 self._seq([lambda: self._ch('t'), lambda: self._succeed('\t')])
687 def _esc_char__c5_(self):
688 self._seq([lambda: self._ch('v'), lambda: self._succeed('\v')])
690 def _esc_char__c6_(self):
691 self._seq([self._squote_, lambda: self._succeed("'")])
693 def _esc_char__c7_(self):
694 self._seq([self._dquote_, lambda: self._succeed('"')])
696 def _esc_char__c8_(self):
697 self._seq([self._bslash_, lambda: self._succeed('\\')])
699 def _esc_char__c9_(self):
700 self._push('esc_char__c9')
701 self._seq(
702 [
703 self._esc_char__c9__s0_,
704 lambda: self._bind(self._anything_, 'c'),
705 lambda: self._succeed(self._get('c')),
706 ]
707 )
708 self._pop('esc_char__c9')
710 def _esc_char__c9__s0_(self):
711 self._not(lambda: (self._esc_char__c9__s0_n_g_)())
713 def _esc_char__c9__s0_n_g_(self):
714 self._choose(
715 [
716 self._esc_char__c9__s0_n_g__c0_,
717 self._esc_char__c9__s0_n_g__c1_,
718 lambda: self._seq([self._digit_]),
719 lambda: self._seq([self._eol_]),
720 ]
721 )
723 def _esc_char__c9__s0_n_g__c0_(self):
724 self._seq([lambda: self._ch('x')])
726 def _esc_char__c9__s0_n_g__c1_(self):
727 self._seq([lambda: self._ch('u')])
729 def _hex_esc_(self):
730 self._push('hex_esc')
731 self._seq(
732 [
733 lambda: self._ch('x'),
734 lambda: self._bind(self._hex_, 'h1'),
735 lambda: self._bind(self._hex_, 'h2'),
736 lambda: self._succeed(
737 self._xtou(self._get('h1') + self._get('h2'))
738 ),
739 ]
740 )
741 self._pop('hex_esc')
743 def _unicode_esc_(self):
744 self._push('unicode_esc')
745 self._seq(
746 [
747 lambda: self._ch('u'),
748 lambda: self._bind(self._hex_, 'a'),
749 lambda: self._bind(self._hex_, 'b'),
750 lambda: self._bind(self._hex_, 'c'),
751 lambda: self._bind(self._hex_, 'd'),
752 lambda: self._succeed(
753 self._xtou(
754 self._get('a')
755 + self._get('b')
756 + self._get('c')
757 + self._get('d')
758 )
759 ),
760 ]
761 )
762 self._pop('unicode_esc')
764 def _element_list_(self):
765 self._push('element_list')
766 self._seq(
767 [
768 lambda: self._bind(self._value_, 'v'),
769 self._element_list__s1_,
770 self._sp_,
771 self._element_list__s3_,
772 lambda: self._succeed([self._get('v')] + self._get('vs')),
773 ]
774 )
775 self._pop('element_list')
777 def _element_list__s1_(self):
778 self._bind(lambda: self._star(self._element_list__s1_l_p_), 'vs')
780 def _element_list__s1_l_p_(self):
781 self._seq([self._sp_, lambda: self._ch(','), self._sp_, self._value_])
783 def _element_list__s3_(self):
784 self._opt(lambda: self._ch(','))
786 def _member_list_(self):
787 self._push('member_list')
788 self._seq(
789 [
790 lambda: self._bind(self._member_, 'm'),
791 self._member_list__s1_,
792 self._sp_,
793 self._member_list__s3_,
794 lambda: self._succeed([self._get('m')] + self._get('ms')),
795 ]
796 )
797 self._pop('member_list')
799 def _member_list__s1_(self):
800 self._bind(lambda: self._star(self._member_list__s1_l_p_), 'ms')
802 def _member_list__s1_l_p_(self):
803 self._seq([self._sp_, lambda: self._ch(','), self._sp_, self._member_])
805 def _member_list__s3_(self):
806 self._opt(lambda: self._ch(','))
808 def _member_(self):
809 self._choose([self._member__c0_, self._member__c1_])
811 def _member__c0_(self):
812 self._push('member__c0')
813 self._seq(
814 [
815 lambda: self._bind(self._string_, 'k'),
816 self._sp_,
817 lambda: self._ch(':'),
818 self._sp_,
819 lambda: self._bind(self._value_, 'v'),
820 lambda: self._succeed([self._get('k'), self._get('v')]),
821 ]
822 )
823 self._pop('member__c0')
825 def _member__c1_(self):
826 self._push('member__c1')
827 self._seq(
828 [
829 lambda: self._bind(self._ident_, 'k'),
830 self._sp_,
831 lambda: self._ch(':'),
832 self._sp_,
833 lambda: self._bind(self._value_, 'v'),
834 lambda: self._succeed([self._get('k'), self._get('v')]),
835 ]
836 )
837 self._pop('member__c1')
839 def _ident_(self):
840 self._push('ident')
841 self._seq(
842 [
843 lambda: self._bind(self._id_start_, 'hd'),
844 self._ident__s1_,
845 lambda: self._succeed(
846 self._join('', [self._get('hd')] + self._get('tl'))
847 ),
848 ]
849 )
850 self._pop('ident')
852 def _ident__s1_(self):
853 self._bind(lambda: self._star(self._id_continue_), 'tl')
855 def _id_start_(self):
856 self._choose(
857 [self._ascii_id_start_, self._other_id_start_, self._id_start__c2_]
858 )
860 def _id_start__c2_(self):
861 self._seq([self._bslash_, self._id_esc_start_])
863 def _id_esc_start_(self):
864 self._choose(
865 [
866 self._id_esc_start__c0_,
867 self._id_esc_start__c1_,
868 self._id_esc_start__c2_,
869 self._id_esc_start__c3_,
870 self._id_esc_start__c4_,
871 self._id_esc_start__c5_,
872 self._id_esc_start__c6_,
873 self._id_esc_start__c7_,
874 ]
875 )
877 def _id_esc_start__c0_(self):
878 self._seq([self._id_esc_start__c0__s0_, self._unicode_esc_])
880 def _id_esc_start__c0__s0_(self):
881 self._not(lambda: self._not(self._id_esc_start__c0__s0_n_n_))
883 def _id_esc_start__c0__s0_n_n_(self):
884 (lambda: self._choose([self._id_esc_start__c0__s0_n_n_g__c0_]))()
886 def _id_esc_start__c0__s0_n_n_g__c0_(self):
887 self._seq(
888 [
889 lambda: self._ch('u'),
890 lambda: (self._id_esc_start__c0__s0_n_n_g__c0__s1_g_)(),
891 ]
892 )
894 def _id_esc_start__c0__s0_n_n_g__c0__s1_g_(self):
895 self._choose(
896 [
897 self._id_esc_start__c0__s0_n_n_g__c0__s1_g__c0_,
898 self._id_esc_start__c0__s0_n_n_g__c0__s1_g__c1_,
899 self._id_esc_start__c0__s0_n_n_g__c0__s1_g__c2_,
900 ]
901 )
903 def _id_esc_start__c0__s0_n_n_g__c0__s1_g__c0_(self):
904 self._seq([lambda: self._str('0024')])
906 def _id_esc_start__c0__s0_n_n_g__c0__s1_g__c1_(self):
907 self._seq([lambda: self._str('005F')])
909 def _id_esc_start__c0__s0_n_n_g__c0__s1_g__c2_(self):
910 self._seq([lambda: self._str('005f')])
912 def _id_esc_start__c1_(self):
913 self._push('id_esc_start__c1')
914 self._seq(
915 [
916 lambda: self._bind(self._unicode_esc_, 'x'),
917 self._id_esc_start__c1__s1_,
918 lambda: self._succeed(self._get('x')),
919 ]
920 )
921 self._pop('id_esc_start__c1')
923 def _id_esc_start__c1__s1_(self):
924 v = self._is_unicat(self._get('x'), 'Ll')
925 if v:
926 self._succeed(v)
927 else:
928 self._fail()
930 def _id_esc_start__c2_(self):
931 self._push('id_esc_start__c2')
932 self._seq(
933 [
934 lambda: self._bind(self._unicode_esc_, 'x'),
935 self._id_esc_start__c2__s1_,
936 lambda: self._succeed(self._get('x')),
937 ]
938 )
939 self._pop('id_esc_start__c2')
941 def _id_esc_start__c2__s1_(self):
942 v = self._is_unicat(self._get('x'), 'Lm')
943 if v:
944 self._succeed(v)
945 else:
946 self._fail()
948 def _id_esc_start__c3_(self):
949 self._push('id_esc_start__c3')
950 self._seq(
951 [
952 lambda: self._bind(self._unicode_esc_, 'x'),
953 self._id_esc_start__c3__s1_,
954 lambda: self._succeed(self._get('x')),
955 ]
956 )
957 self._pop('id_esc_start__c3')
959 def _id_esc_start__c3__s1_(self):
960 v = self._is_unicat(self._get('x'), 'Lo')
961 if v:
962 self._succeed(v)
963 else:
964 self._fail()
966 def _id_esc_start__c4_(self):
967 self._push('id_esc_start__c4')
968 self._seq(
969 [
970 lambda: self._bind(self._unicode_esc_, 'x'),
971 self._id_esc_start__c4__s1_,
972 lambda: self._succeed(self._get('x')),
973 ]
974 )
975 self._pop('id_esc_start__c4')
977 def _id_esc_start__c4__s1_(self):
978 v = self._is_unicat(self._get('x'), 'Lt')
979 if v:
980 self._succeed(v)
981 else:
982 self._fail()
984 def _id_esc_start__c5_(self):
985 self._push('id_esc_start__c5')
986 self._seq(
987 [
988 lambda: self._bind(self._unicode_esc_, 'x'),
989 self._id_esc_start__c5__s1_,
990 lambda: self._succeed(self._get('x')),
991 ]
992 )
993 self._pop('id_esc_start__c5')
995 def _id_esc_start__c5__s1_(self):
996 v = self._is_unicat(self._get('x'), 'Lu')
997 if v:
998 self._succeed(v)
999 else:
1000 self._fail()
1002 def _id_esc_start__c6_(self):
1003 self._push('id_esc_start__c6')
1004 self._seq(
1005 [
1006 lambda: self._bind(self._unicode_esc_, 'x'),
1007 self._id_esc_start__c6__s1_,
1008 lambda: self._succeed(self._get('x')),
1009 ]
1010 )
1011 self._pop('id_esc_start__c6')
1013 def _id_esc_start__c6__s1_(self):
1014 v = self._is_unicat(self._get('x'), 'Nl')
1015 if v:
1016 self._succeed(v)
1017 else:
1018 self._fail()
1020 def _id_esc_start__c7_(self):
1021 self._push('id_esc_start__c7')
1022 self._seq(
1023 [
1024 lambda: self._bind(self._unicode_esc_, 'x'),
1025 self._id_esc_start__c7__s1_,
1026 lambda: self._succeed(self._get('x')),
1027 ]
1028 )
1029 self._pop('id_esc_start__c7')
1031 def _id_esc_start__c7__s1_(self):
1032 v = self._is_unicat(self._get('x'), 'Cs')
1033 if v:
1034 self._succeed(v)
1035 else:
1036 self._fail()
1038 def _ascii_id_start_(self):
1039 self._choose(
1040 [
1041 self._ascii_id_start__c0_,
1042 self._ascii_id_start__c1_,
1043 self._ascii_id_start__c2_,
1044 self._ascii_id_start__c3_,
1045 ]
1046 )
1048 def _ascii_id_start__c0_(self):
1049 self._range('a', 'z')
1051 def _ascii_id_start__c1_(self):
1052 self._range('A', 'Z')
1054 def _ascii_id_start__c2_(self):
1055 self._ch('$')
1057 def _ascii_id_start__c3_(self):
1058 self._ch('_')
1060 def _other_id_start_(self):
1061 self._choose(
1062 [
1063 self._other_id_start__c0_,
1064 self._other_id_start__c1_,
1065 self._other_id_start__c2_,
1066 self._other_id_start__c3_,
1067 self._other_id_start__c4_,
1068 self._other_id_start__c5_,
1069 ]
1070 )
1072 def _other_id_start__c0_(self):
1073 self._push('other_id_start__c0')
1074 self._seq(
1075 [
1076 lambda: self._bind(self._anything_, 'x'),
1077 self._other_id_start__c0__s1_,
1078 lambda: self._succeed(self._get('x')),
1079 ]
1080 )
1081 self._pop('other_id_start__c0')
1083 def _other_id_start__c0__s1_(self):
1084 v = self._is_unicat(self._get('x'), 'Ll')
1085 if v:
1086 self._succeed(v)
1087 else:
1088 self._fail()
1090 def _other_id_start__c1_(self):
1091 self._push('other_id_start__c1')
1092 self._seq(
1093 [
1094 lambda: self._bind(self._anything_, 'x'),
1095 self._other_id_start__c1__s1_,
1096 lambda: self._succeed(self._get('x')),
1097 ]
1098 )
1099 self._pop('other_id_start__c1')
1101 def _other_id_start__c1__s1_(self):
1102 v = self._is_unicat(self._get('x'), 'Lm')
1103 if v:
1104 self._succeed(v)
1105 else:
1106 self._fail()
1108 def _other_id_start__c2_(self):
1109 self._push('other_id_start__c2')
1110 self._seq(
1111 [
1112 lambda: self._bind(self._anything_, 'x'),
1113 self._other_id_start__c2__s1_,
1114 lambda: self._succeed(self._get('x')),
1115 ]
1116 )
1117 self._pop('other_id_start__c2')
1119 def _other_id_start__c2__s1_(self):
1120 v = self._is_unicat(self._get('x'), 'Lo')
1121 if v:
1122 self._succeed(v)
1123 else:
1124 self._fail()
1126 def _other_id_start__c3_(self):
1127 self._push('other_id_start__c3')
1128 self._seq(
1129 [
1130 lambda: self._bind(self._anything_, 'x'),
1131 self._other_id_start__c3__s1_,
1132 lambda: self._succeed(self._get('x')),
1133 ]
1134 )
1135 self._pop('other_id_start__c3')
1137 def _other_id_start__c3__s1_(self):
1138 v = self._is_unicat(self._get('x'), 'Lt')
1139 if v:
1140 self._succeed(v)
1141 else:
1142 self._fail()
1144 def _other_id_start__c4_(self):
1145 self._push('other_id_start__c4')
1146 self._seq(
1147 [
1148 lambda: self._bind(self._anything_, 'x'),
1149 self._other_id_start__c4__s1_,
1150 lambda: self._succeed(self._get('x')),
1151 ]
1152 )
1153 self._pop('other_id_start__c4')
1155 def _other_id_start__c4__s1_(self):
1156 v = self._is_unicat(self._get('x'), 'Lu')
1157 if v:
1158 self._succeed(v)
1159 else:
1160 self._fail()
1162 def _other_id_start__c5_(self):
1163 self._push('other_id_start__c5')
1164 self._seq(
1165 [
1166 lambda: self._bind(self._anything_, 'x'),
1167 self._other_id_start__c5__s1_,
1168 lambda: self._succeed(self._get('x')),
1169 ]
1170 )
1171 self._pop('other_id_start__c5')
1173 def _other_id_start__c5__s1_(self):
1174 v = self._is_unicat(self._get('x'), 'Nl')
1175 if v:
1176 self._succeed(v)
1177 else:
1178 self._fail()
1180 def _id_continue_(self):
1181 self._choose(
1182 [
1183 self._ascii_id_start_,
1184 self._digit_,
1185 self._other_id_start_,
1186 self._id_continue__c3_,
1187 self._id_continue__c4_,
1188 self._id_continue__c5_,
1189 self._id_continue__c6_,
1190 self._id_continue__c7_,
1191 self._id_continue__c8_,
1192 self._id_continue__c9_,
1193 ]
1194 )
1196 def _id_continue__c3_(self):
1197 self._push('id_continue__c3')
1198 self._seq(
1199 [
1200 lambda: self._bind(self._anything_, 'x'),
1201 self._id_continue__c3__s1_,
1202 lambda: self._succeed(self._get('x')),
1203 ]
1204 )
1205 self._pop('id_continue__c3')
1207 def _id_continue__c3__s1_(self):
1208 v = self._is_unicat(self._get('x'), 'Mn')
1209 if v:
1210 self._succeed(v)
1211 else:
1212 self._fail()
1214 def _id_continue__c4_(self):
1215 self._push('id_continue__c4')
1216 self._seq(
1217 [
1218 lambda: self._bind(self._anything_, 'x'),
1219 self._id_continue__c4__s1_,
1220 lambda: self._succeed(self._get('x')),
1221 ]
1222 )
1223 self._pop('id_continue__c4')
1225 def _id_continue__c4__s1_(self):
1226 v = self._is_unicat(self._get('x'), 'Mc')
1227 if v:
1228 self._succeed(v)
1229 else:
1230 self._fail()
1232 def _id_continue__c5_(self):
1233 self._push('id_continue__c5')
1234 self._seq(
1235 [
1236 lambda: self._bind(self._anything_, 'x'),
1237 self._id_continue__c5__s1_,
1238 lambda: self._succeed(self._get('x')),
1239 ]
1240 )
1241 self._pop('id_continue__c5')
1243 def _id_continue__c5__s1_(self):
1244 v = self._is_unicat(self._get('x'), 'Nd')
1245 if v:
1246 self._succeed(v)
1247 else:
1248 self._fail()
1250 def _id_continue__c6_(self):
1251 self._push('id_continue__c6')
1252 self._seq(
1253 [
1254 lambda: self._bind(self._anything_, 'x'),
1255 self._id_continue__c6__s1_,
1256 lambda: self._succeed(self._get('x')),
1257 ]
1258 )
1259 self._pop('id_continue__c6')
1261 def _id_continue__c6__s1_(self):
1262 v = self._is_unicat(self._get('x'), 'Pc')
1263 if v:
1264 self._succeed(v)
1265 else:
1266 self._fail()
1268 def _id_continue__c7_(self):
1269 self._seq([self._bslash_, self._id_esc_continue_])
1271 def _id_continue__c8_(self):
1272 self._ch('\u200c')
1274 def _id_continue__c9_(self):
1275 self._ch('\u200d')
1277 def _id_esc_continue_(self):
1278 self._choose(
1279 [
1280 self._id_esc_start_,
1281 self._id_esc_continue__c1_,
1282 self._id_esc_continue__c2_,
1283 self._id_esc_continue__c3_,
1284 self._id_esc_continue__c4_,
1285 self._id_esc_continue__c5_,
1286 ]
1287 )
1289 def _id_esc_continue__c1_(self):
1290 self._push('id_esc_continue__c1')
1291 self._seq(
1292 [
1293 lambda: self._bind(self._unicode_esc_, 'x'),
1294 self._id_esc_continue__c1__s1_,
1295 lambda: self._succeed(self._get('x')),
1296 ]
1297 )
1298 self._pop('id_esc_continue__c1')
1300 def _id_esc_continue__c1__s1_(self):
1301 v = self._is_unicat(self._get('x'), 'Mn')
1302 if v:
1303 self._succeed(v)
1304 else:
1305 self._fail()
1307 def _id_esc_continue__c2_(self):
1308 self._push('id_esc_continue__c2')
1309 self._seq(
1310 [
1311 lambda: self._bind(self._unicode_esc_, 'x'),
1312 self._id_esc_continue__c2__s1_,
1313 lambda: self._succeed(self._get('x')),
1314 ]
1315 )
1316 self._pop('id_esc_continue__c2')
1318 def _id_esc_continue__c2__s1_(self):
1319 v = self._is_unicat(self._get('x'), 'Mc')
1320 if v:
1321 self._succeed(v)
1322 else:
1323 self._fail()
1325 def _id_esc_continue__c3_(self):
1326 self._push('id_esc_continue__c3')
1327 self._seq(
1328 [
1329 lambda: self._bind(self._unicode_esc_, 'x'),
1330 self._id_esc_continue__c3__s1_,
1331 lambda: self._succeed(self._get('x')),
1332 ]
1333 )
1334 self._pop('id_esc_continue__c3')
1336 def _id_esc_continue__c3__s1_(self):
1337 v = self._is_unicat(self._get('x'), 'Nd')
1338 if v:
1339 self._succeed(v)
1340 else:
1341 self._fail()
1343 def _id_esc_continue__c4_(self):
1344 self._push('id_esc_continue__c4')
1345 self._seq(
1346 [
1347 lambda: self._bind(self._unicode_esc_, 'x'),
1348 self._id_esc_continue__c4__s1_,
1349 lambda: self._succeed(self._get('x')),
1350 ]
1351 )
1352 self._pop('id_esc_continue__c4')
1354 def _id_esc_continue__c4__s1_(self):
1355 v = self._is_unicat(self._get('x'), 'Pc')
1356 if v:
1357 self._succeed(v)
1358 else:
1359 self._fail()
1361 def _id_esc_continue__c5_(self):
1362 self._seq([self._id_esc_continue__c5__s0_, self._unicode_esc_])
1364 def _id_esc_continue__c5__s0_(self):
1365 self._not(lambda: self._not(self._id_esc_continue__c5__s0_n_n_))
1367 def _id_esc_continue__c5__s0_n_n_(self):
1368 (lambda: self._choose([self._id_esc_continue__c5__s0_n_n_g__c0_]))()
1370 def _id_esc_continue__c5__s0_n_n_g__c0_(self):
1371 self._seq(
1372 [
1373 lambda: self._ch('u'),
1374 lambda: (self._id_esc_continue__c5__s0_n_n_g__c0__s1_g_)(),
1375 ]
1376 )
1378 def _id_esc_continue__c5__s0_n_n_g__c0__s1_g_(self):
1379 self._choose(
1380 [
1381 self._id_esc_continue__c5__s0_n_n_g__c0__s1_g__c0_,
1382 self._id_esc_continue__c5__s0_n_n_g__c0__s1_g__c1_,
1383 self._id_esc_continue__c5__s0_n_n_g__c0__s1_g__c2_,
1384 self._id_esc_continue__c5__s0_n_n_g__c0__s1_g__c3_,
1385 ]
1386 )
1388 def _id_esc_continue__c5__s0_n_n_g__c0__s1_g__c0_(self):
1389 self._seq([lambda: self._str('200C')])
1391 def _id_esc_continue__c5__s0_n_n_g__c0__s1_g__c1_(self):
1392 self._seq([lambda: self._str('200c')])
1394 def _id_esc_continue__c5__s0_n_n_g__c0__s1_g__c2_(self):
1395 self._seq([lambda: self._str('200D')])
1397 def _id_esc_continue__c5__s0_n_n_g__c0__s1_g__c3_(self):
1398 self._seq([lambda: self._str('200d')])
1400 def _num_literal_(self):
1401 self._choose(
1402 [
1403 self._num_literal__c0_,
1404 self._num_literal__c1_,
1405 self._num_literal__c2_,
1406 ]
1407 )
1409 def _num_literal__c0_(self):
1410 self._push('num_literal__c0')
1411 self._seq(
1412 [
1413 lambda: self._ch('-'),
1414 lambda: self._bind(self._unsigned_lit_, 'n'),
1415 lambda: self._succeed('-' + self._get('n')),
1416 ]
1417 )
1418 self._pop('num_literal__c0')
1420 def _num_literal__c1_(self):
1421 self._push('num_literal__c1')
1422 self._seq(
1423 [
1424 lambda: self._ch('+'),
1425 lambda: self._bind(self._unsigned_lit_, 'n'),
1426 lambda: self._succeed('+' + self._get('n')),
1427 ]
1428 )
1429 self._pop('num_literal__c1')
1431 def _num_literal__c2_(self):
1432 self._push('num_literal__c2')
1433 self._seq(
1434 [
1435 lambda: self._bind(self._unsigned_lit_, 'n'),
1436 lambda: self._succeed(self._get('n')),
1437 ]
1438 )
1439 self._pop('num_literal__c2')
1441 def _unsigned_lit_(self):
1442 self._choose(
1443 [
1444 self._unsigned_lit__c0_,
1445 self._hex_literal_,
1446 self._unsigned_lit__c2_,
1447 self._unsigned_lit__c3_,
1448 ]
1449 )
1451 def _unsigned_lit__c0_(self):
1452 self._push('unsigned_lit__c0')
1453 self._seq(
1454 [
1455 lambda: self._bind(self._dec_literal_, 'd'),
1456 lambda: self._not(self._id_start_),
1457 lambda: self._succeed(self._get('d')),
1458 ]
1459 )
1460 self._pop('unsigned_lit__c0')
1462 def _unsigned_lit__c2_(self):
1463 self._str('Infinity')
1465 def _unsigned_lit__c3_(self):
1466 self._str('NaN')
1468 def _dec_literal_(self):
1469 self._choose(
1470 [
1471 self._dec_literal__c0_,
1472 self._dec_literal__c1_,
1473 self._dec_literal__c2_,
1474 self._dec_literal__c3_,
1475 self._dec_literal__c4_,
1476 self._dec_literal__c5_,
1477 ]
1478 )
1480 def _dec_literal__c0_(self):
1481 self._push('dec_literal__c0')
1482 self._seq(
1483 [
1484 lambda: self._bind(self._dec_int_lit_, 'd'),
1485 lambda: self._bind(self._frac_, 'f'),
1486 lambda: self._bind(self._exp_, 'e'),
1487 lambda: self._succeed(
1488 self._get('d') + self._get('f') + self._get('e')
1489 ),
1490 ]
1491 )
1492 self._pop('dec_literal__c0')
1494 def _dec_literal__c1_(self):
1495 self._push('dec_literal__c1')
1496 self._seq(
1497 [
1498 lambda: self._bind(self._dec_int_lit_, 'd'),
1499 lambda: self._bind(self._frac_, 'f'),
1500 lambda: self._succeed(self._get('d') + self._get('f')),
1501 ]
1502 )
1503 self._pop('dec_literal__c1')
1505 def _dec_literal__c2_(self):
1506 self._push('dec_literal__c2')
1507 self._seq(
1508 [
1509 lambda: self._bind(self._dec_int_lit_, 'd'),
1510 lambda: self._bind(self._exp_, 'e'),
1511 lambda: self._succeed(self._get('d') + self._get('e')),
1512 ]
1513 )
1514 self._pop('dec_literal__c2')
1516 def _dec_literal__c3_(self):
1517 self._push('dec_literal__c3')
1518 self._seq(
1519 [
1520 lambda: self._bind(self._dec_int_lit_, 'd'),
1521 lambda: self._succeed(self._get('d')),
1522 ]
1523 )
1524 self._pop('dec_literal__c3')
1526 def _dec_literal__c4_(self):
1527 self._push('dec_literal__c4')
1528 self._seq(
1529 [
1530 lambda: self._bind(self._lead_frac_, 'f'),
1531 lambda: self._bind(self._exp_, 'e'),
1532 lambda: self._succeed(self._get('f') + self._get('e')),
1533 ]
1534 )
1535 self._pop('dec_literal__c4')
1537 def _dec_literal__c5_(self):
1538 self._push('dec_literal__c5')
1539 self._seq(
1540 [
1541 lambda: self._bind(self._lead_frac_, 'f'),
1542 lambda: self._succeed(self._get('f')),
1543 ]
1544 )
1545 self._pop('dec_literal__c5')
1547 def _dec_int_lit_(self):
1548 self._choose([self._dec_int_lit__c0_, self._dec_int_lit__c1_])
1550 def _dec_int_lit__c0_(self):
1551 self._seq(
1552 [
1553 lambda: self._ch('0'),
1554 lambda: self._not(self._digit_),
1555 lambda: self._succeed('0'),
1556 ]
1557 )
1559 def _dec_int_lit__c1_(self):
1560 self._push('dec_int_lit__c1')
1561 self._seq(
1562 [
1563 lambda: self._bind(self._nonzerodigit_, 'd'),
1564 self._dec_int_lit__c1__s1_,
1565 lambda: self._succeed(
1566 self._get('d') + self._join('', self._get('ds'))
1567 ),
1568 ]
1569 )
1570 self._pop('dec_int_lit__c1')
1572 def _dec_int_lit__c1__s1_(self):
1573 self._bind(lambda: self._star(self._digit_), 'ds')
1575 def _digit_(self):
1576 self._range('0', '9')
1578 def _nonzerodigit_(self):
1579 self._range('1', '9')
1581 def _hex_literal_(self):
1582 self._push('hex_literal')
1583 self._seq(
1584 [
1585 self._hex_literal__s0_,
1586 self._hex_literal__s1_,
1587 lambda: self._succeed('0x' + self._join('', self._get('hs'))),
1588 ]
1589 )
1590 self._pop('hex_literal')
1592 def _hex_literal__s0_(self):
1593 self._choose([lambda: self._str('0x'), lambda: self._str('0X')])
1595 def _hex_literal__s1_(self):
1596 self._bind(lambda: self._plus(self._hex_), 'hs')
1598 def _hex_(self):
1599 self._choose([self._hex__c0_, self._hex__c1_, self._digit_])
1601 def _hex__c0_(self):
1602 self._range('a', 'f')
1604 def _hex__c1_(self):
1605 self._range('A', 'F')
1607 def _frac_(self):
1608 self._push('frac')
1609 self._seq(
1610 [
1611 lambda: self._ch('.'),
1612 self._frac__s1_,
1613 lambda: self._succeed('.' + self._join('', self._get('ds'))),
1614 ]
1615 )
1616 self._pop('frac')
1618 def _frac__s1_(self):
1619 self._bind(lambda: self._star(self._digit_), 'ds')
1621 def _lead_frac_(self):
1622 self._push('lead_frac')
1623 self._seq(
1624 [
1625 lambda: self._ch('.'),
1626 self._lead_frac__s1_,
1627 lambda: self._succeed('.' + self._join('', self._get('ds'))),
1628 ]
1629 )
1630 self._pop('lead_frac')
1632 def _lead_frac__s1_(self):
1633 self._bind(lambda: self._plus(self._digit_), 'ds')
1635 def _exp_(self):
1636 self._choose([self._exp__c0_, self._exp__c1_])
1638 def _exp__c0_(self):
1639 self._push('exp__c0')
1640 self._seq(
1641 [
1642 lambda: self._bind(self._exp__c0__s0_l_, 'm'),
1643 lambda: self._bind(self._exp__c0__s1_l_, 's'),
1644 self._exp__c0__s2_,
1645 lambda: self._succeed(
1646 self._get('m')
1647 + self._get('s')
1648 + self._join('', self._get('ds'))
1649 ),
1650 ]
1651 )
1652 self._pop('exp__c0')
1654 def _exp__c0__s0_l_(self):
1655 self._choose([lambda: self._ch('e'), lambda: self._ch('E')])
1657 def _exp__c0__s1_l_(self):
1658 self._choose([lambda: self._ch('+'), lambda: self._ch('-')])
1660 def _exp__c0__s2_(self):
1661 self._bind(lambda: self._plus(self._digit_), 'ds')
1663 def _exp__c1_(self):
1664 self._push('exp__c1')
1665 self._seq(
1666 [
1667 lambda: self._bind(self._exp__c1__s0_l_, 'm'),
1668 self._exp__c1__s1_,
1669 lambda: self._succeed(
1670 self._get('m') + self._join('', self._get('ds'))
1671 ),
1672 ]
1673 )
1674 self._pop('exp__c1')
1676 def _exp__c1__s0_l_(self):
1677 self._choose([lambda: self._ch('e'), lambda: self._ch('E')])
1679 def _exp__c1__s1_(self):
1680 self._bind(lambda: self._plus(self._digit_), 'ds')
1682 def _anything_(self):
1683 if self.pos < self.end:
1684 self._succeed(self.msg[self.pos], self.pos + 1)
1685 else:
1686 self._fail()
1688 def _end_(self):
1689 if self.pos == self.end:
1690 self._succeed(None)
1691 else:
1692 self._fail()