# pylint: disable=line-too-long

import sys


if sys.version_info[0] < 3:
    # pylint: disable=redefined-builtin
    chr = unichr
    range = xrange
    str = unicode


class Parser(object):
    def __init__(self, msg, fname):
        self.msg = str(msg)
        self.end = len(self.msg)
        self.fname = fname
        self.val = None
        self.pos = 0
        self.failed = False
        self.errpos = 0
        self._scopes = []
        self._cache = {}

    def parse(self):
        self._grammar_()
        if self.failed:
            return None, self._err_str(), self.errpos
        return self.val, None, self.pos

    def _err_str(self):
        lineno, colno = self._err_offsets()
        if self.errpos == len(self.msg):
            thing = 'end of input'
        else:
            thing = '"%s"' % self.msg[self.errpos]
        return '%s:%d Unexpected %s at column %d' % (
            self.fname, lineno, thing, colno)

    def _err_offsets(self):
        lineno = 1
        colno = 1
        for i in range(self.errpos):
            if self.msg[i] == '\n':
                lineno += 1
                colno = 1
            else:
                colno += 1
        return lineno, colno

    def _succeed(self, v, newpos=None):
        self.val = v
        self.failed = False
        if newpos is not None:
            self.pos = newpos

    def _fail(self):
        self.val = None
        self.failed = True
        if self.pos >= self.errpos:
            self.errpos = self.pos

    def _rewind(self, newpos):
        self._succeed(None, newpos)

    def _bind(self, rule, var):
        rule()
        if not self.failed:
            self._set(var, self.val)

    def _not(self, rule):
        p = self.pos
        rule()
        if self.failed:
            self._succeed(None, p)
        else:
            self._rewind(p)
            self._fail()

    def _opt(self, rule):
        p = self.pos
        rule()
        if self.failed:
            self._succeed([], p)
        else:
            self._succeed([self.val])

    def _plus(self, rule):
        vs = []
        rule()
        vs.append(self.val)
        if self.failed:
            return
        self._star(rule, vs)

    def _star(self, rule, vs=None):
        vs = vs or []
        while not self.failed:
            p = self.pos
            rule()
            if self.failed:
                self._rewind(p)
                break
            else:
                vs.append(self.val)
        self._succeed(vs)

    def _seq(self, rules):
        for rule in rules:
            rule()
            if self.failed:
                return

    def _choose(self, rules):
        p = self.pos
        for rule in rules[:-1]:
            rule()
            if not self.failed:
                return
            self._rewind(p)
        rules[-1]()

    def _ch(self, ch):
        p = self.pos
        if p < self.end and self.msg[p] == ch:
            self._succeed(ch, self.pos + 1)
        else:
            self._fail()

    def _str(self, s, l):
        p = self.pos
        if (p + l <= self.end) and self.msg[p:p + l] == s:
            self._succeed(s, self.pos + l)
        else:
            self._fail()

    def _range(self, i, j):
        p = self.pos
        if p != self.end and ord(i) <= ord(self.msg[p]) <= ord(j):
            self._succeed(self.msg[p], self.pos + 1)
        else:
            self._fail()

    def _push(self, name):
        self._scopes.append((name, {}))

    def _pop(self, name):
        actual_name, _ = self._scopes.pop()
        assert name == actual_name

    def _get(self, var):
        return self._scopes[-1][1][var]

    def _set(self, var, val):
        self._scopes[-1][1][var] = val

    def _is_unicat(self, var, cat):
        import unicodedata
        return unicodedata.category(var) == cat

    def _join(self, s, vs):
        return s.join(vs)

    def _xtou(self, s):
        return chr(int(s, base=16))

    def _grammar_(self):
        self._push('grammar')
        self._seq([self._sp_, lambda: self._bind(self._value_, 'v'), self._sp_,
                   self._end_, lambda: self._succeed(self._get('v'))])
        self._pop('grammar')

    def _sp_(self):
        self._star(self._ws_)

    def _ws_(self):
        self._choose([self._ws__c0_, self._eol_, self._comment_, self._ws__c3_,
                      self._ws__c4_, self._ws__c5_, self._ws__c6_,
                      self._ws__c7_, self._ws__c8_])

    def _ws__c0_(self):
        self._ch(' ')

    def _ws__c3_(self):
        self._ch('\t')

    def _ws__c4_(self):
        self._ch('\v')

    def _ws__c5_(self):
        self._ch('\f')

    def _ws__c6_(self):
        self._ch('\u00a0')

    def _ws__c7_(self):
        self._ch(u'\ufeff')

    def _ws__c8_(self):
        self._push('ws__c8')
        self._seq([lambda: self._bind(self._anything_, 'x'), self._ws__c8__s1_,
                   lambda: self._succeed(self._get('x'))])
        self._pop('ws__c8')

    def _ws__c8__s1_(self):
        v = self._is_unicat(self._get('x'), 'Zs')
        if v:
            self._succeed(v)
        else:
            self._fail()

    def _eol_(self):
        self._choose([self._eol__c0_, self._eol__c1_, self._eol__c2_,
                      self._eol__c3_, self._eol__c4_])

    def _eol__c0_(self):
        self._seq([lambda: self._ch('\r'), lambda: self._ch('\n')])

    def _eol__c1_(self):
        self._ch('\r')

    def _eol__c2_(self):
        self._ch('\n')

    def _eol__c3_(self):
        self._ch(u'\u2028')

    def _eol__c4_(self):
        self._ch(u'\u2029')

    def _comment_(self):
        self._choose([self._comment__c0_, self._comment__c1_])

    def _comment__c0_(self):
        self._seq([lambda: self._str('//', 2),
                   lambda: self._star(self._comment__c0__s1_p_)])

    def _comment__c0__s1_p_(self):
        self._seq([lambda: self._not(self._eol_), self._anything_])

    def _comment__c1_(self):
        self._seq([lambda: self._str('/*', 2), self._comment__c1__s1_,
                   lambda: self._str('*/', 2)])

    def _comment__c1__s1_(self):
        self._star(lambda: self._seq([self._comment__c1__s1_p__s0_, self._anything_]))

    def _comment__c1__s1_p__s0_(self):
        self._not(lambda: self._str('*/', 2))

    def _value_(self):
        self._choose([self._value__c0_, self._value__c1_, self._value__c2_,
                      self._value__c3_, self._value__c4_, self._value__c5_,
                      self._value__c6_])

    def _value__c0_(self):
        self._seq([lambda: self._str('null', 4), lambda: self._succeed('None')])

    def _value__c1_(self):
        self._seq([lambda: self._str('true', 4), lambda: self._succeed('True')])

    def _value__c2_(self):
        self._seq([lambda: self._str('false', 5),
                   lambda: self._succeed('False')])

    def _value__c3_(self):
        self._push('value__c3')
        self._seq([lambda: self._bind(self._object_, 'v'),
                   lambda: self._succeed(['object', self._get('v')])])
        self._pop('value__c3')

    def _value__c4_(self):
        self._push('value__c4')
        self._seq([lambda: self._bind(self._array_, 'v'),
                   lambda: self._succeed(['array', self._get('v')])])
        self._pop('value__c4')

    def _value__c5_(self):
        self._push('value__c5')
        self._seq([lambda: self._bind(self._string_, 'v'),
                   lambda: self._succeed(['string', self._get('v')])])
        self._pop('value__c5')

    def _value__c6_(self):
        self._push('value__c6')
        self._seq([lambda: self._bind(self._num_literal_, 'v'),
                   lambda: self._succeed(['number', self._get('v')])])
        self._pop('value__c6')

    def _object_(self):
        self._choose([self._object__c0_, self._object__c1_])

    def _object__c0_(self):
        self._push('object__c0')
        self._seq([lambda: self._ch('{'), self._sp_,
                   lambda: self._bind(self._member_list_, 'v'), self._sp_,
                   lambda: self._ch('}'), lambda: self._succeed(self._get('v'))])
        self._pop('object__c0')

    def _object__c1_(self):
        self._seq([lambda: self._ch('{'), self._sp_, lambda: self._ch('}'),
                   lambda: self._succeed([])])

    def _array_(self):
        self._choose([self._array__c0_, self._array__c1_])

    def _array__c0_(self):
        self._push('array__c0')
        self._seq([lambda: self._ch('['), self._sp_,
                   lambda: self._bind(self._element_list_, 'v'), self._sp_,
                   lambda: self._ch(']'), lambda: self._succeed(self._get('v'))])
        self._pop('array__c0')

    def _array__c1_(self):
        self._seq([lambda: self._ch('['), self._sp_, lambda: self._ch(']'),
                   lambda: self._succeed([])])

    def _string_(self):
        self._choose([self._string__c0_, self._string__c1_])

    def _string__c0_(self):
        self._push('string__c0')
        self._seq([self._squote_, self._string__c0__s1_, self._squote_,
                   lambda: self._succeed(self._join('', self._get('cs')))])
        self._pop('string__c0')

    def _string__c0__s1_(self):
        self._bind(lambda: self._star(self._sqchar_), 'cs')

    def _string__c1_(self):
        self._push('string__c1')
        self._seq([self._dquote_, self._string__c1__s1_, self._dquote_,
                   lambda: self._succeed(self._join('', self._get('cs')))])
        self._pop('string__c1')

    def _string__c1__s1_(self):
        self._bind(lambda: self._star(self._dqchar_), 'cs')

    def _sqchar_(self):
        self._choose([self._sqchar__c0_, self._sqchar__c1_, self._sqchar__c2_])

    def _sqchar__c0_(self):
        self._push('sqchar__c0')
        self._seq([self._bslash_, lambda: self._bind(self._esc_char_, 'c'),
                   lambda: self._succeed(self._get('c'))])
        self._pop('sqchar__c0')

    def _sqchar__c1_(self):
        self._seq([self._bslash_, self._eol_, lambda: self._succeed('')])

    def _sqchar__c2_(self):
        self._push('sqchar__c2')
        self._seq([lambda: self._not(self._bslash_),
                   lambda: self._not(self._squote_),
                   lambda: self._not(self._eol_),
                   lambda: self._bind(self._anything_, 'c'),
                   lambda: self._succeed(self._get('c'))])
        self._pop('sqchar__c2')

    def _dqchar_(self):
        self._choose([self._dqchar__c0_, self._dqchar__c1_, self._dqchar__c2_])

    def _dqchar__c0_(self):
        self._push('dqchar__c0')
        self._seq([self._bslash_, lambda: self._bind(self._esc_char_, 'c'),
                   lambda: self._succeed(self._get('c'))])
        self._pop('dqchar__c0')

    def _dqchar__c1_(self):
        self._seq([self._bslash_, self._eol_, lambda: self._succeed('')])

    def _dqchar__c2_(self):
        self._push('dqchar__c2')
        self._seq([lambda: self._not(self._bslash_),
                   lambda: self._not(self._dquote_),
                   lambda: self._not(self._eol_),
                   lambda: self._bind(self._anything_, 'c'),
                   lambda: self._succeed(self._get('c'))])
        self._pop('dqchar__c2')

    def _bslash_(self):
        self._ch('\\')

    def _squote_(self):
        self._ch("'")

    def _dquote_(self):
        self._ch('"')

    def _esc_char_(self):
        self._choose([self._esc_char__c0_, self._esc_char__c1_,
                      self._esc_char__c2_, self._esc_char__c3_,
                      self._esc_char__c4_, self._esc_char__c5_,
                      self._esc_char__c6_, self._esc_char__c7_,
                      self._esc_char__c8_, self._esc_char__c9_,
                      self._esc_char__c10_])

    def _esc_char__c0_(self):
        self._seq([lambda: self._ch('b'), lambda: self._succeed('\b')])

    def _esc_char__c1_(self):
        self._seq([lambda: self._ch('f'), lambda: self._succeed('\f')])

    def _esc_char__c10_(self):
        self._push('esc_char__c10')
        self._seq([lambda: self._bind(self._unicode_esc_, 'c'),
                   lambda: self._succeed(self._get('c'))])
        self._pop('esc_char__c10')

    def _esc_char__c2_(self):
        self._seq([lambda: self._ch('n'), lambda: self._succeed('\n')])

    def _esc_char__c3_(self):
        self._seq([lambda: self._ch('r'), lambda: self._succeed('\r')])

    def _esc_char__c4_(self):
        self._seq([lambda: self._ch('t'), lambda: self._succeed('\t')])

    def _esc_char__c5_(self):
        self._seq([lambda: self._ch('v'), lambda: self._succeed('\v')])

    def _esc_char__c6_(self):
        self._seq([self._squote_, lambda: self._succeed("'")])

    def _esc_char__c7_(self):
        self._seq([self._dquote_, lambda: self._succeed('"')])

    def _esc_char__c8_(self):
        self._seq([self._bslash_, lambda: self._succeed('\\')])

    def _esc_char__c9_(self):
        self._push('esc_char__c9')
        self._seq([lambda: self._bind(self._hex_esc_, 'c'),
                   lambda: self._succeed(self._get('c'))])
        self._pop('esc_char__c9')

    def _hex_esc_(self):
        self._push('hex_esc')
        self._seq([lambda: self._ch('x'), lambda: self._bind(self._hex_, 'h1'),
                   lambda: self._bind(self._hex_, 'h2'),
                   lambda: self._succeed(self._xtou(self._get('h1') + self._get('h2')))])
        self._pop('hex_esc')

    def _unicode_esc_(self):
        self._push('unicode_esc')
        self._seq([lambda: self._ch('u'), lambda: self._bind(self._hex_, 'a'),
                   lambda: self._bind(self._hex_, 'b'),
                   lambda: self._bind(self._hex_, 'c'),
                   lambda: self._bind(self._hex_, 'd'),
                   lambda: self._succeed(self._xtou(self._get('a') + self._get('b') + self._get('c') + self._get('d')))])
        self._pop('unicode_esc')

    def _element_list_(self):
        self._push('element_list')
        self._seq([lambda: self._bind(self._value_, 'v'),
                   self._element_list__s1_, self._sp_, self._element_list__s3_,
                   lambda: self._succeed([self._get('v')] + self._get('vs'))])
        self._pop('element_list')

    def _element_list__s1_(self):
        self._bind(lambda: self._star(self._element_list__s1_l_p_), 'vs')

    def _element_list__s1_l_p_(self):
        self._seq([self._sp_, lambda: self._ch(','), self._sp_, self._value_])

    def _element_list__s3_(self):
        self._opt(lambda: self._ch(','))

    def _member_list_(self):
        self._push('member_list')
        self._seq([lambda: self._bind(self._member_, 'm'),
                   self._member_list__s1_, self._sp_, self._member_list__s3_,
                   lambda: self._succeed([self._get('m')] + self._get('ms'))])
        self._pop('member_list')

    def _member_list__s1_(self):
        self._bind(lambda: self._star(self._member_list__s1_l_p_), 'ms')

    def _member_list__s1_l_p_(self):
        self._seq([self._sp_, lambda: self._ch(','), self._sp_, self._member_])

    def _member_list__s3_(self):
        self._opt(lambda: self._ch(','))

    def _member_(self):
        self._choose([self._member__c0_, self._member__c1_])

    def _member__c0_(self):
        self._push('member__c0')
        self._seq([lambda: self._bind(self._string_, 'k'), self._sp_,
                   lambda: self._ch(':'), self._sp_,
                   lambda: self._bind(self._value_, 'v'),
                   lambda: self._succeed([self._get('k'), self._get('v')])])
        self._pop('member__c0')

    def _member__c1_(self):
        self._push('member__c1')
        self._seq([lambda: self._bind(self._ident_, 'k'), self._sp_,
                   lambda: self._ch(':'), self._sp_,
                   lambda: self._bind(self._value_, 'v'),
                   lambda: self._succeed([self._get('k'), self._get('v')])])
        self._pop('member__c1')

    def _member_list_(self):
        self._push('member_list')
        self._seq([lambda: self._bind(self._member_, 'm'),
                   self._member_list__s1_, self._sp_, self._member_list__s3_,
                   lambda: self._succeed([self._get('m')] + self._get('ms'))])
        self._pop('member_list')

    def _member_list__s1_(self):
        self._bind(lambda: self._star(self._member_list__s1_l_p_), 'ms')

    def _member_list__s1_l_p_(self):
        self._seq([self._sp_, lambda: self._ch(','), self._sp_, self._member_])

    def _member_list__s3_(self):
        self._opt(lambda: self._ch(','))

    def _ident_(self):
        self._push('ident')
        self._seq([lambda: self._bind(self._id_start_, 'hd'), self._ident__s1_,
                   lambda: self._succeed(self._join('', [self._get('hd')] + self._get('tl')))])
        self._pop('ident')

    def _ident__s1_(self):
        self._bind(lambda: self._star(self._id_continue_), 'tl')

    def _id_start_(self):
        self._choose([self._ascii_id_start_, self._other_id_start_,
                      self._id_start__c2_])

    def _id_start__c2_(self):
        self._seq([self._bslash_, self._unicode_esc_])

    def _ascii_id_start_(self):
        self._choose([self._ascii_id_start__c0_, self._ascii_id_start__c1_,
                      self._ascii_id_start__c2_, self._ascii_id_start__c3_])

    def _ascii_id_start__c0_(self):
        self._range('a', 'z')

    def _ascii_id_start__c1_(self):
        self._range('A', 'Z')

    def _ascii_id_start__c2_(self):
        self._ch('$')

    def _ascii_id_start__c3_(self):
        self._ch('_')

    def _other_id_start_(self):
        self._choose([self._other_id_start__c0_, self._other_id_start__c1_,
                      self._other_id_start__c2_, self._other_id_start__c3_,
                      self._other_id_start__c4_, self._other_id_start__c5_])

    def _other_id_start__c0_(self):
        self._push('other_id_start__c0')
        self._seq([lambda: self._bind(self._anything_, 'x'),
                   self._other_id_start__c0__s1_,
                   lambda: self._succeed(self._get('x'))])
        self._pop('other_id_start__c0')

    def _other_id_start__c0__s1_(self):
        v = self._is_unicat(self._get('x'), 'Ll')
        if v:
            self._succeed(v)
        else:
            self._fail()

    def _other_id_start__c1_(self):
        self._push('other_id_start__c1')
        self._seq([lambda: self._bind(self._anything_, 'x'),
                   self._other_id_start__c1__s1_,
                   lambda: self._succeed(self._get('x'))])
        self._pop('other_id_start__c1')

    def _other_id_start__c1__s1_(self):
        v = self._is_unicat(self._get('x'), 'Lm')
        if v:
            self._succeed(v)
        else:
            self._fail()

    def _other_id_start__c2_(self):
        self._push('other_id_start__c2')
        self._seq([lambda: self._bind(self._anything_, 'x'),
                   self._other_id_start__c2__s1_,
                   lambda: self._succeed(self._get('x'))])
        self._pop('other_id_start__c2')

    def _other_id_start__c2__s1_(self):
        v = self._is_unicat(self._get('x'), 'Lo')
        if v:
            self._succeed(v)
        else:
            self._fail()

    def _other_id_start__c3_(self):
        self._push('other_id_start__c3')
        self._seq([lambda: self._bind(self._anything_, 'x'),
                   self._other_id_start__c3__s1_,
                   lambda: self._succeed(self._get('x'))])
        self._pop('other_id_start__c3')

    def _other_id_start__c3__s1_(self):
        v = self._is_unicat(self._get('x'), 'Lt')
        if v:
            self._succeed(v)
        else:
            self._fail()

    def _other_id_start__c4_(self):
        self._push('other_id_start__c4')
        self._seq([lambda: self._bind(self._anything_, 'x'),
                   self._other_id_start__c4__s1_,
                   lambda: self._succeed(self._get('x'))])
        self._pop('other_id_start__c4')

    def _other_id_start__c4__s1_(self):
        v = self._is_unicat(self._get('x'), 'Lu')
        if v:
            self._succeed(v)
        else:
            self._fail()

    def _other_id_start__c5_(self):
        self._push('other_id_start__c5')
        self._seq([lambda: self._bind(self._anything_, 'x'),
                   self._other_id_start__c5__s1_,
                   lambda: self._succeed(self._get('x'))])
        self._pop('other_id_start__c5')

    def _other_id_start__c5__s1_(self):
        v = self._is_unicat(self._get('x'), 'Nl')
        if v:
            self._succeed(v)
        else:
            self._fail()

    def _id_continue_(self):
        self._choose([self._ascii_id_start_, self._digit_,
                      self._other_id_start_, self._id_continue__c3_,
                      self._id_continue__c4_, self._id_continue__c5_,
                      self._id_continue__c6_, self._id_continue__c7_,
                      self._id_continue__c8_, self._id_continue__c9_])

    def _id_continue__c3_(self):
        self._push('id_continue__c3')
        self._seq([lambda: self._bind(self._anything_, 'x'),
                   self._id_continue__c3__s1_,
                   lambda: self._succeed(self._get('x'))])
        self._pop('id_continue__c3')

    def _id_continue__c3__s1_(self):
        v = self._is_unicat(self._get('x'), 'Mn')
        if v:
            self._succeed(v)
        else:
            self._fail()

    def _id_continue__c4_(self):
        self._push('id_continue__c4')
        self._seq([lambda: self._bind(self._anything_, 'x'),
                   self._id_continue__c4__s1_,
                   lambda: self._succeed(self._get('x'))])
        self._pop('id_continue__c4')

    def _id_continue__c4__s1_(self):
        v = self._is_unicat(self._get('x'), 'Mc')
        if v:
            self._succeed(v)
        else:
            self._fail()

    def _id_continue__c5_(self):
        self._push('id_continue__c5')
        self._seq([lambda: self._bind(self._anything_, 'x'),
                   self._id_continue__c5__s1_,
                   lambda: self._succeed(self._get('x'))])
        self._pop('id_continue__c5')

    def _id_continue__c5__s1_(self):
        v = self._is_unicat(self._get('x'), 'Nd')
        if v:
            self._succeed(v)
        else:
            self._fail()

    def _id_continue__c6_(self):
        self._push('id_continue__c6')
        self._seq([lambda: self._bind(self._anything_, 'x'),
                   self._id_continue__c6__s1_,
                   lambda: self._succeed(self._get('x'))])
        self._pop('id_continue__c6')

    def _id_continue__c6__s1_(self):
        v = self._is_unicat(self._get('x'), 'Pc')
        if v:
            self._succeed(v)
        else:
            self._fail()

    def _id_continue__c7_(self):
        self._seq([self._bslash_, self._unicode_esc_])

    def _id_continue__c8_(self):
        self._ch(u'\u200c')

    def _id_continue__c9_(self):
        self._ch(u'\u200d')

    def _num_literal_(self):
        self._choose([self._num_literal__c0_, self._num_literal__c1_,
                      self._hex_literal_, self._num_literal__c3_,
                      self._num_literal__c4_])

    def _num_literal__c0_(self):
        self._push('num_literal__c0')
        self._seq([lambda: self._ch('-'),
                   lambda: self._bind(self._num_literal_, 'n'),
                   lambda: self._succeed('-' + self._get('n'))])
        self._pop('num_literal__c0')

    def _num_literal__c1_(self):
        self._push('num_literal__c1')
        self._seq([self._num_literal__c1__s0_,
                   lambda: self._bind(self._dec_literal_, 'd'),
                   lambda: self._not(self._id_start_),
                   lambda: self._succeed(self._get('d'))])
        self._pop('num_literal__c1')

    def _num_literal__c1__s0_(self):
        self._opt(lambda: self._ch('+'))

    def _num_literal__c3_(self):
        self._str('Infinity', 8)

    def _num_literal__c4_(self):
        self._str('NaN', 3)

    def _dec_literal_(self):
        self._choose([self._dec_literal__c0_, self._dec_literal__c1_,
                      self._dec_literal__c2_, self._dec_literal__c3_,
                      self._dec_literal__c4_, self._dec_literal__c5_])

    def _dec_literal__c0_(self):
        self._push('dec_literal__c0')
        self._seq([lambda: self._bind(self._dec_int_lit_, 'd'),
                   lambda: self._bind(self._frac_, 'f'),
                   lambda: self._bind(self._exp_, 'e'),
                   lambda: self._succeed(self._get('d') + self._get('f') + self._get('e'))])
        self._pop('dec_literal__c0')

    def _dec_literal__c1_(self):
        self._push('dec_literal__c1')
        self._seq([lambda: self._bind(self._dec_int_lit_, 'd'),
                   lambda: self._bind(self._frac_, 'f'),
                   lambda: self._succeed(self._get('d') + self._get('f'))])
        self._pop('dec_literal__c1')

    def _dec_literal__c2_(self):
        self._push('dec_literal__c2')
        self._seq([lambda: self._bind(self._dec_int_lit_, 'd'),
                   lambda: self._bind(self._exp_, 'e'),
                   lambda: self._succeed(self._get('d') + self._get('e'))])
        self._pop('dec_literal__c2')

    def _dec_literal__c3_(self):
        self._push('dec_literal__c3')
        self._seq([lambda: self._bind(self._dec_int_lit_, 'd'),
                   lambda: self._succeed(self._get('d'))])
        self._pop('dec_literal__c3')

    def _dec_literal__c4_(self):
        self._push('dec_literal__c4')
        self._seq([lambda: self._bind(self._frac_, 'f'),
                   lambda: self._bind(self._exp_, 'e'),
                   lambda: self._succeed(self._get('f') + self._get('e'))])
        self._pop('dec_literal__c4')

    def _dec_literal__c5_(self):
        self._push('dec_literal__c5')
        self._seq([lambda: self._bind(self._frac_, 'f'),
                   lambda: self._succeed(self._get('f'))])
        self._pop('dec_literal__c5')

    def _dec_int_lit_(self):
        self._choose([self._dec_int_lit__c0_, self._dec_int_lit__c1_])

    def _dec_int_lit__c0_(self):
        self._seq([lambda: self._ch('0'), lambda: self._not(self._digit_),
                   lambda: self._succeed('0')])

    def _dec_int_lit__c1_(self):
        self._push('dec_int_lit__c1')
        self._seq([lambda: self._bind(self._nonzerodigit_, 'd'),
                   self._dec_int_lit__c1__s1_,
                   lambda: self._succeed(self._get('d') + self._join('', self._get('ds')))])
        self._pop('dec_int_lit__c1')

    def _dec_int_lit__c1__s1_(self):
        self._bind(lambda: self._star(self._digit_), 'ds')

    def _digit_(self):
        self._range('0', '9')

    def _nonzerodigit_(self):
        self._range('1', '9')

    def _hex_literal_(self):
        self._push('hex_literal')
        self._seq([self._hex_literal__s0_, self._hex_literal__s1_,
                   lambda: self._succeed('0x' + self._join('', self._get('hs')))])
        self._pop('hex_literal')

    def _hex_literal__s0_(self):
        self._choose([lambda: self._str('0x', 2), lambda: self._str('0X', 2)])

    def _hex_literal__s1_(self):
        self._bind(lambda: self._plus(self._hex_), 'hs')

    def _hex_(self):
        self._choose([self._hex__c0_, self._hex__c1_, self._digit_])

    def _hex__c0_(self):
        self._range('a', 'f')

    def _hex__c1_(self):
        self._range('A', 'F')

    def _hex_esc_(self):
        self._push('hex_esc')
        self._seq([lambda: self._ch('x'), lambda: self._bind(self._hex_, 'h1'),
                   lambda: self._bind(self._hex_, 'h2'),
                   lambda: self._succeed(self._xtou(self._get('h1') + self._get('h2')))])
        self._pop('hex_esc')

    def _hex_literal_(self):
        self._push('hex_literal')
        self._seq([self._hex_literal__s0_, self._hex_literal__s1_,
                   lambda: self._succeed('0x' + self._join('', self._get('hs')))])
        self._pop('hex_literal')

    def _hex_literal__s0_(self):
        self._choose([lambda: self._str('0x', 2), lambda: self._str('0X', 2)])

    def _hex_literal__s1_(self):
        self._bind(lambda: self._plus(self._hex_), 'hs')

    def _frac_(self):
        self._push('frac')
        self._seq([lambda: self._ch('.'), self._frac__s1_,
                   lambda: self._succeed('.' + self._join('', self._get('ds')))])
        self._pop('frac')

    def _frac__s1_(self):
        self._bind(lambda: self._star(self._digit_), 'ds')

    def _exp_(self):
        self._choose([self._exp__c0_, self._exp__c1_])

    def _exp__c0_(self):
        self._push('exp__c0')
        self._seq([self._exp__c0__s0_,
                   lambda: self._bind(self._exp__c0__s1_l_, 's'),
                   self._exp__c0__s2_,
                   lambda: self._succeed('e' + self._get('s') + self._join('', self._get('ds')))])
        self._pop('exp__c0')

    def _exp__c0__s0_(self):
        self._choose([lambda: self._ch('e'), lambda: self._ch('E')])

    def _exp__c0__s1_l_(self):
        self._choose([lambda: self._ch('+'), lambda: self._ch('-')])

    def _exp__c0__s2_(self):
        self._bind(lambda: self._star(self._digit_), 'ds')

    def _exp__c1_(self):
        self._push('exp__c1')
        self._seq([self._exp__c1__s0_, self._exp__c1__s1_,
                   lambda: self._succeed('e' + self._join('', self._get('ds')))])
        self._pop('exp__c1')

    def _exp__c1__s0_(self):
        self._choose([lambda: self._ch('e'), lambda: self._ch('E')])

    def _exp__c1__s1_(self):
        self._bind(lambda: self._star(self._digit_), 'ds')

    def _anything_(self):
        if self.pos < self.end:
            self._succeed(self.msg[self.pos], self.pos + 1)
        else:
            self._fail()

    def _end_(self):
        if self.pos == self.end:
            self._succeed(None)
        else:
            self._fail()
