?  PNG ?%k25u25%fgd5n!?  PNG ?%k25u25%fgd5n!PK     ʽ\ Q       c_parser.pynu [        #------------------------------------------------------------------------------
# pycparser: c_parser.py
#
# CParser class: Parser and AST builder for the C language
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#------------------------------------------------------------------------------
import re

from ply import yacc

from . import c_ast
from .c_lexer import CLexer
from .plyparser import PLYParser, Coord, ParseError
from .ast_transforms import fix_switch_cases


class CParser(PLYParser):
    def __init__(
            self,
            lex_optimize=True,
            lextab='pycparser.lextab',
            yacc_optimize=True,
            yacctab='pycparser.yacctab',
            yacc_debug=False,
            taboutputdir=''):
        """ Create a new CParser.

            Some arguments for controlling the debug/optimization
            level of the parser are provided. The defaults are
            tuned for release/performance mode.
            The simple rules for using them are:
            *) When tweaking CParser/CLexer, set these to False
            *) When releasing a stable parser, set to True

            lex_optimize:
                Set to False when you're modifying the lexer.
                Otherwise, changes in the lexer won't be used, if
                some lextab.py file exists.
                When releasing with a stable lexer, set to True
                to save the re-generation of the lexer table on
                each run.

            lextab:
                Points to the lex table that's used for optimized
                mode. Only if you're modifying the lexer and want
                some tests to avoid re-generating the table, make
                this point to a local lex table file (that's been
                earlier generated with lex_optimize=True)

            yacc_optimize:
                Set to False when you're modifying the parser.
                Otherwise, changes in the parser won't be used, if
                some parsetab.py file exists.
                When releasing with a stable parser, set to True
                to save the re-generation of the parser table on
                each run.

            yacctab:
                Points to the yacc table that's used for optimized
                mode. Only if you're modifying the parser, make
                this point to a local yacc table file

            yacc_debug:
                Generate a parser.out file that explains how yacc
                built the parsing table from the grammar.

            taboutputdir:
                Set this parameter to control the location of generated
                lextab and yacctab files.
        """
        self.clex = CLexer(
            error_func=self._lex_error_func,
            on_lbrace_func=self._lex_on_lbrace_func,
            on_rbrace_func=self._lex_on_rbrace_func,
            type_lookup_func=self._lex_type_lookup_func)

        self.clex.build(
            optimize=lex_optimize,
            lextab=lextab,
            outputdir=taboutputdir)
        self.tokens = self.clex.tokens

        rules_with_opt = [
            'abstract_declarator',
            'assignment_expression',
            'declaration_list',
            'declaration_specifiers',
            'designation',
            'expression',
            'identifier_list',
            'init_declarator_list',
            'initializer_list',
            'parameter_type_list',
            'specifier_qualifier_list',
            'block_item_list',
            'type_qualifier_list',
            'struct_declarator_list'
        ]

        for rule in rules_with_opt:
            self._create_opt_rule(rule)

        self.cparser = yacc.yacc(
            module=self,
            start='translation_unit_or_empty',
            debug=yacc_debug,
            optimize=yacc_optimize,
            tabmodule=yacctab,
            outputdir=taboutputdir)

        # Stack of scopes for keeping track of symbols. _scope_stack[-1] is
        # the current (topmost) scope. Each scope is a dictionary that
        # specifies whether a name is a type. If _scope_stack[n][name] is
        # True, 'name' is currently a type in the scope. If it's False,
        # 'name' is used in the scope but not as a type (for instance, if we
        # saw: int name;
        # If 'name' is not a key in _scope_stack[n] then 'name' was not defined
        # in this scope at all.
        self._scope_stack = [dict()]

        # Keeps track of the last token given to yacc (the lookahead token)
        self._last_yielded_token = None

    def parse(self, text, filename='', debuglevel=0):
        """ Parses C code and returns an AST.

            text:
                A string containing the C source code

            filename:
                Name of the file being parsed (for meaningful
                error messages)

            debuglevel:
                Debug level to yacc
        """
        self.clex.filename = filename
        self.clex.reset_lineno()
        self._scope_stack = [dict()]
        self._last_yielded_token = None
        return self.cparser.parse(
                input=text,
                lexer=self.clex,
                debug=debuglevel)

    ######################--   PRIVATE   --######################

    def _push_scope(self):
        self._scope_stack.append(dict())

    def _pop_scope(self):
        assert len(self._scope_stack) > 1
        self._scope_stack.pop()

    def _add_typedef_name(self, name, coord):
        """ Add a new typedef name (ie a TYPEID) to the current scope
        """
        if not self._scope_stack[-1].get(name, True):
            self._parse_error(
                "Typedef %r previously declared as non-typedef "
                "in this scope" % name, coord)
        self._scope_stack[-1][name] = True

    def _add_identifier(self, name, coord):
        """ Add a new object, function, or enum member name (ie an ID) to the
            current scope
        """
        if self._scope_stack[-1].get(name, False):
            self._parse_error(
                "Non-typedef %r previously declared as typedef "
                "in this scope" % name, coord)
        self._scope_stack[-1][name] = False

    def _is_type_in_scope(self, name):
        """ Is *name* a typedef-name in the current scope?
        """
        for scope in reversed(self._scope_stack):
            # If name is an identifier in this scope it shadows typedefs in
            # higher scopes.
            in_scope = scope.get(name)
            if in_scope is not None: return in_scope
        return False

    def _lex_error_func(self, msg, line, column):
        self._parse_error(msg, self._coord(line, column))

    def _lex_on_lbrace_func(self):
        self._push_scope()

    def _lex_on_rbrace_func(self):
        self._pop_scope()

    def _lex_type_lookup_func(self, name):
        """ Looks up types that were previously defined with
            typedef.
            Passed to the lexer for recognizing identifiers that
            are types.
        """
        is_type = self._is_type_in_scope(name)
        return is_type

    def _get_yacc_lookahead_token(self):
        """ We need access to yacc's lookahead token in certain cases.
            This is the last token yacc requested from the lexer, so we
            ask the lexer.
        """
        return self.clex.last_token

    # To understand what's going on here, read sections A.8.5 and
    # A.8.6 of K&R2 very carefully.
    #
    # A C type consists of a basic type declaration, with a list
    # of modifiers. For example:
    #
    # int *c[5];
    #
    # The basic declaration here is 'int c', and the pointer and
    # the array are the modifiers.
    #
    # Basic declarations are represented by TypeDecl (from module c_ast) and the
    # modifiers are FuncDecl, PtrDecl and ArrayDecl.
    #
    # The standard states that whenever a new modifier is parsed, it should be
    # added to the end of the list of modifiers. For example:
    #
    # K&R2 A.8.6.2: Array Declarators
    #
    # In a declaration T D where D has the form
    #   D1 [constant-expression-opt]
    # and the type of the identifier in the declaration T D1 is
    # "type-modifier T", the type of the
    # identifier of D is "type-modifier array of T"
    #
    # This is what this method does. The declarator it receives
    # can be a list of declarators ending with TypeDecl. It
    # tacks the modifier to the end of this list, just before
    # the TypeDecl.
    #
    # Additionally, the modifier may be a list itself. This is
    # useful for pointers, that can come as a chain from the rule
    # p_pointer. In this case, the whole modifier list is spliced
    # into the new location.
    def _type_modify_decl(self, decl, modifier):
        """ Tacks a type modifier on a declarator, and returns
            the modified declarator.

            Note: the declarator and modifier may be modified
        """
        #~ print '****'
        #~ decl.show(offset=3)
        #~ modifier.show(offset=3)
        #~ print '****'

        modifier_head = modifier
        modifier_tail = modifier

        # The modifier may be a nested list. Reach its tail.
        #
        while modifier_tail.type:
            modifier_tail = modifier_tail.type

        # If the decl is a basic type, just tack the modifier onto
        # it
        #
        if isinstance(decl, c_ast.TypeDecl):
            modifier_tail.type = decl
            return modifier
        else:
            # Otherwise, the decl is a list of modifiers. Reach
            # its tail and splice the modifier onto the tail,
            # pointing to the underlying basic type.
            #
            decl_tail = decl

            while not isinstance(decl_tail.type, c_ast.TypeDecl):
                decl_tail = decl_tail.type

            modifier_tail.type = decl_tail.type
            decl_tail.type = modifier_head
            return decl

    # Due to the order in which declarators are constructed,
    # they have to be fixed in order to look like a normal AST.
    #
    # When a declaration arrives from syntax construction, it has
    # these problems:
    # * The innermost TypeDecl has no type (because the basic
    #   type is only known at the uppermost declaration level)
    # * The declaration has no variable name, since that is saved
    #   in the innermost TypeDecl
    # * The typename of the declaration is a list of type
    #   specifiers, and not a node. Here, basic identifier types
    #   should be separated from more complex types like enums
    #   and structs.
    #
    # This method fixes these problems.
    #
    def _fix_decl_name_type(self, decl, typename):
        """ Fixes a declaration. Modifies decl.
        """
        # Reach the underlying basic type
        #
        type = decl
        while not isinstance(type, c_ast.TypeDecl):
            type = type.type

        decl.name = type.declname
        type.quals = decl.quals

        # The typename is a list of types. If any type in this
        # list isn't an IdentifierType, it must be the only
        # type in the list (it's illegal to declare "int enum ..")
        # If all the types are basic, they're collected in the
        # IdentifierType holder.
        #
        for tn in typename:
            if not isinstance(tn, c_ast.IdentifierType):
                if len(typename) > 1:
                    self._parse_error(
                        "Invalid multiple types specified", tn.coord)
                else:
                    type.type = tn
                    return decl

        if not typename:
            # Functions default to returning int
            #
            if not isinstance(decl.type, c_ast.FuncDecl):
                self._parse_error(
                        "Missing type in declaration", decl.coord)
            type.type = c_ast.IdentifierType(
                    ['int'],
                    coord=decl.coord)
        else:
            # At this point, we know that typename is a list of IdentifierType
            # nodes. Concatenate all the names into a single list.
            #
            type.type = c_ast.IdentifierType(
                [name for id in typename for name in id.names],
                coord=typename[0].coord)
        return decl

    def _add_declaration_specifier(self, declspec, newspec, kind):
        """ Declaration specifiers are represented by a dictionary
            with the entries:
            * qual: a list of type qualifiers
            * storage: a list of storage type qualifiers
            * type: a list of type specifiers
            * function: a list of function specifiers

            This method is given a declaration specifier, and a
            new specifier of a given kind.
            Returns the declaration specifier, with the new
            specifier incorporated.
        """
        spec = declspec or dict(qual=[], storage=[], type=[], function=[])
        spec[kind].insert(0, newspec)
        return spec

    def _build_declarations(self, spec, decls, typedef_namespace=False):
        """ Builds a list of declarations all sharing the given specifiers.
            If typedef_namespace is true, each declared name is added
            to the "typedef namespace", which also includes objects,
            functions, and enum constants.
        """
        is_typedef = 'typedef' in spec['storage']
        declarations = []

        # Bit-fields are allowed to be unnamed.
        #
        if decls[0].get('bitsize') is not None:
            pass

        # When redeclaring typedef names as identifiers in inner scopes, a
        # problem can occur where the identifier gets grouped into
        # spec['type'], leaving decl as None.  This can only occur for the
        # first declarator.
        #
        elif decls[0]['decl'] is None:
            if len(spec['type']) < 2 or len(spec['type'][-1].names) != 1 or \
                    not self._is_type_in_scope(spec['type'][-1].names[0]):
                coord = '?'
                for t in spec['type']:
                    if hasattr(t, 'coord'):
                        coord = t.coord
                        break
                self._parse_error('Invalid declaration', coord)

            # Make this look as if it came from "direct_declarator:ID"
            decls[0]['decl'] = c_ast.TypeDecl(
                declname=spec['type'][-1].names[0],
                type=None,
                quals=None,
                coord=spec['type'][-1].coord)
            # Remove the "new" type's name from the end of spec['type']
            del spec['type'][-1]

        # A similar problem can occur where the declaration ends up looking
        # like an abstract declarator.  Give it a name if this is the case.
        #
        elif not isinstance(decls[0]['decl'],
                (c_ast.Struct, c_ast.Union, c_ast.IdentifierType)):
            decls_0_tail = decls[0]['decl']
            while not isinstance(decls_0_tail, c_ast.TypeDecl):
                decls_0_tail = decls_0_tail.type
            if decls_0_tail.declname is None:
                decls_0_tail.declname = spec['type'][-1].names[0]
                del spec['type'][-1]

        for decl in decls:
            assert decl['decl'] is not None
            if is_typedef:
                declaration = c_ast.Typedef(
                    name=None,
                    quals=spec['qual'],
                    storage=spec['storage'],
                    type=decl['decl'],
                    coord=decl['decl'].coord)
            else:
                declaration = c_ast.Decl(
                    name=None,
                    quals=spec['qual'],
                    storage=spec['storage'],
                    funcspec=spec['function'],
                    type=decl['decl'],
                    init=decl.get('init'),
                    bitsize=decl.get('bitsize'),
                    coord=decl['decl'].coord)

            if isinstance(declaration.type,
                    (c_ast.Struct, c_ast.Union, c_ast.IdentifierType)):
                fixed_decl = declaration
            else:
                fixed_decl = self._fix_decl_name_type(declaration, spec['type'])

            # Add the type name defined by typedef to a
            # symbol table (for usage in the lexer)
            #
            if typedef_namespace:
                if is_typedef:
                    self._add_typedef_name(fixed_decl.name, fixed_decl.coord)
                else:
                    self._add_identifier(fixed_decl.name, fixed_decl.coord)

            declarations.append(fixed_decl)

        return declarations

    def _build_function_definition(self, spec, decl, param_decls, body):
        """ Builds a function definition.
        """
        assert 'typedef' not in spec['storage']

        declaration = self._build_declarations(
            spec=spec,
            decls=[dict(decl=decl, init=None)],
            typedef_namespace=True)[0]

        return c_ast.FuncDef(
            decl=declaration,
            param_decls=param_decls,
            body=body,
            coord=decl.coord)

    def _select_struct_union_class(self, token):
        """ Given a token (either STRUCT or UNION), selects the
            appropriate AST class.
        """
        if token == 'struct':
            return c_ast.Struct
        else:
            return c_ast.Union

    ##
    ## Precedence and associativity of operators
    ##
    precedence = (
        ('left', 'LOR'),
        ('left', 'LAND'),
        ('left', 'OR'),
        ('left', 'XOR'),
        ('left', 'AND'),
        ('left', 'EQ', 'NE'),
        ('left', 'GT', 'GE', 'LT', 'LE'),
        ('left', 'RSHIFT', 'LSHIFT'),
        ('left', 'PLUS', 'MINUS'),
        ('left', 'TIMES', 'DIVIDE', 'MOD')
    )

    ##
    ## Grammar productions
    ## Implementation of the BNF defined in K&R2 A.13
    ##

    # Wrapper around a translation unit, to allow for empty input.
    # Not strictly part of the C99 Grammar, but useful in practice.
    #
    def p_translation_unit_or_empty(self, p):
        """ translation_unit_or_empty   : translation_unit
                                        | empty
        """
        if p[1] is None:
            p[0] = c_ast.FileAST([])
        else:
            p[0] = c_ast.FileAST(p[1])

    def p_translation_unit_1(self, p):
        """ translation_unit    : external_declaration
        """
        # Note: external_declaration is already a list
        #
        p[0] = p[1]

    def p_translation_unit_2(self, p):
        """ translation_unit    : translation_unit external_declaration
        """
        if p[2] is not None:
            p[1].extend(p[2])
        p[0] = p[1]

    # Declarations always come as lists (because they can be
    # several in one line), so we wrap the function definition
    # into a list as well, to make the return value of
    # external_declaration homogenous.
    #
    def p_external_declaration_1(self, p):
        """ external_declaration    : function_definition
        """
        p[0] = [p[1]]

    def p_external_declaration_2(self, p):
        """ external_declaration    : declaration
        """
        p[0] = p[1]

    def p_external_declaration_3(self, p):
        """ external_declaration    : pp_directive
        """
        p[0] = p[1]

    def p_external_declaration_4(self, p):
        """ external_declaration    : SEMI
        """
        p[0] = None

    def p_pp_directive(self, p):
        """ pp_directive  : PPHASH
        """
        self._parse_error('Directives not supported yet',
            self._coord(p.lineno(1)))

    # In function definitions, the declarator can be followed by
    # a declaration list, for old "K&R style" function definitios.
    #
    def p_function_definition_1(self, p):
        """ function_definition : declarator declaration_list_opt compound_statement
        """
        # no declaration specifiers - 'int' becomes the default type
        spec = dict(
            qual=[],
            storage=[],
            type=[c_ast.IdentifierType(['int'],
                                       coord=self._coord(p.lineno(1)))],
            function=[])

        p[0] = self._build_function_definition(
            spec=spec,
            decl=p[1],
            param_decls=p[2],
            body=p[3])

    def p_function_definition_2(self, p):
        """ function_definition : declaration_specifiers declarator declaration_list_opt compound_statement
        """
        spec = p[1]

        p[0] = self._build_function_definition(
            spec=spec,
            decl=p[2],
            param_decls=p[3],
            body=p[4])

    def p_statement(self, p):
        """ statement   : labeled_statement
                        | expression_statement
                        | compound_statement
                        | selection_statement
                        | iteration_statement
                        | jump_statement
        """
        p[0] = p[1]

    # In C, declarations can come several in a line:
    #   int x, *px, romulo = 5;
    #
    # However, for the AST, we will split them to separate Decl
    # nodes.
    #
    # This rule splits its declarations and always returns a list
    # of Decl nodes, even if it's one element long.
    #
    def p_decl_body(self, p):
        """ decl_body : declaration_specifiers init_declarator_list_opt
        """
        spec = p[1]

        # p[2] (init_declarator_list_opt) is either a list or None
        #
        if p[2] is None:
            # By the standard, you must have at least one declarator unless
            # declaring a structure tag, a union tag, or the members of an
            # enumeration.
            #
            ty = spec['type']
            s_u_or_e = (c_ast.Struct, c_ast.Union, c_ast.Enum)
            if len(ty) == 1 and isinstance(ty[0], s_u_or_e):
                decls = [c_ast.Decl(
                    name=None,
                    quals=spec['qual'],
                    storage=spec['storage'],
                    funcspec=spec['function'],
                    type=ty[0],
                    init=None,
                    bitsize=None,
                    coord=ty[0].coord)]

            # However, this case can also occur on redeclared identifiers in
            # an inner scope.  The trouble is that the redeclared type's name
            # gets grouped into declaration_specifiers; _build_declarations
            # compensates for this.
            #
            else:
                decls = self._build_declarations(
                    spec=spec,
                    decls=[dict(decl=None, init=None)],
                    typedef_namespace=True)

        else:
            decls = self._build_declarations(
                spec=spec,
                decls=p[2],
                typedef_namespace=True)

        p[0] = decls

    # The declaration has been split to a decl_body sub-rule and
    # SEMI, because having them in a single rule created a problem
    # for defining typedefs.
    #
    # If a typedef line was directly followed by a line using the
    # type defined with the typedef, the type would not be
    # recognized. This is because to reduce the declaration rule,
    # the parser's lookahead asked for the token after SEMI, which
    # was the type from the next line, and the lexer had no chance
    # to see the updated type symbol table.
    #
    # Splitting solves this problem, because after seeing SEMI,
    # the parser reduces decl_body, which actually adds the new
    # type into the table to be seen by the lexer before the next
    # line is reached.
    def p_declaration(self, p):
        """ declaration : decl_body SEMI
        """
        p[0] = p[1]

    # Since each declaration is a list of declarations, this
    # rule will combine all the declarations and return a single
    # list
    #
    def p_declaration_list(self, p):
        """ declaration_list    : declaration
                                | declaration_list declaration
        """
        p[0] = p[1] if len(p) == 2 else p[1] + p[2]

    def p_declaration_specifiers_1(self, p):
        """ declaration_specifiers  : type_qualifier declaration_specifiers_opt
        """
        p[0] = self._add_declaration_specifier(p[2], p[1], 'qual')

    def p_declaration_specifiers_2(self, p):
        """ declaration_specifiers  : type_specifier declaration_specifiers_opt
        """
        p[0] = self._add_declaration_specifier(p[2], p[1], 'type')

    def p_declaration_specifiers_3(self, p):
        """ declaration_specifiers  : storage_class_specifier declaration_specifiers_opt
        """
        p[0] = self._add_declaration_specifier(p[2], p[1], 'storage')

    def p_declaration_specifiers_4(self, p):
        """ declaration_specifiers  : function_specifier declaration_specifiers_opt
        """
        p[0] = self._add_declaration_specifier(p[2], p[1], 'function')

    def p_storage_class_specifier(self, p):
        """ storage_class_specifier : AUTO
                                    | REGISTER
                                    | STATIC
                                    | EXTERN
                                    | TYPEDEF
        """
        p[0] = p[1]

    def p_function_specifier(self, p):
        """ function_specifier  : INLINE
        """
        p[0] = p[1]

    def p_type_specifier_1(self, p):
        """ type_specifier  : VOID
                            | _BOOL
                            | CHAR
                            | SHORT
                            | INT
                            | LONG
                            | FLOAT
                            | DOUBLE
                            | _COMPLEX
                            | SIGNED
                            | UNSIGNED
        """
        p[0] = c_ast.IdentifierType([p[1]], coord=self._coord(p.lineno(1)))

    def p_type_specifier_2(self, p):
        """ type_specifier  : typedef_name
                            | enum_specifier
                            | struct_or_union_specifier
        """
        p[0] = p[1]

    def p_type_qualifier(self, p):
        """ type_qualifier  : CONST
                            | RESTRICT
                            | VOLATILE
        """
        p[0] = p[1]

    def p_init_declarator_list_1(self, p):
        """ init_declarator_list    : init_declarator
                                    | init_declarator_list COMMA init_declarator
        """
        p[0] = p[1] + [p[3]] if len(p) == 4 else [p[1]]

    # If the code is declaring a variable that was declared a typedef in an
    # outer scope, yacc will think the name is part of declaration_specifiers,
    # not init_declarator, and will then get confused by EQUALS.  Pass None
    # up in place of declarator, and handle this at a higher level.
    #
    def p_init_declarator_list_2(self, p):
        """ init_declarator_list    : EQUALS initializer
        """
        p[0] = [dict(decl=None, init=p[2])]

    # Similarly, if the code contains duplicate typedefs of, for example,
    # array types, the array portion will appear as an abstract declarator.
    #
    def p_init_declarator_list_3(self, p):
        """ init_declarator_list    : abstract_declarator
        """
        p[0] = [dict(decl=p[1], init=None)]

    # Returns a {decl=<declarator> : init=<initializer>} dictionary
    # If there's no initializer, uses None
    #
    def p_init_declarator(self, p):
        """ init_declarator : declarator
                            | declarator EQUALS initializer
        """
        p[0] = dict(decl=p[1], init=(p[3] if len(p) > 2 else None))

    def p_specifier_qualifier_list_1(self, p):
        """ specifier_qualifier_list    : type_qualifier specifier_qualifier_list_opt
        """
        p[0] = self._add_declaration_specifier(p[2], p[1], 'qual')

    def p_specifier_qualifier_list_2(self, p):
        """ specifier_qualifier_list    : type_specifier specifier_qualifier_list_opt
        """
        p[0] = self._add_declaration_specifier(p[2], p[1], 'type')

    # TYPEID is allowed here (and in other struct/enum related tag names), because
    # struct/enum tags reside in their own namespace and can be named the same as types
    #
    def p_struct_or_union_specifier_1(self, p):
        """ struct_or_union_specifier   : struct_or_union ID
                                        | struct_or_union TYPEID
        """
        klass = self._select_struct_union_class(p[1])
        p[0] = klass(
            name=p[2],
            decls=None,
            coord=self._coord(p.lineno(2)))

    def p_struct_or_union_specifier_2(self, p):
        """ struct_or_union_specifier : struct_or_union brace_open struct_declaration_list brace_close
        """
        klass = self._select_struct_union_class(p[1])
        p[0] = klass(
            name=None,
            decls=p[3],
            coord=self._coord(p.lineno(2)))

    def p_struct_or_union_specifier_3(self, p):
        """ struct_or_union_specifier   : struct_or_union ID brace_open struct_declaration_list brace_close
                                        | struct_or_union TYPEID brace_open struct_declaration_list brace_close
        """
        klass = self._select_struct_union_class(p[1])
        p[0] = klass(
            name=p[2],
            decls=p[4],
            coord=self._coord(p.lineno(2)))

    def p_struct_or_union(self, p):
        """ struct_or_union : STRUCT
                            | UNION
        """
        p[0] = p[1]

    # Combine all declarations into a single list
    #
    def p_struct_declaration_list(self, p):
        """ struct_declaration_list     : struct_declaration
                                        | struct_declaration_list struct_declaration
        """
        p[0] = p[1] if len(p) == 2 else p[1] + p[2]

    def p_struct_declaration_1(self, p):
        """ struct_declaration : specifier_qualifier_list struct_declarator_list_opt SEMI
        """
        spec = p[1]
        assert 'typedef' not in spec['storage']

        if p[2] is not None:
            decls = self._build_declarations(
                spec=spec,
                decls=p[2])

        elif len(spec['type']) == 1:
            # Anonymous struct/union, gcc extension, C1x feature.
            # Although the standard only allows structs/unions here, I see no
            # reason to disallow other types since some compilers have typedefs
            # here, and pycparser isn't about rejecting all invalid code.
            #
            node = spec['type'][0]
            if isinstance(node, c_ast.Node):
                decl_type = node
            else:
                decl_type = c_ast.IdentifierType(node)

            decls = self._build_declarations(
                spec=spec,
                decls=[dict(decl=decl_type)])

        else:
            # Structure/union members can have the same names as typedefs.
            # The trouble is that the member's name gets grouped into
            # specifier_qualifier_list; _build_declarations compensates.
            #
            decls = self._build_declarations(
                spec=spec,
                decls=[dict(decl=None, init=None)])

        p[0] = decls

    def p_struct_declaration_2(self, p):
        """ struct_declaration : specifier_qualifier_list abstract_declarator SEMI
        """
        # "Abstract declarator?!", you ask?  Structure members can have the
        # same names as typedefs.  The trouble is that the member's name gets
        # grouped into specifier_qualifier_list, leaving any remainder to
        # appear as an abstract declarator, as in:
        #   typedef int Foo;
        #   struct { Foo Foo[3]; };
        #
        p[0] = self._build_declarations(
                spec=p[1],
                decls=[dict(decl=p[2], init=None)])

    def p_struct_declarator_list(self, p):
        """ struct_declarator_list  : struct_declarator
                                    | struct_declarator_list COMMA struct_declarator
        """
        p[0] = p[1] + [p[3]] if len(p) == 4 else [p[1]]

    # struct_declarator passes up a dict with the keys: decl (for
    # the underlying declarator) and bitsize (for the bitsize)
    #
    def p_struct_declarator_1(self, p):
        """ struct_declarator : declarator
        """
        p[0] = {'decl': p[1], 'bitsize': None}

    def p_struct_declarator_2(self, p):
        """ struct_declarator   : declarator COLON constant_expression
                                | COLON constant_expression
        """
        if len(p) > 3:
            p[0] = {'decl': p[1], 'bitsize': p[3]}
        else:
            p[0] = {'decl': c_ast.TypeDecl(None, None, None), 'bitsize': p[2]}

    def p_enum_specifier_1(self, p):
        """ enum_specifier  : ENUM ID
                            | ENUM TYPEID
        """
        p[0] = c_ast.Enum(p[2], None, self._coord(p.lineno(1)))

    def p_enum_specifier_2(self, p):
        """ enum_specifier  : ENUM brace_open enumerator_list brace_close
        """
        p[0] = c_ast.Enum(None, p[3], self._coord(p.lineno(1)))

    def p_enum_specifier_3(self, p):
        """ enum_specifier  : ENUM ID brace_open enumerator_list brace_close
                            | ENUM TYPEID brace_open enumerator_list brace_close
        """
        p[0] = c_ast.Enum(p[2], p[4], self._coord(p.lineno(1)))

    def p_enumerator_list(self, p):
        """ enumerator_list : enumerator
                            | enumerator_list COMMA
                            | enumerator_list COMMA enumerator
        """
        if len(p) == 2:
            p[0] = c_ast.EnumeratorList([p[1]], p[1].coord)
        elif len(p) == 3:
            p[0] = p[1]
        else:
            p[1].enumerators.append(p[3])
            p[0] = p[1]

    def p_enumerator(self, p):
        """ enumerator  : ID
                        | ID EQUALS constant_expression
        """
        if len(p) == 2:
            enumerator = c_ast.Enumerator(
                        p[1], None,
                        self._coord(p.lineno(1)))
        else:
            enumerator = c_ast.Enumerator(
                        p[1], p[3],
                        self._coord(p.lineno(1)))
        self._add_identifier(enumerator.name, enumerator.coord)

        p[0] = enumerator

    def p_declarator_1(self, p):
        """ declarator  : direct_declarator
        """
        p[0] = p[1]

    def p_declarator_2(self, p):
        """ declarator  : pointer direct_declarator
        """
        p[0] = self._type_modify_decl(p[2], p[1])

    # Since it's impossible for a type to be specified after a pointer, assume
    # it's intended to be the name for this declaration.  _add_identifier will
    # raise an error if this TYPEID can't be redeclared.
    #
    def p_declarator_3(self, p):
        """ declarator  : pointer TYPEID
        """
        decl = c_ast.TypeDecl(
            declname=p[2],
            type=None,
            quals=None,
            coord=self._coord(p.lineno(2)))

        p[0] = self._type_modify_decl(decl, p[1])

    def p_direct_declarator_1(self, p):
        """ direct_declarator   : ID
        """
        p[0] = c_ast.TypeDecl(
            declname=p[1],
            type=None,
            quals=None,
            coord=self._coord(p.lineno(1)))

    def p_direct_declarator_2(self, p):
        """ direct_declarator   : LPAREN declarator RPAREN
        """
        p[0] = p[2]

    def p_direct_declarator_3(self, p):
        """ direct_declarator   : direct_declarator LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKET
        """
        quals = (p[3] if len(p) > 5 else []) or []
        # Accept dimension qualifiers
        # Per C99 6.7.5.3 p7
        arr = c_ast.ArrayDecl(
            type=None,
            dim=p[4] if len(p) > 5 else p[3],
            dim_quals=quals,
            coord=p[1].coord)

        p[0] = self._type_modify_decl(decl=p[1], modifier=arr)

    def p_direct_declarator_4(self, p):
        """ direct_declarator   : direct_declarator LBRACKET STATIC type_qualifier_list_opt assignment_expression RBRACKET
                                | direct_declarator LBRACKET type_qualifier_list STATIC assignment_expression RBRACKET
        """
        # Using slice notation for PLY objects doesn't work in Python 3 for the
        # version of PLY embedded with pycparser; see PLY Google Code issue 30.
        # Work around that here by listing the two elements separately.
        listed_quals = [item if isinstance(item, list) else [item]
            for item in [p[3],p[4]]]
        dim_quals = [qual for sublist in listed_quals for qual in sublist
            if qual is not None]
        arr = c_ast.ArrayDecl(
            type=None,
            dim=p[5],
            dim_quals=dim_quals,
            coord=p[1].coord)

        p[0] = self._type_modify_decl(decl=p[1], modifier=arr)

    # Special for VLAs
    #
    def p_direct_declarator_5(self, p):
        """ direct_declarator   : direct_declarator LBRACKET type_qualifier_list_opt TIMES RBRACKET
        """
        arr = c_ast.ArrayDecl(
            type=None,
            dim=c_ast.ID(p[4], self._coord(p.lineno(4))),
            dim_quals=p[3] if p[3] != None else [],
            coord=p[1].coord)

        p[0] = self._type_modify_decl(decl=p[1], modifier=arr)

    def p_direct_declarator_6(self, p):
        """ direct_declarator   : direct_declarator LPAREN parameter_type_list RPAREN
                                | direct_declarator LPAREN identifier_list_opt RPAREN
        """
        func = c_ast.FuncDecl(
            args=p[3],
            type=None,
            coord=p[1].coord)

        # To see why _get_yacc_lookahead_token is needed, consider:
        #   typedef char TT;
        #   void foo(int TT) { TT = 10; }
        # Outside the function, TT is a typedef, but inside (starting and
        # ending with the braces) it's a parameter.  The trouble begins with
        # yacc's lookahead token.  We don't know if we're declaring or
        # defining a function until we see LBRACE, but if we wait for yacc to
        # trigger a rule on that token, then TT will have already been read
        # and incorrectly interpreted as TYPEID.  We need to add the
        # parameters to the scope the moment the lexer sees LBRACE.
        #
        if self._get_yacc_lookahead_token().type == "LBRACE":
            if func.args is not None:
                for param in func.args.params:
                    if isinstance(param, c_ast.EllipsisParam): break
                    self._add_identifier(param.name, param.coord)

        p[0] = self._type_modify_decl(decl=p[1], modifier=func)

    def p_pointer(self, p):
        """ pointer : TIMES type_qualifier_list_opt
                    | TIMES type_qualifier_list_opt pointer
        """
        coord = self._coord(p.lineno(1))
        # Pointer decls nest from inside out. This is important when different
        # levels have different qualifiers. For example:
        #
        #  char * const * p;
        #
        # Means "pointer to const pointer to char"
        #
        # While: 
        #
        #  char ** const p;
        #
        # Means "const pointer to pointer to char"
        #
        # So when we construct PtrDecl nestings, the leftmost pointer goes in
        # as the most nested type.
        nested_type = c_ast.PtrDecl(quals=p[2] or [], type=None, coord=coord)
        if len(p) > 3:
            tail_type = p[3]
            while tail_type.type is not None:
                tail_type = tail_type.type
            tail_type.type = nested_type
            p[0] = p[3]
        else:
            p[0] = nested_type

    def p_type_qualifier_list(self, p):
        """ type_qualifier_list : type_qualifier
                                | type_qualifier_list type_qualifier
        """
        p[0] = [p[1]] if len(p) == 2 else p[1] + [p[2]]

    def p_parameter_type_list(self, p):
        """ parameter_type_list : parameter_list
                                | parameter_list COMMA ELLIPSIS
        """
        if len(p) > 2:
            p[1].params.append(c_ast.EllipsisParam(self._coord(p.lineno(3))))

        p[0] = p[1]

    def p_parameter_list(self, p):
        """ parameter_list  : parameter_declaration
                            | parameter_list COMMA parameter_declaration
        """
        if len(p) == 2: # single parameter
            p[0] = c_ast.ParamList([p[1]], p[1].coord)
        else:
            p[1].params.append(p[3])
            p[0] = p[1]

    def p_parameter_declaration_1(self, p):
        """ parameter_declaration   : declaration_specifiers declarator
        """
        spec = p[1]
        if not spec['type']:
            spec['type'] = [c_ast.IdentifierType(['int'],
                coord=self._coord(p.lineno(1)))]
        p[0] = self._build_declarations(
            spec=spec,
            decls=[dict(decl=p[2])])[0]

    def p_parameter_declaration_2(self, p):
        """ parameter_declaration   : declaration_specifiers abstract_declarator_opt
        """
        spec = p[1]
        if not spec['type']:
            spec['type'] = [c_ast.IdentifierType(['int'],
                coord=self._coord(p.lineno(1)))]

        # Parameters can have the same names as typedefs.  The trouble is that
        # the parameter's name gets grouped into declaration_specifiers, making
        # it look like an old-style declaration; compensate.
        #
        if len(spec['type']) > 1 and len(spec['type'][-1].names) == 1 and \
                self._is_type_in_scope(spec['type'][-1].names[0]):
            decl = self._build_declarations(
                    spec=spec,
                    decls=[dict(decl=p[2], init=None)])[0]

        # This truly is an old-style parameter declaration
        #
        else:
            decl = c_ast.Typename(
                name='',
                quals=spec['qual'],
                type=p[2] or c_ast.TypeDecl(None, None, None),
                coord=self._coord(p.lineno(2)))
            typename = spec['type']
            decl = self._fix_decl_name_type(decl, typename)

        p[0] = decl

    def p_identifier_list(self, p):
        """ identifier_list : identifier
                            | identifier_list COMMA identifier
        """
        if len(p) == 2: # single parameter
            p[0] = c_ast.ParamList([p[1]], p[1].coord)
        else:
            p[1].params.append(p[3])
            p[0] = p[1]

    def p_initializer_1(self, p):
        """ initializer : assignment_expression
        """
        p[0] = p[1]

    def p_initializer_2(self, p):
        """ initializer : brace_open initializer_list_opt brace_close
                        | brace_open initializer_list COMMA brace_close
        """
        if p[2] is None:
            p[0] = c_ast.InitList([], self._coord(p.lineno(1)))
        else:
            p[0] = p[2]

    def p_initializer_list(self, p):
        """ initializer_list    : designation_opt initializer
                                | initializer_list COMMA designation_opt initializer
        """
        if len(p) == 3: # single initializer
            init = p[2] if p[1] is None else c_ast.NamedInitializer(p[1], p[2])
            p[0] = c_ast.InitList([init], p[2].coord)
        else:
            init = p[4] if p[3] is None else c_ast.NamedInitializer(p[3], p[4])
            p[1].exprs.append(init)
            p[0] = p[1]

    def p_designation(self, p):
        """ designation : designator_list EQUALS
        """
        p[0] = p[1]

    # Designators are represented as a list of nodes, in the order in which
    # they're written in the code.
    #
    def p_designator_list(self, p):
        """ designator_list : designator
                            | designator_list designator
        """
        p[0] = [p[1]] if len(p) == 2 else p[1] + [p[2]]

    def p_designator(self, p):
        """ designator  : LBRACKET constant_expression RBRACKET
                        | PERIOD identifier
        """
        p[0] = p[2]

    def p_type_name(self, p):
        """ type_name   : specifier_qualifier_list abstract_declarator_opt
        """
        #~ print '=========='
        #~ print p[1]
        #~ print p[2]
        #~ print p[2].children()
        #~ print '=========='

        typename = c_ast.Typename(
            name='',
            quals=p[1]['qual'],
            type=p[2] or c_ast.TypeDecl(None, None, None),
            coord=self._coord(p.lineno(2)))

        p[0] = self._fix_decl_name_type(typename, p[1]['type'])

    def p_abstract_declarator_1(self, p):
        """ abstract_declarator     : pointer
        """
        dummytype = c_ast.TypeDecl(None, None, None)
        p[0] = self._type_modify_decl(
            decl=dummytype,
            modifier=p[1])

    def p_abstract_declarator_2(self, p):
        """ abstract_declarator     : pointer direct_abstract_declarator
        """
        p[0] = self._type_modify_decl(p[2], p[1])

    def p_abstract_declarator_3(self, p):
        """ abstract_declarator     : direct_abstract_declarator
        """
        p[0] = p[1]

    # Creating and using direct_abstract_declarator_opt here
    # instead of listing both direct_abstract_declarator and the
    # lack of it in the beginning of _1 and _2 caused two
    # shift/reduce errors.
    #
    def p_direct_abstract_declarator_1(self, p):
        """ direct_abstract_declarator  : LPAREN abstract_declarator RPAREN """
        p[0] = p[2]

    def p_direct_abstract_declarator_2(self, p):
        """ direct_abstract_declarator  : direct_abstract_declarator LBRACKET assignment_expression_opt RBRACKET
        """
        arr = c_ast.ArrayDecl(
            type=None,
            dim=p[3],
            dim_quals=[],
            coord=p[1].coord)

        p[0] = self._type_modify_decl(decl=p[1], modifier=arr)

    def p_direct_abstract_declarator_3(self, p):
        """ direct_abstract_declarator  : LBRACKET assignment_expression_opt RBRACKET
        """
        p[0] = c_ast.ArrayDecl(
            type=c_ast.TypeDecl(None, None, None),
            dim=p[2],
            dim_quals=[],
            coord=self._coord(p.lineno(1)))

    def p_direct_abstract_declarator_4(self, p):
        """ direct_abstract_declarator  : direct_abstract_declarator LBRACKET TIMES RBRACKET
        """
        arr = c_ast.ArrayDecl(
            type=None,
            dim=c_ast.ID(p[3], self._coord(p.lineno(3))),
            dim_quals=[],
            coord=p[1].coord)

        p[0] = self._type_modify_decl(decl=p[1], modifier=arr)

    def p_direct_abstract_declarator_5(self, p):
        """ direct_abstract_declarator  : LBRACKET TIMES RBRACKET
        """
        p[0] = c_ast.ArrayDecl(
            type=c_ast.TypeDecl(None, None, None),
            dim=c_ast.ID(p[3], self._coord(p.lineno(3))),
            dim_quals=[],
            coord=self._coord(p.lineno(1)))

    def p_direct_abstract_declarator_6(self, p):
        """ direct_abstract_declarator  : direct_abstract_declarator LPAREN parameter_type_list_opt RPAREN
        """
        func = c_ast.FuncDecl(
            args=p[3],
            type=None,
            coord=p[1].coord)

        p[0] = self._type_modify_decl(decl=p[1], modifier=func)

    def p_direct_abstract_declarator_7(self, p):
        """ direct_abstract_declarator  : LPAREN parameter_type_list_opt RPAREN
        """
        p[0] = c_ast.FuncDecl(
            args=p[2],
            type=c_ast.TypeDecl(None, None, None),
            coord=self._coord(p.lineno(1)))

    # declaration is a list, statement isn't. To make it consistent, block_item
    # will always be a list
    #
    def p_block_item(self, p):
        """ block_item  : declaration
                        | statement
        """
        p[0] = p[1] if isinstance(p[1], list) else [p[1]]

    # Since we made block_item a list, this just combines lists
    #
    def p_block_item_list(self, p):
        """ block_item_list : block_item
                            | block_item_list block_item
        """
        # Empty block items (plain ';') produce [None], so ignore them
        p[0] = p[1] if (len(p) == 2 or p[2] == [None]) else p[1] + p[2]

    def p_compound_statement_1(self, p):
        """ compound_statement : brace_open block_item_list_opt brace_close """
        p[0] = c_ast.Compound(
            block_items=p[2],
            coord=self._coord(p.lineno(1)))

    def p_labeled_statement_1(self, p):
        """ labeled_statement : ID COLON statement """
        p[0] = c_ast.Label(p[1], p[3], self._coord(p.lineno(1)))

    def p_labeled_statement_2(self, p):
        """ labeled_statement : CASE constant_expression COLON statement """
        p[0] = c_ast.Case(p[2], [p[4]], self._coord(p.lineno(1)))

    def p_labeled_statement_3(self, p):
        """ labeled_statement : DEFAULT COLON statement """
        p[0] = c_ast.Default([p[3]], self._coord(p.lineno(1)))

    def p_selection_statement_1(self, p):
        """ selection_statement : IF LPAREN expression RPAREN statement """
        p[0] = c_ast.If(p[3], p[5], None, self._coord(p.lineno(1)))

    def p_selection_statement_2(self, p):
        """ selection_statement : IF LPAREN expression RPAREN statement ELSE statement """
        p[0] = c_ast.If(p[3], p[5], p[7], self._coord(p.lineno(1)))

    def p_selection_statement_3(self, p):
        """ selection_statement : SWITCH LPAREN expression RPAREN statement """
        p[0] = fix_switch_cases(
                c_ast.Switch(p[3], p[5], self._coord(p.lineno(1))))

    def p_iteration_statement_1(self, p):
        """ iteration_statement : WHILE LPAREN expression RPAREN statement """
        p[0] = c_ast.While(p[3], p[5], self._coord(p.lineno(1)))

    def p_iteration_statement_2(self, p):
        """ iteration_statement : DO statement WHILE LPAREN expression RPAREN SEMI """
        p[0] = c_ast.DoWhile(p[5], p[2], self._coord(p.lineno(1)))

    def p_iteration_statement_3(self, p):
        """ iteration_statement : FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN statement """
        p[0] = c_ast.For(p[3], p[5], p[7], p[9], self._coord(p.lineno(1)))

    def p_iteration_statement_4(self, p):
        """ iteration_statement : FOR LPAREN declaration expression_opt SEMI expression_opt RPAREN statement """
        p[0] = c_ast.For(c_ast.DeclList(p[3], self._coord(p.lineno(1))),
                         p[4], p[6], p[8], self._coord(p.lineno(1)))

    def p_jump_statement_1(self, p):
        """ jump_statement  : GOTO ID SEMI """
        p[0] = c_ast.Goto(p[2], self._coord(p.lineno(1)))

    def p_jump_statement_2(self, p):
        """ jump_statement  : BREAK SEMI """
        p[0] = c_ast.Break(self._coord(p.lineno(1)))

    def p_jump_statement_3(self, p):
        """ jump_statement  : CONTINUE SEMI """
        p[0] = c_ast.Continue(self._coord(p.lineno(1)))

    def p_jump_statement_4(self, p):
        """ jump_statement  : RETURN expression SEMI
                            | RETURN SEMI
        """
        p[0] = c_ast.Return(p[2] if len(p) == 4 else None, self._coord(p.lineno(1)))

    def p_expression_statement(self, p):
        """ expression_statement : expression_opt SEMI """
        if p[1] is None:
            p[0] = c_ast.EmptyStatement(self._coord(p.lineno(1)))
        else:
            p[0] = p[1]

    def p_expression(self, p):
        """ expression  : assignment_expression
                        | expression COMMA assignment_expression
        """
        if len(p) == 2:
            p[0] = p[1]
        else:
            if not isinstance(p[1], c_ast.ExprList):
                p[1] = c_ast.ExprList([p[1]], p[1].coord)

            p[1].exprs.append(p[3])
            p[0] = p[1]

    def p_typedef_name(self, p):
        """ typedef_name : TYPEID """
        p[0] = c_ast.IdentifierType([p[1]], coord=self._coord(p.lineno(1)))

    def p_assignment_expression(self, p):
        """ assignment_expression   : conditional_expression
                                    | unary_expression assignment_operator assignment_expression
        """
        if len(p) == 2:
            p[0] = p[1]
        else:
            p[0] = c_ast.Assignment(p[2], p[1], p[3], p[1].coord)

    # K&R2 defines these as many separate rules, to encode
    # precedence and associativity. Why work hard ? I'll just use
    # the built in precedence/associativity specification feature
    # of PLY. (see precedence declaration above)
    #
    def p_assignment_operator(self, p):
        """ assignment_operator : EQUALS
                                | XOREQUAL
                                | TIMESEQUAL
                                | DIVEQUAL
                                | MODEQUAL
                                | PLUSEQUAL
                                | MINUSEQUAL
                                | LSHIFTEQUAL
                                | RSHIFTEQUAL
                                | ANDEQUAL
                                | OREQUAL
        """
        p[0] = p[1]

    def p_constant_expression(self, p):
        """ constant_expression : conditional_expression """
        p[0] = p[1]

    def p_conditional_expression(self, p):
        """ conditional_expression  : binary_expression
                                    | binary_expression CONDOP expression COLON conditional_expression
        """
        if len(p) == 2:
            p[0] = p[1]
        else:
            p[0] = c_ast.TernaryOp(p[1], p[3], p[5], p[1].coord)

    def p_binary_expression(self, p):
        """ binary_expression   : cast_expression
                                | binary_expression TIMES binary_expression
                                | binary_expression DIVIDE binary_expression
                                | binary_expression MOD binary_expression
                                | binary_expression PLUS binary_expression
                                | binary_expression MINUS binary_expression
                                | binary_expression RSHIFT binary_expression
                                | binary_expression LSHIFT binary_expression
                                | binary_expression LT binary_expression
                                | binary_expression LE binary_expression
                                | binary_expression GE binary_expression
                                | binary_expression GT binary_expression
                                | binary_expression EQ binary_expression
                                | binary_expression NE binary_expression
                                | binary_expression AND binary_expression
                                | binary_expression OR binary_expression
                                | binary_expression XOR binary_expression
                                | binary_expression LAND binary_expression
                                | binary_expression LOR binary_expression
        """
        if len(p) == 2:
            p[0] = p[1]
        else:
            p[0] = c_ast.BinaryOp(p[2], p[1], p[3], p[1].coord)

    def p_cast_expression_1(self, p):
        """ cast_expression : unary_expression """
        p[0] = p[1]

    def p_cast_expression_2(self, p):
        """ cast_expression : LPAREN type_name RPAREN cast_expression """
        p[0] = c_ast.Cast(p[2], p[4], self._coord(p.lineno(1)))

    def p_unary_expression_1(self, p):
        """ unary_expression    : postfix_expression """
        p[0] = p[1]

    def p_unary_expression_2(self, p):
        """ unary_expression    : PLUSPLUS unary_expression
                                | MINUSMINUS unary_expression
                                | unary_operator cast_expression
        """
        p[0] = c_ast.UnaryOp(p[1], p[2], p[2].coord)

    def p_unary_expression_3(self, p):
        """ unary_expression    : SIZEOF unary_expression
                                | SIZEOF LPAREN type_name RPAREN
        """
        p[0] = c_ast.UnaryOp(
            p[1],
            p[2] if len(p) == 3 else p[3],
            self._coord(p.lineno(1)))

    def p_unary_operator(self, p):
        """ unary_operator  : AND
                            | TIMES
                            | PLUS
                            | MINUS
                            | NOT
                            | LNOT
        """
        p[0] = p[1]

    def p_postfix_expression_1(self, p):
        """ postfix_expression  : primary_expression """
        p[0] = p[1]

    def p_postfix_expression_2(self, p):
        """ postfix_expression  : postfix_expression LBRACKET expression RBRACKET """
        p[0] = c_ast.ArrayRef(p[1], p[3], p[1].coord)

    def p_postfix_expression_3(self, p):
        """ postfix_expression  : postfix_expression LPAREN argument_expression_list RPAREN
                                | postfix_expression LPAREN RPAREN
        """
        p[0] = c_ast.FuncCall(p[1], p[3] if len(p) == 5 else None, p[1].coord)

    def p_postfix_expression_4(self, p):
        """ postfix_expression  : postfix_expression PERIOD ID
                                | postfix_expression PERIOD TYPEID
                                | postfix_expression ARROW ID
                                | postfix_expression ARROW TYPEID
        """
        field = c_ast.ID(p[3], self._coord(p.lineno(3)))
        p[0] = c_ast.StructRef(p[1], p[2], field, p[1].coord)

    def p_postfix_expression_5(self, p):
        """ postfix_expression  : postfix_expression PLUSPLUS
                                | postfix_expression MINUSMINUS
        """
        p[0] = c_ast.UnaryOp('p' + p[2], p[1], p[1].coord)

    def p_postfix_expression_6(self, p):
        """ postfix_expression  : LPAREN type_name RPAREN brace_open initializer_list brace_close
                                | LPAREN type_name RPAREN brace_open initializer_list COMMA brace_close
        """
        p[0] = c_ast.CompoundLiteral(p[2], p[5])

    def p_primary_expression_1(self, p):
        """ primary_expression  : identifier """
        p[0] = p[1]

    def p_primary_expression_2(self, p):
        """ primary_expression  : constant """
        p[0] = p[1]

    def p_primary_expression_3(self, p):
        """ primary_expression  : unified_string_literal
                                | unified_wstring_literal
        """
        p[0] = p[1]

    def p_primary_expression_4(self, p):
        """ primary_expression  : LPAREN expression RPAREN """
        p[0] = p[2]

    def p_primary_expression_5(self, p):
        """ primary_expression  : OFFSETOF LPAREN type_name COMMA identifier RPAREN
        """
        coord = self._coord(p.lineno(1))
        p[0] = c_ast.FuncCall(c_ast.ID(p[1], coord),
                              c_ast.ExprList([p[3], p[5]], coord),
                              coord)

    def p_argument_expression_list(self, p):
        """ argument_expression_list    : assignment_expression
                                        | argument_expression_list COMMA assignment_expression
        """
        if len(p) == 2: # single expr
            p[0] = c_ast.ExprList([p[1]], p[1].coord)
        else:
            p[1].exprs.append(p[3])
            p[0] = p[1]

    def p_identifier(self, p):
        """ identifier  : ID """
        p[0] = c_ast.ID(p[1], self._coord(p.lineno(1)))

    def p_constant_1(self, p):
        """ constant    : INT_CONST_DEC
                        | INT_CONST_OCT
                        | INT_CONST_HEX
                        | INT_CONST_BIN
        """
        p[0] = c_ast.Constant(
            'int', p[1], self._coord(p.lineno(1)))

    def p_constant_2(self, p):
        """ constant    : FLOAT_CONST
                        | HEX_FLOAT_CONST
        """
        p[0] = c_ast.Constant(
            'float', p[1], self._coord(p.lineno(1)))

    def p_constant_3(self, p):
        """ constant    : CHAR_CONST
                        | WCHAR_CONST
        """
        p[0] = c_ast.Constant(
            'char', p[1], self._coord(p.lineno(1)))

    # The "unified" string and wstring literal rules are for supporting
    # concatenation of adjacent string literals.
    # I.e. "hello " "world" is seen by the C compiler as a single string literal
    # with the value "hello world"
    #
    def p_unified_string_literal(self, p):
        """ unified_string_literal  : STRING_LITERAL
                                    | unified_string_literal STRING_LITERAL
        """
        if len(p) == 2: # single literal
            p[0] = c_ast.Constant(
                'string', p[1], self._coord(p.lineno(1)))
        else:
            p[1].value = p[1].value[:-1] + p[2][1:]
            p[0] = p[1]

    def p_unified_wstring_literal(self, p):
        """ unified_wstring_literal : WSTRING_LITERAL
                                    | unified_wstring_literal WSTRING_LITERAL
        """
        if len(p) == 2: # single literal
            p[0] = c_ast.Constant(
                'string', p[1], self._coord(p.lineno(1)))
        else:
            p[1].value = p[1].value.rstrip()[:-1] + p[2][2:]
            p[0] = p[1]

    def p_brace_open(self, p):
        """ brace_open  :   LBRACE
        """
        p[0] = p[1]

    def p_brace_close(self, p):
        """ brace_close :   RBRACE
        """
        p[0] = p[1]

    def p_empty(self, p):
        'empty : '
        p[0] = None

    def p_error(self, p):
        # If error recovery is added here in the future, make sure
        # _get_yacc_lookahead_token still works!
        #
        if p:
            self._parse_error(
                'before: %s' % p.value,
                self._coord(lineno=p.lineno,
                            column=self.clex.find_tok_column(p)))
        else:
            self._parse_error('At end of input', '')


#------------------------------------------------------------------------------
if __name__ == "__main__":
    import pprint
    import time, sys

    #t1 = time.time()
    #parser = CParser(lex_optimize=True, yacc_debug=True, yacc_optimize=False)
    #sys.write(time.time() - t1)

    #buf = '''
        #int (*k)(int);
    #'''

    ## set debuglevel to 2 for debugging
    #t = parser.parse(buf, 'x.c', debuglevel=0)
    #t.show(showcoord=True)

PK     ʽ\}{!  !    _ast_gen.pynu [        #-----------------------------------------------------------------
# _ast_gen.py
#
# Generates the AST Node classes from a specification given in
# a configuration file
#
# The design of this module was inspired by astgen.py from the
# Python 2.5 code-base.
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------
import pprint
from string import Template


class ASTCodeGenerator(object):
    def __init__(self, cfg_filename='_c_ast.cfg'):
        """ Initialize the code generator from a configuration
            file.
        """
        self.cfg_filename = cfg_filename
        self.node_cfg = [NodeCfg(name, contents)
            for (name, contents) in self.parse_cfgfile(cfg_filename)]

    def generate(self, file=None):
        """ Generates the code into file, an open file buffer.
        """
        src = Template(_PROLOGUE_COMMENT).substitute(
            cfg_filename=self.cfg_filename)

        src += _PROLOGUE_CODE
        for node_cfg in self.node_cfg:
            src += node_cfg.generate_source() + '\n\n'

        file.write(src)

    def parse_cfgfile(self, filename):
        """ Parse the configuration file and yield pairs of
            (name, contents) for each node.
        """
        with open(filename, "r") as f:
            for line in f:
                line = line.strip()
                if not line or line.startswith('#'):
                    continue
                colon_i = line.find(':')
                lbracket_i = line.find('[')
                rbracket_i = line.find(']')
                if colon_i < 1 or lbracket_i <= colon_i or rbracket_i <= lbracket_i:
                    raise RuntimeError("Invalid line in %s:\n%s\n" % (filename, line))

                name = line[:colon_i]
                val = line[lbracket_i + 1:rbracket_i]
                vallist = [v.strip() for v in val.split(',')] if val else []
                yield name, vallist


class NodeCfg(object):
    """ Node configuration.

        name: node name
        contents: a list of contents - attributes and child nodes
        See comment at the top of the configuration file for details.
    """
    def __init__(self, name, contents):
        self.name = name
        self.all_entries = []
        self.attr = []
        self.child = []
        self.seq_child = []

        for entry in contents:
            clean_entry = entry.rstrip('*')
            self.all_entries.append(clean_entry)

            if entry.endswith('**'):
                self.seq_child.append(clean_entry)
            elif entry.endswith('*'):
                self.child.append(clean_entry)
            else:
                self.attr.append(entry)

    def generate_source(self):
        src = self._gen_init()
        src += '\n' + self._gen_children()
        src += '\n' + self._gen_attr_names()
        return src

    def _gen_init(self):
        src = "class %s(Node):\n" % self.name

        if self.all_entries:
            args = ', '.join(self.all_entries)
            slots = ', '.join("'{0}'".format(e) for e in self.all_entries)
            slots += ", 'coord', '__weakref__'"
            arglist = '(self, %s, coord=None)' % args
        else:
            slots = "'coord', '__weakref__'"
            arglist = '(self, coord=None)'

        src += "    __slots__ = (%s)\n" % slots
        src += "    def __init__%s:\n" % arglist

        for name in self.all_entries + ['coord']:
            src += "        self.%s = %s\n" % (name, name)

        return src

    def _gen_children(self):
        src = '    def children(self):\n'

        if self.all_entries:
            src += '        nodelist = []\n'

            for child in self.child:
                src += (
                    '        if self.%(child)s is not None:' +
                    ' nodelist.append(("%(child)s", self.%(child)s))\n') % (
                        dict(child=child))

            for seq_child in self.seq_child:
                src += (
                    '        for i, child in enumerate(self.%(child)s or []):\n'
                    '            nodelist.append(("%(child)s[%%d]" %% i, child))\n') % (
                        dict(child=seq_child))

            src += '        return tuple(nodelist)\n'
        else:
            src += '        return ()\n'

        return src

    def _gen_attr_names(self):
        src = "    attr_names = (" + ''.join("%r, " % nm for nm in self.attr) + ')'
        return src


_PROLOGUE_COMMENT = \
r'''#-----------------------------------------------------------------
# ** ATTENTION **
# This code was automatically generated from the file:
# $cfg_filename
#
# Do not modify it directly. Modify the configuration file and
# run the generator again.
# ** ** *** ** **
#
# pycparser: c_ast.py
#
# AST Node classes.
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------

'''

_PROLOGUE_CODE = r'''
import sys


class Node(object):
    __slots__ = ()
    """ Abstract base class for AST nodes.
    """
    def children(self):
        """ A sequence of all children that are Nodes
        """
        pass

    def show(self, buf=sys.stdout, offset=0, attrnames=False, nodenames=False, showcoord=False, _my_node_name=None):
        """ Pretty print the Node and all its attributes and
            children (recursively) to a buffer.

            buf:
                Open IO buffer into which the Node is printed.

            offset:
                Initial offset (amount of leading spaces)

            attrnames:
                True if you want to see the attribute names in
                name=value pairs. False to only see the values.

            nodenames:
                True if you want to see the actual node names
                within their parents.

            showcoord:
                Do you want the coordinates of each Node to be
                displayed.
        """
        lead = ' ' * offset
        if nodenames and _my_node_name is not None:
            buf.write(lead + self.__class__.__name__+ ' <' + _my_node_name + '>: ')
        else:
            buf.write(lead + self.__class__.__name__+ ': ')

        if self.attr_names:
            if attrnames:
                nvlist = [(n, getattr(self,n)) for n in self.attr_names]
                attrstr = ', '.join('%s=%s' % nv for nv in nvlist)
            else:
                vlist = [getattr(self, n) for n in self.attr_names]
                attrstr = ', '.join('%s' % v for v in vlist)
            buf.write(attrstr)

        if showcoord:
            buf.write(' (at %s)' % self.coord)
        buf.write('\n')

        for (child_name, child) in self.children():
            child.show(
                buf,
                offset=offset + 2,
                attrnames=attrnames,
                nodenames=nodenames,
                showcoord=showcoord,
                _my_node_name=child_name)


class NodeVisitor(object):
    """ A base NodeVisitor class for visiting c_ast nodes.
        Subclass it and define your own visit_XXX methods, where
        XXX is the class name you want to visit with these
        methods.

        For example:

        class ConstantVisitor(NodeVisitor):
            def __init__(self):
                self.values = []

            def visit_Constant(self, node):
                self.values.append(node.value)

        Creates a list of values of all the constant nodes
        encountered below the given node. To use it:

        cv = ConstantVisitor()
        cv.visit(node)

        Notes:

        *   generic_visit() will be called for AST nodes for which
            no visit_XXX method was defined.
        *   The children of nodes for which a visit_XXX was
            defined will not be visited - if you need this, call
            generic_visit() on the node.
            You can use:
                NodeVisitor.generic_visit(self, node)
        *   Modeled after Python's own AST visiting facilities
            (the ast module of Python 3.0)
    """
    def visit(self, node):
        """ Visit a node.
        """
        method = 'visit_' + node.__class__.__name__
        visitor = getattr(self, method, self.generic_visit)
        return visitor(node)

    def generic_visit(self, node):
        """ Called if no explicit visitor function exists for a
            node. Implements preorder visiting of the node.
        """
        for c_name, c in node.children():
            self.visit(c)


'''


if __name__ == "__main__":
    import sys
    ast_gen = ASTCodeGenerator('_c_ast.cfg')
    ast_gen.generate(open('c_ast.py', 'w'))

PK     ʽ\8KF4U U 
  yacctab.pynu [        
# yacctab.py
# This file is automatically generated. Do not edit.
_tabversion = '3.8'

_lr_method = 'LALR'

_lr_signature = '0B26D831EE3ADD67934989B5D61F8ACA'
    
_lr_action_items = {'$end':([0,1,2,3,4,5,6,7,8,12,50,67,90,199,285,302,],[-263,0,-29,-30,-31,-33,-34,-35,-36,-37,-32,-47,-38,-39,-262,-159,]),'SEMI':([0,2,4,5,6,7,8,10,11,12,13,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,55,56,57,58,59,60,63,65,66,67,70,71,72,73,74,75,76,77,79,80,81,82,83,84,86,87,88,90,91,93,94,98,111,112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,143,144,157,158,159,169,170,171,173,174,175,176,177,178,179,180,181,182,183,184,187,189,192,195,196,197,198,199,200,201,202,203,209,210,246,247,248,250,251,252,254,259,260,278,279,283,285,289,291,292,293,294,295,296,298,299,300,301,302,303,304,305,307,308,309,315,316,317,318,319,320,323,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,360,367,368,369,370,371,375,376,379,380,385,386,387,388,390,394,395,396,397,399,400,404,406,408,412,413,414,415,416,417,418,419,421,422,423,428,429,430,432,434,436,437,438,441,442,443,445,446,447,448,],[8,8,-31,-33,-34,-35,-36,-263,67,-37,-111,-178,-263,-263,-263,-263,-114,-56,-263,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,-263,-81,-46,-145,-17,-18,-77,-80,-147,-47,-112,-113,-50,-9,-10,-51,-52,-53,-122,-27,-28,-124,-101,-102,-261,-85,-86,-38,-263,-81,-145,-146,-179,-214,-193,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-79,-134,-115,-123,-125,-263,-263,-263,-13,-263,-157,-155,-156,-40,-41,-42,-43,-44,-45,-248,309,-14,-263,317,318,320,-176,-39,-82,-78,-148,-154,-150,-152,-236,-237,-217,-218,-219,-214,-220,-258,-260,-120,-121,-103,-262,-87,381,382,-25,-26,-96,-98,-83,-23,-24,-84,-159,-158,-13,-263,-192,-263,-175,-263,396,-171,-172,397,-174,-180,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,-213,-231,-232,-233,-234,-235,-244,-135,-149,-151,-153,-116,-119,-104,-105,-88,-89,-100,-160,-263,-162,-177,421,-263,-170,-173,-229,-230,-221,-215,-136,-117,-118,-97,-99,-161,-263,-263,-263,-263,433,-194,-163,-165,-166,439,-238,-245,-263,443,-239,-164,-167,-263,-263,-169,-168,]),'PPHASH':([0,2,4,5,6,7,8,12,50,67,90,199,285,302,],[12,12,-31,-33,-34,-35,-36,-37,-32,-47,-38,-39,-262,-159,]),'ID':([0,2,4,5,6,7,8,10,12,14,15,16,17,18,19,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,55,58,61,62,64,67,68,69,72,73,74,75,76,77,79,80,81,82,83,84,85,86,87,88,90,91,94,95,97,99,106,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,158,159,160,161,169,170,171,174,175,176,177,178,179,180,181,182,183,185,192,194,197,199,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,249,253,255,264,265,266,269,270,272,275,276,277,280,283,284,285,286,289,297,298,299,300,301,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,375,376,379,380,383,384,386,387,388,395,396,397,398,401,403,405,407,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[20,20,-31,-33,-34,-35,-36,20,-37,20,-178,-263,-263,-263,-263,20,-56,-263,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,83,87,-90,-91,-32,20,20,20,125,125,-47,-263,125,-50,-9,-10,-51,-52,-53,-122,-27,-28,-124,-101,-102,164,-261,-85,-86,-38,184,20,20,125,20,20,-223,125,125,125,125,125,-224,-225,-222,-226,-227,-263,-223,125,125,-263,-28,-123,-125,164,164,20,-263,-263,184,-157,-155,-156,-40,-41,-42,-43,-44,-45,125,184,316,125,-39,125,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,347,349,125,125,125,-11,125,-12,125,125,-223,-223,125,125,125,-103,164,-262,125,-87,125,-83,-23,-24,-84,-159,-158,184,184,-175,125,125,125,125,125,-171,-172,-174,125,-263,-139,-104,-105,-88,-89,20,125,-160,184,-162,125,-170,-173,125,125,125,-263,125,125,-11,-161,184,184,184,125,125,-163,-165,-166,125,-263,184,125,-164,-167,184,184,-169,-168,]),'LPAREN':([0,2,4,5,6,7,8,10,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,50,55,58,61,62,64,66,67,68,70,72,73,74,75,76,77,79,80,81,82,83,84,86,87,88,90,91,94,95,97,98,99,106,108,114,115,116,117,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,145,146,147,149,150,151,157,158,159,169,170,171,174,175,176,177,178,179,180,181,182,183,184,185,188,190,191,192,193,197,199,202,203,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,246,247,249,253,255,258,259,260,264,265,266,269,272,275,276,277,278,279,283,285,286,289,297,298,299,300,301,302,303,305,308,309,310,311,312,313,315,317,318,320,345,347,348,349,350,354,355,357,358,361,363,367,368,369,370,371,375,376,379,380,383,384,386,387,388,393,395,396,397,398,399,400,401,403,405,409,410,412,413,416,417,418,419,420,421,428,429,430,433,434,435,436,437,439,441,442,443,445,446,447,448,],[21,21,-31,-33,-34,-35,-36,61,-37,69,21,-178,-263,-263,-263,-263,-114,21,-56,-263,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,95,61,61,120,120,148,-47,-263,69,-50,-9,-10,-51,-52,-53,-122,-27,-28,-124,-101,-102,-261,-85,-86,-38,120,95,95,120,148,21,61,-223,243,249,249,253,255,120,-224,-225,-222,-228,-248,-226,-227,-240,-241,-242,-243,261,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-263,-223,120,120,-263,-28,-115,-123,-125,95,-263,-263,120,-157,-155,-156,-40,-41,-42,-43,-44,-45,-248,253,310,312,313,120,315,120,-39,-148,-154,-150,-152,120,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,120,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,120,120,-236,-237,120,120,120,358,-258,-260,-11,120,-12,253,-223,-223,120,120,-120,-121,-103,-262,253,-87,253,-83,-23,-24,-84,-159,-158,120,120,-175,120,120,120,120,120,-171,-172,-174,-231,-232,-233,-234,-235,253,-244,358,358,-263,-139,-149,-151,-153,-116,-119,-104,-105,-88,-89,21,253,-160,120,-162,420,120,-170,-173,253,-229,-230,120,253,-263,120,-11,-117,-118,-161,120,120,120,120,120,-163,-165,-166,120,-238,-263,-245,120,120,-239,-164,-167,120,120,-169,-168,]),'TIMES':([0,2,4,5,6,7,8,10,12,15,16,17,18,19,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,50,55,61,62,64,67,68,72,73,74,75,76,77,79,80,81,82,83,84,86,87,88,90,91,95,97,99,106,108,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,138,139,140,141,142,145,146,147,149,150,151,159,169,170,171,174,175,176,177,178,179,180,181,182,183,184,185,192,197,199,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,246,247,248,249,250,251,252,253,254,255,258,259,260,264,265,266,269,272,275,276,277,283,285,286,289,297,298,299,300,301,302,303,305,308,309,310,311,312,313,315,317,318,320,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,354,355,358,361,363,375,376,379,380,383,384,386,387,388,395,396,397,398,399,400,401,403,404,405,406,409,410,416,417,418,419,420,421,428,429,430,433,434,435,436,437,439,441,442,443,445,446,447,448,],[23,23,-31,-33,-34,-35,-36,23,-37,-178,-263,-263,-263,-263,23,-56,-263,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,23,23,108,146,-47,-263,-50,-9,-10,-51,-52,-53,23,-27,-28,-124,-101,-102,-261,-85,-86,-38,146,23,146,23,23,-223,-214,224,-216,146,146,146,-195,146,146,-224,-225,-222,-228,-248,-226,-227,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-263,-223,272,275,-263,-28,-125,23,-263,-263,146,-157,-155,-156,-40,-41,-42,-43,-44,-45,-248,146,146,146,-39,146,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,-236,-237,-217,146,-218,-219,-214,146,-220,146,23,-258,-260,-11,146,-12,146,-223,-223,146,146,-103,-262,146,-87,146,-83,-23,-24,-84,-159,-158,146,146,-175,146,146,146,146,146,-171,-172,-174,-196,-197,-198,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,-231,-232,-233,-234,-235,146,-244,23,-263,-139,-104,-105,-88,-89,23,146,-160,146,-162,146,-170,-173,146,-229,-230,146,146,-221,-263,-215,146,-11,-161,146,146,146,146,146,-163,-165,-166,146,-238,-263,-245,146,146,-239,-164,-167,146,146,-169,-168,]),'CONST':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,68,69,70,71,81,82,83,84,86,87,88,89,90,91,92,95,120,148,150,151,157,159,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[24,24,-31,-33,-34,-35,-36,24,-37,-111,-178,24,24,24,24,-114,-56,24,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,24,-48,24,24,-47,24,24,-112,-113,24,-124,-101,-102,-261,-85,-86,24,-38,24,-49,24,24,24,24,24,-115,-125,24,24,24,-92,24,24,24,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,24,24,24,24,24,-120,-121,-103,-262,24,24,-87,-93,-159,-158,-175,24,-171,-172,-174,24,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'RESTRICT':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,68,69,70,71,81,82,83,84,86,87,88,89,90,91,92,95,120,148,150,151,157,159,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[25,25,-31,-33,-34,-35,-36,25,-37,-111,-178,25,25,25,25,-114,-56,25,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,25,-48,25,25,-47,25,25,-112,-113,25,-124,-101,-102,-261,-85,-86,25,-38,25,-49,25,25,25,25,25,-115,-125,25,25,25,-92,25,25,25,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,25,25,25,25,25,-120,-121,-103,-262,25,25,-87,-93,-159,-158,-175,25,-171,-172,-174,25,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'VOLATILE':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,68,69,70,71,81,82,83,84,86,87,88,89,90,91,92,95,120,148,150,151,157,159,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[26,26,-31,-33,-34,-35,-36,26,-37,-111,-178,26,26,26,26,-114,-56,26,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,26,-48,26,26,-47,26,26,-112,-113,26,-124,-101,-102,-261,-85,-86,26,-38,26,-49,26,26,26,26,26,-115,-125,26,26,26,-92,26,26,26,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,26,26,26,26,26,-120,-121,-103,-262,26,26,-87,-93,-159,-158,-175,26,-171,-172,-174,26,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'VOID':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[27,27,-31,-33,-34,-35,-36,27,-37,-111,-178,27,27,27,27,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,27,-48,27,27,-47,27,-112,-113,-101,-102,-261,-85,-86,27,-38,27,-49,27,27,27,-115,27,27,27,-92,27,27,27,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,27,27,27,27,27,-120,-121,-103,-262,27,27,-87,-93,-159,-158,-175,27,-171,-172,-174,27,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'_BOOL':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[28,28,-31,-33,-34,-35,-36,28,-37,-111,-178,28,28,28,28,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,28,-48,28,28,-47,28,-112,-113,-101,-102,-261,-85,-86,28,-38,28,-49,28,28,28,-115,28,28,28,-92,28,28,28,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,28,28,28,28,28,-120,-121,-103,-262,28,28,-87,-93,-159,-158,-175,28,-171,-172,-174,28,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'CHAR':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[29,29,-31,-33,-34,-35,-36,29,-37,-111,-178,29,29,29,29,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,29,-48,29,29,-47,29,-112,-113,-101,-102,-261,-85,-86,29,-38,29,-49,29,29,29,-115,29,29,29,-92,29,29,29,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,29,29,29,29,29,-120,-121,-103,-262,29,29,-87,-93,-159,-158,-175,29,-171,-172,-174,29,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'SHORT':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[30,30,-31,-33,-34,-35,-36,30,-37,-111,-178,30,30,30,30,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,30,-48,30,30,-47,30,-112,-113,-101,-102,-261,-85,-86,30,-38,30,-49,30,30,30,-115,30,30,30,-92,30,30,30,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,30,30,30,30,30,-120,-121,-103,-262,30,30,-87,-93,-159,-158,-175,30,-171,-172,-174,30,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'INT':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[31,31,-31,-33,-34,-35,-36,31,-37,-111,-178,31,31,31,31,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,31,-48,31,31,-47,31,-112,-113,-101,-102,-261,-85,-86,31,-38,31,-49,31,31,31,-115,31,31,31,-92,31,31,31,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,31,31,31,31,31,-120,-121,-103,-262,31,31,-87,-93,-159,-158,-175,31,-171,-172,-174,31,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'LONG':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[32,32,-31,-33,-34,-35,-36,32,-37,-111,-178,32,32,32,32,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,32,-48,32,32,-47,32,-112,-113,-101,-102,-261,-85,-86,32,-38,32,-49,32,32,32,-115,32,32,32,-92,32,32,32,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,32,32,32,32,32,-120,-121,-103,-262,32,32,-87,-93,-159,-158,-175,32,-171,-172,-174,32,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'FLOAT':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[33,33,-31,-33,-34,-35,-36,33,-37,-111,-178,33,33,33,33,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,33,-48,33,33,-47,33,-112,-113,-101,-102,-261,-85,-86,33,-38,33,-49,33,33,33,-115,33,33,33,-92,33,33,33,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,33,33,33,33,33,-120,-121,-103,-262,33,33,-87,-93,-159,-158,-175,33,-171,-172,-174,33,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'DOUBLE':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[34,34,-31,-33,-34,-35,-36,34,-37,-111,-178,34,34,34,34,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,34,-48,34,34,-47,34,-112,-113,-101,-102,-261,-85,-86,34,-38,34,-49,34,34,34,-115,34,34,34,-92,34,34,34,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,34,34,34,34,34,-120,-121,-103,-262,34,34,-87,-93,-159,-158,-175,34,-171,-172,-174,34,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'_COMPLEX':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[35,35,-31,-33,-34,-35,-36,35,-37,-111,-178,35,35,35,35,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,35,-48,35,35,-47,35,-112,-113,-101,-102,-261,-85,-86,35,-38,35,-49,35,35,35,-115,35,35,35,-92,35,35,35,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,35,35,35,35,35,-120,-121,-103,-262,35,35,-87,-93,-159,-158,-175,35,-171,-172,-174,35,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'SIGNED':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[36,36,-31,-33,-34,-35,-36,36,-37,-111,-178,36,36,36,36,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,36,-48,36,36,-47,36,-112,-113,-101,-102,-261,-85,-86,36,-38,36,-49,36,36,36,-115,36,36,36,-92,36,36,36,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,36,36,36,36,36,-120,-121,-103,-262,36,36,-87,-93,-159,-158,-175,36,-171,-172,-174,36,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'UNSIGNED':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[37,37,-31,-33,-34,-35,-36,37,-37,-111,-178,37,37,37,37,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,37,-48,37,37,-47,37,-112,-113,-101,-102,-261,-85,-86,37,-38,37,-49,37,37,37,-115,37,37,37,-92,37,37,37,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,37,37,37,37,37,-120,-121,-103,-262,37,37,-87,-93,-159,-158,-175,37,-171,-172,-174,37,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'AUTO':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,90,91,92,95,148,157,174,175,176,177,178,179,180,181,182,183,199,204,278,279,283,285,289,302,303,309,315,317,318,320,358,370,371,375,376,379,380,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[41,41,-31,-33,-34,-35,-36,41,-37,-111,-178,41,41,41,41,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,41,-48,41,41,-47,41,-112,-113,-101,-102,-261,-85,-86,-38,41,-49,41,41,-115,41,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,41,-120,-121,-103,-262,-87,-159,-158,-175,41,-171,-172,-174,41,-116,-119,-104,-105,-88,-89,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'REGISTER':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,90,91,92,95,148,157,174,175,176,177,178,179,180,181,182,183,199,204,278,279,283,285,289,302,303,309,315,317,318,320,358,370,371,375,376,379,380,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[42,42,-31,-33,-34,-35,-36,42,-37,-111,-178,42,42,42,42,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,42,-48,42,42,-47,42,-112,-113,-101,-102,-261,-85,-86,-38,42,-49,42,42,-115,42,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,42,-120,-121,-103,-262,-87,-159,-158,-175,42,-171,-172,-174,42,-116,-119,-104,-105,-88,-89,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'STATIC':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,68,69,70,71,82,83,84,86,87,88,90,91,92,95,148,151,157,159,174,175,176,177,178,179,180,181,182,183,199,204,278,279,283,285,289,302,303,309,315,317,318,320,358,370,371,375,376,379,380,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[22,22,-31,-33,-34,-35,-36,22,-37,-111,-178,22,22,22,22,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,22,-48,22,22,-47,150,22,-112,-113,-124,-101,-102,-261,-85,-86,-38,22,-49,22,22,277,-115,-125,22,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,22,-120,-121,-103,-262,-87,-159,-158,-175,22,-171,-172,-174,22,-116,-119,-104,-105,-88,-89,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'EXTERN':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,90,91,92,95,148,157,174,175,176,177,178,179,180,181,182,183,199,204,278,279,283,285,289,302,303,309,315,317,318,320,358,370,371,375,376,379,380,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[43,43,-31,-33,-34,-35,-36,43,-37,-111,-178,43,43,43,43,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,43,-48,43,43,-47,43,-112,-113,-101,-102,-261,-85,-86,-38,43,-49,43,43,-115,43,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,43,-120,-121,-103,-262,-87,-159,-158,-175,43,-171,-172,-174,43,-116,-119,-104,-105,-88,-89,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'TYPEDEF':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,90,91,92,95,148,157,174,175,176,177,178,179,180,181,182,183,199,204,278,279,283,285,289,302,303,309,315,317,318,320,358,370,371,375,376,379,380,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[44,44,-31,-33,-34,-35,-36,44,-37,-111,-178,44,44,44,44,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,44,-48,44,44,-47,44,-112,-113,-101,-102,-261,-85,-86,-38,44,-49,44,44,-115,44,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,44,-120,-121,-103,-262,-87,-159,-158,-175,44,-171,-172,-174,44,-116,-119,-104,-105,-88,-89,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'INLINE':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,90,91,92,95,148,157,174,175,176,177,178,179,180,181,182,183,199,204,278,279,283,285,289,302,303,309,315,317,318,320,358,370,371,375,376,379,380,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[45,45,-31,-33,-34,-35,-36,45,-37,-111,-178,45,45,45,45,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,45,-48,45,45,-47,45,-112,-113,-101,-102,-261,-85,-86,-38,45,-49,45,45,-115,45,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,45,-120,-121,-103,-262,-87,-159,-158,-175,45,-171,-172,-174,45,-116,-119,-104,-105,-88,-89,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'TYPEID':([0,2,4,5,6,7,8,9,12,13,14,15,16,17,18,19,20,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,53,54,56,58,61,67,69,70,71,79,80,81,82,83,84,86,87,88,89,90,91,92,94,95,120,148,157,158,159,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,244,245,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[15,15,-31,-33,-34,-35,-36,15,-37,-111,71,-178,15,15,15,15,-114,-56,-263,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,84,88,-90,-91,-32,15,-48,15,71,15,-47,15,-112,-113,-122,-27,-28,-124,-101,-102,-261,-85,-86,15,-38,15,-49,71,15,15,15,-115,-123,-125,15,15,15,-92,15,15,15,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,15,348,350,15,15,15,15,-120,-121,-103,-262,15,15,-87,-93,-159,-158,-175,15,-171,-172,-174,15,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'ENUM':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[46,46,-31,-33,-34,-35,-36,46,-37,-111,-178,46,46,46,46,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,46,-48,46,46,-47,46,-112,-113,-101,-102,-261,-85,-86,46,-38,46,-49,46,46,46,-115,46,46,46,-92,46,46,46,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,46,46,46,46,46,-120,-121,-103,-262,46,46,-87,-93,-159,-158,-175,46,-171,-172,-174,46,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'STRUCT':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[48,48,-31,-33,-34,-35,-36,48,-37,-111,-178,48,48,48,48,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,48,-48,48,48,-47,48,-112,-113,-101,-102,-261,-85,-86,48,-38,48,-49,48,48,48,-115,48,48,48,-92,48,48,48,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,48,48,48,48,48,-120,-121,-103,-262,48,48,-87,-93,-159,-158,-175,48,-171,-172,-174,48,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'UNION':([0,2,4,5,6,7,8,9,12,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,50,53,54,56,61,67,69,70,71,83,84,86,87,88,89,90,91,92,95,120,148,157,165,166,167,168,170,171,174,175,176,177,178,179,180,181,182,183,199,204,249,253,255,261,278,279,283,285,287,288,289,290,302,303,309,315,317,318,320,358,370,371,375,376,379,380,381,382,386,388,396,397,412,413,416,428,429,430,442,443,447,448,],[49,49,-31,-33,-34,-35,-36,49,-37,-111,-178,49,49,49,49,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-32,49,-48,49,49,-47,49,-112,-113,-101,-102,-261,-85,-86,49,-38,49,-49,49,49,49,-115,49,49,49,-92,49,49,49,-157,-155,-156,-40,-41,-42,-43,-44,-45,-39,49,49,49,49,49,-120,-121,-103,-262,49,49,-87,-93,-159,-158,-175,49,-171,-172,-174,49,-116,-119,-104,-105,-88,-89,-94,-95,-160,-162,-170,-173,-117,-118,-161,-163,-165,-166,-164,-167,-169,-168,]),'LBRACE':([9,13,20,46,47,48,49,51,52,53,54,56,64,67,70,71,83,84,86,87,88,91,92,96,97,145,157,174,175,176,177,178,179,180,181,182,183,192,264,265,266,278,279,285,302,303,305,308,309,317,318,320,354,361,363,370,371,386,387,388,396,397,402,403,404,405,409,410,412,413,416,417,418,419,428,429,430,435,437,442,443,445,446,447,448,],[-263,-111,-114,86,86,-90,-91,86,-7,-8,-48,-263,86,-47,-112,-113,86,86,-261,86,86,86,-49,86,86,-263,-115,86,-157,-155,-156,-40,-41,-42,-43,-44,-45,86,-11,86,-12,-120,-121,-262,-159,-158,86,86,-175,-171,-172,-174,86,-263,-139,-116,-119,-160,86,-162,-170,-173,86,86,86,-263,86,-11,-117,-118,-161,86,86,86,-163,-165,-166,-263,86,-164,-167,86,86,-169,-168,]),'EQUALS':([10,13,15,16,17,18,19,20,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,55,56,70,71,72,73,74,75,76,77,83,84,87,88,93,112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,157,164,184,246,247,248,250,251,252,254,259,260,267,268,278,279,283,285,289,345,347,348,349,350,355,364,366,370,371,375,376,379,380,399,400,404,406,411,412,413,434,436,441,],[64,-111,-178,-263,-263,-263,-263,-114,-56,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,64,97,-112,-113,-50,-9,-10,-51,-52,-53,-101,-102,-85,-86,97,212,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-115,286,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,363,-140,-120,-121,-103,-262,-87,-231,-232,-233,-234,-235,-244,-141,-143,-116,-119,-104,-105,-88,-89,-229,-230,-221,-215,-142,-117,-118,-238,-245,-239,]),'LBRACKET':([10,13,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,55,58,61,66,70,72,73,74,75,76,77,79,80,81,82,83,84,86,87,88,94,95,98,106,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,145,157,158,159,169,170,171,184,202,203,209,210,246,247,258,259,260,267,268,278,279,283,285,289,298,299,300,301,345,347,348,349,350,355,357,358,361,364,366,367,368,369,370,371,375,376,379,380,399,400,405,411,412,413,434,435,436,441,],[62,68,-178,-263,-263,-263,-263,-114,-56,-263,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,62,62,62,147,68,-50,-9,-10,-51,-52,-53,-122,-27,-28,-124,-101,-102,-261,-85,-86,62,62,147,62,242,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,269,-115,-123,-125,62,-263,-263,-248,-148,-154,-150,-152,-236,-237,62,-258,-260,269,-140,-120,-121,-103,-262,-87,-83,-23,-24,-84,-231,-232,-233,-234,-235,-244,62,62,269,-141,-143,-149,-151,-153,-116,-119,-104,-105,-88,-89,-229,-230,269,-142,-117,-118,-238,269,-245,-239,]),'COMMA':([13,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,56,58,60,63,65,66,70,71,72,73,74,75,76,77,79,80,81,82,83,84,87,88,93,94,98,104,105,106,111,112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,143,144,155,156,157,158,159,162,163,164,170,171,184,189,198,200,201,202,203,205,206,207,208,209,210,246,247,248,250,251,252,254,257,258,259,260,263,278,279,281,282,283,284,285,289,294,295,296,298,299,300,301,307,319,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,355,356,357,359,360,362,367,368,369,370,371,374,375,376,377,378,379,380,385,389,390,391,392,399,400,404,406,408,412,413,414,415,423,424,425,427,431,434,436,441,],[-111,-178,-263,-263,-263,-263,-114,-56,-263,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-81,-145,99,-77,-80,-147,-112,-113,-50,-9,-10,-51,-52,-53,-122,-27,-28,-124,-101,-102,-85,-86,-81,-145,-146,204,-128,-263,-179,-214,-193,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-79,-134,280,-132,-115,-123,-125,284,-106,-109,-263,-263,-248,311,-176,-82,-78,-148,-154,-130,-131,-1,-2,-150,-152,-236,-237,-217,-218,-219,-214,-220,311,-263,-258,-260,361,-120,-121,284,284,-103,-107,-262,-87,383,-96,-98,-83,-23,-24,-84,-192,311,-129,-180,311,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,-213,311,401,-231,-246,-232,-233,-234,-235,-244,-144,-145,407,-135,-137,-149,-151,-153,-116,-119,-133,-104,-105,-108,-110,-88,-89,-100,311,-177,311,311,-229,-230,-221,-215,-136,-117,-118,-97,-99,-194,-247,435,-138,311,-238,-245,-239,]),'RPAREN':([13,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,58,61,66,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,87,88,94,95,98,100,101,102,103,104,105,106,111,112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,148,152,153,154,155,156,157,158,159,170,171,189,198,202,203,205,206,207,208,209,210,243,246,247,248,250,251,252,254,256,257,258,259,260,273,278,279,283,285,289,298,299,300,301,304,321,322,323,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,344,345,346,347,348,349,350,351,352,353,355,356,357,358,367,368,369,370,371,374,375,376,379,380,389,390,391,392,399,400,404,406,412,413,423,424,426,431,433,434,436,439,440,441,444,],[-111,-178,-263,-263,-263,-263,-114,-56,-263,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-54,-55,-57,-58,-59,-145,-263,-147,-263,-112,-113,-50,-9,-10,-51,-52,-53,157,-122,-27,-28,-124,-101,-102,-85,-86,-145,-263,-146,202,203,-21,-22,-126,-128,-263,-179,-214,-193,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-263,278,279,-15,-16,-132,-115,-123,-125,-263,-263,-14,-176,-148,-154,-130,-131,-1,-2,-150,-152,345,-236,-237,-217,-218,-219,-214,-220,354,355,-263,-258,-260,369,-120,-121,-103,-262,-87,-83,-23,-24,-84,-13,-127,-129,-180,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,-213,400,-231,-246,-232,-233,-234,-235,402,403,404,-244,-144,-145,-263,-149,-151,-153,-116,-119,-133,-104,-105,-88,-89,417,-177,418,419,-229,-230,-221,-215,-117,-118,-194,-247,436,438,-263,-238,-245,-263,445,-239,446,]),'COLON':([13,15,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,70,71,83,84,87,88,111,112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,157,169,170,171,184,186,198,246,247,248,250,251,252,254,259,260,278,279,283,285,289,296,298,299,300,301,306,307,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,370,371,375,376,379,380,383,390,399,400,404,406,412,413,423,434,436,441,],[-111,-178,-114,-74,-75,-76,-60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-112,-113,-101,-102,-85,-86,-179,-214,-193,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-115,297,-263,-263,305,308,-176,-236,-237,-217,-218,-219,-214,-220,-258,-260,-120,-121,-103,-262,-87,384,-83,-23,-24,-84,387,-192,-180,398,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,-213,-231,-232,-233,-234,-235,-244,-116,-119,-104,-105,-88,-89,297,-177,-229,-230,-221,-215,-117,-118,-194,-238,-245,-239,]),'PLUSPLUS':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,114,115,116,117,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,138,139,140,141,142,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,184,185,192,197,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,246,247,249,253,255,259,260,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,345,347,348,349,350,354,355,361,363,384,386,387,388,395,396,397,398,399,400,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,434,435,436,437,439,441,442,443,445,446,447,448,],[-74,-75,-76,115,115,-47,-263,-27,-28,-124,-261,115,115,-223,246,115,115,115,115,115,-224,-225,-222,-228,-248,-226,-227,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-263,-223,115,115,-263,-28,-125,115,-157,-155,-156,-40,-41,-42,-43,-44,-45,-248,115,115,115,115,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,-236,-237,115,115,115,-258,-260,-11,115,-12,115,-223,-223,115,115,-262,115,115,-159,-158,115,115,-175,115,115,115,115,115,-171,-172,-174,-231,-232,-233,-234,-235,115,-244,-263,-139,115,-160,115,-162,115,-170,-173,115,-229,-230,115,115,-263,115,-11,-161,115,115,115,115,115,-163,-165,-166,115,-238,-263,-245,115,115,-239,-164,-167,115,115,-169,-168,]),'MINUSMINUS':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,114,115,116,117,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,138,139,140,141,142,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,184,185,192,197,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,246,247,249,253,255,259,260,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,345,347,348,349,350,354,355,361,363,384,386,387,388,395,396,397,398,399,400,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,434,435,436,437,439,441,442,443,445,446,447,448,],[-74,-75,-76,116,116,-47,-263,-27,-28,-124,-261,116,116,-223,247,116,116,116,116,116,-224,-225,-222,-228,-248,-226,-227,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-263,-223,116,116,-263,-28,-125,116,-157,-155,-156,-40,-41,-42,-43,-44,-45,-248,116,116,116,116,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,-236,-237,116,116,116,-258,-260,-11,116,-12,116,-223,-223,116,116,-262,116,116,-159,-158,116,116,-175,116,116,116,116,116,-171,-172,-174,-231,-232,-233,-234,-235,116,-244,-263,-139,116,-160,116,-162,116,-170,-173,116,-229,-230,116,116,-263,116,-11,-161,116,116,116,116,116,-163,-165,-166,116,-238,-263,-245,116,116,-239,-164,-167,116,116,-169,-168,]),'SIZEOF':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,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,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,119,119,-47,-263,-27,-28,-124,-261,119,119,-223,119,119,119,119,119,-224,-225,-222,-226,-227,-263,-223,119,119,-263,-28,-125,119,-157,-155,-156,-40,-41,-42,-43,-44,-45,119,119,119,119,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,-11,119,-12,119,-223,-223,119,119,-262,119,119,-159,-158,119,119,-175,119,119,119,119,119,-171,-172,-174,119,-263,-139,119,-160,119,-162,119,-170,-173,119,119,119,-263,119,-11,-161,119,119,119,119,119,-163,-165,-166,119,-263,119,119,-164,-167,119,119,-169,-168,]),'AND':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,138,139,140,141,142,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,184,185,192,197,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,246,247,248,249,250,251,252,253,254,255,259,260,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,354,355,361,363,384,386,387,388,395,396,397,398,399,400,401,403,404,405,406,409,410,416,417,418,419,420,421,428,429,430,433,434,435,436,437,439,441,442,443,445,446,447,448,],[-74,-75,-76,123,123,-47,-263,-27,-28,-124,-261,123,123,-223,-214,237,-216,123,123,123,-195,123,123,-224,-225,-222,-228,-248,-226,-227,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-263,-223,123,123,-263,-28,-125,123,-157,-155,-156,-40,-41,-42,-43,-44,-45,-248,123,123,123,123,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,-236,-237,-217,123,-218,-219,-214,123,-220,123,-258,-260,-11,123,-12,123,-223,-223,123,123,-262,123,123,-159,-158,123,123,-175,123,123,123,123,123,-171,-172,-174,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,237,237,237,237,-231,-232,-233,-234,-235,123,-244,-263,-139,123,-160,123,-162,123,-170,-173,123,-229,-230,123,123,-221,-263,-215,123,-11,-161,123,123,123,123,123,-163,-165,-166,123,-238,-263,-245,123,123,-239,-164,-167,123,123,-169,-168,]),'PLUS':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,138,139,140,141,142,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,184,185,192,197,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,246,247,248,249,250,251,252,253,254,255,259,260,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,354,355,361,363,384,386,387,388,395,396,397,398,399,400,401,403,404,405,406,409,410,416,417,418,419,420,421,428,429,430,433,434,435,436,437,439,441,442,443,445,446,447,448,],[-74,-75,-76,121,121,-47,-263,-27,-28,-124,-261,121,121,-223,-214,227,-216,121,121,121,-195,121,121,-224,-225,-222,-228,-248,-226,-227,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-263,-223,121,121,-263,-28,-125,121,-157,-155,-156,-40,-41,-42,-43,-44,-45,-248,121,121,121,121,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,-236,-237,-217,121,-218,-219,-214,121,-220,121,-258,-260,-11,121,-12,121,-223,-223,121,121,-262,121,121,-159,-158,121,121,-175,121,121,121,121,121,-171,-172,-174,-196,-197,-198,-199,-200,227,227,227,227,227,227,227,227,227,227,227,227,227,-231,-232,-233,-234,-235,121,-244,-263,-139,121,-160,121,-162,121,-170,-173,121,-229,-230,121,121,-221,-263,-215,121,-11,-161,121,121,121,121,121,-163,-165,-166,121,-238,-263,-245,121,121,-239,-164,-167,121,121,-169,-168,]),'MINUS':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,138,139,140,141,142,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,184,185,192,197,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,246,247,248,249,250,251,252,253,254,255,259,260,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,354,355,361,363,384,386,387,388,395,396,397,398,399,400,401,403,404,405,406,409,410,416,417,418,419,420,421,428,429,430,433,434,435,436,437,439,441,442,443,445,446,447,448,],[-74,-75,-76,122,122,-47,-263,-27,-28,-124,-261,122,122,-223,-214,228,-216,122,122,122,-195,122,122,-224,-225,-222,-228,-248,-226,-227,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-263,-223,122,122,-263,-28,-125,122,-157,-155,-156,-40,-41,-42,-43,-44,-45,-248,122,122,122,122,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,-236,-237,-217,122,-218,-219,-214,122,-220,122,-258,-260,-11,122,-12,122,-223,-223,122,122,-262,122,122,-159,-158,122,122,-175,122,122,122,122,122,-171,-172,-174,-196,-197,-198,-199,-200,228,228,228,228,228,228,228,228,228,228,228,228,228,-231,-232,-233,-234,-235,122,-244,-263,-139,122,-160,122,-162,122,-170,-173,122,-229,-230,122,122,-221,-263,-215,122,-11,-161,122,122,122,122,122,-163,-165,-166,122,-238,-263,-245,122,122,-239,-164,-167,122,122,-169,-168,]),'NOT':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,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,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,126,126,-47,-263,-27,-28,-124,-261,126,126,-223,126,126,126,126,126,-224,-225,-222,-226,-227,-263,-223,126,126,-263,-28,-125,126,-157,-155,-156,-40,-41,-42,-43,-44,-45,126,126,126,126,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,-11,126,-12,126,-223,-223,126,126,-262,126,126,-159,-158,126,126,-175,126,126,126,126,126,-171,-172,-174,126,-263,-139,126,-160,126,-162,126,-170,-173,126,126,126,-263,126,-11,-161,126,126,126,126,126,-163,-165,-166,126,-263,126,126,-164,-167,126,126,-169,-168,]),'LNOT':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,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,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,127,127,-47,-263,-27,-28,-124,-261,127,127,-223,127,127,127,127,127,-224,-225,-222,-226,-227,-263,-223,127,127,-263,-28,-125,127,-157,-155,-156,-40,-41,-42,-43,-44,-45,127,127,127,127,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,-11,127,-12,127,-223,-223,127,127,-262,127,127,-159,-158,127,127,-175,127,127,127,127,127,-171,-172,-174,127,-263,-139,127,-160,127,-162,127,-170,-173,127,127,127,-263,127,-11,-161,127,127,127,127,127,-163,-165,-166,127,-263,127,127,-164,-167,127,127,-169,-168,]),'OFFSETOF':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,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,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,132,132,-47,-263,-27,-28,-124,-261,132,132,-223,132,132,132,132,132,-224,-225,-222,-226,-227,-263,-223,132,132,-263,-28,-125,132,-157,-155,-156,-40,-41,-42,-43,-44,-45,132,132,132,132,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,-11,132,-12,132,-223,-223,132,132,-262,132,132,-159,-158,132,132,-175,132,132,132,132,132,-171,-172,-174,132,-263,-139,132,-160,132,-162,132,-170,-173,132,132,132,-263,132,-11,-161,132,132,132,132,132,-163,-165,-166,132,-263,132,132,-164,-167,132,132,-169,-168,]),'INT_CONST_DEC':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,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,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,133,133,-47,-263,-27,-28,-124,-261,133,133,-223,133,133,133,133,133,-224,-225,-222,-226,-227,-263,-223,133,133,-263,-28,-125,133,-157,-155,-156,-40,-41,-42,-43,-44,-45,133,133,133,133,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,-11,133,-12,133,-223,-223,133,133,-262,133,133,-159,-158,133,133,-175,133,133,133,133,133,-171,-172,-174,133,-263,-139,133,-160,133,-162,133,-170,-173,133,133,133,-263,133,-11,-161,133,133,133,133,133,-163,-165,-166,133,-263,133,133,-164,-167,133,133,-169,-168,]),'INT_CONST_OCT':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,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,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,134,134,-47,-263,-27,-28,-124,-261,134,134,-223,134,134,134,134,134,-224,-225,-222,-226,-227,-263,-223,134,134,-263,-28,-125,134,-157,-155,-156,-40,-41,-42,-43,-44,-45,134,134,134,134,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,-11,134,-12,134,-223,-223,134,134,-262,134,134,-159,-158,134,134,-175,134,134,134,134,134,-171,-172,-174,134,-263,-139,134,-160,134,-162,134,-170,-173,134,134,134,-263,134,-11,-161,134,134,134,134,134,-163,-165,-166,134,-263,134,134,-164,-167,134,134,-169,-168,]),'INT_CONST_HEX':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,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,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,135,135,-47,-263,-27,-28,-124,-261,135,135,-223,135,135,135,135,135,-224,-225,-222,-226,-227,-263,-223,135,135,-263,-28,-125,135,-157,-155,-156,-40,-41,-42,-43,-44,-45,135,135,135,135,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,-11,135,-12,135,-223,-223,135,135,-262,135,135,-159,-158,135,135,-175,135,135,135,135,135,-171,-172,-174,135,-263,-139,135,-160,135,-162,135,-170,-173,135,135,135,-263,135,-11,-161,135,135,135,135,135,-163,-165,-166,135,-263,135,135,-164,-167,135,135,-169,-168,]),'INT_CONST_BIN':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,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,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,136,136,-47,-263,-27,-28,-124,-261,136,136,-223,136,136,136,136,136,-224,-225,-222,-226,-227,-263,-223,136,136,-263,-28,-125,136,-157,-155,-156,-40,-41,-42,-43,-44,-45,136,136,136,136,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,-11,136,-12,136,-223,-223,136,136,-262,136,136,-159,-158,136,136,-175,136,136,136,136,136,-171,-172,-174,136,-263,-139,136,-160,136,-162,136,-170,-173,136,136,136,-263,136,-11,-161,136,136,136,136,136,-163,-165,-166,136,-263,136,136,-164,-167,136,136,-169,-168,]),'FLOAT_CONST':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,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,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,137,137,-47,-263,-27,-28,-124,-261,137,137,-223,137,137,137,137,137,-224,-225,-222,-226,-227,-263,-223,137,137,-263,-28,-125,137,-157,-155,-156,-40,-41,-42,-43,-44,-45,137,137,137,137,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,-11,137,-12,137,-223,-223,137,137,-262,137,137,-159,-158,137,137,-175,137,137,137,137,137,-171,-172,-174,137,-263,-139,137,-160,137,-162,137,-170,-173,137,137,137,-263,137,-11,-161,137,137,137,137,137,-163,-165,-166,137,-263,137,137,-164,-167,137,137,-169,-168,]),'HEX_FLOAT_CONST':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,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,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,138,138,-47,-263,-27,-28,-124,-261,138,138,-223,138,138,138,138,138,-224,-225,-222,-226,-227,-263,-223,138,138,-263,-28,-125,138,-157,-155,-156,-40,-41,-42,-43,-44,-45,138,138,138,138,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,-11,138,-12,138,-223,-223,138,138,-262,138,138,-159,-158,138,138,-175,138,138,138,138,138,-171,-172,-174,138,-263,-139,138,-160,138,-162,138,-170,-173,138,138,138,-263,138,-11,-161,138,138,138,138,138,-163,-165,-166,138,-263,138,138,-164,-167,138,138,-169,-168,]),'CHAR_CONST':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,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,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,139,139,-47,-263,-27,-28,-124,-261,139,139,-223,139,139,139,139,139,-224,-225,-222,-226,-227,-263,-223,139,139,-263,-28,-125,139,-157,-155,-156,-40,-41,-42,-43,-44,-45,139,139,139,139,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,-11,139,-12,139,-223,-223,139,139,-262,139,139,-159,-158,139,139,-175,139,139,139,139,139,-171,-172,-174,139,-263,-139,139,-160,139,-162,139,-170,-173,139,139,139,-263,139,-11,-161,139,139,139,139,139,-163,-165,-166,139,-263,139,139,-164,-167,139,139,-169,-168,]),'WCHAR_CONST':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,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,249,253,255,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,140,140,-47,-263,-27,-28,-124,-261,140,140,-223,140,140,140,140,140,-224,-225,-222,-226,-227,-263,-223,140,140,-263,-28,-125,140,-157,-155,-156,-40,-41,-42,-43,-44,-45,140,140,140,140,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,-11,140,-12,140,-223,-223,140,140,-262,140,140,-159,-158,140,140,-175,140,140,140,140,140,-171,-172,-174,140,-263,-139,140,-160,140,-162,140,-170,-173,140,140,140,-263,140,-11,-161,140,140,140,140,140,-163,-165,-166,140,-263,140,140,-164,-167,140,140,-169,-168,]),'STRING_LITERAL':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,130,141,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,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,249,253,255,259,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,141,141,-47,-263,-27,-28,-124,-261,141,141,-223,141,141,141,141,141,-224,-225,-222,-226,-227,259,-257,-263,-223,141,141,-263,-28,-125,141,-157,-155,-156,-40,-41,-42,-43,-44,-45,141,141,141,141,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,-258,-11,141,-12,141,-223,-223,141,141,-262,141,141,-159,-158,141,141,-175,141,141,141,141,141,-171,-172,-174,141,-263,-139,141,-160,141,-162,141,-170,-173,141,141,141,-263,141,-11,-161,141,141,141,141,141,-163,-165,-166,141,-263,141,141,-164,-167,141,141,-169,-168,]),'WSTRING_LITERAL':([24,25,26,62,64,67,68,80,81,82,86,91,97,108,115,116,117,119,120,121,122,123,126,127,131,142,145,146,147,149,150,151,159,174,175,176,177,178,179,180,181,182,183,185,192,197,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,249,253,255,260,264,265,266,269,272,275,276,277,285,286,297,302,303,305,308,309,310,311,312,313,315,317,318,320,354,361,363,384,386,387,388,395,396,397,398,401,403,405,409,410,416,417,418,419,420,421,428,429,430,433,435,437,439,442,443,445,446,447,448,],[-74,-75,-76,142,142,-47,-263,-27,-28,-124,-261,142,142,-223,142,142,142,142,142,-224,-225,-222,-226,-227,260,-259,-263,-223,142,142,-263,-28,-125,142,-157,-155,-156,-40,-41,-42,-43,-44,-45,142,142,142,142,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,-260,-11,142,-12,142,-223,-223,142,142,-262,142,142,-159,-158,142,142,-175,142,142,142,142,142,-171,-172,-174,142,-263,-139,142,-160,142,-162,142,-170,-173,142,142,142,-263,142,-11,-161,142,142,142,142,142,-163,-165,-166,142,-263,142,142,-164,-167,142,142,-169,-168,]),'RBRACKET':([24,25,26,62,68,80,82,107,108,109,110,111,112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,147,149,151,159,198,246,247,248,250,251,252,254,259,260,271,272,274,275,285,307,323,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,345,347,348,349,350,355,365,372,373,390,399,400,404,406,423,434,436,441,],[-74,-75,-76,-263,-263,-27,-124,209,210,-3,-4,-179,-214,-193,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-263,-263,-28,-125,-176,-236,-237,-217,-218,-219,-214,-220,-258,-260,367,368,370,371,-262,-192,-180,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,-213,399,-231,-232,-233,-234,-235,-244,411,412,413,-177,-229,-230,-221,-215,-194,-238,-245,-239,]),'CASE':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,185,185,-157,-155,-156,-40,-41,-42,-43,-44,-45,185,-262,-159,-158,185,185,-175,-171,-172,-174,-160,185,-162,-170,-173,-161,185,185,185,-163,-165,-166,185,-164,-167,185,185,-169,-168,]),'DEFAULT':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,186,186,-157,-155,-156,-40,-41,-42,-43,-44,-45,186,-262,-159,-158,186,186,-175,-171,-172,-174,-160,186,-162,-170,-173,-161,186,186,186,-163,-165,-166,186,-164,-167,186,186,-169,-168,]),'IF':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,188,188,-157,-155,-156,-40,-41,-42,-43,-44,-45,188,-262,-159,-158,188,188,-175,-171,-172,-174,-160,188,-162,-170,-173,-161,188,188,188,-163,-165,-166,188,-164,-167,188,188,-169,-168,]),'SWITCH':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,190,190,-157,-155,-156,-40,-41,-42,-43,-44,-45,190,-262,-159,-158,190,190,-175,-171,-172,-174,-160,190,-162,-170,-173,-161,190,190,190,-163,-165,-166,190,-164,-167,190,190,-169,-168,]),'WHILE':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,314,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,191,191,-157,-155,-156,-40,-41,-42,-43,-44,-45,191,-262,-159,-158,191,191,-175,393,-171,-172,-174,-160,191,-162,-170,-173,-161,191,191,191,-163,-165,-166,191,-164,-167,191,191,-169,-168,]),'DO':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,192,192,-157,-155,-156,-40,-41,-42,-43,-44,-45,192,-262,-159,-158,192,192,-175,-171,-172,-174,-160,192,-162,-170,-173,-161,192,192,192,-163,-165,-166,192,-164,-167,192,192,-169,-168,]),'FOR':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,193,193,-157,-155,-156,-40,-41,-42,-43,-44,-45,193,-262,-159,-158,193,193,-175,-171,-172,-174,-160,193,-162,-170,-173,-161,193,193,193,-163,-165,-166,193,-164,-167,193,193,-169,-168,]),'GOTO':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,194,194,-157,-155,-156,-40,-41,-42,-43,-44,-45,194,-262,-159,-158,194,194,-175,-171,-172,-174,-160,194,-162,-170,-173,-161,194,194,194,-163,-165,-166,194,-164,-167,194,194,-169,-168,]),'BREAK':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,195,195,-157,-155,-156,-40,-41,-42,-43,-44,-45,195,-262,-159,-158,195,195,-175,-171,-172,-174,-160,195,-162,-170,-173,-161,195,195,195,-163,-165,-166,195,-164,-167,195,195,-169,-168,]),'CONTINUE':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,196,196,-157,-155,-156,-40,-41,-42,-43,-44,-45,196,-262,-159,-158,196,196,-175,-171,-172,-174,-160,196,-162,-170,-173,-161,196,196,196,-163,-165,-166,196,-164,-167,196,196,-169,-168,]),'RETURN':([67,86,91,174,175,176,177,178,179,180,181,182,183,192,285,302,303,305,308,309,317,318,320,386,387,388,396,397,416,417,418,419,428,429,430,437,442,443,445,446,447,448,],[-47,-261,197,197,-157,-155,-156,-40,-41,-42,-43,-44,-45,197,-262,-159,-158,197,197,-175,-171,-172,-174,-160,197,-162,-170,-173,-161,197,197,197,-163,-165,-166,197,-164,-167,197,197,-169,-168,]),'RBRACE':([67,86,91,111,112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,144,145,162,163,164,167,168,172,173,174,175,176,177,178,179,180,181,182,183,246,247,248,250,251,252,254,259,260,262,263,264,281,282,284,285,287,288,290,302,303,307,309,317,318,320,323,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,360,361,362,377,378,381,382,386,388,396,397,399,400,404,406,408,416,423,425,427,428,429,430,434,435,436,441,442,443,447,448,],[-47,-261,-263,-179,-214,-193,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-134,-263,285,-106,-109,285,-92,285,-5,-6,-157,-155,-156,-40,-41,-42,-43,-44,-45,-236,-237,-217,-218,-219,-214,-220,-258,-260,285,-20,-19,285,285,-107,-262,285,285,-93,-159,-158,-192,-175,-171,-172,-174,-180,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,-213,-231,-232,-233,-234,-235,-244,-135,285,-137,-108,-110,-94,-95,-160,-162,-170,-173,-229,-230,-221,-215,-136,-161,-194,285,-138,-163,-165,-166,-238,285,-245,-239,-164,-167,-169,-168,]),'PERIOD':([86,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,145,184,246,247,259,260,267,268,285,345,347,348,349,350,355,361,364,366,399,400,405,411,434,435,436,441,],[-261,244,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,270,-248,-236,-237,-258,-260,270,-140,-262,-231,-232,-233,-234,-235,-244,270,-141,-143,-229,-230,270,-142,-238,270,-245,-239,]),'CONDOP':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,223,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,-213,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'DIVIDE':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,225,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'MOD':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,226,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'RSHIFT':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,229,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,229,229,229,229,229,229,229,229,229,229,229,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'LSHIFT':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,230,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,230,230,230,230,230,230,230,230,230,230,230,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'LT':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,231,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,231,231,231,231,231,231,231,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'LE':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,232,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,232,232,232,232,232,232,232,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'GE':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,233,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,233,233,233,233,233,233,233,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'GT':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,234,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,234,234,234,234,234,234,234,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'EQ':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,235,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,235,235,235,235,235,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'NE':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,236,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,236,236,236,236,236,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'OR':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,238,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,238,238,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'XOR':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,239,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,239,-211,239,239,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'LAND':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,240,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,240,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'LOR':([112,113,114,118,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,345,347,348,349,350,355,399,400,404,406,434,436,441,],[-214,241,-216,-195,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,-213,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'XOREQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[213,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'TIMESEQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[214,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'DIVEQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[215,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'MODEQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[216,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'PLUSEQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[217,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'MINUSEQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[218,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'LSHIFTEQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[219,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'RSHIFTEQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[220,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'ANDEQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[221,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'OREQUAL':([112,114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,248,250,251,252,254,259,260,285,345,347,348,349,350,355,399,400,404,406,434,436,441,],[222,-216,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-217,-218,-219,-214,-220,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-221,-215,-238,-245,-239,]),'ARROW':([114,124,125,128,129,130,131,133,134,135,136,137,138,139,140,141,142,184,246,247,259,260,285,345,347,348,349,350,355,399,400,434,436,441,],[245,-228,-248,-240,-241,-242,-243,-249,-250,-251,-252,-253,-254,-255,-256,-257,-259,-248,-236,-237,-258,-260,-262,-231,-232,-233,-234,-235,-244,-229,-230,-238,-245,-239,]),'ELSE':([178,179,180,181,182,183,285,302,309,317,318,320,386,388,396,397,416,428,429,430,442,443,447,448,],[-40,-41,-42,-43,-44,-45,-262,-159,-175,-171,-172,-174,-160,-162,-170,-173,-161,437,-165,-166,-164,-167,-169,-168,]),'ELLIPSIS':([204,],[321,]),}

_lr_action = {}
for _k, _v in _lr_action_items.items():
   for _x,_y in zip(_v[0],_v[1]):
      if not _x in _lr_action:  _lr_action[_x] = {}
      _lr_action[_x][_k] = _y
del _lr_action_items

_lr_goto_items = {'translation_unit_or_empty':([0,],[1,]),'translation_unit':([0,],[2,]),'empty':([0,9,10,16,17,18,19,23,55,56,61,62,68,69,91,95,106,145,147,148,149,150,169,170,171,174,192,258,305,308,315,358,361,387,395,405,417,418,419,421,433,435,437,439,445,446,],[3,52,59,73,73,73,73,80,59,52,102,109,80,154,173,102,207,264,109,102,109,80,293,299,299,304,304,207,304,304,304,102,410,304,304,410,304,304,304,304,304,410,304,304,304,304,]),'external_declaration':([0,2,],[4,50,]),'function_definition':([0,2,],[5,5,]),'declaration':([0,2,9,53,56,91,174,315,],[6,6,54,92,54,176,176,395,]),'pp_directive':([0,2,],[7,7,]),'declarator':([0,2,10,21,55,61,95,99,106,169,383,],[9,9,56,78,93,78,78,93,205,296,296,]),'declaration_specifiers':([0,2,9,16,17,18,19,53,56,61,69,91,95,148,174,204,315,358,],[10,10,55,74,74,74,74,55,55,106,106,55,106,106,55,106,55,106,]),'decl_body':([0,2,9,53,56,91,174,315,],[11,11,11,11,11,11,11,11,]),'direct_declarator':([0,2,10,14,21,55,58,61,94,95,99,106,169,383,],[13,13,13,70,13,13,70,13,70,13,13,13,13,13,]),'pointer':([0,2,10,21,55,61,79,95,99,106,169,258,358,383,],[14,14,58,14,94,58,158,94,14,58,94,357,357,14,]),'type_qualifier':([0,2,9,16,17,18,19,23,53,56,61,68,69,81,89,91,95,120,148,150,151,165,166,167,170,171,174,204,249,253,255,261,287,288,315,358,],[16,16,16,16,16,16,16,82,16,16,16,82,16,159,170,16,16,170,16,82,159,170,170,170,170,170,16,16,170,170,170,170,170,170,16,16,]),'type_specifier':([0,2,9,16,17,18,19,53,56,61,69,89,91,95,120,148,165,166,167,170,171,174,204,249,253,255,261,287,288,315,358,],[17,17,17,17,17,17,17,17,17,17,17,171,17,17,171,17,171,171,171,171,171,17,17,171,171,171,171,171,171,17,17,]),'storage_class_specifier':([0,2,9,16,17,18,19,53,56,61,69,91,95,148,174,204,315,358,],[18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,]),'function_specifier':([0,2,9,16,17,18,19,53,56,61,69,91,95,148,174,204,315,358,],[19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,]),'typedef_name':([0,2,9,16,17,18,19,53,56,61,69,89,91,95,120,148,165,166,167,170,171,174,204,249,253,255,261,287,288,315,358,],[38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,]),'enum_specifier':([0,2,9,16,17,18,19,53,56,61,69,89,91,95,120,148,165,166,167,170,171,174,204,249,253,255,261,287,288,315,358,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'struct_or_union_specifier':([0,2,9,16,17,18,19,53,56,61,69,89,91,95,120,148,165,166,167,170,171,174,204,249,253,255,261,287,288,315,358,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'struct_or_union':([0,2,9,16,17,18,19,53,56,61,69,89,91,95,120,148,165,166,167,170,171,174,204,249,253,255,261,287,288,315,358,],[47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,]),'declaration_list_opt':([9,56,],[51,96,]),'declaration_list':([9,56,],[53,53,]),'init_declarator_list_opt':([10,55,],[57,57,]),'init_declarator_list':([10,55,],[60,60,]),'init_declarator':([10,55,99,],[63,63,201,]),'abstract_declarator':([10,55,61,95,106,169,258,358,],[65,65,100,100,208,292,208,100,]),'direct_abstract_declarator':([10,55,58,61,94,95,106,169,258,357,358,],[66,66,98,66,98,66,66,66,66,98,66,]),'declaration_specifiers_opt':([16,17,18,19,],[72,75,76,77,]),'type_qualifier_list_opt':([23,68,150,],[79,149,276,]),'type_qualifier_list':([23,68,150,],[81,151,81,]),'brace_open':([46,47,51,64,83,84,87,88,91,96,97,174,192,265,305,308,354,387,402,403,404,409,417,418,419,437,445,446,],[85,89,91,145,160,161,165,166,91,91,145,91,91,145,91,91,405,91,405,405,405,145,91,91,91,91,91,91,]),'compound_statement':([51,91,96,174,192,305,308,387,417,418,419,437,445,446,],[90,180,199,180,180,180,180,180,180,180,180,180,180,180,]),'parameter_type_list_opt':([61,95,148,358,],[101,101,273,101,]),'parameter_type_list':([61,69,95,148,358,],[103,152,103,103,103,]),'parameter_list':([61,69,95,148,358,],[104,104,104,104,104,]),'parameter_declaration':([61,69,95,148,204,358,],[105,105,105,105,322,105,]),'assignment_expression_opt':([62,147,149,],[107,271,274,]),'assignment_expression':([62,64,91,97,120,147,149,174,192,197,211,223,242,243,249,253,255,265,276,277,305,308,310,311,312,313,315,387,395,401,409,417,418,419,420,421,433,437,439,445,446,],[110,144,198,144,198,110,110,198,198,198,323,198,198,346,198,198,198,144,372,373,198,198,198,390,198,198,198,198,198,424,144,198,198,198,198,198,198,198,198,198,198,]),'conditional_expression':([62,64,91,97,120,147,149,174,185,192,197,211,223,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,384,387,395,398,401,409,417,418,419,420,421,433,437,439,445,446,],[111,111,111,111,111,111,111,111,307,111,111,111,111,111,111,111,111,111,111,307,111,111,307,307,111,111,111,111,111,111,111,307,111,111,423,111,111,111,111,111,111,111,111,111,111,111,111,]),'unary_expression':([62,64,91,97,115,116,117,119,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,354,384,387,395,398,401,403,409,417,418,419,420,421,433,437,439,445,446,],[112,112,112,112,248,250,252,254,112,112,112,112,252,112,112,112,112,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,112,112,112,112,112,112,252,112,112,252,252,112,112,112,112,112,112,112,252,252,112,112,252,112,252,112,112,112,112,112,112,112,112,112,112,112,]),'binary_expression':([62,64,91,97,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,384,387,395,398,401,409,417,418,419,420,421,433,437,439,445,446,],[113,113,113,113,113,113,113,113,113,113,113,113,113,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,]),'postfix_expression':([62,64,91,97,115,116,117,119,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,354,384,387,395,398,401,403,409,417,418,419,420,421,433,437,439,445,446,],[114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,]),'unary_operator':([62,64,91,97,115,116,117,119,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,354,384,387,395,398,401,403,409,417,418,419,420,421,433,437,439,445,446,],[117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,]),'cast_expression':([62,64,91,97,117,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,354,384,387,395,398,401,403,409,417,418,419,420,421,433,437,439,445,446,],[118,118,118,118,251,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,406,118,118,118,118,118,406,118,118,118,118,118,118,118,118,118,118,118,]),'primary_expression':([62,64,91,97,115,116,117,119,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,354,384,387,395,398,401,403,409,417,418,419,420,421,433,437,439,445,446,],[124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,]),'identifier':([62,64,69,91,97,115,116,117,119,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,270,276,277,280,286,297,305,308,310,311,312,313,315,354,384,387,395,398,401,403,407,409,417,418,419,420,421,433,437,439,445,446,],[128,128,156,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,366,128,128,374,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,426,128,128,128,128,128,128,128,128,128,128,128,]),'constant':([62,64,91,97,115,116,117,119,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,354,384,387,395,398,401,403,409,417,418,419,420,421,433,437,439,445,446,],[129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,]),'unified_string_literal':([62,64,91,97,115,116,117,119,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,354,384,387,395,398,401,403,409,417,418,419,420,421,433,437,439,445,446,],[130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,]),'unified_wstring_literal':([62,64,91,97,115,116,117,119,120,147,149,174,185,192,197,211,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,249,253,255,265,269,276,277,286,297,305,308,310,311,312,313,315,354,384,387,395,398,401,403,409,417,418,419,420,421,433,437,439,445,446,],[131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,]),'initializer':([64,97,265,409,],[143,200,362,427,]),'identifier_list_opt':([69,],[153,]),'identifier_list':([69,],[155,]),'enumerator_list':([85,160,161,],[162,281,282,]),'enumerator':([85,160,161,284,],[163,163,163,377,]),'struct_declaration_list':([89,165,166,],[167,287,288,]),'struct_declaration':([89,165,166,167,287,288,],[168,168,168,290,290,290,]),'specifier_qualifier_list':([89,120,165,166,167,170,171,249,253,255,261,287,288,],[169,258,169,169,169,300,300,258,258,258,258,169,169,]),'block_item_list_opt':([91,],[172,]),'block_item_list':([91,],[174,]),'block_item':([91,174,],[175,303,]),'statement':([91,174,192,305,308,387,417,418,419,437,445,446,],[177,177,314,386,388,416,428,429,430,442,447,448,]),'labeled_statement':([91,174,192,305,308,387,417,418,419,437,445,446,],[178,178,178,178,178,178,178,178,178,178,178,178,]),'expression_statement':([91,174,192,305,308,387,417,418,419,437,445,446,],[179,179,179,179,179,179,179,179,179,179,179,179,]),'selection_statement':([91,174,192,305,308,387,417,418,419,437,445,446,],[181,181,181,181,181,181,181,181,181,181,181,181,]),'iteration_statement':([91,174,192,305,308,387,417,418,419,437,445,446,],[182,182,182,182,182,182,182,182,182,182,182,182,]),'jump_statement':([91,174,192,305,308,387,417,418,419,437,445,446,],[183,183,183,183,183,183,183,183,183,183,183,183,]),'expression_opt':([91,174,192,305,308,315,387,395,417,418,419,421,433,437,439,445,446,],[187,187,187,187,187,394,187,422,187,187,187,432,440,187,444,187,187,]),'expression':([91,120,174,192,197,223,242,249,253,255,305,308,310,312,313,315,387,395,417,418,419,420,421,433,437,439,445,446,],[189,257,189,189,319,324,343,257,257,257,189,189,389,391,392,189,189,189,189,189,189,431,189,189,189,189,189,189,]),'abstract_declarator_opt':([106,258,],[206,356,]),'assignment_operator':([112,],[211,]),'type_name':([120,249,253,255,261,],[256,351,352,353,359,]),'initializer_list_opt':([145,],[262,]),'initializer_list':([145,405,],[263,425,]),'designation_opt':([145,361,405,435,],[265,409,265,409,]),'designation':([145,361,405,435,],[266,266,266,266,]),'designator_list':([145,361,405,435,],[267,267,267,267,]),'designator':([145,267,361,405,435,],[268,364,268,268,268,]),'brace_close':([162,167,172,262,281,282,287,288,361,425,435,],[283,289,302,360,375,376,379,380,408,434,441,]),'struct_declarator_list_opt':([169,],[291,]),'struct_declarator_list':([169,],[294,]),'struct_declarator':([169,383,],[295,414,]),'specifier_qualifier_list_opt':([170,171,],[298,301,]),'constant_expression':([185,269,286,297,384,],[306,365,378,385,415,]),'argument_expression_list':([243,],[344,]),}

_lr_goto = {}
for _k, _v in _lr_goto_items.items():
   for _x, _y in zip(_v[0], _v[1]):
       if not _x in _lr_goto: _lr_goto[_x] = {}
       _lr_goto[_x][_k] = _y
del _lr_goto_items
_lr_productions = [
  ("S' -> translation_unit_or_empty","S'",1,None,None,None),
  ('abstract_declarator_opt -> empty','abstract_declarator_opt',1,'p_abstract_declarator_opt','plyparser.py',42),
  ('abstract_declarator_opt -> abstract_declarator','abstract_declarator_opt',1,'p_abstract_declarator_opt','plyparser.py',43),
  ('assignment_expression_opt -> empty','assignment_expression_opt',1,'p_assignment_expression_opt','plyparser.py',42),
  ('assignment_expression_opt -> assignment_expression','assignment_expression_opt',1,'p_assignment_expression_opt','plyparser.py',43),
  ('block_item_list_opt -> empty','block_item_list_opt',1,'p_block_item_list_opt','plyparser.py',42),
  ('block_item_list_opt -> block_item_list','block_item_list_opt',1,'p_block_item_list_opt','plyparser.py',43),
  ('declaration_list_opt -> empty','declaration_list_opt',1,'p_declaration_list_opt','plyparser.py',42),
  ('declaration_list_opt -> declaration_list','declaration_list_opt',1,'p_declaration_list_opt','plyparser.py',43),
  ('declaration_specifiers_opt -> empty','declaration_specifiers_opt',1,'p_declaration_specifiers_opt','plyparser.py',42),
  ('declaration_specifiers_opt -> declaration_specifiers','declaration_specifiers_opt',1,'p_declaration_specifiers_opt','plyparser.py',43),
  ('designation_opt -> empty','designation_opt',1,'p_designation_opt','plyparser.py',42),
  ('designation_opt -> designation','designation_opt',1,'p_designation_opt','plyparser.py',43),
  ('expression_opt -> empty','expression_opt',1,'p_expression_opt','plyparser.py',42),
  ('expression_opt -> expression','expression_opt',1,'p_expression_opt','plyparser.py',43),
  ('identifier_list_opt -> empty','identifier_list_opt',1,'p_identifier_list_opt','plyparser.py',42),
  ('identifier_list_opt -> identifier_list','identifier_list_opt',1,'p_identifier_list_opt','plyparser.py',43),
  ('init_declarator_list_opt -> empty','init_declarator_list_opt',1,'p_init_declarator_list_opt','plyparser.py',42),
  ('init_declarator_list_opt -> init_declarator_list','init_declarator_list_opt',1,'p_init_declarator_list_opt','plyparser.py',43),
  ('initializer_list_opt -> empty','initializer_list_opt',1,'p_initializer_list_opt','plyparser.py',42),
  ('initializer_list_opt -> initializer_list','initializer_list_opt',1,'p_initializer_list_opt','plyparser.py',43),
  ('parameter_type_list_opt -> empty','parameter_type_list_opt',1,'p_parameter_type_list_opt','plyparser.py',42),
  ('parameter_type_list_opt -> parameter_type_list','parameter_type_list_opt',1,'p_parameter_type_list_opt','plyparser.py',43),
  ('specifier_qualifier_list_opt -> empty','specifier_qualifier_list_opt',1,'p_specifier_qualifier_list_opt','plyparser.py',42),
  ('specifier_qualifier_list_opt -> specifier_qualifier_list','specifier_qualifier_list_opt',1,'p_specifier_qualifier_list_opt','plyparser.py',43),
  ('struct_declarator_list_opt -> empty','struct_declarator_list_opt',1,'p_struct_declarator_list_opt','plyparser.py',42),
  ('struct_declarator_list_opt -> struct_declarator_list','struct_declarator_list_opt',1,'p_struct_declarator_list_opt','plyparser.py',43),
  ('type_qualifier_list_opt -> empty','type_qualifier_list_opt',1,'p_type_qualifier_list_opt','plyparser.py',42),
  ('type_qualifier_list_opt -> type_qualifier_list','type_qualifier_list_opt',1,'p_type_qualifier_list_opt','plyparser.py',43),
  ('translation_unit_or_empty -> translation_unit','translation_unit_or_empty',1,'p_translation_unit_or_empty','c_parser.py',501),
  ('translation_unit_or_empty -> empty','translation_unit_or_empty',1,'p_translation_unit_or_empty','c_parser.py',502),
  ('translation_unit -> external_declaration','translation_unit',1,'p_translation_unit_1','c_parser.py',510),
  ('translation_unit -> translation_unit external_declaration','translation_unit',2,'p_translation_unit_2','c_parser.py',517),
  ('external_declaration -> function_definition','external_declaration',1,'p_external_declaration_1','c_parser.py',529),
  ('external_declaration -> declaration','external_declaration',1,'p_external_declaration_2','c_parser.py',534),
  ('external_declaration -> pp_directive','external_declaration',1,'p_external_declaration_3','c_parser.py',539),
  ('external_declaration -> SEMI','external_declaration',1,'p_external_declaration_4','c_parser.py',544),
  ('pp_directive -> PPHASH','pp_directive',1,'p_pp_directive','c_parser.py',549),
  ('function_definition -> declarator declaration_list_opt compound_statement','function_definition',3,'p_function_definition_1','c_parser.py',558),
  ('function_definition -> declaration_specifiers declarator declaration_list_opt compound_statement','function_definition',4,'p_function_definition_2','c_parser.py',575),
  ('statement -> labeled_statement','statement',1,'p_statement','c_parser.py',586),
  ('statement -> expression_statement','statement',1,'p_statement','c_parser.py',587),
  ('statement -> compound_statement','statement',1,'p_statement','c_parser.py',588),
  ('statement -> selection_statement','statement',1,'p_statement','c_parser.py',589),
  ('statement -> iteration_statement','statement',1,'p_statement','c_parser.py',590),
  ('statement -> jump_statement','statement',1,'p_statement','c_parser.py',591),
  ('decl_body -> declaration_specifiers init_declarator_list_opt','decl_body',2,'p_decl_body','c_parser.py',605),
  ('declaration -> decl_body SEMI','declaration',2,'p_declaration','c_parser.py',664),
  ('declaration_list -> declaration','declaration_list',1,'p_declaration_list','c_parser.py',673),
  ('declaration_list -> declaration_list declaration','declaration_list',2,'p_declaration_list','c_parser.py',674),
  ('declaration_specifiers -> type_qualifier declaration_specifiers_opt','declaration_specifiers',2,'p_declaration_specifiers_1','c_parser.py',679),
  ('declaration_specifiers -> type_specifier declaration_specifiers_opt','declaration_specifiers',2,'p_declaration_specifiers_2','c_parser.py',684),
  ('declaration_specifiers -> storage_class_specifier declaration_specifiers_opt','declaration_specifiers',2,'p_declaration_specifiers_3','c_parser.py',689),
  ('declaration_specifiers -> function_specifier declaration_specifiers_opt','declaration_specifiers',2,'p_declaration_specifiers_4','c_parser.py',694),
  ('storage_class_specifier -> AUTO','storage_class_specifier',1,'p_storage_class_specifier','c_parser.py',699),
  ('storage_class_specifier -> REGISTER','storage_class_specifier',1,'p_storage_class_specifier','c_parser.py',700),
  ('storage_class_specifier -> STATIC','storage_class_specifier',1,'p_storage_class_specifier','c_parser.py',701),
  ('storage_class_specifier -> EXTERN','storage_class_specifier',1,'p_storage_class_specifier','c_parser.py',702),
  ('storage_class_specifier -> TYPEDEF','storage_class_specifier',1,'p_storage_class_specifier','c_parser.py',703),
  ('function_specifier -> INLINE','function_specifier',1,'p_function_specifier','c_parser.py',708),
  ('type_specifier -> VOID','type_specifier',1,'p_type_specifier_1','c_parser.py',713),
  ('type_specifier -> _BOOL','type_specifier',1,'p_type_specifier_1','c_parser.py',714),
  ('type_specifier -> CHAR','type_specifier',1,'p_type_specifier_1','c_parser.py',715),
  ('type_specifier -> SHORT','type_specifier',1,'p_type_specifier_1','c_parser.py',716),
  ('type_specifier -> INT','type_specifier',1,'p_type_specifier_1','c_parser.py',717),
  ('type_specifier -> LONG','type_specifier',1,'p_type_specifier_1','c_parser.py',718),
  ('type_specifier -> FLOAT','type_specifier',1,'p_type_specifier_1','c_parser.py',719),
  ('type_specifier -> DOUBLE','type_specifier',1,'p_type_specifier_1','c_parser.py',720),
  ('type_specifier -> _COMPLEX','type_specifier',1,'p_type_specifier_1','c_parser.py',721),
  ('type_specifier -> SIGNED','type_specifier',1,'p_type_specifier_1','c_parser.py',722),
  ('type_specifier -> UNSIGNED','type_specifier',1,'p_type_specifier_1','c_parser.py',723),
  ('type_specifier -> typedef_name','type_specifier',1,'p_type_specifier_2','c_parser.py',728),
  ('type_specifier -> enum_specifier','type_specifier',1,'p_type_specifier_2','c_parser.py',729),
  ('type_specifier -> struct_or_union_specifier','type_specifier',1,'p_type_specifier_2','c_parser.py',730),
  ('type_qualifier -> CONST','type_qualifier',1,'p_type_qualifier','c_parser.py',735),
  ('type_qualifier -> RESTRICT','type_qualifier',1,'p_type_qualifier','c_parser.py',736),
  ('type_qualifier -> VOLATILE','type_qualifier',1,'p_type_qualifier','c_parser.py',737),
  ('init_declarator_list -> init_declarator','init_declarator_list',1,'p_init_declarator_list_1','c_parser.py',742),
  ('init_declarator_list -> init_declarator_list COMMA init_declarator','init_declarator_list',3,'p_init_declarator_list_1','c_parser.py',743),
  ('init_declarator_list -> EQUALS initializer','init_declarator_list',2,'p_init_declarator_list_2','c_parser.py',753),
  ('init_declarator_list -> abstract_declarator','init_declarator_list',1,'p_init_declarator_list_3','c_parser.py',761),
  ('init_declarator -> declarator','init_declarator',1,'p_init_declarator','c_parser.py',769),
  ('init_declarator -> declarator EQUALS initializer','init_declarator',3,'p_init_declarator','c_parser.py',770),
  ('specifier_qualifier_list -> type_qualifier specifier_qualifier_list_opt','specifier_qualifier_list',2,'p_specifier_qualifier_list_1','c_parser.py',775),
  ('specifier_qualifier_list -> type_specifier specifier_qualifier_list_opt','specifier_qualifier_list',2,'p_specifier_qualifier_list_2','c_parser.py',780),
  ('struct_or_union_specifier -> struct_or_union ID','struct_or_union_specifier',2,'p_struct_or_union_specifier_1','c_parser.py',788),
  ('struct_or_union_specifier -> struct_or_union TYPEID','struct_or_union_specifier',2,'p_struct_or_union_specifier_1','c_parser.py',789),
  ('struct_or_union_specifier -> struct_or_union brace_open struct_declaration_list brace_close','struct_or_union_specifier',4,'p_struct_or_union_specifier_2','c_parser.py',798),
  ('struct_or_union_specifier -> struct_or_union ID brace_open struct_declaration_list brace_close','struct_or_union_specifier',5,'p_struct_or_union_specifier_3','c_parser.py',807),
  ('struct_or_union_specifier -> struct_or_union TYPEID brace_open struct_declaration_list brace_close','struct_or_union_specifier',5,'p_struct_or_union_specifier_3','c_parser.py',808),
  ('struct_or_union -> STRUCT','struct_or_union',1,'p_struct_or_union','c_parser.py',817),
  ('struct_or_union -> UNION','struct_or_union',1,'p_struct_or_union','c_parser.py',818),
  ('struct_declaration_list -> struct_declaration','struct_declaration_list',1,'p_struct_declaration_list','c_parser.py',825),
  ('struct_declaration_list -> struct_declaration_list struct_declaration','struct_declaration_list',2,'p_struct_declaration_list','c_parser.py',826),
  ('struct_declaration -> specifier_qualifier_list struct_declarator_list_opt SEMI','struct_declaration',3,'p_struct_declaration_1','c_parser.py',831),
  ('struct_declaration -> specifier_qualifier_list abstract_declarator SEMI','struct_declaration',3,'p_struct_declaration_2','c_parser.py',869),
  ('struct_declarator_list -> struct_declarator','struct_declarator_list',1,'p_struct_declarator_list','c_parser.py',883),
  ('struct_declarator_list -> struct_declarator_list COMMA struct_declarator','struct_declarator_list',3,'p_struct_declarator_list','c_parser.py',884),
  ('struct_declarator -> declarator','struct_declarator',1,'p_struct_declarator_1','c_parser.py',892),
  ('struct_declarator -> declarator COLON constant_expression','struct_declarator',3,'p_struct_declarator_2','c_parser.py',897),
  ('struct_declarator -> COLON constant_expression','struct_declarator',2,'p_struct_declarator_2','c_parser.py',898),
  ('enum_specifier -> ENUM ID','enum_specifier',2,'p_enum_specifier_1','c_parser.py',906),
  ('enum_specifier -> ENUM TYPEID','enum_specifier',2,'p_enum_specifier_1','c_parser.py',907),
  ('enum_specifier -> ENUM brace_open enumerator_list brace_close','enum_specifier',4,'p_enum_specifier_2','c_parser.py',912),
  ('enum_specifier -> ENUM ID brace_open enumerator_list brace_close','enum_specifier',5,'p_enum_specifier_3','c_parser.py',917),
  ('enum_specifier -> ENUM TYPEID brace_open enumerator_list brace_close','enum_specifier',5,'p_enum_specifier_3','c_parser.py',918),
  ('enumerator_list -> enumerator','enumerator_list',1,'p_enumerator_list','c_parser.py',923),
  ('enumerator_list -> enumerator_list COMMA','enumerator_list',2,'p_enumerator_list','c_parser.py',924),
  ('enumerator_list -> enumerator_list COMMA enumerator','enumerator_list',3,'p_enumerator_list','c_parser.py',925),
  ('enumerator -> ID','enumerator',1,'p_enumerator','c_parser.py',936),
  ('enumerator -> ID EQUALS constant_expression','enumerator',3,'p_enumerator','c_parser.py',937),
  ('declarator -> direct_declarator','declarator',1,'p_declarator_1','c_parser.py',952),
  ('declarator -> pointer direct_declarator','declarator',2,'p_declarator_2','c_parser.py',957),
  ('declarator -> pointer TYPEID','declarator',2,'p_declarator_3','c_parser.py',966),
  ('direct_declarator -> ID','direct_declarator',1,'p_direct_declarator_1','c_parser.py',977),
  ('direct_declarator -> LPAREN declarator RPAREN','direct_declarator',3,'p_direct_declarator_2','c_parser.py',986),
  ('direct_declarator -> direct_declarator LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKET','direct_declarator',5,'p_direct_declarator_3','c_parser.py',991),
  ('direct_declarator -> direct_declarator LBRACKET STATIC type_qualifier_list_opt assignment_expression RBRACKET','direct_declarator',6,'p_direct_declarator_4','c_parser.py',1005),
  ('direct_declarator -> direct_declarator LBRACKET type_qualifier_list STATIC assignment_expression RBRACKET','direct_declarator',6,'p_direct_declarator_4','c_parser.py',1006),
  ('direct_declarator -> direct_declarator LBRACKET type_qualifier_list_opt TIMES RBRACKET','direct_declarator',5,'p_direct_declarator_5','c_parser.py',1026),
  ('direct_declarator -> direct_declarator LPAREN parameter_type_list RPAREN','direct_declarator',4,'p_direct_declarator_6','c_parser.py',1037),
  ('direct_declarator -> direct_declarator LPAREN identifier_list_opt RPAREN','direct_declarator',4,'p_direct_declarator_6','c_parser.py',1038),
  ('pointer -> TIMES type_qualifier_list_opt','pointer',2,'p_pointer','c_parser.py',1065),
  ('pointer -> TIMES type_qualifier_list_opt pointer','pointer',3,'p_pointer','c_parser.py',1066),
  ('type_qualifier_list -> type_qualifier','type_qualifier_list',1,'p_type_qualifier_list','c_parser.py',1095),
  ('type_qualifier_list -> type_qualifier_list type_qualifier','type_qualifier_list',2,'p_type_qualifier_list','c_parser.py',1096),
  ('parameter_type_list -> parameter_list','parameter_type_list',1,'p_parameter_type_list','c_parser.py',1101),
  ('parameter_type_list -> parameter_list COMMA ELLIPSIS','parameter_type_list',3,'p_parameter_type_list','c_parser.py',1102),
  ('parameter_list -> parameter_declaration','parameter_list',1,'p_parameter_list','c_parser.py',1110),
  ('parameter_list -> parameter_list COMMA parameter_declaration','parameter_list',3,'p_parameter_list','c_parser.py',1111),
  ('parameter_declaration -> declaration_specifiers declarator','parameter_declaration',2,'p_parameter_declaration_1','c_parser.py',1120),
  ('parameter_declaration -> declaration_specifiers abstract_declarator_opt','parameter_declaration',2,'p_parameter_declaration_2','c_parser.py',1131),
  ('identifier_list -> identifier','identifier_list',1,'p_identifier_list','c_parser.py',1162),
  ('identifier_list -> identifier_list COMMA identifier','identifier_list',3,'p_identifier_list','c_parser.py',1163),
  ('initializer -> assignment_expression','initializer',1,'p_initializer_1','c_parser.py',1172),
  ('initializer -> brace_open initializer_list_opt brace_close','initializer',3,'p_initializer_2','c_parser.py',1177),
  ('initializer -> brace_open initializer_list COMMA brace_close','initializer',4,'p_initializer_2','c_parser.py',1178),
  ('initializer_list -> designation_opt initializer','initializer_list',2,'p_initializer_list','c_parser.py',1186),
  ('initializer_list -> initializer_list COMMA designation_opt initializer','initializer_list',4,'p_initializer_list','c_parser.py',1187),
  ('designation -> designator_list EQUALS','designation',2,'p_designation','c_parser.py',1198),
  ('designator_list -> designator','designator_list',1,'p_designator_list','c_parser.py',1206),
  ('designator_list -> designator_list designator','designator_list',2,'p_designator_list','c_parser.py',1207),
  ('designator -> LBRACKET constant_expression RBRACKET','designator',3,'p_designator','c_parser.py',1212),
  ('designator -> PERIOD identifier','designator',2,'p_designator','c_parser.py',1213),
  ('type_name -> specifier_qualifier_list abstract_declarator_opt','type_name',2,'p_type_name','c_parser.py',1218),
  ('abstract_declarator -> pointer','abstract_declarator',1,'p_abstract_declarator_1','c_parser.py',1235),
  ('abstract_declarator -> pointer direct_abstract_declarator','abstract_declarator',2,'p_abstract_declarator_2','c_parser.py',1243),
  ('abstract_declarator -> direct_abstract_declarator','abstract_declarator',1,'p_abstract_declarator_3','c_parser.py',1248),
  ('direct_abstract_declarator -> LPAREN abstract_declarator RPAREN','direct_abstract_declarator',3,'p_direct_abstract_declarator_1','c_parser.py',1258),
  ('direct_abstract_declarator -> direct_abstract_declarator LBRACKET assignment_expression_opt RBRACKET','direct_abstract_declarator',4,'p_direct_abstract_declarator_2','c_parser.py',1262),
  ('direct_abstract_declarator -> LBRACKET assignment_expression_opt RBRACKET','direct_abstract_declarator',3,'p_direct_abstract_declarator_3','c_parser.py',1273),
  ('direct_abstract_declarator -> direct_abstract_declarator LBRACKET TIMES RBRACKET','direct_abstract_declarator',4,'p_direct_abstract_declarator_4','c_parser.py',1282),
  ('direct_abstract_declarator -> LBRACKET TIMES RBRACKET','direct_abstract_declarator',3,'p_direct_abstract_declarator_5','c_parser.py',1293),
  ('direct_abstract_declarator -> direct_abstract_declarator LPAREN parameter_type_list_opt RPAREN','direct_abstract_declarator',4,'p_direct_abstract_declarator_6','c_parser.py',1302),
  ('direct_abstract_declarator -> LPAREN parameter_type_list_opt RPAREN','direct_abstract_declarator',3,'p_direct_abstract_declarator_7','c_parser.py',1312),
  ('block_item -> declaration','block_item',1,'p_block_item','c_parser.py',1323),
  ('block_item -> statement','block_item',1,'p_block_item','c_parser.py',1324),
  ('block_item_list -> block_item','block_item_list',1,'p_block_item_list','c_parser.py',1331),
  ('block_item_list -> block_item_list block_item','block_item_list',2,'p_block_item_list','c_parser.py',1332),
  ('compound_statement -> brace_open block_item_list_opt brace_close','compound_statement',3,'p_compound_statement_1','c_parser.py',1338),
  ('labeled_statement -> ID COLON statement','labeled_statement',3,'p_labeled_statement_1','c_parser.py',1344),
  ('labeled_statement -> CASE constant_expression COLON statement','labeled_statement',4,'p_labeled_statement_2','c_parser.py',1348),
  ('labeled_statement -> DEFAULT COLON statement','labeled_statement',3,'p_labeled_statement_3','c_parser.py',1352),
  ('selection_statement -> IF LPAREN expression RPAREN statement','selection_statement',5,'p_selection_statement_1','c_parser.py',1356),
  ('selection_statement -> IF LPAREN expression RPAREN statement ELSE statement','selection_statement',7,'p_selection_statement_2','c_parser.py',1360),
  ('selection_statement -> SWITCH LPAREN expression RPAREN statement','selection_statement',5,'p_selection_statement_3','c_parser.py',1364),
  ('iteration_statement -> WHILE LPAREN expression RPAREN statement','iteration_statement',5,'p_iteration_statement_1','c_parser.py',1369),
  ('iteration_statement -> DO statement WHILE LPAREN expression RPAREN SEMI','iteration_statement',7,'p_iteration_statement_2','c_parser.py',1373),
  ('iteration_statement -> FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN statement','iteration_statement',9,'p_iteration_statement_3','c_parser.py',1377),
  ('iteration_statement -> FOR LPAREN declaration expression_opt SEMI expression_opt RPAREN statement','iteration_statement',8,'p_iteration_statement_4','c_parser.py',1381),
  ('jump_statement -> GOTO ID SEMI','jump_statement',3,'p_jump_statement_1','c_parser.py',1386),
  ('jump_statement -> BREAK SEMI','jump_statement',2,'p_jump_statement_2','c_parser.py',1390),
  ('jump_statement -> CONTINUE SEMI','jump_statement',2,'p_jump_statement_3','c_parser.py',1394),
  ('jump_statement -> RETURN expression SEMI','jump_statement',3,'p_jump_statement_4','c_parser.py',1398),
  ('jump_statement -> RETURN SEMI','jump_statement',2,'p_jump_statement_4','c_parser.py',1399),
  ('expression_statement -> expression_opt SEMI','expression_statement',2,'p_expression_statement','c_parser.py',1404),
  ('expression -> assignment_expression','expression',1,'p_expression','c_parser.py',1411),
  ('expression -> expression COMMA assignment_expression','expression',3,'p_expression','c_parser.py',1412),
  ('typedef_name -> TYPEID','typedef_name',1,'p_typedef_name','c_parser.py',1424),
  ('assignment_expression -> conditional_expression','assignment_expression',1,'p_assignment_expression','c_parser.py',1428),
  ('assignment_expression -> unary_expression assignment_operator assignment_expression','assignment_expression',3,'p_assignment_expression','c_parser.py',1429),
  ('assignment_operator -> EQUALS','assignment_operator',1,'p_assignment_operator','c_parser.py',1442),
  ('assignment_operator -> XOREQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1443),
  ('assignment_operator -> TIMESEQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1444),
  ('assignment_operator -> DIVEQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1445),
  ('assignment_operator -> MODEQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1446),
  ('assignment_operator -> PLUSEQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1447),
  ('assignment_operator -> MINUSEQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1448),
  ('assignment_operator -> LSHIFTEQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1449),
  ('assignment_operator -> RSHIFTEQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1450),
  ('assignment_operator -> ANDEQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1451),
  ('assignment_operator -> OREQUAL','assignment_operator',1,'p_assignment_operator','c_parser.py',1452),
  ('constant_expression -> conditional_expression','constant_expression',1,'p_constant_expression','c_parser.py',1457),
  ('conditional_expression -> binary_expression','conditional_expression',1,'p_conditional_expression','c_parser.py',1461),
  ('conditional_expression -> binary_expression CONDOP expression COLON conditional_expression','conditional_expression',5,'p_conditional_expression','c_parser.py',1462),
  ('binary_expression -> cast_expression','binary_expression',1,'p_binary_expression','c_parser.py',1470),
  ('binary_expression -> binary_expression TIMES binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1471),
  ('binary_expression -> binary_expression DIVIDE binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1472),
  ('binary_expression -> binary_expression MOD binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1473),
  ('binary_expression -> binary_expression PLUS binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1474),
  ('binary_expression -> binary_expression MINUS binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1475),
  ('binary_expression -> binary_expression RSHIFT binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1476),
  ('binary_expression -> binary_expression LSHIFT binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1477),
  ('binary_expression -> binary_expression LT binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1478),
  ('binary_expression -> binary_expression LE binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1479),
  ('binary_expression -> binary_expression GE binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1480),
  ('binary_expression -> binary_expression GT binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1481),
  ('binary_expression -> binary_expression EQ binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1482),
  ('binary_expression -> binary_expression NE binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1483),
  ('binary_expression -> binary_expression AND binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1484),
  ('binary_expression -> binary_expression OR binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1485),
  ('binary_expression -> binary_expression XOR binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1486),
  ('binary_expression -> binary_expression LAND binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1487),
  ('binary_expression -> binary_expression LOR binary_expression','binary_expression',3,'p_binary_expression','c_parser.py',1488),
  ('cast_expression -> unary_expression','cast_expression',1,'p_cast_expression_1','c_parser.py',1496),
  ('cast_expression -> LPAREN type_name RPAREN cast_expression','cast_expression',4,'p_cast_expression_2','c_parser.py',1500),
  ('unary_expression -> postfix_expression','unary_expression',1,'p_unary_expression_1','c_parser.py',1504),
  ('unary_expression -> PLUSPLUS unary_expression','unary_expression',2,'p_unary_expression_2','c_parser.py',1508),
  ('unary_expression -> MINUSMINUS unary_expression','unary_expression',2,'p_unary_expression_2','c_parser.py',1509),
  ('unary_expression -> unary_operator cast_expression','unary_expression',2,'p_unary_expression_2','c_parser.py',1510),
  ('unary_expression -> SIZEOF unary_expression','unary_expression',2,'p_unary_expression_3','c_parser.py',1515),
  ('unary_expression -> SIZEOF LPAREN type_name RPAREN','unary_expression',4,'p_unary_expression_3','c_parser.py',1516),
  ('unary_operator -> AND','unary_operator',1,'p_unary_operator','c_parser.py',1524),
  ('unary_operator -> TIMES','unary_operator',1,'p_unary_operator','c_parser.py',1525),
  ('unary_operator -> PLUS','unary_operator',1,'p_unary_operator','c_parser.py',1526),
  ('unary_operator -> MINUS','unary_operator',1,'p_unary_operator','c_parser.py',1527),
  ('unary_operator -> NOT','unary_operator',1,'p_unary_operator','c_parser.py',1528),
  ('unary_operator -> LNOT','unary_operator',1,'p_unary_operator','c_parser.py',1529),
  ('postfix_expression -> primary_expression','postfix_expression',1,'p_postfix_expression_1','c_parser.py',1534),
  ('postfix_expression -> postfix_expression LBRACKET expression RBRACKET','postfix_expression',4,'p_postfix_expression_2','c_parser.py',1538),
  ('postfix_expression -> postfix_expression LPAREN argument_expression_list RPAREN','postfix_expression',4,'p_postfix_expression_3','c_parser.py',1542),
  ('postfix_expression -> postfix_expression LPAREN RPAREN','postfix_expression',3,'p_postfix_expression_3','c_parser.py',1543),
  ('postfix_expression -> postfix_expression PERIOD ID','postfix_expression',3,'p_postfix_expression_4','c_parser.py',1548),
  ('postfix_expression -> postfix_expression PERIOD TYPEID','postfix_expression',3,'p_postfix_expression_4','c_parser.py',1549),
  ('postfix_expression -> postfix_expression ARROW ID','postfix_expression',3,'p_postfix_expression_4','c_parser.py',1550),
  ('postfix_expression -> postfix_expression ARROW TYPEID','postfix_expression',3,'p_postfix_expression_4','c_parser.py',1551),
  ('postfix_expression -> postfix_expression PLUSPLUS','postfix_expression',2,'p_postfix_expression_5','c_parser.py',1557),
  ('postfix_expression -> postfix_expression MINUSMINUS','postfix_expression',2,'p_postfix_expression_5','c_parser.py',1558),
  ('postfix_expression -> LPAREN type_name RPAREN brace_open initializer_list brace_close','postfix_expression',6,'p_postfix_expression_6','c_parser.py',1563),
  ('postfix_expression -> LPAREN type_name RPAREN brace_open initializer_list COMMA brace_close','postfix_expression',7,'p_postfix_expression_6','c_parser.py',1564),
  ('primary_expression -> identifier','primary_expression',1,'p_primary_expression_1','c_parser.py',1569),
  ('primary_expression -> constant','primary_expression',1,'p_primary_expression_2','c_parser.py',1573),
  ('primary_expression -> unified_string_literal','primary_expression',1,'p_primary_expression_3','c_parser.py',1577),
  ('primary_expression -> unified_wstring_literal','primary_expression',1,'p_primary_expression_3','c_parser.py',1578),
  ('primary_expression -> LPAREN expression RPAREN','primary_expression',3,'p_primary_expression_4','c_parser.py',1583),
  ('primary_expression -> OFFSETOF LPAREN type_name COMMA identifier RPAREN','primary_expression',6,'p_primary_expression_5','c_parser.py',1587),
  ('argument_expression_list -> assignment_expression','argument_expression_list',1,'p_argument_expression_list','c_parser.py',1595),
  ('argument_expression_list -> argument_expression_list COMMA assignment_expression','argument_expression_list',3,'p_argument_expression_list','c_parser.py',1596),
  ('identifier -> ID','identifier',1,'p_identifier','c_parser.py',1605),
  ('constant -> INT_CONST_DEC','constant',1,'p_constant_1','c_parser.py',1609),
  ('constant -> INT_CONST_OCT','constant',1,'p_constant_1','c_parser.py',1610),
  ('constant -> INT_CONST_HEX','constant',1,'p_constant_1','c_parser.py',1611),
  ('constant -> INT_CONST_BIN','constant',1,'p_constant_1','c_parser.py',1612),
  ('constant -> FLOAT_CONST','constant',1,'p_constant_2','c_parser.py',1618),
  ('constant -> HEX_FLOAT_CONST','constant',1,'p_constant_2','c_parser.py',1619),
  ('constant -> CHAR_CONST','constant',1,'p_constant_3','c_parser.py',1625),
  ('constant -> WCHAR_CONST','constant',1,'p_constant_3','c_parser.py',1626),
  ('unified_string_literal -> STRING_LITERAL','unified_string_literal',1,'p_unified_string_literal','c_parser.py',1637),
  ('unified_string_literal -> unified_string_literal STRING_LITERAL','unified_string_literal',2,'p_unified_string_literal','c_parser.py',1638),
  ('unified_wstring_literal -> WSTRING_LITERAL','unified_wstring_literal',1,'p_unified_wstring_literal','c_parser.py',1648),
  ('unified_wstring_literal -> unified_wstring_literal WSTRING_LITERAL','unified_wstring_literal',2,'p_unified_wstring_literal','c_parser.py',1649),
  ('brace_open -> LBRACE','brace_open',1,'p_brace_open','c_parser.py',1659),
  ('brace_close -> RBRACE','brace_close',1,'p_brace_close','c_parser.py',1664),
  ('empty -> <empty>','empty',0,'p_empty','c_parser.py',1669),
]
PK     ʽ\cxS  S    _build_tables.pynu [        #-----------------------------------------------------------------
# pycparser: _build_tables.py
#
# A dummy for generating the lexing/parsing tables and and
# compiling them into .pyc for faster execution in optimized mode.
# Also generates AST code from the configuration file.
# Should be called from the pycparser directory.
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------

# Generate c_ast.py
from _ast_gen import ASTCodeGenerator
ast_gen = ASTCodeGenerator('_c_ast.cfg')
ast_gen.generate(open('c_ast.py', 'w'))

import sys
sys.path[0:0] = ['.', '..']
from pycparser import c_parser

# Generates the tables
#
c_parser.CParser(
    lex_optimize=True,
    yacc_debug=False,
    yacc_optimize=True)

# Load to compile into .pyc
#
import lextab
import yacctab
import c_ast
PK     ʽ\L#&      ast_transforms.pynu [        #------------------------------------------------------------------------------
# pycparser: ast_transforms.py
#
# Some utilities used by the parser to create a friendlier AST.
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#------------------------------------------------------------------------------

from . import c_ast


def fix_switch_cases(switch_node):
    """ The 'case' statements in a 'switch' come out of parsing with one
        child node, so subsequent statements are just tucked to the parent
        Compound. Additionally, consecutive (fall-through) case statements
        come out messy. This is a peculiarity of the C grammar. The following:

            switch (myvar) {
                case 10:
                    k = 10;
                    p = k + 1;
                    return 10;
                case 20:
                case 30:
                    return 20;
                default:
                    break;
            }

        Creates this tree (pseudo-dump):

            Switch
                ID: myvar
                Compound:
                    Case 10:
                        k = 10
                    p = k + 1
                    return 10
                    Case 20:
                        Case 30:
                            return 20
                    Default:
                        break

        The goal of this transform it to fix this mess, turning it into the
        following:

            Switch
                ID: myvar
                Compound:
                    Case 10:
                        k = 10
                        p = k + 1
                        return 10
                    Case 20:
                    Case 30:
                        return 20
                    Default:
                        break

        A fixed AST node is returned. The argument may be modified.
    """
    assert isinstance(switch_node, c_ast.Switch)
    if not isinstance(switch_node.stmt, c_ast.Compound):
        return switch_node

    # The new Compound child for the Switch, which will collect children in the
    # correct order
    new_compound = c_ast.Compound([], switch_node.stmt.coord)

    # The last Case/Default node
    last_case = None

    # Goes over the children of the Compound below the Switch, adding them
    # either directly below new_compound or below the last Case as appropriate
    for child in switch_node.stmt.block_items:
        if isinstance(child, (c_ast.Case, c_ast.Default)):
            # If it's a Case/Default:
            # 1. Add it to the Compound and mark as "last case"
            # 2. If its immediate child is also a Case or Default, promote it
            #    to a sibling.
            new_compound.block_items.append(child)
            _extract_nested_case(child, new_compound.block_items)
            last_case = new_compound.block_items[-1]
        else:
            # Other statements are added as children to the last case, if it
            # exists.
            if last_case is None:
                new_compound.block_items.append(child)
            else:
                last_case.stmts.append(child)

    switch_node.stmt = new_compound
    return switch_node


def _extract_nested_case(case_node, stmts_list):
    """ Recursively extract consecutive Case statements that are made nested
        by the parser and add them to the stmts_list.
    """
    if isinstance(case_node.stmts[0], (c_ast.Case, c_ast.Default)):
        stmts_list.append(case_node.stmts.pop())
        _extract_nested_case(stmts_list[-1], stmts_list)

PK     ʽ\×    $  __pycache__/plyparser.cpython-36.pycnu [        3
gwU:                 @   s4   G d d de ZG dd deZG dd de ZdS )c               @   s&   e Zd ZdZdZdddZd	d
 ZdS )Coordz Coordinates of a syntactic element. Consists of:
            - File name
            - Line number
            - (optional) column number, for the Lexer
    filelinecolumn__weakref__Nc             C   s   || _ || _|| _d S )N)r   r   r   )selfr   r   r    r   /usr/lib/python3.6/plyparser.py__init__   s    zCoord.__init__c             C   s(   d| j | jf }| jr$|d| j 7 }|S )Nz%s:%sz:%s)r   r   r   )r   strr   r   r   __str__   s     zCoord.__str__)r   r   r   r   )N)__name__
__module____qualname____doc__	__slots__r	   r   r   r   r   r   r      s   
r   c               @   s   e Zd ZdS )
ParseErrorN)r   r   r   r   r   r   r   r      s    r   c               @   s&   e Zd Zdd ZdddZdd ZdS )		PLYParserc             C   s<   |d }dd }d||f |_ d| |_t| j|j| dS )z Given a rule name, creates an optional ply.yacc rule
            for it. The name of the optional rule is
            <rulename>_opt
        Z_optc             S   s   |d |d< d S )N       r   )r   pr   r   r   optrule)   s    z+PLYParser._create_opt_rule.<locals>.optrulez%s : empty
| %szp_%sN)r   r   setattr	__class__)r   ZrulenameZoptnamer   r   r   r   _create_opt_rule"   s
    
zPLYParser._create_opt_ruleNc             C   s   t | jj||dS )N)r   r   r   )r   Zclexfilename)r   linenor   r   r   r   _coord0   s    zPLYParser._coordc             C   s   t d||f d S )Nz%s: %s)r   )r   msgZcoordr   r   r   _parse_error6   s    zPLYParser._parse_error)N)r   r   r   r   r   r   r   r   r   r   r   !   s   
r   N)objectr   	Exceptionr   r   r   r   r   r   <module>   s   PK     ʽ\}F    #  __pycache__/c_parser.cpython-36.pycnu [        3
]                 @   s   d dl Z d dlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
 ddlmZ G dd	 d	eZed
kr|d dlZd dlZd dlZdS )    N)yacc   )c_ast)CLexer)	PLYParserCoord
ParseError)fix_switch_casesc               @   sD  e Zd ZdCddZdDd	d
Zdd Zdd Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ ZdEd%d&Zd'd( Zd)d* ZdPZd>d? Zd@dA ZdBdC ZdDdE ZdFdG ZdHdI ZdJdK ZdLdM ZdNdO ZdPdQ ZdRdS Z dTdU Z!dVdW Z"dXdY Z#dZd[ Z$d\d] Z%d^d_ Z&d`da Z'dbdc Z(ddde Z)dfdg Z*dhdi Z+djdk Z,dldm Z-dndo Z.dpdq Z/drds Z0dtdu Z1dvdw Z2dxdy Z3dzd{ Z4d|d} Z5d~d Z6dd Z7dd Z8dd Z9dd Z:dd Z;dd Z<dd Z=dd Z>dd Z?dd Z@dd ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWddÄ ZXddń ZYddǄ ZZddɄ Z[dd˄ Z\dd̈́ Z]ddτ Z^ddф Z_ddӄ Z`ddՄ Zaddׄ Zbddل Zcddۄ Zddd݄ Zedd߄ Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd Zpdd Zqdd Zrdd Zsdd Ztdd Zudd Zvd d Zwdd Zxdd Zydd Zzdd	 Z{d
d Z|dd Z}dd Z~dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Zd@dA ZdBS (Q  CParserTpycparser.lextabpycparser.yacctabF c       	      C   s   t | j| j| j| jd| _| jj|||d | jj| _ddddddd	d
ddddddg}x|D ]}| j| q\W t	j	| d||||d| _
t g| _d| _dS )a   Create a new CParser.

            Some arguments for controlling the debug/optimization
            level of the parser are provided. The defaults are
            tuned for release/performance mode.
            The simple rules for using them are:
            *) When tweaking CParser/CLexer, set these to False
            *) When releasing a stable parser, set to True

            lex_optimize:
                Set to False when you're modifying the lexer.
                Otherwise, changes in the lexer won't be used, if
                some lextab.py file exists.
                When releasing with a stable lexer, set to True
                to save the re-generation of the lexer table on
                each run.

            lextab:
                Points to the lex table that's used for optimized
                mode. Only if you're modifying the lexer and want
                some tests to avoid re-generating the table, make
                this point to a local lex table file (that's been
                earlier generated with lex_optimize=True)

            yacc_optimize:
                Set to False when you're modifying the parser.
                Otherwise, changes in the parser won't be used, if
                some parsetab.py file exists.
                When releasing with a stable parser, set to True
                to save the re-generation of the parser table on
                each run.

            yacctab:
                Points to the yacc table that's used for optimized
                mode. Only if you're modifying the parser, make
                this point to a local yacc table file

            yacc_debug:
                Generate a parser.out file that explains how yacc
                built the parsing table from the grammar.

            taboutputdir:
                Set this parameter to control the location of generated
                lextab and yacctab files.
        )Z
error_funcZon_lbrace_funcZon_rbrace_funcZtype_lookup_func)optimizelextab	outputdirZabstract_declaratorZassignment_expressionZdeclaration_listZdeclaration_specifiersZdesignationZ
expressionZidentifier_listZinit_declarator_listZinitializer_listZparameter_type_listZspecifier_qualifier_listZblock_item_listZtype_qualifier_listZstruct_declarator_listZtranslation_unit_or_empty)modulestartdebugr   Z	tabmoduler   N)r   _lex_error_func_lex_on_lbrace_func_lex_on_rbrace_func_lex_type_lookup_funcclexZbuildtokensZ_create_opt_ruler   cparserdict_scope_stack_last_yielded_token)	selfZlex_optimizer   Zyacc_optimizeZyacctabZ
yacc_debugZtaboutputdirZrules_with_optZrule r   /usr/lib/python3.6/c_parser.py__init__   sF    5




zCParser.__init__r   c             C   s6   || j _| j j  t g| _d| _| jj|| j |dS )a&   Parses C code and returns an AST.

            text:
                A string containing the C source code

            filename:
                Name of the file being parsed (for meaningful
                error messages)

            debuglevel:
                Debug level to yacc
        N)inputZlexerr   )r   filenameZreset_linenor   r   r   r   parse)r   textr#   Z
debuglevelr   r   r    r$   ~   s    

zCParser.parsec             C   s   | j jt  d S )N)r   appendr   )r   r   r   r    _push_scope   s    zCParser._push_scopec             C   s    t | jdkst| jj  d S )Nr   )lenr   AssertionErrorpop)r   r   r   r    
_pop_scope   s    zCParser._pop_scopec             C   s4   | j d j|ds"| jd| | d| j d |< dS )zC Add a new typedef name (ie a TYPEID) to the current scope
        r   Tz;Typedef %r previously declared as non-typedef in this scopeNr,   )r   get_parse_error)r   namecoordr   r   r    _add_typedef_name   s
    
zCParser._add_typedef_namec             C   s4   | j d j|dr"| jd| | d| j d |< dS )ze Add a new object, function, or enum member name (ie an ID) to the
            current scope
        r   Fz;Non-typedef %r previously declared as typedef in this scopeNr,   r,   )r   r-   r.   )r   r/   r0   r   r   r    _add_identifier   s
    
zCParser._add_identifierc             C   s.   x(t | jD ]}|j|}|dk	r|S qW dS )z8 Is *name* a typedef-name in the current scope?
        NF)reversedr   r-   )r   r/   ZscopeZin_scoper   r   r    _is_type_in_scope   s
    
 zCParser._is_type_in_scopec             C   s   | j || j|| d S )N)r.   _coord)r   msglinecolumnr   r   r    r      s    zCParser._lex_error_funcc             C   s   | j   d S )N)r'   )r   r   r   r    r      s    zCParser._lex_on_lbrace_funcc             C   s   | j   d S )N)r+   )r   r   r   r    r      s    zCParser._lex_on_rbrace_funcc             C   s   | j |}|S )z Looks up types that were previously defined with
            typedef.
            Passed to the lexer for recognizing identifiers that
            are types.
        )r4   )r   r/   Zis_typer   r   r    r      s    
zCParser._lex_type_lookup_funcc             C   s   | j jS )z We need access to yacc's lookahead token in certain cases.
            This is the last token yacc requested from the lexer, so we
            ask the lexer.
        )r   Z
last_token)r   r   r   r    _get_yacc_lookahead_token   s    z!CParser._get_yacc_lookahead_tokenc             C   sd   |}|}x|j r|j }q
W t|tjr0||_ |S |}xt|j tjsL|j }q6W |j |_ ||_ |S dS )z Tacks a type modifier on a declarator, and returns
            the modified declarator.

            Note: the declarator and modifier may be modified
        N)type
isinstancer   TypeDecl)r   declmodifierZmodifier_headZmodifier_tailZ	decl_tailr   r   r    _type_modify_decl   s    

zCParser._type_modify_declc             C   s   |}xt |tjs|j}qW |j|_|j|_x>|D ]6}t |tjs2t|dkr^| j	d|j
 q2||_|S q2W |st |jtjs| j	d|j
 tjdg|j
d|_n tjdd |D |d j
d|_|S )	z- Fixes a declaration. Modifies decl.
        r   z Invalid multiple types specifiedzMissing type in declarationint)r0   c             S   s   g | ]}|j D ]}|qqS r   )names).0idr/   r   r   r    
<listcomp>U  s    z/CParser._fix_decl_name_type.<locals>.<listcomp>r   )r;   r   r<   r:   declnamer/   qualsIdentifierTyper(   r.   r0   FuncDecl)r   r=   typenamer:   Ztnr   r   r    _fix_decl_name_type,  s.    


zCParser._fix_decl_name_typec             C   s(   |pt g g g g d}|| jd| |S )a   Declaration specifiers are represented by a dictionary
            with the entries:
            * qual: a list of type qualifiers
            * storage: a list of storage type qualifiers
            * type: a list of type specifiers
            * function: a list of function specifiers

            This method is given a declaration specifier, and a
            new specifier of a given kind.
            Returns the declaration specifier, with the new
            specifier incorporated.
        )qualstorager:   functionr   )r   insert)r   ZdeclspecZnewspecZkindspecr   r   r    _add_declaration_specifierY  s    z"CParser._add_declaration_specifierc             C   sR  d|d k}g }|d j ddk	r&n4|d d dkrt|d dk svt|d d jd	ksv| j|d d jd  rd
}x"|d D ]}t|dr|j}P qW | jd| tj|d d jd dd|d d jd|d d< |d d= nrt	|d d tj
tjtjfsZ|d d }xt	|tjs.|j}qW |jdkrZ|d d jd |_|d d= x|D ]}	|	d dk	svt|rtjd|d |d |	d |	d jd}
n<tjd|d |d |d |	d |	j d|	j d|	d jd}
t	|
jtj
tjtjfr |
}n| j|
|d }|r>|r.| j|j|j n| j|j|j |j| q`W |S )z Builds a list of declarations all sharing the given specifiers.
            If typedef_namespace is true, each declared name is added
            to the "typedef namespace", which also includes objects,
            functions, and enum constants.
        typedefrL   r   bitsizeNr=   r:      r   ?r0   zInvalid declaration)rE   r:   rF   r0   rK   )r/   rF   rL   r:   r0   rM   init)r/   rF   rL   funcspecr:   rU   rR   r0   r,   r,   r,   r,   r,   r,   r,   )r-   r(   rA   r4   hasattrr0   r.   r   r<   r;   StructUnionrG   r:   rE   r)   ZTypedefDeclrJ   r1   r/   r2   r&   )r   rO   declstypedef_namespaceZ
is_typedefZdeclarationsr0   tZdecls_0_tailr=   declarationZ
fixed_declr   r   r    _build_declarationsj  sn    &


zCParser._build_declarationsc             C   sB   d|d kst | j|t|ddgddd }tj||||jdS )	z' Builds a function definition.
        rQ   rL   N)r=   rU   T)rO   r[   r\   r   )r=   param_declsbodyr0   )r)   r_   r   r   ZFuncDefr0   )r   rO   r=   r`   ra   r^   r   r   r    _build_function_definition  s    z"CParser._build_function_definitionc             C   s   |dkrt jS t jS dS )z` Given a token (either STRUCT or UNION), selects the
            appropriate AST class.
        structN)r   rX   rY   )r   tokenr   r   r    _select_struct_union_class  s    z"CParser._select_struct_union_classleftLORLANDORXORANDEQNEGTGELTLERSHIFTLSHIFTPLUSMINUSTIMESDIVIDEMODc             C   s2   |d dkrt jg |d< nt j|d |d< dS )zh translation_unit_or_empty   : translation_unit
                                        | empty
        r   Nr   )r   ZFileAST)r   pr   r   r    p_translation_unit_or_empty  s    z#CParser.p_translation_unit_or_emptyc             C   s   |d |d< dS )z4 translation_unit    : external_declaration
        r   r   Nr   )r   ry   r   r   r    p_translation_unit_1  s    zCParser.p_translation_unit_1c             C   s.   |d dk	r|d j |d  |d |d< dS )zE translation_unit    : translation_unit external_declaration
        rS   Nr   r   )extend)r   ry   r   r   r    p_translation_unit_2  s    zCParser.p_translation_unit_2c             C   s   |d g|d< dS )z7 external_declaration    : function_definition
        r   r   Nr   )r   ry   r   r   r    p_external_declaration_1  s    z CParser.p_external_declaration_1c             C   s   |d |d< dS )z/ external_declaration    : declaration
        r   r   Nr   )r   ry   r   r   r    p_external_declaration_2  s    z CParser.p_external_declaration_2c             C   s   |d |d< dS )z0 external_declaration    : pp_directive
        r   r   Nr   )r   ry   r   r   r    p_external_declaration_3  s    z CParser.p_external_declaration_3c             C   s   d|d< dS )z( external_declaration    : SEMI
        Nr   r   )r   ry   r   r   r    p_external_declaration_4  s    z CParser.p_external_declaration_4c             C   s   | j d| j|jd dS )z  pp_directive  : PPHASH
        zDirectives not supported yetr   N)r.   r5   lineno)r   ry   r   r   r    p_pp_directive$  s    zCParser.p_pp_directivec             C   sP   t g g tjdg| j|jddgg d}| j||d |d |d d|d< d	S )
zR function_definition : declarator declaration_list_opt compound_statement
        r@   r   )r0   )rK   rL   r:   rM   rS      )rO   r=   r`   ra   r   N)r   r   rG   r5   r   rb   )r   ry   rO   r   r   r    p_function_definition_1-  s    zCParser.p_function_definition_1c             C   s.   |d }| j ||d |d |d d|d< dS )zi function_definition : declaration_specifiers declarator declaration_list_opt compound_statement
        r   rS   r      )rO   r=   r`   ra   r   N)rb   )r   ry   rO   r   r   r    p_function_definition_2>  s    zCParser.p_function_definition_2c             C   s   |d |d< dS )a
   statement   : labeled_statement
                        | expression_statement
                        | compound_statement
                        | selection_statement
                        | iteration_statement
                        | jump_statement
        r   r   Nr   )r   ry   r   r   r    p_statementI  s    zCParser.p_statementc          
   C   s   |d }|d dkr|d }t jt jt jf}t|dkrzt|d |rzt jd|d |d |d |d dd|d jd	g}q| j|t	ddd
gdd}n| j||d dd}||d< dS )zE decl_body : declaration_specifiers init_declarator_list_opt
        r   rS   Nr:   r   rK   rL   rM   )r/   rF   rL   rV   r:   rU   rR   r0   )r=   rU   T)rO   r[   r\   )
r   rX   rY   Enumr(   r;   rZ   r0   r_   r   )r   ry   rO   ZtyZs_u_or_er[   r   r   r    p_decl_body\  s.    
zCParser.p_decl_bodyc             C   s   |d |d< dS )z& declaration : decl_body SEMI
        r   r   Nr   )r   ry   r   r   r    p_declaration  s    zCParser.p_declarationc             C   s,   t |dkr|d n|d |d  |d< dS )zj declaration_list    : declaration
                                | declaration_list declaration
        rS   r   r   N)r(   )r   ry   r   r   r    p_declaration_list  s    zCParser.p_declaration_listc             C   s   | j |d |d d|d< dS )zM declaration_specifiers  : type_qualifier declaration_specifiers_opt
        rS   r   rK   r   N)rP   )r   ry   r   r   r    p_declaration_specifiers_1  s    z"CParser.p_declaration_specifiers_1c             C   s   | j |d |d d|d< dS )zM declaration_specifiers  : type_specifier declaration_specifiers_opt
        rS   r   r:   r   N)rP   )r   ry   r   r   r    p_declaration_specifiers_2  s    z"CParser.p_declaration_specifiers_2c             C   s   | j |d |d d|d< dS )zV declaration_specifiers  : storage_class_specifier declaration_specifiers_opt
        rS   r   rL   r   N)rP   )r   ry   r   r   r    p_declaration_specifiers_3  s    z"CParser.p_declaration_specifiers_3c             C   s   | j |d |d d|d< dS )zQ declaration_specifiers  : function_specifier declaration_specifiers_opt
        rS   r   rM   r   N)rP   )r   ry   r   r   r    p_declaration_specifiers_4  s    z"CParser.p_declaration_specifiers_4c             C   s   |d |d< dS )z storage_class_specifier : AUTO
                                    | REGISTER
                                    | STATIC
                                    | EXTERN
                                    | TYPEDEF
        r   r   Nr   )r   ry   r   r   r    p_storage_class_specifier  s    z!CParser.p_storage_class_specifierc             C   s   |d |d< dS )z& function_specifier  : INLINE
        r   r   Nr   )r   ry   r   r   r    p_function_specifier  s    zCParser.p_function_specifierc             C   s(   t j|d g| j|jdd|d< dS )a   type_specifier  : VOID
                            | _BOOL
                            | CHAR
                            | SHORT
                            | INT
                            | LONG
                            | FLOAT
                            | DOUBLE
                            | _COMPLEX
                            | SIGNED
                            | UNSIGNED
        r   )r0   r   N)r   rG   r5   r   )r   ry   r   r   r    p_type_specifier_1  s    zCParser.p_type_specifier_1c             C   s   |d |d< dS )z type_specifier  : typedef_name
                            | enum_specifier
                            | struct_or_union_specifier
        r   r   Nr   )r   ry   r   r   r    p_type_specifier_2  s    zCParser.p_type_specifier_2c             C   s   |d |d< dS )zo type_qualifier  : CONST
                            | RESTRICT
                            | VOLATILE
        r   r   Nr   )r   ry   r   r   r    p_type_qualifier  s    zCParser.p_type_qualifierc             C   s0   t |dkr|d |d g n|d g|d< dS )z init_declarator_list    : init_declarator
                                    | init_declarator_list COMMA init_declarator
        r   r   r   r   N)r(   )r   ry   r   r   r    p_init_declarator_list_1  s    z CParser.p_init_declarator_list_1c             C   s   t d|d dg|d< dS )z6 init_declarator_list    : EQUALS initializer
        NrS   )r=   rU   r   )r   )r   ry   r   r   r    p_init_declarator_list_2  s    z CParser.p_init_declarator_list_2c             C   s   t |d ddg|d< dS )z7 init_declarator_list    : abstract_declarator
        r   N)r=   rU   r   )r   )r   ry   r   r   r    p_init_declarator_list_3  s    z CParser.p_init_declarator_list_3c             C   s,   t |d t|dkr|d ndd|d< dS )zb init_declarator : declarator
                            | declarator EQUALS initializer
        r   rS   r   N)r=   rU   r   )r   r(   )r   ry   r   r   r    p_init_declarator   s    zCParser.p_init_declaratorc             C   s   | j |d |d d|d< dS )zS specifier_qualifier_list    : type_qualifier specifier_qualifier_list_opt
        rS   r   rK   r   N)rP   )r   ry   r   r   r    p_specifier_qualifier_list_1  s    z$CParser.p_specifier_qualifier_list_1c             C   s   | j |d |d d|d< dS )zS specifier_qualifier_list    : type_specifier specifier_qualifier_list_opt
        rS   r   r:   r   N)rP   )r   ry   r   r   r    p_specifier_qualifier_list_2  s    z$CParser.p_specifier_qualifier_list_2c             C   s4   | j |d }||d d| j|jdd|d< dS )z{ struct_or_union_specifier   : struct_or_union ID
                                        | struct_or_union TYPEID
        r   rS   N)r/   r[   r0   r   )re   r5   r   )r   ry   klassr   r   r    p_struct_or_union_specifier_1  s
    z%CParser.p_struct_or_union_specifier_1c             C   s4   | j |d }|d|d | j|jdd|d< dS )zd struct_or_union_specifier : struct_or_union brace_open struct_declaration_list brace_close
        r   Nr   rS   )r/   r[   r0   r   )re   r5   r   )r   ry   r   r   r   r    p_struct_or_union_specifier_2  s
    z%CParser.p_struct_or_union_specifier_2c             C   s8   | j |d }||d |d | j|jdd|d< dS )z struct_or_union_specifier   : struct_or_union ID brace_open struct_declaration_list brace_close
                                        | struct_or_union TYPEID brace_open struct_declaration_list brace_close
        r   rS   r   )r/   r[   r0   r   N)re   r5   r   )r   ry   r   r   r   r    p_struct_or_union_specifier_3&  s
    z%CParser.p_struct_or_union_specifier_3c             C   s   |d |d< dS )zF struct_or_union : STRUCT
                            | UNION
        r   r   Nr   )r   ry   r   r   r    p_struct_or_union0  s    zCParser.p_struct_or_unionc             C   s,   t |dkr|d n|d |d  |d< dS )z struct_declaration_list     : struct_declaration
                                        | struct_declaration_list struct_declaration
        rS   r   r   N)r(   )r   ry   r   r   r    p_struct_declaration_list8  s    z!CParser.p_struct_declaration_listc             C   s   |d }d|d kst |d dk	r8| j||d d}nht|d dkr|d d }t|tjrf|}n
tj|}| j|t|d	gd}n| j|tddd
gd}||d< dS )zW struct_declaration : specifier_qualifier_list struct_declarator_list_opt SEMI
        r   rQ   rL   rS   N)rO   r[   r:   r   )r=   )r=   rU   )r)   r_   r(   r;   r   ZNoderG   r   )r   ry   rO   r[   ZnodeZ	decl_typer   r   r    p_struct_declaration_1>  s$    
zCParser.p_struct_declaration_1c             C   s(   | j |d t|d ddgd|d< dS )zP struct_declaration : specifier_qualifier_list abstract_declarator SEMI
        r   rS   N)r=   rU   )rO   r[   r   )r_   r   )r   ry   r   r   r    p_struct_declaration_2d  s    
zCParser.p_struct_declaration_2c             C   s0   t |dkr|d |d g n|d g|d< dS )z struct_declarator_list  : struct_declarator
                                    | struct_declarator_list COMMA struct_declarator
        r   r   r   r   N)r(   )r   ry   r   r   r    p_struct_declarator_listr  s    z CParser.p_struct_declarator_listc             C   s   |d dd|d< dS )z( struct_declarator : declarator
        r   N)r=   rR   r   r   )r   ry   r   r   r    p_struct_declarator_1{  s    zCParser.p_struct_declarator_1c             C   sD   t |dkr$|d |d d|d< ntjddd|d d|d< dS )z struct_declarator   : declarator COLON constant_expression
                                | COLON constant_expression
        r   r   )r=   rR   r   NrS   )r(   r   r<   )r   ry   r   r   r    p_struct_declarator_2  s    zCParser.p_struct_declarator_2c             C   s&   t j|d d| j|jd|d< dS )zM enum_specifier  : ENUM ID
                            | ENUM TYPEID
        rS   Nr   r   )r   r   r5   r   )r   ry   r   r   r    p_enum_specifier_1  s    zCParser.p_enum_specifier_1c             C   s&   t jd|d | j|jd|d< dS )zG enum_specifier  : ENUM brace_open enumerator_list brace_close
        Nr   r   r   )r   r   r5   r   )r   ry   r   r   r    p_enum_specifier_2  s    zCParser.p_enum_specifier_2c             C   s*   t j|d |d | j|jd|d< dS )z enum_specifier  : ENUM ID brace_open enumerator_list brace_close
                            | ENUM TYPEID brace_open enumerator_list brace_close
        rS   r   r   r   N)r   r   r5   r   )r   ry   r   r   r    p_enum_specifier_3  s    zCParser.p_enum_specifier_3c             C   sh   t |dkr*tj|d g|d j|d< n:t |dkrD|d |d< n |d jj|d  |d |d< dS )z enumerator_list : enumerator
                            | enumerator_list COMMA
                            | enumerator_list COMMA enumerator
        rS   r   r   r   N)r(   r   ZEnumeratorListr0   Zenumeratorsr&   )r   ry   r   r   r    p_enumerator_list  s    zCParser.p_enumerator_listc             C   sj   t |dkr,tj|d d| j|jd}n"tj|d |d | j|jd}| j|j|j ||d< dS )zR enumerator  : ID
                        | ID EQUALS constant_expression
        rS   r   Nr   r   )r(   r   Z
Enumeratorr5   r   r2   r/   r0   )r   ry   Z
enumeratorr   r   r    p_enumerator  s    zCParser.p_enumeratorc             C   s   |d |d< dS )z) declarator  : direct_declarator
        r   r   Nr   )r   ry   r   r   r    p_declarator_1  s    zCParser.p_declarator_1c             C   s   | j |d |d |d< dS )z1 declarator  : pointer direct_declarator
        rS   r   r   N)r?   )r   ry   r   r   r    p_declarator_2  s    zCParser.p_declarator_2c             C   s:   t j|d dd| j|jdd}| j||d |d< dS )z& declarator  : pointer TYPEID
        rS   N)rE   r:   rF   r0   r   r   )r   r<   r5   r   r?   )r   ry   r=   r   r   r    p_declarator_3  s    zCParser.p_declarator_3c             C   s*   t j|d dd| j|jdd|d< dS )z" direct_declarator   : ID
        r   N)rE   r:   rF   r0   r   )r   r<   r5   r   )r   ry   r   r   r    p_direct_declarator_1  s
    zCParser.p_direct_declarator_1c             C   s   |d |d< dS )z8 direct_declarator   : LPAREN declarator RPAREN
        rS   r   Nr   )r   ry   r   r   r    p_direct_declarator_2  s    zCParser.p_direct_declarator_2c             C   sf   t |dkr|d ng pg }tjdt |dkr6|d n|d ||d jd}| j|d |d|d< dS )	zu direct_declarator   : direct_declarator LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKET
           r   Nr   r   )r:   dim	dim_qualsr0   )r=   r>   r   )r(   r   	ArrayDeclr0   r?   )r   ry   rF   arrr   r   r    p_direct_declarator_3  s    zCParser.p_direct_declarator_3c             C   s^   dd |d |d gD }dd |D }t jd|d ||d jd	}| j|d |d
|d< dS )z direct_declarator   : direct_declarator LBRACKET STATIC type_qualifier_list_opt assignment_expression RBRACKET
                                | direct_declarator LBRACKET type_qualifier_list STATIC assignment_expression RBRACKET
        c             S   s    g | ]}t |tr|n|gqS r   )r;   list)rB   itemr   r   r    rD     s   z1CParser.p_direct_declarator_4.<locals>.<listcomp>r   r   c             S   s"   g | ]}|D ]}|d k	r|qqS )Nr   )rB   ZsublistrK   r   r   r    rD     s    
Nr   r   )r:   r   r   r0   )r=   r>   r   )r   r   r0   r?   )r   ry   Zlisted_qualsr   r   r   r   r    p_direct_declarator_4  s    zCParser.p_direct_declarator_4c             C   s^   t jdt j|d | j|jd|d dkr4|d ng |d jd}| j|d |d|d< dS )za direct_declarator   : direct_declarator LBRACKET type_qualifier_list_opt TIMES RBRACKET
        Nr   r   r   )r:   r   r   r0   )r=   r>   r   )r   r   IDr5   r   r0   r?   )r   ry   r   r   r   r    p_direct_declarator_5  s    zCParser.p_direct_declarator_5c             C   s|   t j|d d|d jd}| j jdkrb|jdk	rbx.|jjD ]"}t|t jrNP | j	|j
|j q<W | j|d |d|d< dS )z direct_declarator   : direct_declarator LPAREN parameter_type_list RPAREN
                                | direct_declarator LPAREN identifier_list_opt RPAREN
        r   Nr   )argsr:   r0   LBRACE)r=   r>   r   )r   rH   r0   r9   r:   r   paramsr;   EllipsisParamr2   r/   r?   )r   ry   funcZparamr   r   r    p_direct_declarator_6  s    
 zCParser.p_direct_declarator_6c             C   sr   | j |jd}tj|d pg d|d}t|dkrf|d }x|jdk	rP|j}q>W ||_|d |d< n||d< dS )zm pointer : TIMES type_qualifier_list_opt
                    | TIMES type_qualifier_list_opt pointer
        r   rS   N)rF   r:   r0   r   r   )r5   r   r   ZPtrDeclr(   r:   )r   ry   r0   Znested_typeZ	tail_typer   r   r    	p_pointer(  s    
zCParser.p_pointerc             C   s0   t |dkr|d gn|d |d g |d< dS )zs type_qualifier_list : type_qualifier
                                | type_qualifier_list type_qualifier
        rS   r   r   N)r(   )r   ry   r   r   r    p_type_qualifier_listF  s    zCParser.p_type_qualifier_listc             C   s>   t |dkr.|d jjtj| j|jd |d |d< dS )zn parameter_type_list : parameter_list
                                | parameter_list COMMA ELLIPSIS
        rS   r   r   r   N)r(   r   r&   r   r   r5   r   )r   ry   r   r   r    p_parameter_type_listL  s    "zCParser.p_parameter_type_listc             C   sN   t |dkr*tj|d g|d j|d< n |d jj|d  |d |d< dS )zz parameter_list  : parameter_declaration
                            | parameter_list COMMA parameter_declaration
        rS   r   r   r   N)r(   r   	ParamListr0   r   r&   )r   ry   r   r   r    p_parameter_listU  s    zCParser.p_parameter_listc             C   sX   |d }|d s2t jdg| j|jddg|d< | j|t|d dgdd |d< d	S )
zE parameter_declaration   : declaration_specifiers declarator
        r   r:   r@   )r0   rS   )r=   )rO   r[   r   N)r   rG   r5   r   r_   r   )r   ry   rO   r   r   r    p_parameter_declaration_1_  s    z!CParser.p_parameter_declaration_1c             C   s   |d }|d s2t jdg| j|jddg|d< t|d dkrt|d d jdkr| j|d d jd r| j|t|d ddgd	d }nHt j	d
|d |d pt j
ddd| j|jdd}|d }| j||}||d< dS )zR parameter_declaration   : declaration_specifiers abstract_declarator_opt
        r   r:   r@   )r0   r   rS   N)r=   rU   )rO   r[   r   rK   )r/   rF   r:   r0   r,   r,   )r   rG   r5   r   r(   rA   r4   r_   r   Typenamer<   rJ   )r   ry   rO   r=   rI   r   r   r    p_parameter_declaration_2j  s"    &z!CParser.p_parameter_declaration_2c             C   sN   t |dkr*tj|d g|d j|d< n |d jj|d  |d |d< dS )ze identifier_list : identifier
                            | identifier_list COMMA identifier
        rS   r   r   r   N)r(   r   r   r0   r   r&   )r   ry   r   r   r    p_identifier_list  s    zCParser.p_identifier_listc             C   s   |d |d< dS )z- initializer : assignment_expression
        r   r   Nr   )r   ry   r   r   r    p_initializer_1  s    zCParser.p_initializer_1c             C   s:   |d dkr*t jg | j|jd|d< n|d |d< dS )z initializer : brace_open initializer_list_opt brace_close
                        | brace_open initializer_list COMMA brace_close
        rS   Nr   r   )r   InitListr5   r   )r   ry   r   r   r    p_initializer_2  s    zCParser.p_initializer_2c             C   s   t |dkrN|d dkr |d ntj|d |d }tj|g|d j|d< nD|d dkrb|d ntj|d |d }|d jj| |d |d< dS )z initializer_list    : designation_opt initializer
                                | initializer_list COMMA designation_opt initializer
        r   r   NrS   r   r   )r(   r   ZNamedInitializerr   r0   exprsr&   )r   ry   rU   r   r   r    p_initializer_list  s    ((zCParser.p_initializer_listc             C   s   |d |d< dS )z. designation : designator_list EQUALS
        r   r   Nr   )r   ry   r   r   r    p_designation  s    zCParser.p_designationc             C   s0   t |dkr|d gn|d |d g |d< dS )z_ designator_list : designator
                            | designator_list designator
        rS   r   r   N)r(   )r   ry   r   r   r    p_designator_list  s    zCParser.p_designator_listc             C   s   |d |d< dS )zi designator  : LBRACKET constant_expression RBRACKET
                        | PERIOD identifier
        rS   r   Nr   )r   ry   r   r   r    p_designator  s    zCParser.p_designatorc             C   sT   t jd|d d |d p$t jddd| j|jdd}| j||d d |d< dS )	zH type_name   : specifier_qualifier_list abstract_declarator_opt
        r   r   rK   rS   N)r/   rF   r:   r0   r:   r   )r   r   r<   r5   r   rJ   )r   ry   rI   r   r   r    p_type_name  s    	
zCParser.p_type_namec             C   s(   t jddd}| j||d d|d< dS )z+ abstract_declarator     : pointer
        Nr   )r=   r>   r   )r   r<   r?   )r   ry   Z	dummytyper   r   r    p_abstract_declarator_1  s    zCParser.p_abstract_declarator_1c             C   s   | j |d |d |d< dS )zF abstract_declarator     : pointer direct_abstract_declarator
        rS   r   r   N)r?   )r   ry   r   r   r    p_abstract_declarator_2  s    zCParser.p_abstract_declarator_2c             C   s   |d |d< dS )z> abstract_declarator     : direct_abstract_declarator
        r   r   Nr   )r   ry   r   r   r    p_abstract_declarator_3  s    zCParser.p_abstract_declarator_3c             C   s   |d |d< dS )zA direct_abstract_declarator  : LPAREN abstract_declarator RPAREN rS   r   Nr   )r   ry   r   r   r    p_direct_abstract_declarator_1  s    z&CParser.p_direct_abstract_declarator_1c             C   s6   t jd|d g |d jd}| j|d |d|d< dS )zn direct_abstract_declarator  : direct_abstract_declarator LBRACKET assignment_expression_opt RBRACKET
        Nr   r   )r:   r   r   r0   )r=   r>   r   )r   r   r0   r?   )r   ry   r   r   r   r    p_direct_abstract_declarator_2  s    z&CParser.p_direct_abstract_declarator_2c             C   s4   t jt jddd|d g | j|jdd|d< dS )zS direct_abstract_declarator  : LBRACKET assignment_expression_opt RBRACKET
        NrS   r   )r:   r   r   r0   r   )r   r   r<   r5   r   )r   ry   r   r   r    p_direct_abstract_declarator_3  s
    z&CParser.p_direct_abstract_declarator_3c             C   sJ   t jdt j|d | j|jdg |d jd}| j|d |d|d< dS )zZ direct_abstract_declarator  : direct_abstract_declarator LBRACKET TIMES RBRACKET
        Nr   r   )r:   r   r   r0   )r=   r>   r   )r   r   r   r5   r   r0   r?   )r   ry   r   r   r   r    p_direct_abstract_declarator_4  s    z&CParser.p_direct_abstract_declarator_4c             C   sH   t jt jdddt j|d | j|jdg | j|jdd|d< dS )z? direct_abstract_declarator  : LBRACKET TIMES RBRACKET
        Nr   r   )r:   r   r   r0   r   )r   r   r<   r   r5   r   )r   ry   r   r   r    p_direct_abstract_declarator_5  s
    z&CParser.p_direct_abstract_declarator_5c             C   s4   t j|d d|d jd}| j|d |d|d< dS )zh direct_abstract_declarator  : direct_abstract_declarator LPAREN parameter_type_list_opt RPAREN
        r   Nr   )r   r:   r0   )r=   r>   r   )r   rH   r0   r?   )r   ry   r   r   r   r    p_direct_abstract_declarator_6  s
    z&CParser.p_direct_abstract_declarator_6c             C   s2   t j|d t jddd| j|jdd|d< dS )zM direct_abstract_declarator  : LPAREN parameter_type_list_opt RPAREN
        rS   Nr   )r   r:   r0   r   )r   rH   r<   r5   r   )r   ry   r   r   r    p_direct_abstract_declarator_7  s    z&CParser.p_direct_abstract_declarator_7c             C   s(   t |d tr|d n|d g|d< dS )zG block_item  : declaration
                        | statement
        r   r   N)r;   r   )r   ry   r   r   r    p_block_item*  s    zCParser.p_block_itemc             C   s:   t |dks|d dgkr"|d n|d |d  |d< dS )z_ block_item_list : block_item
                            | block_item_list block_item
        rS   Nr   r   )r(   )r   ry   r   r   r    p_block_item_list2  s    zCParser.p_block_item_listc             C   s&   t j|d | j|jdd|d< dS )zA compound_statement : brace_open block_item_list_opt brace_close rS   r   )Zblock_itemsr0   r   N)r   ZCompoundr5   r   )r   ry   r   r   r    p_compound_statement_19  s    zCParser.p_compound_statement_1c             C   s*   t j|d |d | j|jd|d< dS )z( labeled_statement : ID COLON statement r   r   r   N)r   ZLabelr5   r   )r   ry   r   r   r    p_labeled_statement_1?  s    zCParser.p_labeled_statement_1c             C   s,   t j|d |d g| j|jd|d< dS )z> labeled_statement : CASE constant_expression COLON statement rS   r   r   r   N)r   ZCaser5   r   )r   ry   r   r   r    p_labeled_statement_2C  s    zCParser.p_labeled_statement_2c             C   s&   t j|d g| j|jd|d< dS )z- labeled_statement : DEFAULT COLON statement r   r   r   N)r   ZDefaultr5   r   )r   ry   r   r   r    p_labeled_statement_3G  s    zCParser.p_labeled_statement_3c             C   s,   t j|d |d d| j|jd|d< dS )z= selection_statement : IF LPAREN expression RPAREN statement r   r   Nr   r   )r   Ifr5   r   )r   ry   r   r   r    p_selection_statement_1K  s    zCParser.p_selection_statement_1c             C   s0   t j|d |d |d | j|jd|d< dS )zL selection_statement : IF LPAREN expression RPAREN statement ELSE statement r   r      r   r   N)r   r   r5   r   )r   ry   r   r   r    p_selection_statement_2O  s    zCParser.p_selection_statement_2c             C   s.   t tj|d |d | j|jd|d< dS )zA selection_statement : SWITCH LPAREN expression RPAREN statement r   r   r   r   N)r	   r   ZSwitchr5   r   )r   ry   r   r   r    p_selection_statement_3S  s    zCParser.p_selection_statement_3c             C   s*   t j|d |d | j|jd|d< dS )z@ iteration_statement : WHILE LPAREN expression RPAREN statement r   r   r   r   N)r   ZWhiler5   r   )r   ry   r   r   r    p_iteration_statement_1X  s    zCParser.p_iteration_statement_1c             C   s*   t j|d |d | j|jd|d< dS )zH iteration_statement : DO statement WHILE LPAREN expression RPAREN SEMI r   rS   r   r   N)r   ZDoWhiler5   r   )r   ry   r   r   r    p_iteration_statement_2\  s    zCParser.p_iteration_statement_2c             C   s6   t j|d |d |d |d | j|jd|d< dS )zj iteration_statement : FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN statement r   r   r   	   r   r   N)r   Forr5   r   )r   ry   r   r   r    p_iteration_statement_3`  s    zCParser.p_iteration_statement_3c             C   sJ   t jt j|d | j|jd|d |d |d | j|jd|d< dS )zb iteration_statement : FOR LPAREN declaration expression_opt SEMI expression_opt RPAREN statement r   r   r         r   N)r   r   ZDeclListr5   r   )r   ry   r   r   r    p_iteration_statement_4d  s    zCParser.p_iteration_statement_4c             C   s$   t j|d | j|jd|d< dS )z  jump_statement  : GOTO ID SEMI rS   r   r   N)r   ZGotor5   r   )r   ry   r   r   r    p_jump_statement_1i  s    zCParser.p_jump_statement_1c             C   s   t j| j|jd|d< dS )z jump_statement  : BREAK SEMI r   r   N)r   ZBreakr5   r   )r   ry   r   r   r    p_jump_statement_2m  s    zCParser.p_jump_statement_2c             C   s   t j| j|jd|d< dS )z! jump_statement  : CONTINUE SEMI r   r   N)r   ZContinuer5   r   )r   ry   r   r   r    p_jump_statement_3q  s    zCParser.p_jump_statement_3c             C   s4   t jt|dkr|d nd| j|jd|d< dS )z\ jump_statement  : RETURN expression SEMI
                            | RETURN SEMI
        r   rS   Nr   r   )r   ZReturnr(   r5   r   )r   ry   r   r   r    p_jump_statement_4u  s    zCParser.p_jump_statement_4c             C   s8   |d dkr(t j| j|jd|d< n|d |d< dS )z, expression_statement : expression_opt SEMI r   Nr   )r   ZEmptyStatementr5   r   )r   ry   r   r   r    p_expression_statement{  s    zCParser.p_expression_statementc             C   sj   t |dkr|d |d< nLt|d tjsFtj|d g|d j|d< |d jj|d  |d |d< dS )zn expression  : assignment_expression
                        | expression COMMA assignment_expression
        rS   r   r   r   N)r(   r;   r   ExprListr0   r   r&   )r   ry   r   r   r    p_expression  s    zCParser.p_expressionc             C   s(   t j|d g| j|jdd|d< dS )z typedef_name : TYPEID r   )r0   r   N)r   rG   r5   r   )r   ry   r   r   r    p_typedef_name  s    zCParser.p_typedef_namec             C   sD   t |dkr|d |d< n&tj|d |d |d |d j|d< dS )z assignment_expression   : conditional_expression
                                    | unary_expression assignment_operator assignment_expression
        rS   r   r   r   N)r(   r   Z
Assignmentr0   )r   ry   r   r   r    p_assignment_expression  s    zCParser.p_assignment_expressionc             C   s   |d |d< dS )a   assignment_operator : EQUALS
                                | XOREQUAL
                                | TIMESEQUAL
                                | DIVEQUAL
                                | MODEQUAL
                                | PLUSEQUAL
                                | MINUSEQUAL
                                | LSHIFTEQUAL
                                | RSHIFTEQUAL
                                | ANDEQUAL
                                | OREQUAL
        r   r   Nr   )r   ry   r   r   r    p_assignment_operator  s    zCParser.p_assignment_operatorc             C   s   |d |d< dS )z. constant_expression : conditional_expression r   r   Nr   )r   ry   r   r   r    p_constant_expression  s    zCParser.p_constant_expressionc             C   sD   t |dkr|d |d< n&tj|d |d |d |d j|d< dS )z conditional_expression  : binary_expression
                                    | binary_expression CONDOP expression COLON conditional_expression
        rS   r   r   r   r   N)r(   r   Z	TernaryOpr0   )r   ry   r   r   r    p_conditional_expression  s    z CParser.p_conditional_expressionc             C   sD   t |dkr|d |d< n&tj|d |d |d |d j|d< dS )ak   binary_expression   : cast_expression
                                | binary_expression TIMES binary_expression
                                | binary_expression DIVIDE binary_expression
                                | binary_expression MOD binary_expression
                                | binary_expression PLUS binary_expression
                                | binary_expression MINUS binary_expression
                                | binary_expression RSHIFT binary_expression
                                | binary_expression LSHIFT binary_expression
                                | binary_expression LT binary_expression
                                | binary_expression LE binary_expression
                                | binary_expression GE binary_expression
                                | binary_expression GT binary_expression
                                | binary_expression EQ binary_expression
                                | binary_expression NE binary_expression
                                | binary_expression AND binary_expression
                                | binary_expression OR binary_expression
                                | binary_expression XOR binary_expression
                                | binary_expression LAND binary_expression
                                | binary_expression LOR binary_expression
        rS   r   r   r   N)r(   r   ZBinaryOpr0   )r   ry   r   r   r    p_binary_expression  s    zCParser.p_binary_expressionc             C   s   |d |d< dS )z$ cast_expression : unary_expression r   r   Nr   )r   ry   r   r   r    p_cast_expression_1  s    zCParser.p_cast_expression_1c             C   s*   t j|d |d | j|jd|d< dS )z; cast_expression : LPAREN type_name RPAREN cast_expression rS   r   r   r   N)r   ZCastr5   r   )r   ry   r   r   r    p_cast_expression_2  s    zCParser.p_cast_expression_2c             C   s   |d |d< dS )z* unary_expression    : postfix_expression r   r   Nr   )r   ry   r   r   r    p_unary_expression_1  s    zCParser.p_unary_expression_1c             C   s$   t j|d |d |d j|d< dS )z unary_expression    : PLUSPLUS unary_expression
                                | MINUSMINUS unary_expression
                                | unary_operator cast_expression
        r   rS   r   N)r   UnaryOpr0   )r   ry   r   r   r    p_unary_expression_2  s    zCParser.p_unary_expression_2c             C   s>   t j|d t|dkr|d n|d | j|jd|d< dS )zx unary_expression    : SIZEOF unary_expression
                                | SIZEOF LPAREN type_name RPAREN
        r   r   rS   r   N)r   r  r(   r5   r   )r   ry   r   r   r    p_unary_expression_3  s    zCParser.p_unary_expression_3c             C   s   |d |d< dS )z unary_operator  : AND
                            | TIMES
                            | PLUS
                            | MINUS
                            | NOT
                            | LNOT
        r   r   Nr   )r   ry   r   r   r    p_unary_operator  s    zCParser.p_unary_operatorc             C   s   |d |d< dS )z* postfix_expression  : primary_expression r   r   Nr   )r   ry   r   r   r    p_postfix_expression_1  s    zCParser.p_postfix_expression_1c             C   s$   t j|d |d |d j|d< dS )zG postfix_expression  : postfix_expression LBRACKET expression RBRACKET r   r   r   N)r   ZArrayRefr0   )r   ry   r   r   r    p_postfix_expression_2  s    zCParser.p_postfix_expression_2c             C   s4   t j|d t|dkr|d nd|d j|d< dS )z postfix_expression  : postfix_expression LPAREN argument_expression_list RPAREN
                                | postfix_expression LPAREN RPAREN
        r   r   r   Nr   )r   FuncCallr(   r0   )r   ry   r   r   r    p_postfix_expression_3  s    zCParser.p_postfix_expression_3c             C   sB   t j|d | j|jd}t j|d |d ||d j|d< dS )z postfix_expression  : postfix_expression PERIOD ID
                                | postfix_expression PERIOD TYPEID
                                | postfix_expression ARROW ID
                                | postfix_expression ARROW TYPEID
        r   r   rS   r   N)r   r   r5   r   Z	StructRefr0   )r   ry   Zfieldr   r   r    p_postfix_expression_4  s    zCParser.p_postfix_expression_4c             C   s(   t jd|d  |d |d j|d< dS )z{ postfix_expression  : postfix_expression PLUSPLUS
                                | postfix_expression MINUSMINUS
        ry   rS   r   r   N)r   r  r0   )r   ry   r   r   r    p_postfix_expression_5  s    zCParser.p_postfix_expression_5c             C   s   t j|d |d |d< dS )z postfix_expression  : LPAREN type_name RPAREN brace_open initializer_list brace_close
                                | LPAREN type_name RPAREN brace_open initializer_list COMMA brace_close
        rS   r   r   N)r   ZCompoundLiteral)r   ry   r   r   r    p_postfix_expression_6  s    zCParser.p_postfix_expression_6c             C   s   |d |d< dS )z" primary_expression  : identifier r   r   Nr   )r   ry   r   r   r    p_primary_expression_1   s    zCParser.p_primary_expression_1c             C   s   |d |d< dS )z  primary_expression  : constant r   r   Nr   )r   ry   r   r   r    p_primary_expression_2$  s    zCParser.p_primary_expression_2c             C   s   |d |d< dS )zp primary_expression  : unified_string_literal
                                | unified_wstring_literal
        r   r   Nr   )r   ry   r   r   r    p_primary_expression_3(  s    zCParser.p_primary_expression_3c             C   s   |d |d< dS )z0 primary_expression  : LPAREN expression RPAREN rS   r   Nr   )r   ry   r   r   r    p_primary_expression_4.  s    zCParser.p_primary_expression_4c             C   sF   | j |jd}tjtj|d |tj|d |d g|||d< dS )zQ primary_expression  : OFFSETOF LPAREN type_name COMMA identifier RPAREN
        r   r   r   r   N)r5   r   r   r  r   r   )r   ry   r0   r   r   r    p_primary_expression_52  s    zCParser.p_primary_expression_5c             C   sN   t |dkr*tj|d g|d j|d< n |d jj|d  |d |d< dS )z argument_expression_list    : assignment_expression
                                        | argument_expression_list COMMA assignment_expression
        rS   r   r   r   N)r(   r   r   r0   r   r&   )r   ry   r   r   r    p_argument_expression_list:  s    z"CParser.p_argument_expression_listc             C   s$   t j|d | j|jd|d< dS )z identifier  : ID r   r   N)r   r   r5   r   )r   ry   r   r   r    p_identifierD  s    zCParser.p_identifierc             C   s&   t jd|d | j|jd|d< dS )z constant    : INT_CONST_DEC
                        | INT_CONST_OCT
                        | INT_CONST_HEX
                        | INT_CONST_BIN
        r@   r   r   N)r   Constantr5   r   )r   ry   r   r   r    p_constant_1H  s    zCParser.p_constant_1c             C   s&   t jd|d | j|jd|d< dS )zM constant    : FLOAT_CONST
                        | HEX_FLOAT_CONST
        floatr   r   N)r   r  r5   r   )r   ry   r   r   r    p_constant_2Q  s    zCParser.p_constant_2c             C   s&   t jd|d | j|jd|d< dS )zH constant    : CHAR_CONST
                        | WCHAR_CONST
        charr   r   N)r   r  r5   r   )r   ry   r   r   r    p_constant_3X  s    zCParser.p_constant_3c             C   sh   t |dkr0tjd|d | j|jd|d< n4|d jdd |d dd  |d _|d |d< dS )z~ unified_string_literal  : STRING_LITERAL
                                    | unified_string_literal STRING_LITERAL
        rS   stringr   r   Nr,   )r(   r   r  r5   r   value)r   ry   r   r   r    p_unified_string_literald  s
     (z CParser.p_unified_string_literalc             C   sl   t |dkr0tjd|d | j|jd|d< n8|d jj dd |d dd  |d _|d |d< dS )z unified_wstring_literal : WSTRING_LITERAL
                                    | unified_wstring_literal WSTRING_LITERAL
        rS   r  r   r   Nr,   )r(   r   r  r5   r   r  rstrip)r   ry   r   r   r    p_unified_wstring_literalo  s
     ,z!CParser.p_unified_wstring_literalc             C   s   |d |d< dS )z  brace_open  :   LBRACE
        r   r   Nr   )r   ry   r   r   r    p_brace_openz  s    zCParser.p_brace_openc             C   s   |d |d< dS )z  brace_close :   RBRACE
        r   r   Nr   )r   ry   r   r   r    p_brace_close  s    zCParser.p_brace_closec             C   s   d|d< dS )zempty : Nr   r   )r   ry   r   r   r    p_empty  s    zCParser.p_emptyc             C   s<   |r,| j d|j | j|j| jj|d n| j dd d S )Nz
before: %s)r   r8   zAt end of inputr   )r.   r  r5   r   r   Zfind_tok_column)r   ry   r   r   r    p_error  s    zCParser.p_errorN)Tr   Tr   Fr   )r   r   )Frf   rg   rf   rh   rf   ri   rf   rj   rf   rk   rf   rl   rm   rf   rn   ro   rp   rq   rf   rr   rs   rf   rt   ru   rf   rv   rw   rx   )
r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  )__name__
__module____qualname__r!   r$   r'   r+   r1   r2   r4   r   r   r   r   r9   r?   rJ   rP   r_   rb   re   Z
precedencerz   r{   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r   r   r   r    r
      sF       c	

	)7-Y         		;		
	
&					

	
		
		
	
	r
   __main__)reZplyr   r   r   Zc_lexerr   Z	plyparserr   r   r   Zast_transformsr	   r
   r,  pprintZtimesysr   r   r   r    <module>	   s,                PK     ʽ\  (  __pycache__/yacctab.cpython-36.opt-1.pycnu [        3
]U               @   svA d Z dZdZddddddd	d
ddddddddgd dd d d d d d d d d d d d d  d! gfddddd	d
dd"d#dd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7dd8d9d:d;d<d=d>d?d@ddAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQddRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdnd!dodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddgddd d d d d d dd dV dw d d d d dY d9 d dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d dK d d  d' d( dH dJ d d dW dX d d d" d d d d d0 d1 d[ d d d	 d
 dO d d dK d  d dx d d d d d d d d d d d d d d d d d d d d dI db d d d\ d d d d$ d dm d d d2 d3 d4 d5 d6 d7 d dd d ddddu d dL d d d  d! d" d# d$ d% d& d' d d( d) d d* d+ d, d  dP d-d.d. d/ d/ dU dM d, d- dN d! dn d$ d d d dt d ddq d0 dds dy d d d d d d d d d1 d2 d3 d4 d5 d d d6 d7 d8 d9 d: d; d< d= d> dc d? d@ dA dB dC dD dE dQ dF dG dH d dI dv dd dp dr dJ dK dL dM dd dN dZ dO dP dQ d d d d dRdS dT dU dV dWdX dY d ddZ d[ d\ d d do d] gfddddd	d
ddddddddgddd d d d d d d d d d d  d! gfddddd	d
dd"ddd%d&d'd(d)d^d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7ddd_d`dd8d;dddddddCdDdEdFdGdHdIdJdKdLdMdNd
dOdPdQddRdTdadOdPdbdcddBdNdCd*d+ddddded ddd?d!d@dnd!dHdQdodpdqdsdtdudvdwdxdydzd{d|dfddSddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddd>dYddddmdndodpdqdrdsdtdudvddwddxddyddddddddddzd{d|d}ddddd~ddddddАddddddddِdddddddddddddddddRdddWddddddgd*d*d d d d d d*d d*dw d d d d d*d9 d dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< dMdPd dR d d*d*d*d\d\d d d\d d d" d d d d d0 d1 d[ d d d[d	 d
 dO d d}d*d*d\d*d*dh d\d\d\d\d\di dj dg dk dl d dh d\d\d d1 d d\ d[d[d*d d d}dm d d d2 d3 d4 d5 d6 d7 d\d}dd\d d\dz d{ d| d} df d d~ d d d d d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\ddd\d\d\d# d\d d\d\dh dh d\d\d\d, d[d  d\dP d\dM d, d- dN d! dn d}d}dt d\d\d\d\d\dq d0 ds d\d dg dD dE dQ dF d*d\dH d}dI d\dp dr d\d\d\d d\d\d# dQ d}d}d}d\d\dT dU dV d\d d}d\d[ d\ d}d}do d] gfddddd	d
dd"dd$dd%d&d'd(d)d*d^d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7dd8d;dddd@dddAdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQddRdTdadOdUdPdbdcdYddBdNdCd*d+ddd[d\ddded]d^d_d`ddadbdcdddedfdgdhdidjd ddd?d!d@dmdnd!dodpdqdsdtdudvdwdxdydzd{d|d}dfdddddddddddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZdddddddddd)dddmdndodpdrdsdtdudddddxddyddddddddddzd{d|d}dddddddddŐd~dƐdddddddddddddАdddddԐddddِdddېdddddddddddddddddRdddddWdddddddgd^d^d d d d d dd dd^dw d d d d dY d^d9 d dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d daddd*d*dd d dd d d" d d d d d0 d1 d[ d d d	 d
 dO d d*dadad*dd^ddh dddddd*di dj dg d d dk dl d d d d d	d d d d d d d d d d d dh d*d*d d1 d d d\ dad d d*dm d d d2 d3 d4 d5 d6 d7 d ddzd|d}d*dd*d d d  d! d" d*dz d{ d| d} df d d~ d d d d d*ddddddddddddddddddd*d*d# d$ d*d*d*dd) d d# d*d ddh dh d*d*d* d+ d, d  ddP ddM d, d- dN d! dn d*d*dt d*d*d*d*d*dq d0 ds d9 d: d; d< d= dd> ddd dg d? d@ dA dB dC dD dE dQ dF d^ddH d*dI dd*dp dr ddJ dK d*dd d*d# dN dZ dQ d*d*d*d*d*dT dU dV d*dX d dY d*d*dZ d[ d\ d*d*do d] gfddddd	d
dd"dd%d&d'd(d)d^d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7dd8ddddddCdDdEdFdGdHdIdJdKdLdMdNdOdPdQddRdadOdPdbdcdWdXdYddBdNdZdCd*d+ddd[d\ddded]d^d_d`dadbdcdddedfdgdhdidjd ddd?d!d@d!dodpdqdsdtdudvdwdxdydzd{d|d}dfdddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddddddddd)dddmdndodpdrdsdtdudddxddyddddddddddzd{d|d}dddddddddddddddddddddddddddŐd~dƐdddddddАddddddddِdddېdddܐddݐddddddddddddRdddddWdddddddgd,d,d d d d d d,d dw d d d d d,d9 d dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d,d,dcdd d d d d" d d d d,d0 d1 d[ d d d	 d
 dO d dd,dd,d,dh d did dddd dddi dj dg d d dk dl d d d d d d d d d d d d d d d dh drdsd d1 d\ d,d d ddm d d d2 d3 d4 d5 d6 d7 d dddd ddz d{ d| d} df d d~ d d d d dddddddddddddddddddddd# d$ d% dd& d' d dd( dd,d) d d# dd ddh dh ddd, d  ddP ddM d, d- dN d! dn dddt ddddddq d0 ds d d d dididididididididididididididid9 d: d; d< d= dd> d,d dg dD dE dQ dF d,ddH ddI ddp dr ddJ dK dddL d dM dd# dQ ddddddT dU dV ddX d dY dddZ d[ d\ dddo d] gfddddd	d
dddd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9dddddAdBdKdLdMdNdOdPdQdFddRddad*dd!d@dmd!dUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgd-d-d d d d d d-d dV dw d-d-d-d-dY d9 d-dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d-d_ d-d-d d-d-dW dX d-d[ d d d	 d
 dO d-d d-d` d-d-d-d-d-d d\ d-d-d-d d-d-d-dm d d d2 d3 d4 d5 d6 d7 d d-d-d-d-d-d* d+ d, d  d-d-dP dS d! dn dt d-dq d0 ds d-dB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gfddddd	d
dddd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9dddddAdBdKdLdMdNdOdPdQdFddRddad*dd!d@dmd!dUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgd.d.d d d d d d.d dV dw d.d.d.d.dY d9 d.dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d.d_ d.d.d d.d.dW dX d.d[ d d d	 d
 dO d.d d.d` d.d.d.d.d.d d\ d.d.d.d d.d.d.dm d d d2 d3 d4 d5 d6 d7 d d.d.d.d.d.d* d+ d, d  d.d.dP dS d! dn dt d.dq d0 ds d.dB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gfddddd	d
dddd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9dddddAdBdKdLdMdNdOdPdQdFddRddad*dd!d@dmd!dUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgd/d/d d d d d d/d dV dw d/d/d/d/dY d9 d/dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d/d_ d/d/d d/d/dW dX d/d[ d d d	 d
 dO d/d d/d` d/d/d/d/d/d d\ d/d/d/d d/d/d/dm d d d2 d3 d4 d5 d6 d7 d d/d/d/d/d/d* d+ d, d  d/d/dP dS d! dn dt d/dq d0 ds d/dB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyd0d0d d d d d d0d dV dw d0d0d0d0dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d0d_ d0d0d d0dW dX d d d	 d
 dO d0d d0d` d0d0d0d d0d0d0d d0d0d0dm d d d2 d3 d4 d5 d6 d7 d d0d0d0d0d0d* d+ d, d  d0d0dP dS d! dn dt d0dq d0 ds d0dB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyd1d1d d d d d d1d dV dw d1d1d1d1dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d1d_ d1d1d d1dW dX d d d	 d
 dO d1d d1d` d1d1d1d d1d1d1d d1d1d1dm d d d2 d3 d4 d5 d6 d7 d d1d1d1d1d1d* d+ d, d  d1d1dP dS d! dn dt d1dq d0 ds d1dB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQddRddaddmdsdtdudvdwdxdydzd{d|dd1dddddddddddddddddddddddddddddddddghd3d3d d d d d d3d dV dw d3d3d3d3dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d3d_ d3d3d d3dW dX d d d	 d
 dO d d3d` d3d3d d3dm d d d2 d3 d4 d5 d6 d7 d d3d* d+ d, d  dP d! dn dt d3dq d0 ds d3dB dC dD dE dQ dF dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] ghfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQddRddaddmdsdtdudvdwdxdydzd{d|dd1dddddddddddddddddddddddddddddddddghd4d4d d d d d d4d dV dw d4d4d4d4dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d4d_ d4d4d d4dW dX d d d	 d
 dO d d4d` d4d4d d4dm d d d2 d3 d4 d5 d6 d7 d d4d* d+ d, d  dP d! dn dt d4dq d0 ds d4dB dC dD dE dQ dF dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] ghfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9dddddAdBdLdMdNdOdPdQddRddadd@dmd!dsdtdudvdwdxdydzd{d|dd1dddddddddddddddddddddddddddddddddgld+d+d d d d d d+d dV dw d+d+d+d+dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d+d_ d+d+d d!d+dW dX d[ d d d	 d
 dO d d+d` d+d+dud d\ d+dm d d d2 d3 d4 d5 d6 d7 d d+d* d+ d, d  dP d! dn dt d+dq d0 ds d+dB dC dD dE dQ dF dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] glfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQddRddaddmdsdtdudvdwdxdydzd{d|dd1dddddddddddddddddddddddddddddddddghd5d5d d d d d d5d dV dw d5d5d5d5dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d5d_ d5d5d d5dW dX d d d	 d
 dO d d5d` d5d5d d5dm d d d2 d3 d4 d5 d6 d7 d d5d* d+ d, d  dP d! dn dt d5dq d0 ds d5dB dC dD dE dQ dF dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] ghfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQddRddaddmdsdtdudvdwdxdydzd{d|dd1dddddddddddddddddddddddddddddddddghd6d6d d d d d d6d dV dw d6d6d6d6dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d6d_ d6d6d d6dW dX d d d	 d
 dO d d6d` d6d6d d6dm d d d2 d3 d4 d5 d6 d7 d d6d* d+ d, d  dP d! dn dt d6dq d0 ds d6dB dC dD dE dQ dF dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] ghfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQddRddaddmdsdtdudvdwdxdydzd{d|dd1dddddddddddddddddddddddddddddddddghd7d7d d d d d d7d dV dw d7d7d7d7dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d7d_ d7d7d d7dW dX d d d	 d
 dO d d7d` d7d7d d7dm d d d2 d3 d4 d5 d6 d7 d d7d* d+ d, d  dP d! dn dt d7dq d0 ds d7dB dC dD dE dQ dF dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] ghfddddd	d
dddd$dd%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7ddd_d`dddd9d;ddddAdBdIdJdKdLdMdNdOdPdQdFddRddTdad*ddmdnd!dUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1d>dYdddd	ddddddddddddddddddddddАd-d.ddddddddddddddgd%d%d d d d d d%d dV dBdw d%d%d%d%dY d9 d dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< dNdQd dR d d%d_ d%dBd%d d%dW dX d d0 d1 d[ d d d	 d
 dO d%d d%d` dBd%d%d%d d d\ d%d%d%d d%d%d%dm d d d2 d3 d4 d5 d6 d7 d d%ddd%d%d%d%d* d+ d, d  d%d%dP dS d! dn dt d%dq d0 ds d%dB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyd_d_d d d d d d_d dV dw d_d_d_d_dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d_d_ d_d_d d_dW dX d d d	 d
 dO d_d d_d` d_d_d_d d_d_d_d d_d_d_dm d d d2 d3 d4 d5 d6 d7 d d_d_d_d_d_d* d+ d, d  d_d_dP dS d! dn dt d_dq d0 ds d_dB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyd`d`d d d d d d`d dV dw d`d`d`d`dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d`d_ d`d`d d`dW dX d d d	 d
 dO d`d d`d` d`d`d`d d`d`d`d d`d`d`dm d d d2 d3 d4 d5 d6 d7 d d`d`d`d`d`d* d+ d, d  d`d`dP dS d! dn dt d`dq d0 ds d`dB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfdd$d*ddd_d`ddddd9dddAdBdMdNdOdPdQdRdd/dOd dmdsdtdudvdwdxdydzd{d|ddmdndodddddddddddd~dddddddddِdddܐddddddddddddddddddddgUd dV dY dOdOd dR dOd
 d d_ d dOd dW dX dOdOd	 dOdOdOd` dOdOd d dOdm d d d2 d3 d4 d5 d6 d7 dOd# dOd d* d+ d  d! dn dOdOdt dq d0 ds dOd dg dB dC dH dOdI dp dr dOdOdOd dOd# dN dZ dQ dOdOdOdT dU dV d dOd[ d\ dOdOdo d] gUfd"d$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d8d9dAdBdCdDdEdFdGdHdMdNdPdQdSdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjdmd[d}ddddddddddddddddddddddƐddddddddddddݐddddddgkddV dw d d d d dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< ddOdW dX d d d" d d d d d d
 dO dOd7d d d d d d d d d d d d d d d d d d dxd d# d$ d% d& d' d d( d) d ddh d* d+ d, d  dP d9 d: d; d< d= d> di dk dB dC dD dE dQ dF dJ dK dL dM dj dN dZ dX dY dZ gkfd"d$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d8d;dd@dAdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdTdadUdbdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd dmdnd!dodpdqd}ddddddd)dddddddddddddddddddƐddddddddddddddddېddddddddgdddw d d d d dY d9 d dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< dddddd d d" d d d d d0 d1 d[ d d d	 d
 dO dddddd d d d d d d d d d d d d d d d dpd d d\ dd d d d d  d! d" d# d$ dd) d dpdh d* d+ d, d  dP dM d, d- dN d9 d: d; d< d= d> dddpdi dk d? d@ dA dB dC dD dE dQ dF dJ dK dpdj dN dZ dX dpdY dZ gfd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d9d;d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdPdQdSdTdUdDdEdbdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldddmdnd!dIdTd[dpdqd}ddddddd2d3d4d5ddddddddddd)dddddddddwdddddddddddddddddddddddddddddddddddddddddƐddddǐdddddd̐dddΐdddddѐddՐdddddddddddddddddddgdV dw d d d d dY d9 d dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< dK d  dPdH dJ d dW dX d d d" d d d d d0 d1 d[ d d d
 dO dK d  d d1d] d dx d d d d d d d d d d d d d d d d d d d d dI db dvd d d d\ dwdb d d d d d{du dL d d d  d_ d` d d d! d" d# d$ d% d& d' d d( d{d d) d dd* d+ dwdwd, d d  dP dd/ dU dM d, d- dN d d{d^ dy d{d d d d d d d d d1 d2 d3 d4 d5 d d d6 d7 d8 d{dd9 d d: d; d< d= d> dl d  ddc de d? d@ dA dB dC da dD dE dc d dQ dF dG d{dv d{d{dJ dK dL dM dd dN dZ dO dP dS d ddf d{dX dY dZ gfd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d;dd@ddAdBdCdDdEdFdGdHddIdJdKdLdMdNdPdQdTdadUdGddd,dDdEdbdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdd"dAd dddmdnd!dpdqddddd2d3d4d5ddddddddddddd)dddddddddddddddddddddddddddddddddddddddddŐddddƐdddddddd̐dddddАddՐdddddddddddddRdddWdddgdV dw d d d d dY d9 d dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d  d d d dW dX d d d" d d d dmd d0 d1 d[ d d d
 dO d  d d ddd^ d+ dd d] d dx d d d d d d d d d d d d d d d d d d d d d ddd% d& d d d d\ d d d du d d  d_ d` d d d! d" dd# d$ d% d& d' d d( d~dd d) d dʐd* d+ d, d  dP dM d, d- dN d$ de d^ dy d d d d d d d d d1 d2 d3 d4 d5 d d d6 d7 d8 dېd9 d d: d; d< d= dddܐd> dl d  d d? d@ dA dB dC da dD dE dQ dF ddv dddJ dK dL dM dN dZ dS d ddd dX dY d ddZ dgfd$d%d*d-d.d/d0d1dddddddddddd2dAdBdMdNdPdQdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdmdodpdqd}dddddddddddddddddddddddddddddddddddddddddddddddddddddddАddddddddddddgwdV dw dY dE dF dG d= d d d> d d? d@ d d d dA dB dC dD dW dX d d d
 dO dx d d d d d d d d d d d d d d d d d d d d d dyd d dddu d# d$ d% d& d' d d( d) d d* d+ d, d  dP ddM d, d- dN dd dy dd d d d d d d d d1 d2 d3 d4 d5 d d d6 d7 d8 d9 d: d; d< d= d> dB dC dD dE dQ dF dydv dJ dK dL dM dN dZ dS dX dY dZ gwfd-d.d/dddddJdKdLdOdRdOdcdYddBdNdCd*d+ddd[d\ddded]d^d_d`dadbdcdddedfdgdhdidjd ddd?d!d@d!dsdtdudvdwdxdydzd{d|d}dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}dddddddddŐd~dƐdddddddddِdddېdddddddddddddddRdddddWdddddddgdE dF dG ddd d d0 d1 d[ d	 dddh dddddddi dj dg d d dk dl d d d d d d d d d d d d d d d dh ddd d1 d\ ddm d d d2 d3 d4 d5 d6 d7 d dddddz d{ d| d} df d d~ d d d d dddddddddddddddddddddd# d$ dddd) d d# dd ddh dh ddd  ddd! dn dddt ddddddq d0 ds d9 d: d; d< d= dd> d dg ddH ddI ddp dr ddJ dK ddd dd# dQ ddddddT dU dV ddX d dY dddZ d[ d\ dddo d] gfd-d.d/dddddJdKdLdOdRdOdcdYddBdNdCd*d+ddd[d\ddded]d^d_d`dadbdcdddedfdgdhdidjd ddd?d!d@d!dsdtdudvdwdxdydzd{d|d}dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}dddddddddŐd~dƐdddddddddِdddېdddddddddddddddRdddddWdddddddgdE dF dG dBdBd d d0 d1 d[ d	 dBdBdh ddBdBdBdBdBdi dj dg d d dk dl d d d d d d d d d d d d d d d dh dBdBd d1 d\ dBdm d d d2 d3 d4 d5 d6 d7 d dBdBdBdBdz d{ d| d} df d d~ d d d d dBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBd# d$ dBdBdBd) d d# dBd dBdh dh dBdBd  dBdBd! dn dBdBdt dBdBdBdBdBdq d0 ds d9 d: d; d< d= dBd> d dg dBdH dBdI dBdp dr dBdJ dK dBdBd dBd# dQ dBdBdBdBdBdT dU dV dBdX d dY dBdBdZ d[ d\ dBdBdo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG dCdCd d d0 d1 d[ d	 dCdCdh dCdCdCdCdCdi dj dg dk dl d dh dCdCd d1 d\ dCdm d d d2 d3 d4 d5 d6 d7 dCdCdCdCdz d{ d| d} df d d~ d d d d dCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCd# dCd dCdh dh dCdCd  dCdCd! dn dCdCdt dCdCdCdCdCdq d0 ds dCd dg dCdH dCdI dCdp dr dCdCdCd dCd# dQ dCdCdCdCdCdT dU dV dCd dCdCd[ d\ dCdCdo d] gfd-d.d/dddddJdKdLdOdRdOdcdWdXdYddBdNdZdCd*d+ddd[d\ddded]d^d_d`dadbdcdddedfdgdhdidjd ddd?d!d@d!dsdtdudvdwdxdydzd{d|d}dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZdddddddddddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}dddddddddddddddddddddddddddŐd~dƐdddddddddِdddېdddܐddݐddddddddddddRdddddWdddddddgdE dF dG ddd d d0 d1 d[ d	 dddh d d$d dddd dddi dj dg d d dk dl d d d d d d d d d d d d d d d dh ddd d1 d\ ddm d d d2 d3 d4 d5 d6 d7 d dddddz d{ d| d} df d d~ d d d d dddddddddddddddddddddd# d$ d% dd& d' d dd( dd) d d# dd ddh dh ddd  ddd! dn dddt ddddddq d0 ds d d d d d d d d d1 d2 d3 d4 d5 d d$d$d$d$d9 d: d; d< d= dd> d dg ddH ddI ddp dr ddJ dK dddL d dM dd# dQ ddddddT dU dV ddX d dY dddZ d[ d\ dddo d] gfd-d.d/dddddJdKdLdOdRdOdcdWdXdYddBdNdZdCd*d+ddd[d\ddded]d^d_d`dadbdcdddedfdgdhdidjd ddd?d!d@d!dsdtdudvdwdxdydzd{d|d}dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZdddddddddddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}dddddddddddddddddddddddddddŐd~dƐdddddddddِdddېdddܐddݐddddddddddddRdddddWdddddddgdE dF dG d+d+d d d0 d1 d[ d	 d+d+dh d dld d+d+d+d d+d+di dj dg d d dk dl d d d d d d d d d d d d d d d dh d+d+d d1 d\ d+dm d d d2 d3 d4 d5 d6 d7 d d+d+d+d+dz d{ d| d} df d d~ d d d d d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d# d$ d% d+d& d' d d+d( d+d) d d# d+d d+dh dh d+d+d  d+d+d! dn d+d+dt d+d+d+d+d+dq d0 ds d d d d d dldldldldldldldldldldldldld9 d: d; d< d= d+d> d dg d+dH d+dI d+dp dr d+dJ dK d+d+dL d dM d+d# dQ d+d+d+d+d+dT dU dV d+dX d dY d+d+dZ d[ d\ d+d+do d] gfd-d.d/dddddJdKdLdOdRdOdcdWdXdYddBdNdZdCd*d+ddd[d\ddded]d^d_d`dadbdcdddedfdgdhdidjd ddd?d!d@d!dsdtdudvdwdxdydzd{d|d}dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZdddddddddddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}dddddddddddddddddddddddddddŐd~dƐdddddddddِdddېdddܐddݐddddddddddddRdddddWdddddddgdE dF dG ddd d d0 d1 d[ d	 dddh d dd dddd dddi dj dg d d dk dl d d d d d d d d d d d d d d d dh ddd d1 d\ ddm d d d2 d3 d4 d5 d6 d7 d dddddz d{ d| d} df d d~ d d d d dddddddddddddddddddddd# d$ d% dd& d' d dd( dd) d d# dd ddh dh ddd  ddd! dn dddt ddddddq d0 ds d d d d d dddddddddddddd9 d: d; d< d= dd> d dg ddH ddI ddp dr ddJ dK dddL d dM dd# dQ ddddddT dU dV ddX d dY dddZ d[ d\ dddo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG ddddd d d0 d1 d[ d	 dddddh dddddddddddi dj dg dk dl d dh ddddd d1 d\ dddm d d d2 d3 d4 d5 d6 d7 dddddddddz d{ d| d} df d d~ d d d d ddddddddddddddddddddddddddddddddddddddddddddddddd# ddd dddh dh ddddd  ddddd! dn dddddt dddddddddddq d0 ds ddd dg dddH dddI dddp dr ddddddd ddd# dQ dddddddddddT dU dV ddd ddddd[ d\ dddddo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG deded d d0 d1 d[ d	 dededh dedededededi dj dg dk dl d dh deded d1 d\ dedm d d d2 d3 d4 d5 d6 d7 dededededz d{ d| d} df d d~ d d d d dedededededededededededededededededededededededed# ded dedh dh deded  deded! dn dededt dedededededq d0 ds ded dg dedH dedI dedp dr dededed ded# dQ dedededededT dU dV ded deded[ d\ dededo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG ddd d d0 d1 d[ d	 dddh ddddddi dj dg dk dl d dh ddd d1 d\ ddm d d d2 d3 d4 d5 d6 d7 dddddz d{ d| d} df d d~ d d d d ddddddddddddddddddddddddd# dd ddh dh ddd  ddd! dn dddt ddddddq d0 ds dd dg ddH ddI ddp dr dddd dd# dQ ddddddT dU dV dd ddd[ d\ dddo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG dadad d d0 d1 d[ d	 dadadh dadadadadadi dj dg dk dl d dh dadad d1 d\ dadm d d d2 d3 d4 d5 d6 d7 dadadadadz d{ d| d} df d d~ d d d d dadadadadadadadadadadadadadadadadadadadadadadadad# dad dadh dh dadad  dadad! dn dadadt dadadadadadq d0 ds dad dg dadH dadI dadp dr dadadad dad# dQ dadadadadadT dU dV dad dadad[ d\ dadado d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG dbdbd d d0 d1 d[ d	 dbdbdh dbdbdbdbdbdi dj dg dk dl d dh dbdbd d1 d\ dbdm d d d2 d3 d4 d5 d6 d7 dbdbdbdbdz d{ d| d} df d d~ d d d d dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd# dbd dbdh dh dbdbd  dbdbd! dn dbdbdt dbdbdbdbdbdq d0 ds dbd dg dbdH dbdI dbdp dr dbdbdbd dbd# dQ dbdbdbdbdbdT dU dV dbd dbdbd[ d\ dbdbdo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG dcdcd d d0 d1 d[ d	 dcdcdh dcdcdcdcdcdi dj dg dk dl d dh dcdcd d1 d\ dcdm d d d2 d3 d4 d5 d6 d7 dcdcdcdcdz d{ d| d} df d d~ d d d d dcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd# dcd dcdh dh dcdcd  dcdcd! dn dcdcdt dcdcdcdcdcdq d0 ds dcd dg dcdH dcdI dcdp dr dcdcdcd dcd# dQ dcdcdcdcdcdT dU dV dcd dcdcd[ d\ dcdcdo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG ddddd d d0 d1 d[ d	 dddddh dddddddddddi dj dg dk dl d dh ddddd d1 d\ dddm d d d2 d3 d4 d5 d6 d7 dddddddddz d{ d| d} df d d~ d d d d ddddddddddddddddddddddddddddddddddddddddddddddddd# ddd dddh dh ddddd  ddddd! dn dddddt dddddddddddq d0 ds ddd dg dddH dddI dddp dr ddddddd ddd# dQ dddddddddddT dU dV ddd ddddd[ d\ dddddo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG deded d d0 d1 d[ d	 dededh dedededededi dj dg dk dl d dh deded d1 d\ dedm d d d2 d3 d4 d5 d6 d7 dededededz d{ d| d} df d d~ d d d d dedededededededededededededededededededededededed# ded dedh dh deded  deded! dn dededt dedededededq d0 ds ded dg dedH dedI dedp dr dededed ded# dQ dedededededT dU dV ded deded[ d\ dededo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG dfdfd d d0 d1 d[ d	 dfdfdh dfdfdfdfdfdi dj dg dk dl d dh dfdfd d1 d\ dfdm d d d2 d3 d4 d5 d6 d7 dfdfdfdfdz d{ d| d} df d d~ d d d d dfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd# dfd dfdh dh dfdfd  dfdfd! dn dfdfdt dfdfdfdfdfdq d0 ds dfd dg dfdH dfdI dfdp dr dfdfdfd dfd# dQ dfdfdfdfdfdT dU dV dfd dfdfd[ d\ dfdfdo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG dgdgd d d0 d1 d[ d	 dgdgdh dgdgdgdgdgdi dj dg dk dl d dh dgdgd d1 d\ dgdm d d d2 d3 d4 d5 d6 d7 dgdgdgdgdz d{ d| d} df d d~ d d d d dgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgd# dgd dgdh dh dgdgd  dgdgd! dn dgdgdt dgdgdgdgdgdq d0 ds dgd dg dgdH dgdI dgdp dr dgdgdgd dgd# dQ dgdgdgdgdgdT dU dV dgd dgdgd[ d\ dgdgdo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG dhdhd d d0 d1 d[ d	 dhdhdh dhdhdhdhdhdi dj dg dk dl d dh dhdhd d1 d\ dhdm d d d2 d3 d4 d5 d6 d7 dhdhdhdhdz d{ d| d} df d d~ d d d d dhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhd# dhd dhdh dh dhdhd  dhdhd! dn dhdhdt dhdhdhdhdhdq d0 ds dhd dg dhdH dhdI dhdp dr dhdhdhd dhd# dQ dhdhdhdhdhdT dU dV dhd dhdhd[ d\ dhdhdo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded_did ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZdddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG didid d d0 d1 d[ d	 dididh didididididi dj dg dk dl dd d dh didid d1 d\ didm d d d2 d3 d4 d5 d6 d7 dididididz d{ d| d} df d d~ d d d d didididididididididididididididididididididididid) d# did didh dh didid  didid! dn dididt didididididq d0 ds did dg didH didI didp dr dididid did# dQ didididididT dU dV did didid[ d\ didido d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded`djd ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZdddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG djdjd d d0 d1 d[ d	 djdjdh djdjdjdjdjdi dj dg dk dl dd d dh djdjd d1 d\ djdm d d d2 d3 d4 d5 d6 d7 djdjdjdjdz d{ d| d} df d d~ d d d d djdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjd d# djd djdh dh djdjd  djdjd! dn djdjdt djdjdjdjdjdq d0 ds djd dg djdH djdI djdp dr djdjdjd djd# dQ djdjdjdjdjdT dU dV djd djdjd[ d\ djdjdo d] gfd-d.d/dddJdLddcdddVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdd?d@d!ddddddddddddrddsddddddddddddddddddddddddddddƐddddddddddddgZdE dF dG d d d0 d[ ddd d dx d d d d d d d d d d d d d d d d d d d d d d d1 d\ du d# d$ d% d& d' d d( d) d ddddd  d dy d d d d d d d d d1 d2 d3 d4 d5 d d d6 d7 d8 dڐd9 d: d; d< d= d> ddddv dJ dK dL dM dS dX dY dZ gZfddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dfdfdm d d d2 d3 d4 d5 d6 d7 dfd  d! dn dfdfdt dq d0 ds dH dfdI dp dr dQ dfdfdfdT dU dV dfd[ d\ dfdfdo d] g*fddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dddm d d d2 d3 d4 d5 d6 d7 dd  d! dn dddt dq d0 ds dH ddI dp dr dQ ddddT dU dV dd[ d\ dddo d] g*fddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dddm d d d2 d3 d4 d5 d6 d7 dd  d! dn dddt dq d0 ds dH ddI dp dr dQ ddddT dU dV dd[ d\ dddo d] g*fddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dddm d d d2 d3 d4 d5 d6 d7 dd  d! dn dddt dq d0 ds dH ddI dp dr dQ ddddT dU dV dd[ d\ dddo d] g*fddOdRdsdtdudvdwdxdydzd{d|ddddddddddddddddddddddddddddddg+d d	 dddm d d d2 d3 d4 d5 d6 d7 dd  d! dn dddt ddq d0 ds dH ddI dp dr dQ ddddT dU dV dd[ d\ dddo d] g+fddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dddm d d d2 d3 d4 d5 d6 d7 dd  d! dn dddt dq d0 ds dH ddI dp dr dQ ddddT dU dV dd[ d\ dddo d] g*fddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dddm d d d2 d3 d4 d5 d6 d7 dd  d! dn dddt dq d0 ds dH ddI dp dr dQ ddddT dU dV dd[ d\ dddo d] g*fddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dSdSdm d d d2 d3 d4 d5 d6 d7 dSd  d! dn dSdSdt dq d0 ds dH dSdI dp dr dQ dSdSdSdT dU dV dSd[ d\ dSdSdo d] g*fddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dddm d d d2 d3 d4 d5 d6 d7 dd  d! dn dddt dq d0 ds dH ddI dp dr dQ ddddT dU dV dd[ d\ dddo d] g*fddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dddm d d d2 d3 d4 d5 d6 d7 dd  d! dn dddt dq d0 ds dH ddI dp dr dQ ddddT dU dV dd[ d\ dddo d] g*fddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dddm d d d2 d3 d4 d5 d6 d7 dd  d! dn dddt dq d0 ds dH ddI dp dr dQ ddddT dU dV dd[ d\ dddo d] g*fddOdRdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdld dIdTd[d\d]d0drdsdtdudvdwdxdydzd{d|dddddddddd ddmdddwdddddddddddddddddddddddddddddddddddddǐddddd-d.ddddddddddddddddddddddddg}d d	 d dx d d d d d d d d d d d d d d d d d d d d db d ddb d dd dd d	 dm d d d2 d3 d4 d5 d6 d7 d# d$ d% d& d' d d( d) d dd* d) ddd d  dddS d! dn d dt dq d0 ds dy d d d d d d d d d1 d2 d3 d4 d5 d d d6 d7 d8 d9 d: d; d< d= d> dc dde dc d dT da dH dI dp dr dJ dK dL dM dd dQ dS ddf dT dU dV dX ddY dZ d[ d\ do d] g}fdOdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd d}dddddddddddddƐdddddېddddddg,d	 d>d d d d d d d d d d d d d d d d dqd d# d$ d) d dqdh d  d9 d: d; d< d= d> dqdi dk dJ dK dqdj dX dqdY dZ g,fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d dhd d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d4 d5 d d d6 d7 d8 d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d djd d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d djdjdjdjdjdjdjdjdjdjdjdjdjdjdjd9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d dkd d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d dkdkdkdkdkdkdkdkdkdkdkdkdkdkdkd9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d dJd d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d dJdJdJdJdJdJdJdJdJdJdJd9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d dKd d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d dKdKdKdKdKdKdKdKdKdKdKd9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d d9d d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d9d9d9d9d9d9d9d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d d:d d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d:d:d:d:d:d:d:d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d d;d d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d;d;d;d;d;d;d;d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d d<d d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d<d<d<d<d<d<d<d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d d=d d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d4 d5 d=d=d=d=d=d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d d#d d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d4 d5 d#d#d#d#d#d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d dXd d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d4 d5 d d d6 dXdXd9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d dZd d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d4 d5 d dZd6 dZdZd9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d dd d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d4 d5 d d d6 d7 dd9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d dd d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d4 d5 d d d6 d7 d8 d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*d8d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*dd d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*dMd d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*dd d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*d%d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*d&d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*d'd d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*d(d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*dLd d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*dgd d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}ddddddddddddddddg"dYd d d d d d d d d d d d d d d d d d# d$ d) d d  d9 d: d; d< d= d> dJ dK dX dY dZ g"fdwdxdydzd{d|ddddddddddddddddddgd2 d3 d4 d5 d6 d7 d  d! dt dq d0 ds dH dI dp dr dQ ddU dV d[ d\ do d] gfd1gdgfdĜaZi Zx^ej D ]R\ZZxDeed ed D ].\Z	Z
e	ek ri ee	< e
ee	 e< qW qW [dgdgfdgdgfddd"d&d'd(d)d,d8d9dddddRdadbd ddd?d!dodpdqdsdd)dddddddאddddddRdddWddg.ddd<dDdDdDdDdJd<ddddJd drdd4dmddddJdddddd4ddddddddddddddddddg.fddgddgfddgddgfddddd9dRdsdgd	d	ddddududgfddgd
d
gfddd"d^d8ddadPdbdodgddd9ddSdddSd2ddgfdddd&d'd(d)dd9dddRdaddsd1ddgd"d"d8dEdEdEdEd8d8dbdbd8dbdbd8dbd8dbgfddddd9dRdsdgd#d#d#d#d#d#d#d#gfddd"dd^d8d;ddTdadPdbdodgd$d$d$dAd$d$dAd$dAd$d$d$d$d$gfddd"d^d8ddIdadPdbdod)ddgddd;ddTd;dndTdd;dTdddgfdddd&d'd(d)d,dd9ddddKdFdRdad*dd!d@dUdVd\dpdqdsd1dddd	ddddg$d&d&d&d&d&d&d&dLd&d&d&dLd&d!dpd&d&dpd&dLd!dpdpdpdpdpd&d&dpdpdpdpdpdpd&d&g$fdddd&d'd(d)dd9dddFdRdad*ddUdVd\dpdqdsd1dddd	ddddgd'd'd'd'd'd'd'd'd'd'd'dqd'd'dqd'dqdqdqdqdqd'd'dqdqdqdqdqdqd'd'gfdddd&d'd(d)dd9dddRdaddsd1ddgd(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(gfdddd&d'd(d)dd9dddRdaddsd1ddgd)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)gfdddd&d'd(d)dd9dddFdRdad*ddUdVd\dpdqdsd1dddd	ddddgdddddddddddddddddddddddddddddddgfdddd&d'd(d)dd9dddFdRdad*ddUdVd\dpdqdsd1dddd	ddddgdddddddddddddddddddddddddddddddgfdddd&d'd(d)dd9dddFdRdad*ddUdVd\dpdqdsd1dddd	ddddgd2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2gfdddd&d'd(d)dd9dddFdRdad*ddUdVd\dpdqdsd1dddd	ddddgdddddddddddddddddddddddddddddddgfdd9gdd/gfdd9gddgfd"d8gd:d:gfd"d8gd=d=gfd"d8dPgd>d>dgfd"d8ddadbdod)dgd?d?dGdGd5dd5dGgfd"d8d;ddTdadbdod)ddgd@d@dUd@dUd@d@d@d@dUd@gfd&d'd(d)gdCdFdGdHgfd,dd!gdId?dtgfd,dd!gdKd@dKgfdddddMdNdPdQdRd/dOdsddnddd~dӐdddܐdddddddgd
dFdRd dHdQdUdVdRdRd dRdRd dRdRddRdddd dRdRdRdRdRdRgfddRd/dsddddddddddgddyddydydydydydydydydydydygfddaddgddddgfdddaddgd,d"d,d,d,gfdddaddgdDdDdDdDdDgfdddadd1dgdEdEdEdEddEgfddd?gdddgfdddRdOd*dd?dsddd6dhddddddndtdudddzd{d|d}dddאddddddddRddWddg)ddlddlddddddddddddddldddddddddddddlddddddddddg)fdddRdOd*dd?dsdfddd6dhddddddndpdtdudxdydddzd{d|d}ddddאdddddddddRddWddg/dVdVdVdVdVdVdVdVddVdVdVdVdVdVdVdVdVdVddVdVdddVdVdVdVdVdVdVddVdVddVdVdVdVdVdVdVdVdVdVdVdVg/fdddRdOddBdNdCd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdtdudxdydddzd{d|d}dd~dddאddddddddddRddWddgGdWdWdWdWdddddWdWdWdWddWdWdWdWdddddddddddddddddddWdWdWdWdWdWddWdWdddWdWdWdWdWdWdWdddWdWddWddWdWdWdWdWdWdWdWdWdWdWgGfdddRdOd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdtdudxdydddzd{d|d}ddddאdddddddddRddWddgAdXdXdXdXdXdXdXdXdXdXdXdXdXdddddddddddddddddddXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXgAfdddRdOddBdNdCd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdtdudxdydddzd{d|d}dd~dddאddddddddddRddWddgGdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYgGfdddRdOddBdNdCd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdtdudxdydddzd{d|d}dd~dddאddddddddddRddWddgGdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNgGfdddRdOdNd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdtdudxdydddzd{d|d}dd~dddאddddddddddRddWddgDdZdZdZdZddZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZddZdZdZdZdZddZdZdZdZdZdZdZdZdZdZdZgDfdddRdOddBdNdCd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdtdudxdydddzd{d|d}dd~dddאddddddddddRddWddgGd[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[gGfddddRdOddBdNdCd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdqdtdudvdxdydddzd{d|d}dd~dddאdddddddddddRddWddgKd]d]dd]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]dd]d]dd]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]dd]d]d]d]d]d]d]d]d]d]d]gKfdddRdOddBdNdCd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdtdudxdydddzd{d|d}dd~dddאddddddddddRddWddgGd^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^gGfdddRdOddBdNdCd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdtdudxdydddzd{d|d}dd~dddאddddddddddRddWddgGd_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_gGfdddRdOddBdNdCd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdtdudxdydddzd{d|d}dd~dddאddddddddddRddWddgGd`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`gGfddOdndgdkdddgfdgdAgfdgdgfd
dHdQgdIddgfd
dHdQdwgdTdTdTdgfdFdUdVgd\ddgfdFdUdVd\ddgd]d]d]dddgfdFd*dUdVd\dpdqdddd	ddgdod)dodododdd)d)d)d)dodogfdRgd0gfdRgdsgfdRdsgdtdgfdRdsddddddddddgdvdvddddddddddgfdRdsddddddddddgdwdwdwdwdwdwdwdwdwdwdwdwgfdRdsddddddddddgdxdxdxdxdxdxdxdxdxdxdxdxgfdRdsddddddddddgdzdzdzdzdzdzdzdzdzdzdzdzgfdRdsddddddddddgd{d{d{d{d{d{d{d{d{d{d{d{gfdRdsddddddddddgd|d|d|d|d|d|d|d|d|d|d|d|gfdRdsdddddddddddRddWddgd~d~d~d~d~dd~dd~d~d~ddd~dd~d~gfdRd*dsdddhdddddddzd|d}dddddddddRddWddgddddddddddddddddddddddddddddgfdbd)gd3dgfdWgd6gfd*dddd	gdddddgfd gd gfd dgddgfd dddgdnddndgfd dddgdodododogfd dddgddddgfd ddddgdddddgfdId\d0d dddddddgdddddddddddgfdogdgfdogdgfdodgddgfdpdqgddgfdfdpdxdydgdddddgfdgdgfdŜTZi Zx^ej D ]R\ZZxDeed ed D ].\Z	Z
e	ek (ri ee	< e
ee	 e< (qW (qW [dƐdddȐdȐdfdɐdddːdd4fd͐dddːdd5fdΐdddАdd4fdѐdddАdd5fdҐdddԐdd4fdՐdddԐdd5fd֐dddؐdd4fdِdddؐdd5fdڐdddܐdd4fdݐdddܐdd5fdސddddd4fdddddd5fdddddd4fdddddd5fdddddd4fdddddd5fdddddd4fdddddd5fdddddd4fdddddd5fdddddd4fdddddd5fdddddd4fdddddd5fdddddd4fdddddd5fdddd dd4fdddd dd5fddddddfddddddfd	d
ddddfdd
ddddfddddddfddddddfddddddfddddddfdddddd fd!d"dd#dd$fd%d"dd&dd'fd(d)dd*dd+fd,d)dd*dd-fd.d)dd*dd/fd0d)dd*dd1fd2d)dd*dd3fd4d)dd*dd5fd6d7dd8dd9fd:d;dd<dd=fd>d?dd@ddAfdBd?dd@ddCfdDdEddFddGfdHdEddIddJfdKdEddLddMfdNdEddOddPfdQdRddSddTfdUdRddSddVfdWdRddSddXfdYdRddSddZfd[dRddSdd\fd]d^dd_dd`fdadbddcdddfdedbddcddffdgdbddcddhfdidbddcddjfdkdbddcddlfdmdbddcddnfdodbddcddpfdqdbddcddrfdsdbddcddtfdudbddcddvfdwdbddcddxfdydbddzdd{fd|dbddzdd}fd~dbddzddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddĐddfdƐdddĐddfdȐdddʐddfd̐ddd͐ddfdϐddd͐ddfdѐdddӐddfdՐdddӐddfdאdddؐddfdڐdddېddfdݐdddېddfdߐdddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfdddddd fddd	dddfddd	dddfddddddfd	ddd
ddfdddd
ddfddddddfddddddfddddddfddddddfddddddfddddddfd d!dd"dd#fd$d!dd"dd%fd&d'dd(dd)fd*d'dd+dd,fd-d.dd/dd0fd1d.dd/dd2fd3d4dd5dd6fd7d4dd8dd9fd:d4dd8dd;fd<d=dd>dd?fd@d=dd>ddAfdBdCddDddEfdFdGddHddIfdJdGddHddKfdLdMddNddOfdPdMddNddQfdRdSddTddUfdVdWddXddYfdZdWdd[dd\fd]dWdd^dd_fd`daddbddcfdddaddeddffdgdaddhddifdjdaddkddlfdmdaddnddofdpdaddqddrfdsdaddtddufdvdwddxddyfdzdwddxdd{fd|d}dd~ddfdd}dd~ddfddddddfddddddfddddddfddddddfddddddfddd
dddfddddddfddddddfddd
dddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfdĐdddƐddfdȐdddƐddfdʐddd̐ddfdΐddd̐ddfdАddd̐ddfdҐddd̐ddfdԐddd̐ddfd֐ddd̐ddfdؐddd̐ddfdڐddd̐ddfdܐddd̐ddfdސddd̐ddfdddd̐ddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfd dddddfddddddfddddddfddddddfdddddd	fd
dddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfdddd dd!fd"ddd dd#fd$ddd dd%fd&ddd'dd(fd)ddd'dd*fd+d,dd-dd.fd/d,dd-dd0fd1d,dd-dd2fd3d,dd-dd4fd5d,dd-dd6fd7d,dd-dd8fd9d:dd;dd<fd=d:dd>dd?fd@d:ddAddBfdCd:ddAddDfdEd:ddFddGfdHd:ddFddIfdJd:ddFddKfdLd:ddFddMfdNd:ddOddPfdQd:ddOddRfdSd:d	dTddUfdVd:d
dTddWfdXdYddZdd[fd\dYdd]dd^fd_dYdd`ddafdbdYdd`ddcfdddYddeddffdgdYd	dhddifdjdkddlddmfdndkddlddofdpdqddrddsfdtduddvddwfdxduddvddyfdzduddvdd{fd|duddvdd}fd~duddddfdduddddfdduddddfdduddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfgZdS (  z3.8ZLALRZ 0B26D831EE3ADD67934989B5D61F8ACA                               2   C   Z      i  i.  i           !   "   #   $   %       /   &   '   i     
                                                (   )   *   +   ,   -   7   8   9   :   ;   <   ?   A   B   F   G   H   I   J   K   L   M   O   P   Q   R   S   T   V   W   X   [   ]   ^   b   o   p   q   r   v   |   }                                                                                                                                                                  i  i  i  i  i  i!  i#  i$  i%  i&  i'  i(  i*  i+  i,  i-  i/  i0  i1  i3  i4  i5  i;  i<  i=  i>  i?  i@  iC  iE  iF  iG  iH  iI  iJ  iK  iL  iM  iN  iO  iP  iQ  iR  iS  iT  iU  iV  iY  i[  i\  i]  i^  ic  ih  io  ip  iq  ir  is  iw  ix  i{  i|  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  =   >   @   D   E   6   .         	   3   4   5   z   e   f   i  U                                          i  s   {            N                                 i  x   y   g   i}  i~  `                                                         t   w   h   i   Y   d                     u   a   c      i              i                       0   1   _   j   l   ~                           i  i	  i
  i  i  i  i  i  i  i  i  i  i)  i6  i7  i8  i9  ib  ii  ik  i  i  i  i  i  i  i  i  i  i  i                 ie  if  i  \   i  i   i"  i  i  i  il  in  i  i  i  iB  iD  iW  iX  iZ  id  ig  ij  iv  iy  iz  i  i  i  i  i  i  i  m   k   n   i  iA  i_  i`  ia  i  i  i  i2  i  i  im  it  iu  i:  )az$endSEMIZPPHASHZIDZLPARENZTIMESZCONSTZRESTRICTZVOLATILEZVOIDZ_BOOLZCHARZSHORTZINTZLONGZFLOATZDOUBLEZ_COMPLEXZSIGNEDZUNSIGNEDZAUTOZREGISTERZSTATICZEXTERNZTYPEDEFZINLINEZTYPEIDZENUMZSTRUCTZUNIONLBRACEZEQUALSZLBRACKETCOMMAZRPARENCOLONZPLUSPLUSZ
MINUSMINUSZSIZEOFZANDPLUSMINUSZNOTZLNOTZOFFSETOFZINT_CONST_DECZINT_CONST_OCTZINT_CONST_HEXZINT_CONST_BINZFLOAT_CONSTZHEX_FLOAT_CONSTZ
CHAR_CONSTZWCHAR_CONSTZSTRING_LITERALZWSTRING_LITERALZRBRACKETZCASEZDEFAULTZIFZSWITCHZWHILEZDOZFORZGOTOZBREAKZCONTINUEZRETURNRBRACEZPERIODZCONDOPZDIVIDEZMODZRSHIFTZLSHIFTZLTZLEZGEZGTZEQZNEORZXORZLANDZLORZXOREQUALZ
TIMESEQUALZDIVEQUALZMODEQUAL	PLUSEQUALZ
MINUSEQUALZLSHIFTEQUALZRSHIFTEQUALZANDEQUALZOREQUALZARROWELSEELLIPSIS)Ttranslation_unit_or_emptytranslation_unitemptyexternal_declarationfunction_definitiondeclarationpp_directive
declaratordeclaration_specifiers	decl_bodydirect_declaratorpointertype_qualifiertype_specifierstorage_class_specifierfunction_specifiertypedef_nameenum_specifierstruct_or_union_specifierstruct_or_uniondeclaration_list_optdeclaration_listinit_declarator_list_optinit_declarator_listinit_declaratorabstract_declaratordirect_abstract_declaratordeclaration_specifiers_opttype_qualifier_list_opttype_qualifier_list
brace_opencompound_statementparameter_type_list_optparameter_type_listparameter_listparameter_declarationassignment_expression_optassignment_expressionconditional_expressionunary_expressionbinary_expressionpostfix_expressionunary_operatorcast_expressionprimary_expression
identifierconstantunified_string_literalunified_wstring_literalinitializeridentifier_list_optidentifier_listenumerator_list
enumeratorstruct_declaration_liststruct_declarationspecifier_qualifier_listblock_item_list_optblock_item_list
block_item	statementlabeled_statementexpression_statementselection_statementiteration_statementjump_statementexpression_opt
expressionabstract_declarator_optassignment_operator	type_nameinitializer_list_optinitializer_listdesignation_optdesignationdesignator_list
designatorbrace_closestruct_declarator_list_optstruct_declarator_liststruct_declaratorspecifier_qualifier_list_optconstant_expressionargument_expression_listzS' -> translation_unit_or_emptyzS'Nz abstract_declarator_opt -> emptyrQ  Zp_abstract_declarator_optzplyparser.pyz.abstract_declarator_opt -> abstract_declaratorz"assignment_expression_opt -> emptyr1  Zp_assignment_expression_optz2assignment_expression_opt -> assignment_expressionzblock_item_list_opt -> emptyrF  Zp_block_item_list_optz&block_item_list_opt -> block_item_listzdeclaration_list_opt -> emptyr!  Zp_declaration_list_optz(declaration_list_opt -> declaration_listz#declaration_specifiers_opt -> emptyr(  Zp_declaration_specifiers_optz4declaration_specifiers_opt -> declaration_specifierszdesignation_opt -> emptyrV  Zp_designation_optzdesignation_opt -> designationzexpression_opt -> emptyrO  Zp_expression_optzexpression_opt -> expressionzidentifier_list_opt -> emptyr?  Zp_identifier_list_optz&identifier_list_opt -> identifier_listz!init_declarator_list_opt -> emptyr#  Zp_init_declarator_list_optz0init_declarator_list_opt -> init_declarator_listzinitializer_list_opt -> emptyrT  Zp_initializer_list_optz(initializer_list_opt -> initializer_listz parameter_type_list_opt -> emptyr-  Zp_parameter_type_list_optz.parameter_type_list_opt -> parameter_type_listz%specifier_qualifier_list_opt -> emptyr^  Zp_specifier_qualifier_list_optz8specifier_qualifier_list_opt -> specifier_qualifier_listz#struct_declarator_list_opt -> emptyr[  Zp_struct_declarator_list_optz4struct_declarator_list_opt -> struct_declarator_listz type_qualifier_list_opt -> emptyr)  Zp_type_qualifier_list_optz.type_qualifier_list_opt -> type_qualifier_listz-translation_unit_or_empty -> translation_unitr  Zp_translation_unit_or_emptyzc_parser.pyi  z"translation_unit_or_empty -> emptyi  z(translation_unit -> external_declarationr  Zp_translation_unit_1i  z9translation_unit -> translation_unit external_declarationZp_translation_unit_2i  z+external_declaration -> function_definitionr  Zp_external_declaration_1i  z#external_declaration -> declarationZp_external_declaration_2i  z$external_declaration -> pp_directiveZp_external_declaration_3i  zexternal_declaration -> SEMIZp_external_declaration_4i   zpp_directive -> PPHASHr  Zp_pp_directivei%  zIfunction_definition -> declarator declaration_list_opt compound_statementr  Zp_function_definition_1i.  z`function_definition -> declaration_specifiers declarator declaration_list_opt compound_statementZp_function_definition_2i?  zstatement -> labeled_statementrI  Zp_statementiJ  z!statement -> expression_statementiK  zstatement -> compound_statementiL  z statement -> selection_statementiM  z statement -> iteration_statementiN  zstatement -> jump_statementiO  z<decl_body -> declaration_specifiers init_declarator_list_optr  Zp_decl_bodyi]  zdeclaration -> decl_body SEMIr  Zp_declarationi  zdeclaration_list -> declarationr"  Zp_declaration_listi  z0declaration_list -> declaration_list declarationi  zCdeclaration_specifiers -> type_qualifier declaration_specifiers_optr  Zp_declaration_specifiers_1i  zCdeclaration_specifiers -> type_specifier declaration_specifiers_optZp_declaration_specifiers_2i  zLdeclaration_specifiers -> storage_class_specifier declaration_specifiers_optZp_declaration_specifiers_3i  zGdeclaration_specifiers -> function_specifier declaration_specifiers_optZp_declaration_specifiers_4i  zstorage_class_specifier -> AUTOr  Zp_storage_class_specifieri  z#storage_class_specifier -> REGISTERi  z!storage_class_specifier -> STATICi  z!storage_class_specifier -> EXTERNi  z"storage_class_specifier -> TYPEDEFi  zfunction_specifier -> INLINEr  Zp_function_specifieri  ztype_specifier -> VOIDr  Zp_type_specifier_1i  ztype_specifier -> _BOOLi  ztype_specifier -> CHARi  ztype_specifier -> SHORTi  ztype_specifier -> INTi  ztype_specifier -> LONGi  ztype_specifier -> FLOATi  ztype_specifier -> DOUBLEi  ztype_specifier -> _COMPLEXi  ztype_specifier -> SIGNEDi  ztype_specifier -> UNSIGNEDi  ztype_specifier -> typedef_nameZp_type_specifier_2i  z type_specifier -> enum_specifieri  z+type_specifier -> struct_or_union_specifieri  ztype_qualifier -> CONSTr  Zp_type_qualifieri  ztype_qualifier -> RESTRICTi  ztype_qualifier -> VOLATILEi  z'init_declarator_list -> init_declaratorr$  Zp_init_declarator_list_1i  zBinit_declarator_list -> init_declarator_list COMMA init_declaratori  z*init_declarator_list -> EQUALS initializerZp_init_declarator_list_2i  z+init_declarator_list -> abstract_declaratorZp_init_declarator_list_3i  zinit_declarator -> declaratorr%  Zp_init_declaratori  z0init_declarator -> declarator EQUALS initializeri  zGspecifier_qualifier_list -> type_qualifier specifier_qualifier_list_optrE  Zp_specifier_qualifier_list_1i  zGspecifier_qualifier_list -> type_specifier specifier_qualifier_list_optZp_specifier_qualifier_list_2i  z/struct_or_union_specifier -> struct_or_union IDr  Zp_struct_or_union_specifier_1i  z3struct_or_union_specifier -> struct_or_union TYPEIDi  z[struct_or_union_specifier -> struct_or_union brace_open struct_declaration_list brace_closeZp_struct_or_union_specifier_2i  z^struct_or_union_specifier -> struct_or_union ID brace_open struct_declaration_list brace_closeZp_struct_or_union_specifier_3i'  zbstruct_or_union_specifier -> struct_or_union TYPEID brace_open struct_declaration_list brace_closei(  zstruct_or_union -> STRUCTr   Zp_struct_or_unioni1  zstruct_or_union -> UNIONi2  z-struct_declaration_list -> struct_declarationrC  Zp_struct_declaration_listi9  zEstruct_declaration_list -> struct_declaration_list struct_declarationi:  zNstruct_declaration -> specifier_qualifier_list struct_declarator_list_opt SEMIrD  Zp_struct_declaration_1i?  zGstruct_declaration -> specifier_qualifier_list abstract_declarator SEMIZp_struct_declaration_2ie  z+struct_declarator_list -> struct_declaratorr\  Zp_struct_declarator_listis  zHstruct_declarator_list -> struct_declarator_list COMMA struct_declaratorit  zstruct_declarator -> declaratorr]  Zp_struct_declarator_1i|  z9struct_declarator -> declarator COLON constant_expressionZp_struct_declarator_2i  z.struct_declarator -> COLON constant_expressioni  zenum_specifier -> ENUM IDr  Zp_enum_specifier_1i  zenum_specifier -> ENUM TYPEIDi  z=enum_specifier -> ENUM brace_open enumerator_list brace_closeZp_enum_specifier_2i  z@enum_specifier -> ENUM ID brace_open enumerator_list brace_closeZp_enum_specifier_3i  zDenum_specifier -> ENUM TYPEID brace_open enumerator_list brace_closei  zenumerator_list -> enumeratorrA  Zp_enumerator_listi  z(enumerator_list -> enumerator_list COMMAi  z3enumerator_list -> enumerator_list COMMA enumeratori  zenumerator -> IDrB  Zp_enumeratori  z+enumerator -> ID EQUALS constant_expressioni  zdeclarator -> direct_declaratorr  Zp_declarator_1i  z'declarator -> pointer direct_declaratorZp_declarator_2i  zdeclarator -> pointer TYPEIDZp_declarator_3i  zdirect_declarator -> IDr  Zp_direct_declarator_1i  z-direct_declarator -> LPAREN declarator RPARENZp_direct_declarator_2i  zjdirect_declarator -> direct_declarator LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKETZp_direct_declarator_3i  zmdirect_declarator -> direct_declarator LBRACKET STATIC type_qualifier_list_opt assignment_expression RBRACKETZp_direct_declarator_4i  zidirect_declarator -> direct_declarator LBRACKET type_qualifier_list STATIC assignment_expression RBRACKETi  zVdirect_declarator -> direct_declarator LBRACKET type_qualifier_list_opt TIMES RBRACKETZp_direct_declarator_5i  zHdirect_declarator -> direct_declarator LPAREN parameter_type_list RPARENZp_direct_declarator_6i  zHdirect_declarator -> direct_declarator LPAREN identifier_list_opt RPARENi  z(pointer -> TIMES type_qualifier_list_optr  Z	p_pointeri)  z0pointer -> TIMES type_qualifier_list_opt pointeri*  z%type_qualifier_list -> type_qualifierr*  Zp_type_qualifier_listiG  z9type_qualifier_list -> type_qualifier_list type_qualifieriH  z%parameter_type_list -> parameter_listr.  Zp_parameter_type_listiM  z4parameter_type_list -> parameter_list COMMA ELLIPSISiN  z'parameter_list -> parameter_declarationr/  Zp_parameter_listiV  z<parameter_list -> parameter_list COMMA parameter_declarationiW  z:parameter_declaration -> declaration_specifiers declaratorr0  Zp_parameter_declaration_1i`  zGparameter_declaration -> declaration_specifiers abstract_declarator_optZp_parameter_declaration_2ik  zidentifier_list -> identifierr@  Zp_identifier_listi  z3identifier_list -> identifier_list COMMA identifieri  z$initializer -> assignment_expressionr>  Zp_initializer_1i  z:initializer -> brace_open initializer_list_opt brace_closeZp_initializer_2i  z<initializer -> brace_open initializer_list COMMA brace_closei  z/initializer_list -> designation_opt initializerrU  Zp_initializer_listi  zFinitializer_list -> initializer_list COMMA designation_opt initializeri  z%designation -> designator_list EQUALSrW  Zp_designationi  zdesignator_list -> designatorrX  Zp_designator_listi  z-designator_list -> designator_list designatori  z3designator -> LBRACKET constant_expression RBRACKETrY  Zp_designatori  zdesignator -> PERIOD identifieri  z=type_name -> specifier_qualifier_list abstract_declarator_optrS  Zp_type_namei  zabstract_declarator -> pointerr&  Zp_abstract_declarator_1i  z9abstract_declarator -> pointer direct_abstract_declaratorZp_abstract_declarator_2i  z1abstract_declarator -> direct_abstract_declaratorZp_abstract_declarator_3i  z?direct_abstract_declarator -> LPAREN abstract_declarator RPARENr'  Zp_direct_abstract_declarator_1i  zddirect_abstract_declarator -> direct_abstract_declarator LBRACKET assignment_expression_opt RBRACKETZp_direct_abstract_declarator_2i  zIdirect_abstract_declarator -> LBRACKET assignment_expression_opt RBRACKETZp_direct_abstract_declarator_3i  zPdirect_abstract_declarator -> direct_abstract_declarator LBRACKET TIMES RBRACKETZp_direct_abstract_declarator_4i  z5direct_abstract_declarator -> LBRACKET TIMES RBRACKETZp_direct_abstract_declarator_5i  z^direct_abstract_declarator -> direct_abstract_declarator LPAREN parameter_type_list_opt RPARENZp_direct_abstract_declarator_6i  zCdirect_abstract_declarator -> LPAREN parameter_type_list_opt RPARENZp_direct_abstract_declarator_7i   zblock_item -> declarationrH  Zp_block_itemi+  zblock_item -> statementi,  zblock_item_list -> block_itemrG  Zp_block_item_listi3  z-block_item_list -> block_item_list block_itemi4  z@compound_statement -> brace_open block_item_list_opt brace_closer,  Zp_compound_statement_1i:  z'labeled_statement -> ID COLON statementrJ  Zp_labeled_statement_1i@  z=labeled_statement -> CASE constant_expression COLON statementZp_labeled_statement_2iD  z,labeled_statement -> DEFAULT COLON statementZp_labeled_statement_3iH  z<selection_statement -> IF LPAREN expression RPAREN statementrL  Zp_selection_statement_1iL  zKselection_statement -> IF LPAREN expression RPAREN statement ELSE statementZp_selection_statement_2iP  z@selection_statement -> SWITCH LPAREN expression RPAREN statementZp_selection_statement_3iT  z?iteration_statement -> WHILE LPAREN expression RPAREN statementrM  Zp_iteration_statement_1iY  zGiteration_statement -> DO statement WHILE LPAREN expression RPAREN SEMIZp_iteration_statement_2i]  ziiteration_statement -> FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN statementZp_iteration_statement_3ia  zaiteration_statement -> FOR LPAREN declaration expression_opt SEMI expression_opt RPAREN statementZp_iteration_statement_4ie  zjump_statement -> GOTO ID SEMIrN  Zp_jump_statement_1ij  zjump_statement -> BREAK SEMIZp_jump_statement_2in  zjump_statement -> CONTINUE SEMIZp_jump_statement_3ir  z(jump_statement -> RETURN expression SEMIZp_jump_statement_4iv  zjump_statement -> RETURN SEMIiw  z+expression_statement -> expression_opt SEMIrK  Zp_expression_statementi|  z#expression -> assignment_expressionrP  Zp_expressioni  z4expression -> expression COMMA assignment_expressioni  ztypedef_name -> TYPEIDr  Zp_typedef_namei  z/assignment_expression -> conditional_expressionr2  Zp_assignment_expressioni  zSassignment_expression -> unary_expression assignment_operator assignment_expressioni  zassignment_operator -> EQUALSrR  Zp_assignment_operatori  zassignment_operator -> XOREQUALi  z!assignment_operator -> TIMESEQUALi  zassignment_operator -> DIVEQUALi  zassignment_operator -> MODEQUALi  z assignment_operator -> PLUSEQUALi  z!assignment_operator -> MINUSEQUALi  z"assignment_operator -> LSHIFTEQUALi  z"assignment_operator -> RSHIFTEQUALi  zassignment_operator -> ANDEQUALi  zassignment_operator -> OREQUALi  z-constant_expression -> conditional_expressionr_  Zp_constant_expressioni  z+conditional_expression -> binary_expressionr3  Zp_conditional_expressioni  zZconditional_expression -> binary_expression CONDOP expression COLON conditional_expressioni  z$binary_expression -> cast_expressionr5  Zp_binary_expressioni  z>binary_expression -> binary_expression TIMES binary_expressioni  z?binary_expression -> binary_expression DIVIDE binary_expressioni  z<binary_expression -> binary_expression MOD binary_expressioni  z=binary_expression -> binary_expression PLUS binary_expressioni  z>binary_expression -> binary_expression MINUS binary_expressioni  z?binary_expression -> binary_expression RSHIFT binary_expressioni  z?binary_expression -> binary_expression LSHIFT binary_expressioni  z;binary_expression -> binary_expression LT binary_expressioni  z;binary_expression -> binary_expression LE binary_expressioni  z;binary_expression -> binary_expression GE binary_expressioni  z;binary_expression -> binary_expression GT binary_expressioni  z;binary_expression -> binary_expression EQ binary_expressioni  z;binary_expression -> binary_expression NE binary_expressioni  z<binary_expression -> binary_expression AND binary_expressioni  z;binary_expression -> binary_expression OR binary_expressioni  z<binary_expression -> binary_expression XOR binary_expressioni  z=binary_expression -> binary_expression LAND binary_expressioni  z<binary_expression -> binary_expression LOR binary_expressioni  z#cast_expression -> unary_expressionr8  Zp_cast_expression_1i  z:cast_expression -> LPAREN type_name RPAREN cast_expressionZp_cast_expression_2i  z&unary_expression -> postfix_expressionr4  Zp_unary_expression_1i  z-unary_expression -> PLUSPLUS unary_expressionZp_unary_expression_2i  z/unary_expression -> MINUSMINUS unary_expressioni  z2unary_expression -> unary_operator cast_expressioni  z+unary_expression -> SIZEOF unary_expressionZp_unary_expression_3i  z2unary_expression -> SIZEOF LPAREN type_name RPARENi  zunary_operator -> ANDr7  Zp_unary_operatori  zunary_operator -> TIMESi  zunary_operator -> PLUSi  zunary_operator -> MINUSi  zunary_operator -> NOTi  zunary_operator -> LNOTi  z(postfix_expression -> primary_expressionr6  Zp_postfix_expression_1i  zEpostfix_expression -> postfix_expression LBRACKET expression RBRACKETZp_postfix_expression_2i  zOpostfix_expression -> postfix_expression LPAREN argument_expression_list RPARENZp_postfix_expression_3i  z6postfix_expression -> postfix_expression LPAREN RPARENi  z2postfix_expression -> postfix_expression PERIOD IDZp_postfix_expression_4i  z6postfix_expression -> postfix_expression PERIOD TYPEIDi  z1postfix_expression -> postfix_expression ARROW IDi  z5postfix_expression -> postfix_expression ARROW TYPEIDi  z1postfix_expression -> postfix_expression PLUSPLUSZp_postfix_expression_5i  z3postfix_expression -> postfix_expression MINUSMINUSi  zUpostfix_expression -> LPAREN type_name RPAREN brace_open initializer_list brace_closeZp_postfix_expression_6i  z[postfix_expression -> LPAREN type_name RPAREN brace_open initializer_list COMMA brace_closei  z primary_expression -> identifierr9  Zp_primary_expression_1i!  zprimary_expression -> constantZp_primary_expression_2i%  z,primary_expression -> unified_string_literalZp_primary_expression_3i)  z-primary_expression -> unified_wstring_literali*  z.primary_expression -> LPAREN expression RPARENZp_primary_expression_4i/  zGprimary_expression -> OFFSETOF LPAREN type_name COMMA identifier RPARENZp_primary_expression_5i3  z1argument_expression_list -> assignment_expressionr`  Zp_argument_expression_listi;  zPargument_expression_list -> argument_expression_list COMMA assignment_expressioni<  zidentifier -> IDr:  Zp_identifieriE  zconstant -> INT_CONST_DECr;  Zp_constant_1iI  zconstant -> INT_CONST_OCTiJ  zconstant -> INT_CONST_HEXiK  zconstant -> INT_CONST_BINiL  zconstant -> FLOAT_CONSTZp_constant_2iR  zconstant -> HEX_FLOAT_CONSTiS  zconstant -> CHAR_CONSTZp_constant_3iY  zconstant -> WCHAR_CONSTiZ  z(unified_string_literal -> STRING_LITERALr<  Zp_unified_string_literalie  z?unified_string_literal -> unified_string_literal STRING_LITERALif  z*unified_wstring_literal -> WSTRING_LITERALr=  Zp_unified_wstring_literalip  zBunified_wstring_literal -> unified_wstring_literal WSTRING_LITERALiq  zbrace_open -> LBRACEr+  Zp_brace_openi{  zbrace_close -> RBRACErZ  Zp_brace_closei  zempty -> <empty>r  Zp_emptyi  )Z_tabversionZ
_lr_methodZ_lr_signatureZ_lr_action_itemsZ
_lr_actionitemsZ_kZ_vzipZ_xZ_yZ_lr_goto_itemsZ_lr_gotoZ_lr_productions rc  rc  /usr/lib/python3.6/yacctab.py<module>   s                                                                                                                                                                                                                                                                                                            PK     ʽ\$V0!  !  #  __pycache__/_ast_gen.cpython-36.pycnu [        3
gwU!                 @   sh   d dl Z d dlmZ G dd deZG dd deZdZdZed	krdd dl	Z	ed
Z
e
jedd dS )    N)Templatec               @   s(   e Zd Zd	ddZd
ddZdd ZdS )ASTCodeGenerator
_c_ast.cfgc             C   s    || _ dd | j|D | _dS )zN Initialize the code generator from a configuration
            file.
        c             S   s   g | ]\}}t ||qS  )NodeCfg).0namecontentsr   r   /usr/lib/python3.6/_ast_gen.py
<listcomp>   s   z-ASTCodeGenerator.__init__.<locals>.<listcomp>N)cfg_filenameparse_cfgfilenode_cfg)selfr   r   r   r
   __init__   s    zASTCodeGenerator.__init__Nc             C   sH   t tj| jd}|t7 }x| jD ]}||j d 7 }q"W |j| dS )z< Generates the code into file, an open file buffer.
        )r   z

N)r   _PROLOGUE_COMMENTZ
substituter   _PROLOGUE_CODEr   generate_sourcewrite)r   filesrcr   r   r   r
   generate   s    
zASTCodeGenerator.generatec       
      c   s   t |d}x|D ]}|j }| s|jdr0q|jd}|jd}|jd}|dk sf||ksf||krvtd||f |d| }||d | }|rd	d
 |jdD ng }	||	fV  qW W dQ R X dS )ze Parse the configuration file and yield pairs of
            (name, contents) for each node.
        r#:[]   zInvalid line in %s:
%s
Nc             S   s   g | ]}|j  qS r   )strip)r   vr   r   r
   r   7   s    z2ASTCodeGenerator.parse_cfgfile.<locals>.<listcomp>,)openr   
startswithfindRuntimeErrorsplit)
r   filenameflineZcolon_iZ
lbracket_iZ
rbracket_ir   valZvallistr   r   r
   r   &   s    



zASTCodeGenerator.parse_cfgfile)r   )N)__name__
__module____qualname__r   r   r   r   r   r   r
   r      s   

r   c               @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )r   z Node configuration.

        name: node name
        contents: a list of contents - attributes and child nodes
        See comment at the top of the configuration file for details.
    c             C   s   || _ g | _g | _g | _g | _x^|D ]V}|jd}| jj| |jdrV| jj| q$|jdrn| jj| q$| jj| q$W d S )N*z**)r   all_entriesattrchild	seq_childrstripappendendswith)r   r   r	   entryZclean_entryr   r   r
   r   B   s    



zNodeCfg.__init__c             C   s,   | j  }|d| j  7 }|d| j  7 }|S )N
)	_gen_init_gen_children_gen_attr_names)r   r   r   r   r
   r   T   s    zNodeCfg.generate_sourcec             C   s   d| j  }| jrDdj| j}djdd | jD }|d7 }d| }nd}d}|d	| 7 }|d
| 7 }x$| jdg D ]}|d||f 7 }qrW |S )Nzclass %s(Node):
z, c             s   s   | ]}d j |V  qdS )z'{0}'N)format)r   er   r   r
   	<genexpr>_   s    z$NodeCfg._gen_init.<locals>.<genexpr>z, 'coord', '__weakref__'z(self, %s, coord=None)z'coord', '__weakref__'z(self, coord=None)z    __slots__ = (%s)
z    def __init__%s:
Zcoordz        self.%s = %s
)r   r.   join)r   r   argsslotsZarglistr   r   r   r
   r7   Z   s    

zNodeCfg._gen_initc             C   sl   d}| j r`|d7 }x | jD ]}|d	t|d 7 }qW x | jD ]}|dt|d 7 }q<W |d7 }n|d7 }|S )
Nz    def children(self):
z        nodelist = []
z&        if self.%(child)s is not None:z0 nodelist.append(("%(child)s", self.%(child)s))
)r0   zu        for i, child in enumerate(self.%(child)s or []):
            nodelist.append(("%(child)s[%%d]" %% i, child))
z        return tuple(nodelist)
z        return ()
zV        if self.%(child)s is not None: nodelist.append(("%(child)s", self.%(child)s))
)r.   r0   dictr1   )r   r   r0   r1   r   r   r
   r8   n   s     
zNodeCfg._gen_childrenc             C   s"   ddj dd | jD  d }|S )Nz    attr_names = ( c             s   s   | ]}d | V  qdS )z%r, Nr   )r   Znmr   r   r
   r<      s    z*NodeCfg._gen_attr_names.<locals>.<genexpr>))r=   r/   )r   r   r   r   r
   r9      s    zNodeCfg._gen_attr_namesN)	r*   r+   r,   __doc__r   r   r7   r8   r9   r   r   r   r
   r   ;   s   r   a  #-----------------------------------------------------------------
# ** ATTENTION **
# This code was automatically generated from the file:
# $cfg_filename
#
# Do not modify it directly. Modify the configuration file and
# run the generator again.
# ** ** *** ** **
#
# pycparser: c_ast.py
#
# AST Node classes.
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------

a  
import sys


class Node(object):
    __slots__ = ()
    """ Abstract base class for AST nodes.
    """
    def children(self):
        """ A sequence of all children that are Nodes
        """
        pass

    def show(self, buf=sys.stdout, offset=0, attrnames=False, nodenames=False, showcoord=False, _my_node_name=None):
        """ Pretty print the Node and all its attributes and
            children (recursively) to a buffer.

            buf:
                Open IO buffer into which the Node is printed.

            offset:
                Initial offset (amount of leading spaces)

            attrnames:
                True if you want to see the attribute names in
                name=value pairs. False to only see the values.

            nodenames:
                True if you want to see the actual node names
                within their parents.

            showcoord:
                Do you want the coordinates of each Node to be
                displayed.
        """
        lead = ' ' * offset
        if nodenames and _my_node_name is not None:
            buf.write(lead + self.__class__.__name__+ ' <' + _my_node_name + '>: ')
        else:
            buf.write(lead + self.__class__.__name__+ ': ')

        if self.attr_names:
            if attrnames:
                nvlist = [(n, getattr(self,n)) for n in self.attr_names]
                attrstr = ', '.join('%s=%s' % nv for nv in nvlist)
            else:
                vlist = [getattr(self, n) for n in self.attr_names]
                attrstr = ', '.join('%s' % v for v in vlist)
            buf.write(attrstr)

        if showcoord:
            buf.write(' (at %s)' % self.coord)
        buf.write('\n')

        for (child_name, child) in self.children():
            child.show(
                buf,
                offset=offset + 2,
                attrnames=attrnames,
                nodenames=nodenames,
                showcoord=showcoord,
                _my_node_name=child_name)


class NodeVisitor(object):
    """ A base NodeVisitor class for visiting c_ast nodes.
        Subclass it and define your own visit_XXX methods, where
        XXX is the class name you want to visit with these
        methods.

        For example:

        class ConstantVisitor(NodeVisitor):
            def __init__(self):
                self.values = []

            def visit_Constant(self, node):
                self.values.append(node.value)

        Creates a list of values of all the constant nodes
        encountered below the given node. To use it:

        cv = ConstantVisitor()
        cv.visit(node)

        Notes:

        *   generic_visit() will be called for AST nodes for which
            no visit_XXX method was defined.
        *   The children of nodes for which a visit_XXX was
            defined will not be visited - if you need this, call
            generic_visit() on the node.
            You can use:
                NodeVisitor.generic_visit(self, node)
        *   Modeled after Python's own AST visiting facilities
            (the ast module of Python 3.0)
    """
    def visit(self, node):
        """ Visit a node.
        """
        method = 'visit_' + node.__class__.__name__
        visitor = getattr(self, method, self.generic_visit)
        return visitor(node)

    def generic_visit(self, node):
        """ Called if no explicit visitor function exists for a
            node. Implements preorder visiting of the node.
        """
        for c_name, c in node.children():
            self.visit(c)


__main__z
_c_ast.cfgzc_ast.pyw)pprintstringr   objectr   r   r   r   r*   sysZast_genr   r!   r   r   r   r
   <module>   s   *brPK     ʽ\#t  #t  &  __pycache__/c_ast.cpython-36.opt-1.pycnu [        3
]([                 @   s  d dl Z G dd deZG dd deZG dd deZG dd	 d	eZG d
d deZG dd deZG dd deZG dd deZ	G dd deZ
G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG d d! d!eZG d"d# d#eZG d$d% d%eZG d&d' d'eZG d(d) d)eZG d*d+ d+eZG d,d- d-eZG d.d/ d/eZG d0d1 d1eZG d2d3 d3eZG d4d5 d5eZG d6d7 d7eZG d8d9 d9eZG d:d; d;eZG d<d= d=eZG d>d? d?eZ G d@dA dAeZ!G dBdC dCeZ"G dDdE dEeZ#G dFdG dGeZ$G dHdI dIeZ%G dJdK dKeZ&G dLdM dMeZ'G dNdO dOeZ(G dPdQ dQeZ)G dRdS dSeZ*G dTdU dUeZ+G dVdW dWeZ,G dXdY dYeZ-G dZd[ d[eZ.G d\d] d]eZ/G d^d_ d_eZ0G d`da daeZ1dS )b    Nc               @   s0   e Zd Zf Zdd ZejdddddfddZdS )Nodec             C   s   dS )z3 A sequence of all children that are Nodes
        N )selfr   r   /usr/lib/python3.6/c_ast.pychildren   s    zNode.childrenr   FNc          	      s  d| }|r4|dk	r4|j | jj d | d  n|j | jj d   jr|r~ fdd jD }djd	d
 |D }	n( fdd jD }
djdd
 |
D }	|j |	 |r|j d j  |j d x. j D ]"\}}|j||d ||||d qW dS )a   Pretty print the Node and all its attributes and
            children (recursively) to a buffer.

            buf:
                Open IO buffer into which the Node is printed.

            offset:
                Initial offset (amount of leading spaces)

            attrnames:
                True if you want to see the attribute names in
                name=value pairs. False to only see the values.

            nodenames:
                True if you want to see the actual node names
                within their parents.

            showcoord:
                Do you want the coordinates of each Node to be
                displayed.
         Nz <z>: z: c                s   g | ]}|t  |fqS r   )getattr).0n)r   r   r   
<listcomp>=   s    zNode.show.<locals>.<listcomp>z, c             s   s   | ]}d | V  qdS )z%s=%sNr   )r	   Znvr   r   r   	<genexpr>>   s    zNode.show.<locals>.<genexpr>c                s   g | ]}t  |qS r   )r   )r	   r
   )r   r   r   r   @   s    c             s   s   | ]}d | V  qdS )z%sNr   )r	   vr   r   r   r   A   s    z (at %s)
   )offset	attrnames	nodenames	showcoord_my_node_name)write	__class____name__
attr_namesjoincoordr   show)r   Zbufr   r   r   r   r   ZleadZnvlistZattrstrZvlistZ
child_namechildr   )r   r   r      s,     

z	Node.show)r   
__module____qualname__	__slots__r   sysstdoutr   r   r   r   r   r      s   r   c               @   s    e Zd ZdZdd Zdd ZdS )NodeVisitora-   A base NodeVisitor class for visiting c_ast nodes.
        Subclass it and define your own visit_XXX methods, where
        XXX is the class name you want to visit with these
        methods.

        For example:

        class ConstantVisitor(NodeVisitor):
            def __init__(self):
                self.values = []

            def visit_Constant(self, node):
                self.values.append(node.value)

        Creates a list of values of all the constant nodes
        encountered below the given node. To use it:

        cv = ConstantVisitor()
        cv.visit(node)

        Notes:

        *   generic_visit() will be called for AST nodes for which
            no visit_XXX method was defined.
        *   The children of nodes for which a visit_XXX was
            defined will not be visited - if you need this, call
            generic_visit() on the node.
            You can use:
                NodeVisitor.generic_visit(self, node)
        *   Modeled after Python's own AST visiting facilities
            (the ast module of Python 3.0)
    c             C   s"   d|j j }t| || j}||S )z Visit a node.
        Zvisit_)r   r   r   generic_visit)r   nodemethodZvisitorr   r   r   visits   s    zNodeVisitor.visitc             C   s$   x|j  D ]\}}| j| q
W dS )zy Called if no explicit visitor function exists for a
            node. Implements preorder visiting of the node.
        N)r   r&   )r   r$   Zc_namecr   r   r   r#   z   s    zNodeVisitor.generic_visitN)r   r   r   __doc__r&   r#   r   r   r   r   r"   R   s    r"   c               @   s&   e Zd ZdZdddZd	d
 ZdZdS )	ArrayDecltypedim	dim_qualsr   __weakref__Nc             C   s   || _ || _|| _|| _d S )N)r*   r+   r,   r   )r   r*   r+   r,   r   r   r   r   __init__   s    zArrayDecl.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )Nr*   r+   )r*   appendr+   tuple)r   nodelistr   r   r   r      s    
 
 zArrayDecl.children)r*   r+   r,   r   r-   )N)r,   )r   r   r   r   r.   r   r   r   r   r   r   r)      s   
r)   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )ArrayRefname	subscriptr   r-   Nc             C   s   || _ || _|| _d S )N)r3   r4   r   )r   r3   r4   r   r   r   r   r.      s    zArrayRef.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )Nr3   r4   )r3   r/   r4   r0   )r   r1   r   r   r   r      s    
 
 zArrayRef.children)r3   r4   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   r2      s   
r2   c               @   s&   e Zd ZdZdddZd	d
 ZdZdS )
Assignmentoplvaluervaluer   r-   Nc             C   s   || _ || _|| _|| _d S )N)r6   r7   r8   r   )r   r6   r7   r8   r   r   r   r   r.      s    zAssignment.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )Nr7   r8   )r7   r/   r8   r0   )r   r1   r   r   r   r      s    
 
 zAssignment.children)r6   r7   r8   r   r-   )N)r6   )r   r   r   r   r.   r   r   r   r   r   r   r5      s   
r5   c               @   s&   e Zd ZdZdddZd	d
 ZdZdS )BinaryOpr6   leftrightr   r-   Nc             C   s   || _ || _|| _|| _d S )N)r6   r:   r;   r   )r   r6   r:   r;   r   r   r   r   r.      s    zBinaryOp.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )Nr:   r;   )r:   r/   r;   r0   )r   r1   r   r   r   r      s    
 
 zBinaryOp.children)r6   r:   r;   r   r-   )N)r6   )r   r   r   r   r.   r   r   r   r   r   r   r9      s   
r9   c               @   s&   e Zd ZdZd	ddZdd Zf ZdS )
Breakr   r-   Nc             C   s
   || _ d S )N)r   )r   r   r   r   r   r.      s    zBreak.__init__c             C   s   f S )Nr   )r   r   r   r   r      s    zBreak.children)r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   r<      s   
r<   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )Caseexprstmtsr   r-   Nc             C   s   || _ || _|| _d S )N)r>   r?   r   )r   r>   r?   r   r   r   r   r.      s    zCase.__init__c             C   sT   g }| j d k	r|jd| j f x,t| jp*g D ]\}}|jd| |f q.W t|S )Nr>   z	stmts[%d])r>   r/   	enumerater?   r0   )r   r1   ir   r   r   r   r      s    
 zCase.children)r>   r?   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   r=      s   
r=   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )Castto_typer>   r   r-   Nc             C   s   || _ || _|| _d S )N)rC   r>   r   )r   rC   r>   r   r   r   r   r.      s    zCast.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )NrC   r>   )rC   r/   r>   r0   )r   r1   r   r   r   r      s    
 
 zCast.children)rC   r>   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rB      s   
rB   c               @   s&   e Zd Zd	Zd
ddZdd Zf ZdS )Compoundblock_itemsr   r-   Nc             C   s   || _ || _d S )N)rE   r   )r   rE   r   r   r   r   r.      s    zCompound.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nzblock_items[%d])r@   rE   r/   r0   )r   r1   rA   r   r   r   r   r      s    zCompound.children)rE   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rD      s   
rD   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )CompoundLiteralr*   initr   r-   Nc             C   s   || _ || _|| _d S )N)r*   rG   r   )r   r*   rG   r   r   r   r   r.      s    zCompoundLiteral.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )Nr*   rG   )r*   r/   rG   r0   )r   r1   r   r   r   r      s    
 
 zCompoundLiteral.children)r*   rG   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rF      s   
rF   c               @   s&   e Zd Zd
ZdddZdd	 ZdZdS )Constantr*   valuer   r-   Nc             C   s   || _ || _|| _d S )N)r*   rI   r   )r   r*   rI   r   r   r   r   r.   	  s    zConstant.__init__c             C   s   g }t |S )N)r0   )r   r1   r   r   r   r     s    zConstant.children)r*   rI   r   r-   )N)r*   rI   )r   r   r   r   r.   r   r   r   r   r   r   rH     s   
rH   c               @   s&   e Zd ZdZd	ddZdd Zf ZdS )
Continuer   r-   Nc             C   s
   || _ d S )N)r   )r   r   r   r   r   r.     s    zContinue.__init__c             C   s   f S )Nr   )r   r   r   r   r     s    zContinue.children)r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rJ     s   
rJ   c            	   @   s&   e Zd ZdZdddZdd ZdZd
S )Declr3   qualsstoragefuncspecr*   rG   bitsizer   r-   Nc	       	      C   s4   || _ || _|| _|| _|| _|| _|| _|| _d S )N)r3   rL   rM   rN   r*   rG   rO   r   )	r   r3   rL   rM   rN   r*   rG   rO   r   r   r   r   r.      s    zDecl.__init__c             C   sZ   g }| j d k	r|jd| j f | jd k	r8|jd| jf | jd k	rR|jd| jf t|S )Nr*   rG   rO   )r*   r/   rG   rO   r0   )r   r1   r   r   r   r   *  s    
 
 
 zDecl.children)	r3   rL   rM   rN   r*   rG   rO   r   r-   )N)r3   rL   rM   rN   )r   r   r   r   r.   r   r   r   r   r   r   rK     s   

rK   c               @   s&   e Zd Zd	Zd
ddZdd Zf ZdS )DeclListdeclsr   r-   Nc             C   s   || _ || _d S )N)rQ   r   )r   rQ   r   r   r   r   r.   5  s    zDeclList.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nz	decls[%d])r@   rQ   r/   r0   )r   r1   rA   r   r   r   r   r   9  s    zDeclList.children)rQ   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rP   3  s   
rP   c               @   s&   e Zd Zd	Zd
ddZdd Zf ZdS )Defaultr?   r   r-   Nc             C   s   || _ || _d S )N)r?   r   )r   r?   r   r   r   r   r.   C  s    zDefault.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nz	stmts[%d])r@   r?   r/   r0   )r   r1   rA   r   r   r   r   r   G  s    zDefault.children)r?   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rR   A  s   
rR   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )DoWhilecondstmtr   r-   Nc             C   s   || _ || _|| _d S )N)rT   rU   r   )r   rT   rU   r   r   r   r   r.   Q  s    zDoWhile.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )NrT   rU   )rT   r/   rU   r0   )r   r1   r   r   r   r   V  s    
 
 zDoWhile.children)rT   rU   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rS   O  s   
rS   c               @   s&   e Zd ZdZd	ddZdd Zf ZdS )
EllipsisParamr   r-   Nc             C   s
   || _ d S )N)r   )r   r   r   r   r   r.   `  s    zEllipsisParam.__init__c             C   s   f S )Nr   )r   r   r   r   r   c  s    zEllipsisParam.children)r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rV   ^  s   
rV   c               @   s&   e Zd ZdZd	ddZdd Zf ZdS )
EmptyStatementr   r-   Nc             C   s
   || _ d S )N)r   )r   r   r   r   r   r.   j  s    zEmptyStatement.__init__c             C   s   f S )Nr   )r   r   r   r   r   m  s    zEmptyStatement.children)r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rW   h  s   
rW   c               @   s&   e Zd Zd
ZdddZdd	 ZdZdS )Enumr3   valuesr   r-   Nc             C   s   || _ || _|| _d S )N)r3   rY   r   )r   r3   rY   r   r   r   r   r.   t  s    zEnum.__init__c             C   s&   g }| j d k	r|jd| j f t|S )NrY   )rY   r/   r0   )r   r1   r   r   r   r   y  s    
 zEnum.children)r3   rY   r   r-   )N)r3   )r   r   r   r   r.   r   r   r   r   r   r   rX   r  s   
rX   c               @   s&   e Zd Zd
ZdddZdd	 ZdZdS )
Enumeratorr3   rI   r   r-   Nc             C   s   || _ || _|| _d S )N)r3   rI   r   )r   r3   rI   r   r   r   r   r.     s    zEnumerator.__init__c             C   s&   g }| j d k	r|jd| j f t|S )NrI   )rI   r/   r0   )r   r1   r   r   r   r     s    
 zEnumerator.children)r3   rI   r   r-   )N)r3   )r   r   r   r   r.   r   r   r   r   r   r   rZ     s   
rZ   c               @   s&   e Zd Zd	Zd
ddZdd Zf ZdS )EnumeratorListenumeratorsr   r-   Nc             C   s   || _ || _d S )N)r\   r   )r   r\   r   r   r   r   r.     s    zEnumeratorList.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nzenumerators[%d])r@   r\   r/   r0   )r   r1   rA   r   r   r   r   r     s    zEnumeratorList.children)r\   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   r[     s   
r[   c               @   s&   e Zd Zd	Zd
ddZdd Zf ZdS )ExprListexprsr   r-   Nc             C   s   || _ || _d S )N)r^   r   )r   r^   r   r   r   r   r.     s    zExprList.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nz	exprs[%d])r@   r^   r/   r0   )r   r1   rA   r   r   r   r   r     s    zExprList.children)r^   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   r]     s   
r]   c               @   s&   e Zd Zd	Zd
ddZdd Zf ZdS )FileASTextr   r-   Nc             C   s   || _ || _d S )N)r`   r   )r   r`   r   r   r   r   r.     s    zFileAST.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nzext[%d])r@   r`   r/   r0   )r   r1   rA   r   r   r   r   r     s    zFileAST.children)r`   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   r_     s   
r_   c               @   s&   e Zd ZdZddd	Zd
d Zf ZdS )ForrG   rT   nextrU   r   r-   Nc             C   s"   || _ || _|| _|| _|| _d S )N)rG   rT   rb   rU   r   )r   rG   rT   rb   rU   r   r   r   r   r.     s
    zFor.__init__c             C   st   g }| j d k	r|jd| j f | jd k	r8|jd| jf | jd k	rR|jd| jf | jd k	rl|jd| jf t|S )NrG   rT   rb   rU   )rG   r/   rT   rb   rU   r0   )r   r1   r   r   r   r     s    
 
 
 
 zFor.children)rG   rT   rb   rU   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   ra     s   
ra   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )FuncCallr3   argsr   r-   Nc             C   s   || _ || _|| _d S )N)r3   rd   r   )r   r3   rd   r   r   r   r   r.     s    zFuncCall.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )Nr3   rd   )r3   r/   rd   r0   )r   r1   r   r   r   r     s    
 
 zFuncCall.children)r3   rd   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rc     s   
rc   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )FuncDeclrd   r*   r   r-   Nc             C   s   || _ || _|| _d S )N)rd   r*   r   )r   rd   r*   r   r   r   r   r.     s    zFuncDecl.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )Nrd   r*   )rd   r/   r*   r0   )r   r1   r   r   r   r     s    
 
 zFuncDecl.children)rd   r*   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   re     s   
re   c               @   s&   e Zd ZdZdddZd	d
 Zf ZdS )FuncDefdeclparam_declsbodyr   r-   Nc             C   s   || _ || _|| _|| _d S )N)rg   rh   ri   r   )r   rg   rh   ri   r   r   r   r   r.     s    zFuncDef.__init__c             C   sn   g }| j d k	r|jd| j f | jd k	r8|jd| jf x,t| jpDg D ]\}}|jd| |f qHW t|S )Nrg   ri   zparam_decls[%d])rg   r/   ri   r@   rh   r0   )r   r1   rA   r   r   r   r   r     s    
 
 zFuncDef.children)rg   rh   ri   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rf     s   
rf   c               @   s&   e Zd Zd	Zd
ddZdd ZdZdS )Gotor3   r   r-   Nc             C   s   || _ || _d S )N)r3   r   )r   r3   r   r   r   r   r.     s    zGoto.__init__c             C   s   g }t |S )N)r0   )r   r1   r   r   r   r     s    zGoto.children)r3   r   r-   )N)r3   )r   r   r   r   r.   r   r   r   r   r   r   rj     s   
rj   c               @   s&   e Zd Zd	Zd
ddZdd ZdZdS )IDr3   r   r-   Nc             C   s   || _ || _d S )N)r3   r   )r   r3   r   r   r   r   r.   	  s    zID.__init__c             C   s   g }t |S )N)r0   )r   r1   r   r   r   r     s    zID.children)r3   r   r-   )N)r3   )r   r   r   r   r.   r   r   r   r   r   r   rk     s   
rk   c               @   s&   e Zd Zd	Zd
ddZdd ZdZdS )IdentifierTypenamesr   r-   Nc             C   s   || _ || _d S )N)rm   r   )r   rm   r   r   r   r   r.     s    zIdentifierType.__init__c             C   s   g }t |S )N)r0   )r   r1   r   r   r   r     s    zIdentifierType.children)rm   r   r-   )N)rm   )r   r   r   r   r.   r   r   r   r   r   r   rl     s   
rl   c               @   s&   e Zd ZdZdddZd	d
 Zf ZdS )IfrT   iftrueiffalser   r-   Nc             C   s   || _ || _|| _|| _d S )N)rT   ro   rp   r   )r   rT   ro   rp   r   r   r   r   r.   !  s    zIf.__init__c             C   sZ   g }| j d k	r|jd| j f | jd k	r8|jd| jf | jd k	rR|jd| jf t|S )NrT   ro   rp   )rT   r/   ro   rp   r0   )r   r1   r   r   r   r   '  s    
 
 
 zIf.children)rT   ro   rp   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rn     s   
rn   c               @   s&   e Zd Zd	Zd
ddZdd Zf ZdS )InitListr^   r   r-   Nc             C   s   || _ || _d S )N)r^   r   )r   r^   r   r   r   r   r.   2  s    zInitList.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nz	exprs[%d])r@   r^   r/   r0   )r   r1   rA   r   r   r   r   r   6  s    zInitList.children)r^   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rq   0  s   
rq   c               @   s&   e Zd Zd
ZdddZdd	 ZdZdS )Labelr3   rU   r   r-   Nc             C   s   || _ || _|| _d S )N)r3   rU   r   )r   r3   rU   r   r   r   r   r.   @  s    zLabel.__init__c             C   s&   g }| j d k	r|jd| j f t|S )NrU   )rU   r/   r0   )r   r1   r   r   r   r   E  s    
 zLabel.children)r3   rU   r   r-   )N)r3   )r   r   r   r   r.   r   r   r   r   r   r   rr   >  s   
rr   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )NamedInitializerr3   r>   r   r-   Nc             C   s   || _ || _|| _d S )N)r3   r>   r   )r   r3   r>   r   r   r   r   r.   N  s    zNamedInitializer.__init__c             C   sT   g }| j d k	r|jd| j f x,t| jp*g D ]\}}|jd| |f q.W t|S )Nr>   zname[%d])r>   r/   r@   r3   r0   )r   r1   rA   r   r   r   r   r   S  s    
 zNamedInitializer.children)r3   r>   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rs   L  s   
rs   c               @   s&   e Zd Zd	Zd
ddZdd Zf ZdS )	ParamListparamsr   r-   Nc             C   s   || _ || _d S )N)ru   r   )r   ru   r   r   r   r   r.   ^  s    zParamList.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nz
params[%d])r@   ru   r/   r0   )r   r1   rA   r   r   r   r   r   b  s    zParamList.children)ru   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rt   \  s   
rt   c               @   s&   e Zd Zd
ZdddZdd	 ZdZdS )PtrDeclrL   r*   r   r-   Nc             C   s   || _ || _|| _d S )N)rL   r*   r   )r   rL   r*   r   r   r   r   r.   l  s    zPtrDecl.__init__c             C   s&   g }| j d k	r|jd| j f t|S )Nr*   )r*   r/   r0   )r   r1   r   r   r   r   q  s    
 zPtrDecl.children)rL   r*   r   r-   )N)rL   )r   r   r   r   r.   r   r   r   r   r   r   rv   j  s   
rv   c               @   s&   e Zd Zd	Zd
ddZdd Zf ZdS )Returnr>   r   r-   Nc             C   s   || _ || _d S )N)r>   r   )r   r>   r   r   r   r   r.   z  s    zReturn.__init__c             C   s&   g }| j d k	r|jd| j f t|S )Nr>   )r>   r/   r0   )r   r1   r   r   r   r   ~  s    
 zReturn.children)r>   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rw   x  s   
rw   c               @   s&   e Zd Zd
ZdddZdd	 ZdZdS )Structr3   rQ   r   r-   Nc             C   s   || _ || _|| _d S )N)r3   rQ   r   )r   r3   rQ   r   r   r   r   r.     s    zStruct.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nz	decls[%d])r@   rQ   r/   r0   )r   r1   rA   r   r   r   r   r     s    zStruct.children)r3   rQ   r   r-   )N)r3   )r   r   r   r   r.   r   r   r   r   r   r   rx     s   
rx   c               @   s&   e Zd ZdZdddZd	d
 ZdZdS )	StructRefr3   r*   fieldr   r-   Nc             C   s   || _ || _|| _|| _d S )N)r3   r*   rz   r   )r   r3   r*   rz   r   r   r   r   r.     s    zStructRef.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )Nr3   rz   )r3   r/   rz   r0   )r   r1   r   r   r   r     s    
 
 zStructRef.children)r3   r*   rz   r   r-   )N)r*   )r   r   r   r   r.   r   r   r   r   r   r   ry     s   
ry   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )SwitchrT   rU   r   r-   Nc             C   s   || _ || _|| _d S )N)rT   rU   r   )r   rT   rU   r   r   r   r   r.     s    zSwitch.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )NrT   rU   )rT   r/   rU   r0   )r   r1   r   r   r   r     s    
 
 zSwitch.children)rT   rU   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   r{     s   
r{   c               @   s&   e Zd ZdZdddZd	d
 Zf ZdS )	TernaryOprT   ro   rp   r   r-   Nc             C   s   || _ || _|| _|| _d S )N)rT   ro   rp   r   )r   rT   ro   rp   r   r   r   r   r.     s    zTernaryOp.__init__c             C   sZ   g }| j d k	r|jd| j f | jd k	r8|jd| jf | jd k	rR|jd| jf t|S )NrT   ro   rp   )rT   r/   ro   rp   r0   )r   r1   r   r   r   r     s    
 
 
 zTernaryOp.children)rT   ro   rp   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   r|     s   
r|   c               @   s&   e Zd ZdZdddZd	d
 ZdZdS )TypeDecldeclnamerL   r*   r   r-   Nc             C   s   || _ || _|| _|| _d S )N)r~   rL   r*   r   )r   r~   rL   r*   r   r   r   r   r.     s    zTypeDecl.__init__c             C   s&   g }| j d k	r|jd| j f t|S )Nr*   )r*   r/   r0   )r   r1   r   r   r   r     s    
 zTypeDecl.children)r~   rL   r*   r   r-   )N)r~   rL   )r   r   r   r   r.   r   r   r   r   r   r   r}     s   
r}   c               @   s&   e Zd ZdZddd	Zd
d ZdZdS )Typedefr3   rL   rM   r*   r   r-   Nc             C   s"   || _ || _|| _|| _|| _d S )N)r3   rL   rM   r*   r   )r   r3   rL   rM   r*   r   r   r   r   r.     s
    zTypedef.__init__c             C   s&   g }| j d k	r|jd| j f t|S )Nr*   )r*   r/   r0   )r   r1   r   r   r   r     s    
 zTypedef.children)r3   rL   rM   r*   r   r-   )N)r3   rL   rM   )r   r   r   r   r.   r   r   r   r   r   r   r     s   
r   c               @   s&   e Zd ZdZdddZd	d
 ZdZdS )Typenamer3   rL   r*   r   r-   Nc             C   s   || _ || _|| _|| _d S )N)r3   rL   r*   r   )r   r3   rL   r*   r   r   r   r   r.     s    zTypename.__init__c             C   s&   g }| j d k	r|jd| j f t|S )Nr*   )r*   r/   r0   )r   r1   r   r   r   r     s    
 zTypename.children)r3   rL   r*   r   r-   )N)r3   rL   )r   r   r   r   r.   r   r   r   r   r   r   r     s   
r   c               @   s&   e Zd Zd
ZdddZdd	 ZdZdS )UnaryOpr6   r>   r   r-   Nc             C   s   || _ || _|| _d S )N)r6   r>   r   )r   r6   r>   r   r   r   r   r.     s    zUnaryOp.__init__c             C   s&   g }| j d k	r|jd| j f t|S )Nr>   )r>   r/   r0   )r   r1   r   r   r   r     s    
 zUnaryOp.children)r6   r>   r   r-   )N)r6   )r   r   r   r   r.   r   r   r   r   r   r   r     s   
r   c               @   s&   e Zd Zd
ZdddZdd	 ZdZdS )Unionr3   rQ   r   r-   Nc             C   s   || _ || _|| _d S )N)r3   rQ   r   )r   r3   rQ   r   r   r   r   r.     s    zUnion.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nz	decls[%d])r@   rQ   r/   r0   )r   r1   rA   r   r   r   r   r     s    zUnion.children)r3   rQ   r   r-   )N)r3   )r   r   r   r   r.   r   r   r   r   r   r   r      s   
r   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )WhilerT   rU   r   r-   Nc             C   s   || _ || _|| _d S )N)rT   rU   r   )r   rT   rU   r   r   r   r   r.     s    zWhile.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )NrT   rU   )rT   r/   rU   r0   )r   r1   r   r   r   r     s    
 
 zWhile.children)rT   rU   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   r     s   
r   )2r    objectr   r"   r)   r2   r5   r9   r<   r=   rB   rD   rF   rH   rJ   rK   rP   rR   rS   rV   rW   rX   rZ   r[   r]   r_   ra   rc   re   rf   rj   rk   rl   rn   rq   rr   rs   rt   rv   rw   rx   ry   r{   r|   r}   r   r   r   r   r   r   r   r   r   <module>   s`   <0



PK     ʽ\ 1    .  __pycache__/_build_tables.cpython-36.opt-1.pycnu [        3
gwUS                 @   sv   d dl mZ edZejedd d dlZddgejd d < d dlmZ ej	d	d
d	d d dl
Z
d dlZd dlZdS )    )ASTCodeGeneratorz
_c_ast.cfgzc_ast.pywN.z..)c_parserTF)Zlex_optimizeZ
yacc_debugZyacc_optimize)Z_ast_genr   Zast_genZgenerateopensyspathZ	pycparserr   ZCParserZlextabZyacctabZc_ast r	   r	   #/usr/lib/python3.6/_build_tables.py<module>   s   PK     ʽ\×    *  __pycache__/plyparser.cpython-36.opt-1.pycnu [        3
gwU:                 @   s4   G d d de ZG dd deZG dd de ZdS )c               @   s&   e Zd ZdZdZdddZd	d
 ZdS )Coordz Coordinates of a syntactic element. Consists of:
            - File name
            - Line number
            - (optional) column number, for the Lexer
    filelinecolumn__weakref__Nc             C   s   || _ || _|| _d S )N)r   r   r   )selfr   r   r    r   /usr/lib/python3.6/plyparser.py__init__   s    zCoord.__init__c             C   s(   d| j | jf }| jr$|d| j 7 }|S )Nz%s:%sz:%s)r   r   r   )r   strr   r   r   __str__   s     zCoord.__str__)r   r   r   r   )N)__name__
__module____qualname____doc__	__slots__r	   r   r   r   r   r   r      s   
r   c               @   s   e Zd ZdS )
ParseErrorN)r   r   r   r   r   r   r   r      s    r   c               @   s&   e Zd Zdd ZdddZdd ZdS )		PLYParserc             C   s<   |d }dd }d||f |_ d| |_t| j|j| dS )z Given a rule name, creates an optional ply.yacc rule
            for it. The name of the optional rule is
            <rulename>_opt
        Z_optc             S   s   |d |d< d S )N       r   )r   pr   r   r   optrule)   s    z+PLYParser._create_opt_rule.<locals>.optrulez%s : empty
| %szp_%sN)r   r   setattr	__class__)r   ZrulenameZoptnamer   r   r   r   _create_opt_rule"   s
    
zPLYParser._create_opt_ruleNc             C   s   t | jj||dS )N)r   r   r   )r   Zclexfilename)r   linenor   r   r   r   _coord0   s    zPLYParser._coordc             C   s   t d||f d S )Nz%s: %s)r   )r   msgZcoordr   r   r   _parse_error6   s    zPLYParser._parse_error)N)r   r   r   r   r   r   r   r   r   r   r   !   s   
r   N)objectr   	Exceptionr   r   r   r   r   r   <module>   s   PK     ʽ\>2U  U  !  __pycache__/lextab.cpython-36.pycnu [        3
]N                 @   s  d Z eddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`f`ZdaZdbZdcdddddeZdfdgdhdfdidjfdkdMfdldGfdmd(fdgdgdgdgdgdgdgdgdgdnd8fdgdgdgdgdgdgdgdod;fdgdgdgdgdgdgdgdpd_fdgdgdgdgdgdgdgdqdrfdsd9fdgdgdgdgdgdgdgdtd	fdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdud&fdgdgdgdgdgdgdvd4fdgdgdgdgdgdgdwdxfdgdgdgdgdgdgdgdgdgdgdgdgdgdgdydzfdgdgdgdgdgdgdgdgdgdgd{dOfdgdgdgdgdgdgd|d}fdgdgdgdgdgdgdgdgdgdgdgdgdgd~dJfdgdfdgdgdgdgdgdgdgdfdgdEfdgdRfdgd=fdgd.fdgdfdgd0fdgd2fdgd`fdgd#fdgd3fdgdfdgd]fdgdWfdgd-fdgdUfdgdfdgdHfdgdCfdgdfdgdVfdgd\fdgdQfdgdYfdgdZfdgdPfdgd
fdgd6fdgd!fdgdfdgd[fdgdfdgdfdgdBfdgdfdgd7fdgd>fdgdfdgdfdgdXfdgdSfdgdfdgdfdgdfgfgddgddfdgdgdgdgdgdgddfdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgddjfddfgfgddgddjfddfddfdgdgdgdgdgdgddJfgfgdeZddddeZddddeZi Z	dgS )z3.8ZCONDOPZSIGNEDZXORZDOZLNOTELLIPSISZLSHIFTZCASEZINT_CONST_DECPLUSZPPHASHZDOUBLEZAND	PLUSEQUALZLBRACKETELSESEMIZNOTZCONTINUEZCONSTZSTRING_LITERALZENUMZMODZINLINEZFORZLONGZGTZSTRUCTCOMMAZTYPEDEFZRSHIFTZVOIDZRPARENZTYPEIDZANDEQUALZUNSIGNEDZSIZEOFZ
CHAR_CONSTZCHARZFLOAT_CONSTZINTZFLOATZ_BOOLZ_COMPLEXZGEZOREQUALZSTATICZRSHIFTEQUALZEXTERNZ
TIMESEQUALZARROWZWCHAR_CONSTZREGISTERZRBRACKETZDIVIDEZHEX_FLOAT_CONSTZINT_CONST_OCTZSWITCHZINT_CONST_HEXZDEFAULTZLSHIFTEQUALZEQUALSZBREAKZRESTRICTZVOLATILECOLONZLPARENZRETURNZLORZOFFSETOFRBRACEZLEZWHILEZIDZAUTOZSHORTLBRACEZUNIONZWSTRING_LITERALZPERIODZMODEQUALZPLUSPLUSMINUSZIFZLANDZ
MINUSEQUALZEQZLTZNEORZTIMESZ
MINUSMINUSZDIVEQUALZGOTOZINT_CONST_BINZXOREQUAL     Z	inclusiveZ	exclusive)ZINITIALZpplineZpppragmaa	  (?P<t_PPHASH>[ \t]*\#)|(?P<t_NEWLINE>\n+)|(?P<t_LBRACE>\{)|(?P<t_RBRACE>\})|(?P<t_FLOAT_CONST>((((([0-9]*\.[0-9]+)|([0-9]+\.))([eE][-+]?[0-9]+)?)|([0-9]+([eE][-+]?[0-9]+)))[FfLl]?))|(?P<t_HEX_FLOAT_CONST>(0[xX]([0-9a-fA-F]+|((([0-9a-fA-F]+)?\.[0-9a-fA-F]+)|([0-9a-fA-F]+\.)))([pP][+-]?[0-9]+)[FfLl]?))|(?P<t_INT_CONST_HEX>0[xX][0-9a-fA-F]+(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|(?P<t_INT_CONST_BIN>0[bB][01]+(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|(?P<t_BAD_CONST_OCT>0[0-7]*[89])|(?P<t_INT_CONST_OCT>0[0-7]*(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|(?P<t_INT_CONST_DEC>(0(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|([1-9][0-9]*(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?))|(?P<t_CHAR_CONST>'([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))')|(?P<t_WCHAR_CONST>L'([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))')|(?P<t_UNMATCHED_QUOTE>('([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*\n)|('([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*$))|(?P<t_BAD_CHAR_CONST>('([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))[^'
]+')|('')|('([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])[^'\n]*'))|(?P<t_WSTRING_LITERAL>L"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_BAD_STRING_LITERAL>"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_ID>[a-zA-Z_$][0-9a-zA-Z_$]*)|(?P<t_STRING_LITERAL>"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_ELLIPSIS>\.\.\.)|(?P<t_LOR>\|\|)|(?P<t_PLUSPLUS>\+\+)|(?P<t_LSHIFTEQUAL><<=)|(?P<t_OREQUAL>\|=)|(?P<t_PLUSEQUAL>\+=)|(?P<t_RSHIFTEQUAL>>>=)|(?P<t_TIMESEQUAL>\*=)|(?P<t_XOREQUAL>\^=)|(?P<t_ANDEQUAL>&=)|(?P<t_ARROW>->)|(?P<t_CONDOP>\?)|(?P<t_DIVEQUAL>/=)|(?P<t_EQ>==)|(?P<t_GE>>=)|(?P<t_LAND>&&)|(?P<t_LBRACKET>\[)|(?P<t_LE><=)|(?P<t_LPAREN>\()|(?P<t_LSHIFT><<)|(?P<t_MINUSEQUAL>-=)|(?P<t_MINUSMINUS>--)|(?P<t_MODEQUAL>%=)|(?P<t_NE>!=)|(?P<t_OR>\|)|(?P<t_PERIOD>\.)|(?P<t_PLUS>\+)|(?P<t_RBRACKET>\])|(?P<t_RPAREN>\))|(?P<t_RSHIFT>>>)|(?P<t_TIMES>\*)|(?P<t_XOR>\^)|(?P<t_AND>&)|(?P<t_COLON>:)|(?P<t_COMMA>,)|(?P<t_DIVIDE>/)|(?P<t_EQUALS>=)|(?P<t_GT>>)|(?P<t_LNOT>!)|(?P<t_LT><)|(?P<t_MINUS>-)|(?P<t_MOD>%)|(?P<t_NOT>~)|(?P<t_SEMI>;)NZt_PPHASHZ	t_NEWLINENEWLINEZt_LBRACEZt_RBRACEZt_FLOAT_CONSTZt_HEX_FLOAT_CONSTZt_INT_CONST_HEXZt_INT_CONST_BINZt_BAD_CONST_OCTZBAD_CONST_OCTZt_INT_CONST_OCTZt_INT_CONST_DECZt_CHAR_CONSTZt_WCHAR_CONSTZt_UNMATCHED_QUOTEZUNMATCHED_QUOTEZt_BAD_CHAR_CONSTZBAD_CHAR_CONSTZt_WSTRING_LITERALZt_BAD_STRING_LITERALZBAD_STRING_LITERALZt_IDaA  (?P<t_ppline_FILENAME>"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_ppline_LINE_NUMBER>(0(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|([1-9][0-9]*(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?))|(?P<t_ppline_NEWLINE>\n)|(?P<t_ppline_PPLINE>line)Zt_ppline_FILENAMEZFILENAMEZt_ppline_LINE_NUMBERZLINE_NUMBERZt_ppline_NEWLINEZt_ppline_PPLINEZPPLINEz(?P<t_pppragma_NEWLINE>\n)|(?P<t_pppragma_PPPRAGMA>pragma)|(?P<t_pppragma_STR>"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_pppragma_ID>[a-zA-Z_$][0-9a-zA-Z_$]*)Zt_pppragma_NEWLINEZt_pppragma_PPPRAGMAZPPPRAGMAZt_pppragma_STRZSTRZt_pppragma_IDz 	z$ 	<>.-{}();=+-*/$%@&^~!?:,0123456789Zt_errorZt_ppline_errorZt_pppragma_error)
Z_tabversionsetZ
_lextokensZ_lexreflagsZ_lexliteralsZ_lexstateinfoZ_lexstatereZ_lexstateignoreZ_lexstateerrorfZ_lexstateeoff r   r   /usr/lib/python3.6/lextab.py<module>   s     PK     ʽ\ 1    (  __pycache__/_build_tables.cpython-36.pycnu [        3
gwUS                 @   sv   d dl mZ edZejedd d dlZddgejd d < d dlmZ ej	d	d
d	d d dl
Z
d dlZd dlZdS )    )ASTCodeGeneratorz
_c_ast.cfgzc_ast.pywN.z..)c_parserTF)Zlex_optimizeZ
yacc_debugZyacc_optimize)Z_ast_genr   Zast_genZgenerateopensyspathZ	pycparserr   ZCParserZlextabZyacctabZc_ast r	   r	   #/usr/lib/python3.6/_build_tables.py<module>   s   PK     ʽ\$V0!  !  )  __pycache__/_ast_gen.cpython-36.opt-1.pycnu [        3
gwU!                 @   sh   d dl Z d dlmZ G dd deZG dd deZdZdZed	krdd dl	Z	ed
Z
e
jedd dS )    N)Templatec               @   s(   e Zd Zd	ddZd
ddZdd ZdS )ASTCodeGenerator
_c_ast.cfgc             C   s    || _ dd | j|D | _dS )zN Initialize the code generator from a configuration
            file.
        c             S   s   g | ]\}}t ||qS  )NodeCfg).0namecontentsr   r   /usr/lib/python3.6/_ast_gen.py
<listcomp>   s   z-ASTCodeGenerator.__init__.<locals>.<listcomp>N)cfg_filenameparse_cfgfilenode_cfg)selfr   r   r   r
   __init__   s    zASTCodeGenerator.__init__Nc             C   sH   t tj| jd}|t7 }x| jD ]}||j d 7 }q"W |j| dS )z< Generates the code into file, an open file buffer.
        )r   z

N)r   _PROLOGUE_COMMENTZ
substituter   _PROLOGUE_CODEr   generate_sourcewrite)r   filesrcr   r   r   r
   generate   s    
zASTCodeGenerator.generatec       
      c   s   t |d}x|D ]}|j }| s|jdr0q|jd}|jd}|jd}|dk sf||ksf||krvtd||f |d| }||d | }|rd	d
 |jdD ng }	||	fV  qW W dQ R X dS )ze Parse the configuration file and yield pairs of
            (name, contents) for each node.
        r#:[]   zInvalid line in %s:
%s
Nc             S   s   g | ]}|j  qS r   )strip)r   vr   r   r
   r   7   s    z2ASTCodeGenerator.parse_cfgfile.<locals>.<listcomp>,)openr   
startswithfindRuntimeErrorsplit)
r   filenameflineZcolon_iZ
lbracket_iZ
rbracket_ir   valZvallistr   r   r
   r   &   s    



zASTCodeGenerator.parse_cfgfile)r   )N)__name__
__module____qualname__r   r   r   r   r   r   r
   r      s   

r   c               @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )r   z Node configuration.

        name: node name
        contents: a list of contents - attributes and child nodes
        See comment at the top of the configuration file for details.
    c             C   s   || _ g | _g | _g | _g | _x^|D ]V}|jd}| jj| |jdrV| jj| q$|jdrn| jj| q$| jj| q$W d S )N*z**)r   all_entriesattrchild	seq_childrstripappendendswith)r   r   r	   entryZclean_entryr   r   r
   r   B   s    



zNodeCfg.__init__c             C   s,   | j  }|d| j  7 }|d| j  7 }|S )N
)	_gen_init_gen_children_gen_attr_names)r   r   r   r   r
   r   T   s    zNodeCfg.generate_sourcec             C   s   d| j  }| jrDdj| j}djdd | jD }|d7 }d| }nd}d}|d	| 7 }|d
| 7 }x$| jdg D ]}|d||f 7 }qrW |S )Nzclass %s(Node):
z, c             s   s   | ]}d j |V  qdS )z'{0}'N)format)r   er   r   r
   	<genexpr>_   s    z$NodeCfg._gen_init.<locals>.<genexpr>z, 'coord', '__weakref__'z(self, %s, coord=None)z'coord', '__weakref__'z(self, coord=None)z    __slots__ = (%s)
z    def __init__%s:
Zcoordz        self.%s = %s
)r   r.   join)r   r   argsslotsZarglistr   r   r   r
   r7   Z   s    

zNodeCfg._gen_initc             C   sl   d}| j r`|d7 }x | jD ]}|d	t|d 7 }qW x | jD ]}|dt|d 7 }q<W |d7 }n|d7 }|S )
Nz    def children(self):
z        nodelist = []
z&        if self.%(child)s is not None:z0 nodelist.append(("%(child)s", self.%(child)s))
)r0   zu        for i, child in enumerate(self.%(child)s or []):
            nodelist.append(("%(child)s[%%d]" %% i, child))
z        return tuple(nodelist)
z        return ()
zV        if self.%(child)s is not None: nodelist.append(("%(child)s", self.%(child)s))
)r.   r0   dictr1   )r   r   r0   r1   r   r   r
   r8   n   s     
zNodeCfg._gen_childrenc             C   s"   ddj dd | jD  d }|S )Nz    attr_names = ( c             s   s   | ]}d | V  qdS )z%r, Nr   )r   Znmr   r   r
   r<      s    z*NodeCfg._gen_attr_names.<locals>.<genexpr>))r=   r/   )r   r   r   r   r
   r9      s    zNodeCfg._gen_attr_namesN)	r*   r+   r,   __doc__r   r   r7   r8   r9   r   r   r   r
   r   ;   s   r   a  #-----------------------------------------------------------------
# ** ATTENTION **
# This code was automatically generated from the file:
# $cfg_filename
#
# Do not modify it directly. Modify the configuration file and
# run the generator again.
# ** ** *** ** **
#
# pycparser: c_ast.py
#
# AST Node classes.
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------

a  
import sys


class Node(object):
    __slots__ = ()
    """ Abstract base class for AST nodes.
    """
    def children(self):
        """ A sequence of all children that are Nodes
        """
        pass

    def show(self, buf=sys.stdout, offset=0, attrnames=False, nodenames=False, showcoord=False, _my_node_name=None):
        """ Pretty print the Node and all its attributes and
            children (recursively) to a buffer.

            buf:
                Open IO buffer into which the Node is printed.

            offset:
                Initial offset (amount of leading spaces)

            attrnames:
                True if you want to see the attribute names in
                name=value pairs. False to only see the values.

            nodenames:
                True if you want to see the actual node names
                within their parents.

            showcoord:
                Do you want the coordinates of each Node to be
                displayed.
        """
        lead = ' ' * offset
        if nodenames and _my_node_name is not None:
            buf.write(lead + self.__class__.__name__+ ' <' + _my_node_name + '>: ')
        else:
            buf.write(lead + self.__class__.__name__+ ': ')

        if self.attr_names:
            if attrnames:
                nvlist = [(n, getattr(self,n)) for n in self.attr_names]
                attrstr = ', '.join('%s=%s' % nv for nv in nvlist)
            else:
                vlist = [getattr(self, n) for n in self.attr_names]
                attrstr = ', '.join('%s' % v for v in vlist)
            buf.write(attrstr)

        if showcoord:
            buf.write(' (at %s)' % self.coord)
        buf.write('\n')

        for (child_name, child) in self.children():
            child.show(
                buf,
                offset=offset + 2,
                attrnames=attrnames,
                nodenames=nodenames,
                showcoord=showcoord,
                _my_node_name=child_name)


class NodeVisitor(object):
    """ A base NodeVisitor class for visiting c_ast nodes.
        Subclass it and define your own visit_XXX methods, where
        XXX is the class name you want to visit with these
        methods.

        For example:

        class ConstantVisitor(NodeVisitor):
            def __init__(self):
                self.values = []

            def visit_Constant(self, node):
                self.values.append(node.value)

        Creates a list of values of all the constant nodes
        encountered below the given node. To use it:

        cv = ConstantVisitor()
        cv.visit(node)

        Notes:

        *   generic_visit() will be called for AST nodes for which
            no visit_XXX method was defined.
        *   The children of nodes for which a visit_XXX was
            defined will not be visited - if you need this, call
            generic_visit() on the node.
            You can use:
                NodeVisitor.generic_visit(self, node)
        *   Modeled after Python's own AST visiting facilities
            (the ast module of Python 3.0)
    """
    def visit(self, node):
        """ Visit a node.
        """
        method = 'visit_' + node.__class__.__name__
        visitor = getattr(self, method, self.generic_visit)
        return visitor(node)

    def generic_visit(self, node):
        """ Called if no explicit visitor function exists for a
            node. Implements preorder visiting of the node.
        """
        for c_name, c in node.children():
            self.visit(c)


__main__z
_c_ast.cfgzc_ast.pyw)pprintstringr   objectr   r   r   r   r*   sysZast_genr   r!   r   r   r   r
   <module>   s   *brPK     ʽ\#t  #t     __pycache__/c_ast.cpython-36.pycnu [        3
]([                 @   s  d dl Z G dd deZG dd deZG dd deZG dd	 d	eZG d
d deZG dd deZG dd deZG dd deZ	G dd deZ
G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG d d! d!eZG d"d# d#eZG d$d% d%eZG d&d' d'eZG d(d) d)eZG d*d+ d+eZG d,d- d-eZG d.d/ d/eZG d0d1 d1eZG d2d3 d3eZG d4d5 d5eZG d6d7 d7eZG d8d9 d9eZG d:d; d;eZG d<d= d=eZG d>d? d?eZ G d@dA dAeZ!G dBdC dCeZ"G dDdE dEeZ#G dFdG dGeZ$G dHdI dIeZ%G dJdK dKeZ&G dLdM dMeZ'G dNdO dOeZ(G dPdQ dQeZ)G dRdS dSeZ*G dTdU dUeZ+G dVdW dWeZ,G dXdY dYeZ-G dZd[ d[eZ.G d\d] d]eZ/G d^d_ d_eZ0G d`da daeZ1dS )b    Nc               @   s0   e Zd Zf Zdd ZejdddddfddZdS )Nodec             C   s   dS )z3 A sequence of all children that are Nodes
        N )selfr   r   /usr/lib/python3.6/c_ast.pychildren   s    zNode.childrenr   FNc          	      s  d| }|r4|dk	r4|j | jj d | d  n|j | jj d   jr|r~ fdd jD }djd	d
 |D }	n( fdd jD }
djdd
 |
D }	|j |	 |r|j d j  |j d x. j D ]"\}}|j||d ||||d qW dS )a   Pretty print the Node and all its attributes and
            children (recursively) to a buffer.

            buf:
                Open IO buffer into which the Node is printed.

            offset:
                Initial offset (amount of leading spaces)

            attrnames:
                True if you want to see the attribute names in
                name=value pairs. False to only see the values.

            nodenames:
                True if you want to see the actual node names
                within their parents.

            showcoord:
                Do you want the coordinates of each Node to be
                displayed.
         Nz <z>: z: c                s   g | ]}|t  |fqS r   )getattr).0n)r   r   r   
<listcomp>=   s    zNode.show.<locals>.<listcomp>z, c             s   s   | ]}d | V  qdS )z%s=%sNr   )r	   Znvr   r   r   	<genexpr>>   s    zNode.show.<locals>.<genexpr>c                s   g | ]}t  |qS r   )r   )r	   r
   )r   r   r   r   @   s    c             s   s   | ]}d | V  qdS )z%sNr   )r	   vr   r   r   r   A   s    z (at %s)
   )offset	attrnames	nodenames	showcoord_my_node_name)write	__class____name__
attr_namesjoincoordr   show)r   Zbufr   r   r   r   r   ZleadZnvlistZattrstrZvlistZ
child_namechildr   )r   r   r      s,     

z	Node.show)r   
__module____qualname__	__slots__r   sysstdoutr   r   r   r   r   r      s   r   c               @   s    e Zd ZdZdd Zdd ZdS )NodeVisitora-   A base NodeVisitor class for visiting c_ast nodes.
        Subclass it and define your own visit_XXX methods, where
        XXX is the class name you want to visit with these
        methods.

        For example:

        class ConstantVisitor(NodeVisitor):
            def __init__(self):
                self.values = []

            def visit_Constant(self, node):
                self.values.append(node.value)

        Creates a list of values of all the constant nodes
        encountered below the given node. To use it:

        cv = ConstantVisitor()
        cv.visit(node)

        Notes:

        *   generic_visit() will be called for AST nodes for which
            no visit_XXX method was defined.
        *   The children of nodes for which a visit_XXX was
            defined will not be visited - if you need this, call
            generic_visit() on the node.
            You can use:
                NodeVisitor.generic_visit(self, node)
        *   Modeled after Python's own AST visiting facilities
            (the ast module of Python 3.0)
    c             C   s"   d|j j }t| || j}||S )z Visit a node.
        Zvisit_)r   r   r   generic_visit)r   nodemethodZvisitorr   r   r   visits   s    zNodeVisitor.visitc             C   s$   x|j  D ]\}}| j| q
W dS )zy Called if no explicit visitor function exists for a
            node. Implements preorder visiting of the node.
        N)r   r&   )r   r$   Zc_namecr   r   r   r#   z   s    zNodeVisitor.generic_visitN)r   r   r   __doc__r&   r#   r   r   r   r   r"   R   s    r"   c               @   s&   e Zd ZdZdddZd	d
 ZdZdS )	ArrayDecltypedim	dim_qualsr   __weakref__Nc             C   s   || _ || _|| _|| _d S )N)r*   r+   r,   r   )r   r*   r+   r,   r   r   r   r   __init__   s    zArrayDecl.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )Nr*   r+   )r*   appendr+   tuple)r   nodelistr   r   r   r      s    
 
 zArrayDecl.children)r*   r+   r,   r   r-   )N)r,   )r   r   r   r   r.   r   r   r   r   r   r   r)      s   
r)   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )ArrayRefname	subscriptr   r-   Nc             C   s   || _ || _|| _d S )N)r3   r4   r   )r   r3   r4   r   r   r   r   r.      s    zArrayRef.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )Nr3   r4   )r3   r/   r4   r0   )r   r1   r   r   r   r      s    
 
 zArrayRef.children)r3   r4   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   r2      s   
r2   c               @   s&   e Zd ZdZdddZd	d
 ZdZdS )
Assignmentoplvaluervaluer   r-   Nc             C   s   || _ || _|| _|| _d S )N)r6   r7   r8   r   )r   r6   r7   r8   r   r   r   r   r.      s    zAssignment.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )Nr7   r8   )r7   r/   r8   r0   )r   r1   r   r   r   r      s    
 
 zAssignment.children)r6   r7   r8   r   r-   )N)r6   )r   r   r   r   r.   r   r   r   r   r   r   r5      s   
r5   c               @   s&   e Zd ZdZdddZd	d
 ZdZdS )BinaryOpr6   leftrightr   r-   Nc             C   s   || _ || _|| _|| _d S )N)r6   r:   r;   r   )r   r6   r:   r;   r   r   r   r   r.      s    zBinaryOp.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )Nr:   r;   )r:   r/   r;   r0   )r   r1   r   r   r   r      s    
 
 zBinaryOp.children)r6   r:   r;   r   r-   )N)r6   )r   r   r   r   r.   r   r   r   r   r   r   r9      s   
r9   c               @   s&   e Zd ZdZd	ddZdd Zf ZdS )
Breakr   r-   Nc             C   s
   || _ d S )N)r   )r   r   r   r   r   r.      s    zBreak.__init__c             C   s   f S )Nr   )r   r   r   r   r      s    zBreak.children)r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   r<      s   
r<   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )Caseexprstmtsr   r-   Nc             C   s   || _ || _|| _d S )N)r>   r?   r   )r   r>   r?   r   r   r   r   r.      s    zCase.__init__c             C   sT   g }| j d k	r|jd| j f x,t| jp*g D ]\}}|jd| |f q.W t|S )Nr>   z	stmts[%d])r>   r/   	enumerater?   r0   )r   r1   ir   r   r   r   r      s    
 zCase.children)r>   r?   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   r=      s   
r=   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )Castto_typer>   r   r-   Nc             C   s   || _ || _|| _d S )N)rC   r>   r   )r   rC   r>   r   r   r   r   r.      s    zCast.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )NrC   r>   )rC   r/   r>   r0   )r   r1   r   r   r   r      s    
 
 zCast.children)rC   r>   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rB      s   
rB   c               @   s&   e Zd Zd	Zd
ddZdd Zf ZdS )Compoundblock_itemsr   r-   Nc             C   s   || _ || _d S )N)rE   r   )r   rE   r   r   r   r   r.      s    zCompound.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nzblock_items[%d])r@   rE   r/   r0   )r   r1   rA   r   r   r   r   r      s    zCompound.children)rE   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rD      s   
rD   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )CompoundLiteralr*   initr   r-   Nc             C   s   || _ || _|| _d S )N)r*   rG   r   )r   r*   rG   r   r   r   r   r.      s    zCompoundLiteral.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )Nr*   rG   )r*   r/   rG   r0   )r   r1   r   r   r   r      s    
 
 zCompoundLiteral.children)r*   rG   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rF      s   
rF   c               @   s&   e Zd Zd
ZdddZdd	 ZdZdS )Constantr*   valuer   r-   Nc             C   s   || _ || _|| _d S )N)r*   rI   r   )r   r*   rI   r   r   r   r   r.   	  s    zConstant.__init__c             C   s   g }t |S )N)r0   )r   r1   r   r   r   r     s    zConstant.children)r*   rI   r   r-   )N)r*   rI   )r   r   r   r   r.   r   r   r   r   r   r   rH     s   
rH   c               @   s&   e Zd ZdZd	ddZdd Zf ZdS )
Continuer   r-   Nc             C   s
   || _ d S )N)r   )r   r   r   r   r   r.     s    zContinue.__init__c             C   s   f S )Nr   )r   r   r   r   r     s    zContinue.children)r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rJ     s   
rJ   c            	   @   s&   e Zd ZdZdddZdd ZdZd
S )Declr3   qualsstoragefuncspecr*   rG   bitsizer   r-   Nc	       	      C   s4   || _ || _|| _|| _|| _|| _|| _|| _d S )N)r3   rL   rM   rN   r*   rG   rO   r   )	r   r3   rL   rM   rN   r*   rG   rO   r   r   r   r   r.      s    zDecl.__init__c             C   sZ   g }| j d k	r|jd| j f | jd k	r8|jd| jf | jd k	rR|jd| jf t|S )Nr*   rG   rO   )r*   r/   rG   rO   r0   )r   r1   r   r   r   r   *  s    
 
 
 zDecl.children)	r3   rL   rM   rN   r*   rG   rO   r   r-   )N)r3   rL   rM   rN   )r   r   r   r   r.   r   r   r   r   r   r   rK     s   

rK   c               @   s&   e Zd Zd	Zd
ddZdd Zf ZdS )DeclListdeclsr   r-   Nc             C   s   || _ || _d S )N)rQ   r   )r   rQ   r   r   r   r   r.   5  s    zDeclList.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nz	decls[%d])r@   rQ   r/   r0   )r   r1   rA   r   r   r   r   r   9  s    zDeclList.children)rQ   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rP   3  s   
rP   c               @   s&   e Zd Zd	Zd
ddZdd Zf ZdS )Defaultr?   r   r-   Nc             C   s   || _ || _d S )N)r?   r   )r   r?   r   r   r   r   r.   C  s    zDefault.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nz	stmts[%d])r@   r?   r/   r0   )r   r1   rA   r   r   r   r   r   G  s    zDefault.children)r?   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rR   A  s   
rR   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )DoWhilecondstmtr   r-   Nc             C   s   || _ || _|| _d S )N)rT   rU   r   )r   rT   rU   r   r   r   r   r.   Q  s    zDoWhile.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )NrT   rU   )rT   r/   rU   r0   )r   r1   r   r   r   r   V  s    
 
 zDoWhile.children)rT   rU   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rS   O  s   
rS   c               @   s&   e Zd ZdZd	ddZdd Zf ZdS )
EllipsisParamr   r-   Nc             C   s
   || _ d S )N)r   )r   r   r   r   r   r.   `  s    zEllipsisParam.__init__c             C   s   f S )Nr   )r   r   r   r   r   c  s    zEllipsisParam.children)r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rV   ^  s   
rV   c               @   s&   e Zd ZdZd	ddZdd Zf ZdS )
EmptyStatementr   r-   Nc             C   s
   || _ d S )N)r   )r   r   r   r   r   r.   j  s    zEmptyStatement.__init__c             C   s   f S )Nr   )r   r   r   r   r   m  s    zEmptyStatement.children)r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rW   h  s   
rW   c               @   s&   e Zd Zd
ZdddZdd	 ZdZdS )Enumr3   valuesr   r-   Nc             C   s   || _ || _|| _d S )N)r3   rY   r   )r   r3   rY   r   r   r   r   r.   t  s    zEnum.__init__c             C   s&   g }| j d k	r|jd| j f t|S )NrY   )rY   r/   r0   )r   r1   r   r   r   r   y  s    
 zEnum.children)r3   rY   r   r-   )N)r3   )r   r   r   r   r.   r   r   r   r   r   r   rX   r  s   
rX   c               @   s&   e Zd Zd
ZdddZdd	 ZdZdS )
Enumeratorr3   rI   r   r-   Nc             C   s   || _ || _|| _d S )N)r3   rI   r   )r   r3   rI   r   r   r   r   r.     s    zEnumerator.__init__c             C   s&   g }| j d k	r|jd| j f t|S )NrI   )rI   r/   r0   )r   r1   r   r   r   r     s    
 zEnumerator.children)r3   rI   r   r-   )N)r3   )r   r   r   r   r.   r   r   r   r   r   r   rZ     s   
rZ   c               @   s&   e Zd Zd	Zd
ddZdd Zf ZdS )EnumeratorListenumeratorsr   r-   Nc             C   s   || _ || _d S )N)r\   r   )r   r\   r   r   r   r   r.     s    zEnumeratorList.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nzenumerators[%d])r@   r\   r/   r0   )r   r1   rA   r   r   r   r   r     s    zEnumeratorList.children)r\   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   r[     s   
r[   c               @   s&   e Zd Zd	Zd
ddZdd Zf ZdS )ExprListexprsr   r-   Nc             C   s   || _ || _d S )N)r^   r   )r   r^   r   r   r   r   r.     s    zExprList.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nz	exprs[%d])r@   r^   r/   r0   )r   r1   rA   r   r   r   r   r     s    zExprList.children)r^   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   r]     s   
r]   c               @   s&   e Zd Zd	Zd
ddZdd Zf ZdS )FileASTextr   r-   Nc             C   s   || _ || _d S )N)r`   r   )r   r`   r   r   r   r   r.     s    zFileAST.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nzext[%d])r@   r`   r/   r0   )r   r1   rA   r   r   r   r   r     s    zFileAST.children)r`   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   r_     s   
r_   c               @   s&   e Zd ZdZddd	Zd
d Zf ZdS )ForrG   rT   nextrU   r   r-   Nc             C   s"   || _ || _|| _|| _|| _d S )N)rG   rT   rb   rU   r   )r   rG   rT   rb   rU   r   r   r   r   r.     s
    zFor.__init__c             C   st   g }| j d k	r|jd| j f | jd k	r8|jd| jf | jd k	rR|jd| jf | jd k	rl|jd| jf t|S )NrG   rT   rb   rU   )rG   r/   rT   rb   rU   r0   )r   r1   r   r   r   r     s    
 
 
 
 zFor.children)rG   rT   rb   rU   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   ra     s   
ra   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )FuncCallr3   argsr   r-   Nc             C   s   || _ || _|| _d S )N)r3   rd   r   )r   r3   rd   r   r   r   r   r.     s    zFuncCall.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )Nr3   rd   )r3   r/   rd   r0   )r   r1   r   r   r   r     s    
 
 zFuncCall.children)r3   rd   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rc     s   
rc   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )FuncDeclrd   r*   r   r-   Nc             C   s   || _ || _|| _d S )N)rd   r*   r   )r   rd   r*   r   r   r   r   r.     s    zFuncDecl.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )Nrd   r*   )rd   r/   r*   r0   )r   r1   r   r   r   r     s    
 
 zFuncDecl.children)rd   r*   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   re     s   
re   c               @   s&   e Zd ZdZdddZd	d
 Zf ZdS )FuncDefdeclparam_declsbodyr   r-   Nc             C   s   || _ || _|| _|| _d S )N)rg   rh   ri   r   )r   rg   rh   ri   r   r   r   r   r.     s    zFuncDef.__init__c             C   sn   g }| j d k	r|jd| j f | jd k	r8|jd| jf x,t| jpDg D ]\}}|jd| |f qHW t|S )Nrg   ri   zparam_decls[%d])rg   r/   ri   r@   rh   r0   )r   r1   rA   r   r   r   r   r     s    
 
 zFuncDef.children)rg   rh   ri   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rf     s   
rf   c               @   s&   e Zd Zd	Zd
ddZdd ZdZdS )Gotor3   r   r-   Nc             C   s   || _ || _d S )N)r3   r   )r   r3   r   r   r   r   r.     s    zGoto.__init__c             C   s   g }t |S )N)r0   )r   r1   r   r   r   r     s    zGoto.children)r3   r   r-   )N)r3   )r   r   r   r   r.   r   r   r   r   r   r   rj     s   
rj   c               @   s&   e Zd Zd	Zd
ddZdd ZdZdS )IDr3   r   r-   Nc             C   s   || _ || _d S )N)r3   r   )r   r3   r   r   r   r   r.   	  s    zID.__init__c             C   s   g }t |S )N)r0   )r   r1   r   r   r   r     s    zID.children)r3   r   r-   )N)r3   )r   r   r   r   r.   r   r   r   r   r   r   rk     s   
rk   c               @   s&   e Zd Zd	Zd
ddZdd ZdZdS )IdentifierTypenamesr   r-   Nc             C   s   || _ || _d S )N)rm   r   )r   rm   r   r   r   r   r.     s    zIdentifierType.__init__c             C   s   g }t |S )N)r0   )r   r1   r   r   r   r     s    zIdentifierType.children)rm   r   r-   )N)rm   )r   r   r   r   r.   r   r   r   r   r   r   rl     s   
rl   c               @   s&   e Zd ZdZdddZd	d
 Zf ZdS )IfrT   iftrueiffalser   r-   Nc             C   s   || _ || _|| _|| _d S )N)rT   ro   rp   r   )r   rT   ro   rp   r   r   r   r   r.   !  s    zIf.__init__c             C   sZ   g }| j d k	r|jd| j f | jd k	r8|jd| jf | jd k	rR|jd| jf t|S )NrT   ro   rp   )rT   r/   ro   rp   r0   )r   r1   r   r   r   r   '  s    
 
 
 zIf.children)rT   ro   rp   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rn     s   
rn   c               @   s&   e Zd Zd	Zd
ddZdd Zf ZdS )InitListr^   r   r-   Nc             C   s   || _ || _d S )N)r^   r   )r   r^   r   r   r   r   r.   2  s    zInitList.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nz	exprs[%d])r@   r^   r/   r0   )r   r1   rA   r   r   r   r   r   6  s    zInitList.children)r^   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rq   0  s   
rq   c               @   s&   e Zd Zd
ZdddZdd	 ZdZdS )Labelr3   rU   r   r-   Nc             C   s   || _ || _|| _d S )N)r3   rU   r   )r   r3   rU   r   r   r   r   r.   @  s    zLabel.__init__c             C   s&   g }| j d k	r|jd| j f t|S )NrU   )rU   r/   r0   )r   r1   r   r   r   r   E  s    
 zLabel.children)r3   rU   r   r-   )N)r3   )r   r   r   r   r.   r   r   r   r   r   r   rr   >  s   
rr   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )NamedInitializerr3   r>   r   r-   Nc             C   s   || _ || _|| _d S )N)r3   r>   r   )r   r3   r>   r   r   r   r   r.   N  s    zNamedInitializer.__init__c             C   sT   g }| j d k	r|jd| j f x,t| jp*g D ]\}}|jd| |f q.W t|S )Nr>   zname[%d])r>   r/   r@   r3   r0   )r   r1   rA   r   r   r   r   r   S  s    
 zNamedInitializer.children)r3   r>   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rs   L  s   
rs   c               @   s&   e Zd Zd	Zd
ddZdd Zf ZdS )	ParamListparamsr   r-   Nc             C   s   || _ || _d S )N)ru   r   )r   ru   r   r   r   r   r.   ^  s    zParamList.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nz
params[%d])r@   ru   r/   r0   )r   r1   rA   r   r   r   r   r   b  s    zParamList.children)ru   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rt   \  s   
rt   c               @   s&   e Zd Zd
ZdddZdd	 ZdZdS )PtrDeclrL   r*   r   r-   Nc             C   s   || _ || _|| _d S )N)rL   r*   r   )r   rL   r*   r   r   r   r   r.   l  s    zPtrDecl.__init__c             C   s&   g }| j d k	r|jd| j f t|S )Nr*   )r*   r/   r0   )r   r1   r   r   r   r   q  s    
 zPtrDecl.children)rL   r*   r   r-   )N)rL   )r   r   r   r   r.   r   r   r   r   r   r   rv   j  s   
rv   c               @   s&   e Zd Zd	Zd
ddZdd Zf ZdS )Returnr>   r   r-   Nc             C   s   || _ || _d S )N)r>   r   )r   r>   r   r   r   r   r.   z  s    zReturn.__init__c             C   s&   g }| j d k	r|jd| j f t|S )Nr>   )r>   r/   r0   )r   r1   r   r   r   r   ~  s    
 zReturn.children)r>   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   rw   x  s   
rw   c               @   s&   e Zd Zd
ZdddZdd	 ZdZdS )Structr3   rQ   r   r-   Nc             C   s   || _ || _|| _d S )N)r3   rQ   r   )r   r3   rQ   r   r   r   r   r.     s    zStruct.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nz	decls[%d])r@   rQ   r/   r0   )r   r1   rA   r   r   r   r   r     s    zStruct.children)r3   rQ   r   r-   )N)r3   )r   r   r   r   r.   r   r   r   r   r   r   rx     s   
rx   c               @   s&   e Zd ZdZdddZd	d
 ZdZdS )	StructRefr3   r*   fieldr   r-   Nc             C   s   || _ || _|| _|| _d S )N)r3   r*   rz   r   )r   r3   r*   rz   r   r   r   r   r.     s    zStructRef.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )Nr3   rz   )r3   r/   rz   r0   )r   r1   r   r   r   r     s    
 
 zStructRef.children)r3   r*   rz   r   r-   )N)r*   )r   r   r   r   r.   r   r   r   r   r   r   ry     s   
ry   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )SwitchrT   rU   r   r-   Nc             C   s   || _ || _|| _d S )N)rT   rU   r   )r   rT   rU   r   r   r   r   r.     s    zSwitch.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )NrT   rU   )rT   r/   rU   r0   )r   r1   r   r   r   r     s    
 
 zSwitch.children)rT   rU   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   r{     s   
r{   c               @   s&   e Zd ZdZdddZd	d
 Zf ZdS )	TernaryOprT   ro   rp   r   r-   Nc             C   s   || _ || _|| _|| _d S )N)rT   ro   rp   r   )r   rT   ro   rp   r   r   r   r   r.     s    zTernaryOp.__init__c             C   sZ   g }| j d k	r|jd| j f | jd k	r8|jd| jf | jd k	rR|jd| jf t|S )NrT   ro   rp   )rT   r/   ro   rp   r0   )r   r1   r   r   r   r     s    
 
 
 zTernaryOp.children)rT   ro   rp   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   r|     s   
r|   c               @   s&   e Zd ZdZdddZd	d
 ZdZdS )TypeDecldeclnamerL   r*   r   r-   Nc             C   s   || _ || _|| _|| _d S )N)r~   rL   r*   r   )r   r~   rL   r*   r   r   r   r   r.     s    zTypeDecl.__init__c             C   s&   g }| j d k	r|jd| j f t|S )Nr*   )r*   r/   r0   )r   r1   r   r   r   r     s    
 zTypeDecl.children)r~   rL   r*   r   r-   )N)r~   rL   )r   r   r   r   r.   r   r   r   r   r   r   r}     s   
r}   c               @   s&   e Zd ZdZddd	Zd
d ZdZdS )Typedefr3   rL   rM   r*   r   r-   Nc             C   s"   || _ || _|| _|| _|| _d S )N)r3   rL   rM   r*   r   )r   r3   rL   rM   r*   r   r   r   r   r.     s
    zTypedef.__init__c             C   s&   g }| j d k	r|jd| j f t|S )Nr*   )r*   r/   r0   )r   r1   r   r   r   r     s    
 zTypedef.children)r3   rL   rM   r*   r   r-   )N)r3   rL   rM   )r   r   r   r   r.   r   r   r   r   r   r   r     s   
r   c               @   s&   e Zd ZdZdddZd	d
 ZdZdS )Typenamer3   rL   r*   r   r-   Nc             C   s   || _ || _|| _|| _d S )N)r3   rL   r*   r   )r   r3   rL   r*   r   r   r   r   r.     s    zTypename.__init__c             C   s&   g }| j d k	r|jd| j f t|S )Nr*   )r*   r/   r0   )r   r1   r   r   r   r     s    
 zTypename.children)r3   rL   r*   r   r-   )N)r3   rL   )r   r   r   r   r.   r   r   r   r   r   r   r     s   
r   c               @   s&   e Zd Zd
ZdddZdd	 ZdZdS )UnaryOpr6   r>   r   r-   Nc             C   s   || _ || _|| _d S )N)r6   r>   r   )r   r6   r>   r   r   r   r   r.     s    zUnaryOp.__init__c             C   s&   g }| j d k	r|jd| j f t|S )Nr>   )r>   r/   r0   )r   r1   r   r   r   r     s    
 zUnaryOp.children)r6   r>   r   r-   )N)r6   )r   r   r   r   r.   r   r   r   r   r   r   r     s   
r   c               @   s&   e Zd Zd
ZdddZdd	 ZdZdS )Unionr3   rQ   r   r-   Nc             C   s   || _ || _|| _d S )N)r3   rQ   r   )r   r3   rQ   r   r   r   r   r.     s    zUnion.__init__c             C   s:   g }x,t | jpg D ]\}}|jd| |f qW t|S )Nz	decls[%d])r@   rQ   r/   r0   )r   r1   rA   r   r   r   r   r     s    zUnion.children)r3   rQ   r   r-   )N)r3   )r   r   r   r   r.   r   r   r   r   r   r   r      s   
r   c               @   s&   e Zd Zd
ZdddZdd	 Zf ZdS )WhilerT   rU   r   r-   Nc             C   s   || _ || _|| _d S )N)rT   rU   r   )r   rT   rU   r   r   r   r   r.     s    zWhile.__init__c             C   s@   g }| j d k	r|jd| j f | jd k	r8|jd| jf t|S )NrT   rU   )rT   r/   rU   r0   )r   r1   r   r   r   r     s    
 
 zWhile.children)rT   rU   r   r-   )N)r   r   r   r   r.   r   r   r   r   r   r   r     s   
r   )2r    objectr   r"   r)   r2   r5   r9   r<   r=   rB   rD   rF   rH   rJ   rK   rP   rR   rS   rV   rW   rX   rZ   r[   r]   r_   ra   rc   re   rf   rj   rk   rl   rn   rq   rr   rs   rt   rv   rw   rx   ry   r{   r|   r}   r   r   r   r   r   r   r   r   r   <module>   s`   <0



PK     ʽ\>2U  U  '  __pycache__/lextab.cpython-36.opt-1.pycnu [        3
]N                 @   s  d Z eddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`f`ZdaZdbZdcdddddeZdfdgdhdfdidjfdkdMfdldGfdmd(fdgdgdgdgdgdgdgdgdgdnd8fdgdgdgdgdgdgdgdod;fdgdgdgdgdgdgdgdpd_fdgdgdgdgdgdgdgdqdrfdsd9fdgdgdgdgdgdgdgdtd	fdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdud&fdgdgdgdgdgdgdvd4fdgdgdgdgdgdgdwdxfdgdgdgdgdgdgdgdgdgdgdgdgdgdgdydzfdgdgdgdgdgdgdgdgdgdgd{dOfdgdgdgdgdgdgd|d}fdgdgdgdgdgdgdgdgdgdgdgdgdgd~dJfdgdfdgdgdgdgdgdgdgdfdgdEfdgdRfdgd=fdgd.fdgdfdgd0fdgd2fdgd`fdgd#fdgd3fdgdfdgd]fdgdWfdgd-fdgdUfdgdfdgdHfdgdCfdgdfdgdVfdgd\fdgdQfdgdYfdgdZfdgdPfdgd
fdgd6fdgd!fdgdfdgd[fdgdfdgdfdgdBfdgdfdgd7fdgd>fdgdfdgdfdgdXfdgdSfdgdfdgdfdgdfgfgddgddfdgdgdgdgdgdgddfdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgddjfddfgfgddgddjfddfddfdgdgdgdgdgdgddJfgfgdeZddddeZddddeZi Z	dgS )z3.8ZCONDOPZSIGNEDZXORZDOZLNOTELLIPSISZLSHIFTZCASEZINT_CONST_DECPLUSZPPHASHZDOUBLEZAND	PLUSEQUALZLBRACKETELSESEMIZNOTZCONTINUEZCONSTZSTRING_LITERALZENUMZMODZINLINEZFORZLONGZGTZSTRUCTCOMMAZTYPEDEFZRSHIFTZVOIDZRPARENZTYPEIDZANDEQUALZUNSIGNEDZSIZEOFZ
CHAR_CONSTZCHARZFLOAT_CONSTZINTZFLOATZ_BOOLZ_COMPLEXZGEZOREQUALZSTATICZRSHIFTEQUALZEXTERNZ
TIMESEQUALZARROWZWCHAR_CONSTZREGISTERZRBRACKETZDIVIDEZHEX_FLOAT_CONSTZINT_CONST_OCTZSWITCHZINT_CONST_HEXZDEFAULTZLSHIFTEQUALZEQUALSZBREAKZRESTRICTZVOLATILECOLONZLPARENZRETURNZLORZOFFSETOFRBRACEZLEZWHILEZIDZAUTOZSHORTLBRACEZUNIONZWSTRING_LITERALZPERIODZMODEQUALZPLUSPLUSMINUSZIFZLANDZ
MINUSEQUALZEQZLTZNEORZTIMESZ
MINUSMINUSZDIVEQUALZGOTOZINT_CONST_BINZXOREQUAL     Z	inclusiveZ	exclusive)ZINITIALZpplineZpppragmaa	  (?P<t_PPHASH>[ \t]*\#)|(?P<t_NEWLINE>\n+)|(?P<t_LBRACE>\{)|(?P<t_RBRACE>\})|(?P<t_FLOAT_CONST>((((([0-9]*\.[0-9]+)|([0-9]+\.))([eE][-+]?[0-9]+)?)|([0-9]+([eE][-+]?[0-9]+)))[FfLl]?))|(?P<t_HEX_FLOAT_CONST>(0[xX]([0-9a-fA-F]+|((([0-9a-fA-F]+)?\.[0-9a-fA-F]+)|([0-9a-fA-F]+\.)))([pP][+-]?[0-9]+)[FfLl]?))|(?P<t_INT_CONST_HEX>0[xX][0-9a-fA-F]+(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|(?P<t_INT_CONST_BIN>0[bB][01]+(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|(?P<t_BAD_CONST_OCT>0[0-7]*[89])|(?P<t_INT_CONST_OCT>0[0-7]*(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|(?P<t_INT_CONST_DEC>(0(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|([1-9][0-9]*(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?))|(?P<t_CHAR_CONST>'([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))')|(?P<t_WCHAR_CONST>L'([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))')|(?P<t_UNMATCHED_QUOTE>('([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*\n)|('([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*$))|(?P<t_BAD_CHAR_CONST>('([^'\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))[^'
]+')|('')|('([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])[^'\n]*'))|(?P<t_WSTRING_LITERAL>L"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_BAD_STRING_LITERAL>"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_ID>[a-zA-Z_$][0-9a-zA-Z_$]*)|(?P<t_STRING_LITERAL>"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_ELLIPSIS>\.\.\.)|(?P<t_LOR>\|\|)|(?P<t_PLUSPLUS>\+\+)|(?P<t_LSHIFTEQUAL><<=)|(?P<t_OREQUAL>\|=)|(?P<t_PLUSEQUAL>\+=)|(?P<t_RSHIFTEQUAL>>>=)|(?P<t_TIMESEQUAL>\*=)|(?P<t_XOREQUAL>\^=)|(?P<t_ANDEQUAL>&=)|(?P<t_ARROW>->)|(?P<t_CONDOP>\?)|(?P<t_DIVEQUAL>/=)|(?P<t_EQ>==)|(?P<t_GE>>=)|(?P<t_LAND>&&)|(?P<t_LBRACKET>\[)|(?P<t_LE><=)|(?P<t_LPAREN>\()|(?P<t_LSHIFT><<)|(?P<t_MINUSEQUAL>-=)|(?P<t_MINUSMINUS>--)|(?P<t_MODEQUAL>%=)|(?P<t_NE>!=)|(?P<t_OR>\|)|(?P<t_PERIOD>\.)|(?P<t_PLUS>\+)|(?P<t_RBRACKET>\])|(?P<t_RPAREN>\))|(?P<t_RSHIFT>>>)|(?P<t_TIMES>\*)|(?P<t_XOR>\^)|(?P<t_AND>&)|(?P<t_COLON>:)|(?P<t_COMMA>,)|(?P<t_DIVIDE>/)|(?P<t_EQUALS>=)|(?P<t_GT>>)|(?P<t_LNOT>!)|(?P<t_LT><)|(?P<t_MINUS>-)|(?P<t_MOD>%)|(?P<t_NOT>~)|(?P<t_SEMI>;)NZt_PPHASHZ	t_NEWLINENEWLINEZt_LBRACEZt_RBRACEZt_FLOAT_CONSTZt_HEX_FLOAT_CONSTZt_INT_CONST_HEXZt_INT_CONST_BINZt_BAD_CONST_OCTZBAD_CONST_OCTZt_INT_CONST_OCTZt_INT_CONST_DECZt_CHAR_CONSTZt_WCHAR_CONSTZt_UNMATCHED_QUOTEZUNMATCHED_QUOTEZt_BAD_CHAR_CONSTZBAD_CHAR_CONSTZt_WSTRING_LITERALZt_BAD_STRING_LITERALZBAD_STRING_LITERALZt_IDaA  (?P<t_ppline_FILENAME>"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_ppline_LINE_NUMBER>(0(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|([1-9][0-9]*(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?))|(?P<t_ppline_NEWLINE>\n)|(?P<t_ppline_PPLINE>line)Zt_ppline_FILENAMEZFILENAMEZt_ppline_LINE_NUMBERZLINE_NUMBERZt_ppline_NEWLINEZt_ppline_PPLINEZPPLINEz(?P<t_pppragma_NEWLINE>\n)|(?P<t_pppragma_PPPRAGMA>pragma)|(?P<t_pppragma_STR>"([^"\\\n]|(\\(([a-zA-Z._~!=&\^\-\\?'"])|(\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_pppragma_ID>[a-zA-Z_$][0-9a-zA-Z_$]*)Zt_pppragma_NEWLINEZt_pppragma_PPPRAGMAZPPPRAGMAZt_pppragma_STRZSTRZt_pppragma_IDz 	z$ 	<>.-{}();=+-*/$%@&^~!?:,0123456789Zt_errorZt_ppline_errorZt_pppragma_error)
Z_tabversionsetZ
_lextokensZ_lexreflagsZ_lexliteralsZ_lexstateinfoZ_lexstatereZ_lexstateignoreZ_lexstateerrorfZ_lexstateeoff r   r   /usr/lib/python3.6/lextab.py<module>   s     PK     ʽ\AB	  	  /  __pycache__/ast_transforms.cpython-36.opt-1.pycnu [        3
gwU                 @   s    d dl mZ dd Zdd ZdS )   )c_astc             C   s   t | jtjs| S tjg | jj}d}xh| jjD ]\}t |tjtjfrj|jj| t	||j |jd }q0|dkr|jj| q0|j
j| q0W || _| S )a   The 'case' statements in a 'switch' come out of parsing with one
        child node, so subsequent statements are just tucked to the parent
        Compound. Additionally, consecutive (fall-through) case statements
        come out messy. This is a peculiarity of the C grammar. The following:

            switch (myvar) {
                case 10:
                    k = 10;
                    p = k + 1;
                    return 10;
                case 20:
                case 30:
                    return 20;
                default:
                    break;
            }

        Creates this tree (pseudo-dump):

            Switch
                ID: myvar
                Compound:
                    Case 10:
                        k = 10
                    p = k + 1
                    return 10
                    Case 20:
                        Case 30:
                            return 20
                    Default:
                        break

        The goal of this transform it to fix this mess, turning it into the
        following:

            Switch
                ID: myvar
                Compound:
                    Case 10:
                        k = 10
                        p = k + 1
                        return 10
                    Case 20:
                    Case 30:
                        return 20
                    Default:
                        break

        A fixed AST node is returned. The argument may be modified.
    Nr   )
isinstanceZstmtr   ZCompoundZcoordZblock_itemsCaseDefaultappend_extract_nested_casestmts)Zswitch_nodeZnew_compoundZ	last_caseZchild r
   $/usr/lib/python3.6/ast_transforms.pyfix_switch_cases   s    4r   c             C   s:   t | jd tjtjfr6|j| jj  t|d | dS )z Recursively extract consecutive Case statements that are made nested
        by the parser and add them to the stmts_list.
        r   Nr   )r   r	   r   r   r   r   popr   )Z	case_nodeZ
stmts_listr
   r
   r   r   b   s    r   N) r   r   r   r
   r
   r
   r   <module>
   s   UPK     ʽ\(31CL  L  )  __pycache__/c_parser.cpython-36.opt-1.pycnu [        3
]                 @   s   d dl Z d dlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
 ddlmZ G dd	 d	eZed
kr|d dlZd dlZd dlZdS )    N)yacc   )c_ast)CLexer)	PLYParserCoord
ParseError)fix_switch_casesc               @   sD  e Zd ZdCddZdDd	d
Zdd Zdd Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ ZdEd%d&Zd'd( Zd)d* ZdPZd>d? Zd@dA ZdBdC ZdDdE ZdFdG ZdHdI ZdJdK ZdLdM ZdNdO ZdPdQ ZdRdS Z dTdU Z!dVdW Z"dXdY Z#dZd[ Z$d\d] Z%d^d_ Z&d`da Z'dbdc Z(ddde Z)dfdg Z*dhdi Z+djdk Z,dldm Z-dndo Z.dpdq Z/drds Z0dtdu Z1dvdw Z2dxdy Z3dzd{ Z4d|d} Z5d~d Z6dd Z7dd Z8dd Z9dd Z:dd Z;dd Z<dd Z=dd Z>dd Z?dd Z@dd ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWddÄ ZXddń ZYddǄ ZZddɄ Z[dd˄ Z\dd̈́ Z]ddτ Z^ddф Z_ddӄ Z`ddՄ Zaddׄ Zbddل Zcddۄ Zddd݄ Zedd߄ Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd Zpdd Zqdd Zrdd Zsdd Ztdd Zudd Zvd d Zwdd Zxdd Zydd Zzdd	 Z{d
d Z|dd Z}dd Z~dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Zd@dA ZdBS (Q  CParserTpycparser.lextabpycparser.yacctabF c       	      C   s   t | j| j| j| jd| _| jj|||d | jj| _ddddddd	d
ddddddg}x|D ]}| j| q\W t	j	| d||||d| _
t g| _d| _dS )a   Create a new CParser.

            Some arguments for controlling the debug/optimization
            level of the parser are provided. The defaults are
            tuned for release/performance mode.
            The simple rules for using them are:
            *) When tweaking CParser/CLexer, set these to False
            *) When releasing a stable parser, set to True

            lex_optimize:
                Set to False when you're modifying the lexer.
                Otherwise, changes in the lexer won't be used, if
                some lextab.py file exists.
                When releasing with a stable lexer, set to True
                to save the re-generation of the lexer table on
                each run.

            lextab:
                Points to the lex table that's used for optimized
                mode. Only if you're modifying the lexer and want
                some tests to avoid re-generating the table, make
                this point to a local lex table file (that's been
                earlier generated with lex_optimize=True)

            yacc_optimize:
                Set to False when you're modifying the parser.
                Otherwise, changes in the parser won't be used, if
                some parsetab.py file exists.
                When releasing with a stable parser, set to True
                to save the re-generation of the parser table on
                each run.

            yacctab:
                Points to the yacc table that's used for optimized
                mode. Only if you're modifying the parser, make
                this point to a local yacc table file

            yacc_debug:
                Generate a parser.out file that explains how yacc
                built the parsing table from the grammar.

            taboutputdir:
                Set this parameter to control the location of generated
                lextab and yacctab files.
        )Z
error_funcZon_lbrace_funcZon_rbrace_funcZtype_lookup_func)optimizelextab	outputdirZabstract_declaratorZassignment_expressionZdeclaration_listZdeclaration_specifiersZdesignationZ
expressionZidentifier_listZinit_declarator_listZinitializer_listZparameter_type_listZspecifier_qualifier_listZblock_item_listZtype_qualifier_listZstruct_declarator_listZtranslation_unit_or_empty)modulestartdebugr   Z	tabmoduler   N)r   _lex_error_func_lex_on_lbrace_func_lex_on_rbrace_func_lex_type_lookup_funcclexZbuildtokensZ_create_opt_ruler   cparserdict_scope_stack_last_yielded_token)	selfZlex_optimizer   Zyacc_optimizeZyacctabZ
yacc_debugZtaboutputdirZrules_with_optZrule r   /usr/lib/python3.6/c_parser.py__init__   sF    5




zCParser.__init__r   c             C   s6   || j _| j j  t g| _d| _| jj|| j |dS )a&   Parses C code and returns an AST.

            text:
                A string containing the C source code

            filename:
                Name of the file being parsed (for meaningful
                error messages)

            debuglevel:
                Debug level to yacc
        N)inputZlexerr   )r   filenameZreset_linenor   r   r   r   parse)r   textr#   Z
debuglevelr   r   r    r$   ~   s    

zCParser.parsec             C   s   | j jt  d S )N)r   appendr   )r   r   r   r    _push_scope   s    zCParser._push_scopec             C   s   | j j  d S )N)r   pop)r   r   r   r    
_pop_scope   s    zCParser._pop_scopec             C   s4   | j d j|ds"| jd| | d| j d |< dS )zC Add a new typedef name (ie a TYPEID) to the current scope
        r   Tz;Typedef %r previously declared as non-typedef in this scopeNr*   )r   get_parse_error)r   namecoordr   r   r    _add_typedef_name   s
    
zCParser._add_typedef_namec             C   s4   | j d j|dr"| jd| | d| j d |< dS )ze Add a new object, function, or enum member name (ie an ID) to the
            current scope
        r   Fz;Non-typedef %r previously declared as typedef in this scopeNr*   r*   )r   r+   r,   )r   r-   r.   r   r   r    _add_identifier   s
    
zCParser._add_identifierc             C   s.   x(t | jD ]}|j|}|dk	r|S qW dS )z8 Is *name* a typedef-name in the current scope?
        NF)reversedr   r+   )r   r-   ZscopeZin_scoper   r   r    _is_type_in_scope   s
    
 zCParser._is_type_in_scopec             C   s   | j || j|| d S )N)r,   _coord)r   msglinecolumnr   r   r    r      s    zCParser._lex_error_funcc             C   s   | j   d S )N)r'   )r   r   r   r    r      s    zCParser._lex_on_lbrace_funcc             C   s   | j   d S )N)r)   )r   r   r   r    r      s    zCParser._lex_on_rbrace_funcc             C   s   | j |}|S )z Looks up types that were previously defined with
            typedef.
            Passed to the lexer for recognizing identifiers that
            are types.
        )r2   )r   r-   Zis_typer   r   r    r      s    
zCParser._lex_type_lookup_funcc             C   s   | j jS )z We need access to yacc's lookahead token in certain cases.
            This is the last token yacc requested from the lexer, so we
            ask the lexer.
        )r   Z
last_token)r   r   r   r    _get_yacc_lookahead_token   s    z!CParser._get_yacc_lookahead_tokenc             C   sd   |}|}x|j r|j }q
W t|tjr0||_ |S |}xt|j tjsL|j }q6W |j |_ ||_ |S dS )z Tacks a type modifier on a declarator, and returns
            the modified declarator.

            Note: the declarator and modifier may be modified
        N)type
isinstancer   TypeDecl)r   declmodifierZmodifier_headZmodifier_tailZ	decl_tailr   r   r    _type_modify_decl   s    

zCParser._type_modify_declc             C   s   |}xt |tjs|j}qW |j|_|j|_x>|D ]6}t |tjs2t|dkr^| j	d|j
 q2||_|S q2W |st |jtjs| j	d|j
 tjdg|j
d|_n tjdd |D |d j
d|_|S )	z- Fixes a declaration. Modifies decl.
        r   z Invalid multiple types specifiedzMissing type in declarationint)r.   c             S   s   g | ]}|j D ]}|qqS r   )names).0idr-   r   r   r    
<listcomp>U  s    z/CParser._fix_decl_name_type.<locals>.<listcomp>r   )r9   r   r:   r8   declnamer-   qualsIdentifierTypelenr,   r.   FuncDecl)r   r;   typenamer8   Ztnr   r   r    _fix_decl_name_type,  s.    


zCParser._fix_decl_name_typec             C   s(   |pt g g g g d}|| jd| |S )a   Declaration specifiers are represented by a dictionary
            with the entries:
            * qual: a list of type qualifiers
            * storage: a list of storage type qualifiers
            * type: a list of type specifiers
            * function: a list of function specifiers

            This method is given a declaration specifier, and a
            new specifier of a given kind.
            Returns the declaration specifier, with the new
            specifier incorporated.
        )qualstorager8   functionr   )r   insert)r   ZdeclspecZnewspecZkindspecr   r   r    _add_declaration_specifierY  s    z"CParser._add_declaration_specifierc             C   s@  d|d k}g }|d j ddk	r&n4|d d dkrt|d dk svt|d d jd	ksv| j|d d jd  rd
}x"|d D ]}t|dr|j}P qW | jd| tj|d d jd dd|d d jd|d d< |d d= nrt	|d d tj
tjtjfsZ|d d }xt	|tjs.|j}qW |jdkrZ|d d jd |_|d d= x|D ]}	|rtjd|d |d |	d |	d jd}
n<tjd|d |d |d |	d |	j d|	j d|	d jd}
t	|
jtj
tjtjfr|
}n| j|
|d }|r,|r| j|j|j n| j|j|j |j| q`W |S )z Builds a list of declarations all sharing the given specifiers.
            If typedef_namespace is true, each declared name is added
            to the "typedef namespace", which also includes objects,
            functions, and enum constants.
        ZtypedefrK   r   bitsizeNr;   r8      r   ?r.   zInvalid declaration)rC   r8   rD   r.   rJ   )r-   rD   rK   r8   r.   rL   init)r-   rD   rK   funcspecr8   rS   rP   r.   r*   r*   r*   r*   r*   r*   r*   )r+   rF   r?   r2   hasattrr.   r,   r   r:   r9   StructUnionrE   r8   rC   ZTypedefDeclrI   r/   r-   r0   r&   )r   rN   declstypedef_namespaceZ
is_typedefZdeclarationsr.   tZdecls_0_tailr;   declarationZ
fixed_declr   r   r    _build_declarationsj  sl    &


zCParser._build_declarationsc             C   s2   | j |t|ddgddd }tj||||jdS )z' Builds a function definition.
        N)r;   rS   T)rN   rY   rZ   r   )r;   param_declsbodyr.   )r]   r   r   ZFuncDefr.   )r   rN   r;   r^   r_   r\   r   r   r    _build_function_definition  s    z"CParser._build_function_definitionc             C   s   |dkrt jS t jS dS )z` Given a token (either STRUCT or UNION), selects the
            appropriate AST class.
        structN)r   rV   rW   )r   tokenr   r   r    _select_struct_union_class  s    z"CParser._select_struct_union_classleftLORLANDORXORANDEQNEGTGELTLERSHIFTLSHIFTPLUSMINUSTIMESDIVIDEMODc             C   s2   |d dkrt jg |d< nt j|d |d< dS )zh translation_unit_or_empty   : translation_unit
                                        | empty
        r   Nr   )r   ZFileAST)r   pr   r   r    p_translation_unit_or_empty  s    z#CParser.p_translation_unit_or_emptyc             C   s   |d |d< dS )z4 translation_unit    : external_declaration
        r   r   Nr   )r   rw   r   r   r    p_translation_unit_1  s    zCParser.p_translation_unit_1c             C   s.   |d dk	r|d j |d  |d |d< dS )zE translation_unit    : translation_unit external_declaration
        rQ   Nr   r   )extend)r   rw   r   r   r    p_translation_unit_2  s    zCParser.p_translation_unit_2c             C   s   |d g|d< dS )z7 external_declaration    : function_definition
        r   r   Nr   )r   rw   r   r   r    p_external_declaration_1  s    z CParser.p_external_declaration_1c             C   s   |d |d< dS )z/ external_declaration    : declaration
        r   r   Nr   )r   rw   r   r   r    p_external_declaration_2  s    z CParser.p_external_declaration_2c             C   s   |d |d< dS )z0 external_declaration    : pp_directive
        r   r   Nr   )r   rw   r   r   r    p_external_declaration_3  s    z CParser.p_external_declaration_3c             C   s   d|d< dS )z( external_declaration    : SEMI
        Nr   r   )r   rw   r   r   r    p_external_declaration_4  s    z CParser.p_external_declaration_4c             C   s   | j d| j|jd dS )z  pp_directive  : PPHASH
        zDirectives not supported yetr   N)r,   r3   lineno)r   rw   r   r   r    p_pp_directive$  s    zCParser.p_pp_directivec             C   sP   t g g tjdg| j|jddgg d}| j||d |d |d d|d< d	S )
zR function_definition : declarator declaration_list_opt compound_statement
        r>   r   )r.   )rJ   rK   r8   rL   rQ      )rN   r;   r^   r_   r   N)r   r   rE   r3   r   r`   )r   rw   rN   r   r   r    p_function_definition_1-  s    zCParser.p_function_definition_1c             C   s.   |d }| j ||d |d |d d|d< dS )zi function_definition : declaration_specifiers declarator declaration_list_opt compound_statement
        r   rQ   r      )rN   r;   r^   r_   r   N)r`   )r   rw   rN   r   r   r    p_function_definition_2>  s    zCParser.p_function_definition_2c             C   s   |d |d< dS )a
   statement   : labeled_statement
                        | expression_statement
                        | compound_statement
                        | selection_statement
                        | iteration_statement
                        | jump_statement
        r   r   Nr   )r   rw   r   r   r    p_statementI  s    zCParser.p_statementc          
   C   s   |d }|d dkr|d }t jt jt jf}t|dkrzt|d |rzt jd|d |d |d |d dd|d jd	g}q| j|t	ddd
gdd}n| j||d dd}||d< dS )zE decl_body : declaration_specifiers init_declarator_list_opt
        r   rQ   Nr8   r   rJ   rK   rL   )r-   rD   rK   rT   r8   rS   rP   r.   )r;   rS   T)rN   rY   rZ   )
r   rV   rW   EnumrF   r9   rX   r.   r]   r   )r   rw   rN   ZtyZs_u_or_erY   r   r   r    p_decl_body\  s.    
zCParser.p_decl_bodyc             C   s   |d |d< dS )z& declaration : decl_body SEMI
        r   r   Nr   )r   rw   r   r   r    p_declaration  s    zCParser.p_declarationc             C   s,   t |dkr|d n|d |d  |d< dS )zj declaration_list    : declaration
                                | declaration_list declaration
        rQ   r   r   N)rF   )r   rw   r   r   r    p_declaration_list  s    zCParser.p_declaration_listc             C   s   | j |d |d d|d< dS )zM declaration_specifiers  : type_qualifier declaration_specifiers_opt
        rQ   r   rJ   r   N)rO   )r   rw   r   r   r    p_declaration_specifiers_1  s    z"CParser.p_declaration_specifiers_1c             C   s   | j |d |d d|d< dS )zM declaration_specifiers  : type_specifier declaration_specifiers_opt
        rQ   r   r8   r   N)rO   )r   rw   r   r   r    p_declaration_specifiers_2  s    z"CParser.p_declaration_specifiers_2c             C   s   | j |d |d d|d< dS )zV declaration_specifiers  : storage_class_specifier declaration_specifiers_opt
        rQ   r   rK   r   N)rO   )r   rw   r   r   r    p_declaration_specifiers_3  s    z"CParser.p_declaration_specifiers_3c             C   s   | j |d |d d|d< dS )zQ declaration_specifiers  : function_specifier declaration_specifiers_opt
        rQ   r   rL   r   N)rO   )r   rw   r   r   r    p_declaration_specifiers_4  s    z"CParser.p_declaration_specifiers_4c             C   s   |d |d< dS )z storage_class_specifier : AUTO
                                    | REGISTER
                                    | STATIC
                                    | EXTERN
                                    | TYPEDEF
        r   r   Nr   )r   rw   r   r   r    p_storage_class_specifier  s    z!CParser.p_storage_class_specifierc             C   s   |d |d< dS )z& function_specifier  : INLINE
        r   r   Nr   )r   rw   r   r   r    p_function_specifier  s    zCParser.p_function_specifierc             C   s(   t j|d g| j|jdd|d< dS )a   type_specifier  : VOID
                            | _BOOL
                            | CHAR
                            | SHORT
                            | INT
                            | LONG
                            | FLOAT
                            | DOUBLE
                            | _COMPLEX
                            | SIGNED
                            | UNSIGNED
        r   )r.   r   N)r   rE   r3   r   )r   rw   r   r   r    p_type_specifier_1  s    zCParser.p_type_specifier_1c             C   s   |d |d< dS )z type_specifier  : typedef_name
                            | enum_specifier
                            | struct_or_union_specifier
        r   r   Nr   )r   rw   r   r   r    p_type_specifier_2  s    zCParser.p_type_specifier_2c             C   s   |d |d< dS )zo type_qualifier  : CONST
                            | RESTRICT
                            | VOLATILE
        r   r   Nr   )r   rw   r   r   r    p_type_qualifier  s    zCParser.p_type_qualifierc             C   s0   t |dkr|d |d g n|d g|d< dS )z init_declarator_list    : init_declarator
                                    | init_declarator_list COMMA init_declarator
        r   r   r   r   N)rF   )r   rw   r   r   r    p_init_declarator_list_1  s    z CParser.p_init_declarator_list_1c             C   s   t d|d dg|d< dS )z6 init_declarator_list    : EQUALS initializer
        NrQ   )r;   rS   r   )r   )r   rw   r   r   r    p_init_declarator_list_2  s    z CParser.p_init_declarator_list_2c             C   s   t |d ddg|d< dS )z7 init_declarator_list    : abstract_declarator
        r   N)r;   rS   r   )r   )r   rw   r   r   r    p_init_declarator_list_3  s    z CParser.p_init_declarator_list_3c             C   s,   t |d t|dkr|d ndd|d< dS )zb init_declarator : declarator
                            | declarator EQUALS initializer
        r   rQ   r   N)r;   rS   r   )r   rF   )r   rw   r   r   r    p_init_declarator   s    zCParser.p_init_declaratorc             C   s   | j |d |d d|d< dS )zS specifier_qualifier_list    : type_qualifier specifier_qualifier_list_opt
        rQ   r   rJ   r   N)rO   )r   rw   r   r   r    p_specifier_qualifier_list_1  s    z$CParser.p_specifier_qualifier_list_1c             C   s   | j |d |d d|d< dS )zS specifier_qualifier_list    : type_specifier specifier_qualifier_list_opt
        rQ   r   r8   r   N)rO   )r   rw   r   r   r    p_specifier_qualifier_list_2  s    z$CParser.p_specifier_qualifier_list_2c             C   s4   | j |d }||d d| j|jdd|d< dS )z{ struct_or_union_specifier   : struct_or_union ID
                                        | struct_or_union TYPEID
        r   rQ   N)r-   rY   r.   r   )rc   r3   r   )r   rw   klassr   r   r    p_struct_or_union_specifier_1  s
    z%CParser.p_struct_or_union_specifier_1c             C   s4   | j |d }|d|d | j|jdd|d< dS )zd struct_or_union_specifier : struct_or_union brace_open struct_declaration_list brace_close
        r   Nr   rQ   )r-   rY   r.   r   )rc   r3   r   )r   rw   r   r   r   r    p_struct_or_union_specifier_2  s
    z%CParser.p_struct_or_union_specifier_2c             C   s8   | j |d }||d |d | j|jdd|d< dS )z struct_or_union_specifier   : struct_or_union ID brace_open struct_declaration_list brace_close
                                        | struct_or_union TYPEID brace_open struct_declaration_list brace_close
        r   rQ   r   )r-   rY   r.   r   N)rc   r3   r   )r   rw   r   r   r   r    p_struct_or_union_specifier_3&  s
    z%CParser.p_struct_or_union_specifier_3c             C   s   |d |d< dS )zF struct_or_union : STRUCT
                            | UNION
        r   r   Nr   )r   rw   r   r   r    p_struct_or_union0  s    zCParser.p_struct_or_unionc             C   s,   t |dkr|d n|d |d  |d< dS )z struct_declaration_list     : struct_declaration
                                        | struct_declaration_list struct_declaration
        rQ   r   r   N)rF   )r   rw   r   r   r    p_struct_declaration_list8  s    z!CParser.p_struct_declaration_listc             C   s   |d }|d dk	r(| j ||d d}nht|d dkrx|d d }t|tjrV|}n
tj|}| j |t|dgd}n| j |tdddgd}||d< dS )	zW struct_declaration : specifier_qualifier_list struct_declarator_list_opt SEMI
        r   rQ   N)rN   rY   r8   r   )r;   )r;   rS   )r]   rF   r9   r   ZNoderE   r   )r   rw   rN   rY   ZnodeZ	decl_typer   r   r    p_struct_declaration_1>  s"    
zCParser.p_struct_declaration_1c             C   s(   | j |d t|d ddgd|d< dS )zP struct_declaration : specifier_qualifier_list abstract_declarator SEMI
        r   rQ   N)r;   rS   )rN   rY   r   )r]   r   )r   rw   r   r   r    p_struct_declaration_2d  s    
zCParser.p_struct_declaration_2c             C   s0   t |dkr|d |d g n|d g|d< dS )z struct_declarator_list  : struct_declarator
                                    | struct_declarator_list COMMA struct_declarator
        r   r   r   r   N)rF   )r   rw   r   r   r    p_struct_declarator_listr  s    z CParser.p_struct_declarator_listc             C   s   |d dd|d< dS )z( struct_declarator : declarator
        r   N)r;   rP   r   r   )r   rw   r   r   r    p_struct_declarator_1{  s    zCParser.p_struct_declarator_1c             C   sD   t |dkr$|d |d d|d< ntjddd|d d|d< dS )z struct_declarator   : declarator COLON constant_expression
                                | COLON constant_expression
        r   r   )r;   rP   r   NrQ   )rF   r   r:   )r   rw   r   r   r    p_struct_declarator_2  s    zCParser.p_struct_declarator_2c             C   s&   t j|d d| j|jd|d< dS )zM enum_specifier  : ENUM ID
                            | ENUM TYPEID
        rQ   Nr   r   )r   r   r3   r   )r   rw   r   r   r    p_enum_specifier_1  s    zCParser.p_enum_specifier_1c             C   s&   t jd|d | j|jd|d< dS )zG enum_specifier  : ENUM brace_open enumerator_list brace_close
        Nr   r   r   )r   r   r3   r   )r   rw   r   r   r    p_enum_specifier_2  s    zCParser.p_enum_specifier_2c             C   s*   t j|d |d | j|jd|d< dS )z enum_specifier  : ENUM ID brace_open enumerator_list brace_close
                            | ENUM TYPEID brace_open enumerator_list brace_close
        rQ   r   r   r   N)r   r   r3   r   )r   rw   r   r   r    p_enum_specifier_3  s    zCParser.p_enum_specifier_3c             C   sh   t |dkr*tj|d g|d j|d< n:t |dkrD|d |d< n |d jj|d  |d |d< dS )z enumerator_list : enumerator
                            | enumerator_list COMMA
                            | enumerator_list COMMA enumerator
        rQ   r   r   r   N)rF   r   ZEnumeratorListr.   Zenumeratorsr&   )r   rw   r   r   r    p_enumerator_list  s    zCParser.p_enumerator_listc             C   sj   t |dkr,tj|d d| j|jd}n"tj|d |d | j|jd}| j|j|j ||d< dS )zR enumerator  : ID
                        | ID EQUALS constant_expression
        rQ   r   Nr   r   )rF   r   Z
Enumeratorr3   r   r0   r-   r.   )r   rw   Z
enumeratorr   r   r    p_enumerator  s    zCParser.p_enumeratorc             C   s   |d |d< dS )z) declarator  : direct_declarator
        r   r   Nr   )r   rw   r   r   r    p_declarator_1  s    zCParser.p_declarator_1c             C   s   | j |d |d |d< dS )z1 declarator  : pointer direct_declarator
        rQ   r   r   N)r=   )r   rw   r   r   r    p_declarator_2  s    zCParser.p_declarator_2c             C   s:   t j|d dd| j|jdd}| j||d |d< dS )z& declarator  : pointer TYPEID
        rQ   N)rC   r8   rD   r.   r   r   )r   r:   r3   r   r=   )r   rw   r;   r   r   r    p_declarator_3  s    zCParser.p_declarator_3c             C   s*   t j|d dd| j|jdd|d< dS )z" direct_declarator   : ID
        r   N)rC   r8   rD   r.   r   )r   r:   r3   r   )r   rw   r   r   r    p_direct_declarator_1  s
    zCParser.p_direct_declarator_1c             C   s   |d |d< dS )z8 direct_declarator   : LPAREN declarator RPAREN
        rQ   r   Nr   )r   rw   r   r   r    p_direct_declarator_2  s    zCParser.p_direct_declarator_2c             C   sf   t |dkr|d ng pg }tjdt |dkr6|d n|d ||d jd}| j|d |d|d< dS )	zu direct_declarator   : direct_declarator LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKET
           r   Nr   r   )r8   dim	dim_qualsr.   )r;   r<   r   )rF   r   	ArrayDeclr.   r=   )r   rw   rD   arrr   r   r    p_direct_declarator_3  s    zCParser.p_direct_declarator_3c             C   s^   dd |d |d gD }dd |D }t jd|d ||d jd	}| j|d |d
|d< dS )z direct_declarator   : direct_declarator LBRACKET STATIC type_qualifier_list_opt assignment_expression RBRACKET
                                | direct_declarator LBRACKET type_qualifier_list STATIC assignment_expression RBRACKET
        c             S   s    g | ]}t |tr|n|gqS r   )r9   list)r@   itemr   r   r    rB     s   z1CParser.p_direct_declarator_4.<locals>.<listcomp>r   r   c             S   s"   g | ]}|D ]}|d k	r|qqS )Nr   )r@   ZsublistrJ   r   r   r    rB     s    
Nr   r   )r8   r   r   r.   )r;   r<   r   )r   r   r.   r=   )r   rw   Zlisted_qualsr   r   r   r   r    p_direct_declarator_4  s    zCParser.p_direct_declarator_4c             C   s^   t jdt j|d | j|jd|d dkr4|d ng |d jd}| j|d |d|d< dS )za direct_declarator   : direct_declarator LBRACKET type_qualifier_list_opt TIMES RBRACKET
        Nr   r   r   )r8   r   r   r.   )r;   r<   r   )r   r   IDr3   r   r.   r=   )r   rw   r   r   r   r    p_direct_declarator_5  s    zCParser.p_direct_declarator_5c             C   s|   t j|d d|d jd}| j jdkrb|jdk	rbx.|jjD ]"}t|t jrNP | j	|j
|j q<W | j|d |d|d< dS )z direct_declarator   : direct_declarator LPAREN parameter_type_list RPAREN
                                | direct_declarator LPAREN identifier_list_opt RPAREN
        r   Nr   )argsr8   r.   LBRACE)r;   r<   r   )r   rG   r.   r7   r8   r   paramsr9   EllipsisParamr0   r-   r=   )r   rw   funcZparamr   r   r    p_direct_declarator_6  s    
 zCParser.p_direct_declarator_6c             C   sr   | j |jd}tj|d pg d|d}t|dkrf|d }x|jdk	rP|j}q>W ||_|d |d< n||d< dS )zm pointer : TIMES type_qualifier_list_opt
                    | TIMES type_qualifier_list_opt pointer
        r   rQ   N)rD   r8   r.   r   r   )r3   r   r   ZPtrDeclrF   r8   )r   rw   r.   Znested_typeZ	tail_typer   r   r    	p_pointer(  s    
zCParser.p_pointerc             C   s0   t |dkr|d gn|d |d g |d< dS )zs type_qualifier_list : type_qualifier
                                | type_qualifier_list type_qualifier
        rQ   r   r   N)rF   )r   rw   r   r   r    p_type_qualifier_listF  s    zCParser.p_type_qualifier_listc             C   s>   t |dkr.|d jjtj| j|jd |d |d< dS )zn parameter_type_list : parameter_list
                                | parameter_list COMMA ELLIPSIS
        rQ   r   r   r   N)rF   r   r&   r   r   r3   r   )r   rw   r   r   r    p_parameter_type_listL  s    "zCParser.p_parameter_type_listc             C   sN   t |dkr*tj|d g|d j|d< n |d jj|d  |d |d< dS )zz parameter_list  : parameter_declaration
                            | parameter_list COMMA parameter_declaration
        rQ   r   r   r   N)rF   r   	ParamListr.   r   r&   )r   rw   r   r   r    p_parameter_listU  s    zCParser.p_parameter_listc             C   sX   |d }|d s2t jdg| j|jddg|d< | j|t|d dgdd |d< d	S )
zE parameter_declaration   : declaration_specifiers declarator
        r   r8   r>   )r.   rQ   )r;   )rN   rY   r   N)r   rE   r3   r   r]   r   )r   rw   rN   r   r   r    p_parameter_declaration_1_  s    z!CParser.p_parameter_declaration_1c             C   s   |d }|d s2t jdg| j|jddg|d< t|d dkrt|d d jdkr| j|d d jd r| j|t|d ddgd	d }nHt j	d
|d |d pt j
ddd| j|jdd}|d }| j||}||d< dS )zR parameter_declaration   : declaration_specifiers abstract_declarator_opt
        r   r8   r>   )r.   r   rQ   N)r;   rS   )rN   rY   r   rJ   )r-   rD   r8   r.   r*   r*   )r   rE   r3   r   rF   r?   r2   r]   r   Typenamer:   rI   )r   rw   rN   r;   rH   r   r   r    p_parameter_declaration_2j  s"    &z!CParser.p_parameter_declaration_2c             C   sN   t |dkr*tj|d g|d j|d< n |d jj|d  |d |d< dS )ze identifier_list : identifier
                            | identifier_list COMMA identifier
        rQ   r   r   r   N)rF   r   r   r.   r   r&   )r   rw   r   r   r    p_identifier_list  s    zCParser.p_identifier_listc             C   s   |d |d< dS )z- initializer : assignment_expression
        r   r   Nr   )r   rw   r   r   r    p_initializer_1  s    zCParser.p_initializer_1c             C   s:   |d dkr*t jg | j|jd|d< n|d |d< dS )z initializer : brace_open initializer_list_opt brace_close
                        | brace_open initializer_list COMMA brace_close
        rQ   Nr   r   )r   InitListr3   r   )r   rw   r   r   r    p_initializer_2  s    zCParser.p_initializer_2c             C   s   t |dkrN|d dkr |d ntj|d |d }tj|g|d j|d< nD|d dkrb|d ntj|d |d }|d jj| |d |d< dS )z initializer_list    : designation_opt initializer
                                | initializer_list COMMA designation_opt initializer
        r   r   NrQ   r   r   )rF   r   ZNamedInitializerr   r.   exprsr&   )r   rw   rS   r   r   r    p_initializer_list  s    ((zCParser.p_initializer_listc             C   s   |d |d< dS )z. designation : designator_list EQUALS
        r   r   Nr   )r   rw   r   r   r    p_designation  s    zCParser.p_designationc             C   s0   t |dkr|d gn|d |d g |d< dS )z_ designator_list : designator
                            | designator_list designator
        rQ   r   r   N)rF   )r   rw   r   r   r    p_designator_list  s    zCParser.p_designator_listc             C   s   |d |d< dS )zi designator  : LBRACKET constant_expression RBRACKET
                        | PERIOD identifier
        rQ   r   Nr   )r   rw   r   r   r    p_designator  s    zCParser.p_designatorc             C   sT   t jd|d d |d p$t jddd| j|jdd}| j||d d |d< dS )	zH type_name   : specifier_qualifier_list abstract_declarator_opt
        r   r   rJ   rQ   N)r-   rD   r8   r.   r8   r   )r   r   r:   r3   r   rI   )r   rw   rH   r   r   r    p_type_name  s    	
zCParser.p_type_namec             C   s(   t jddd}| j||d d|d< dS )z+ abstract_declarator     : pointer
        Nr   )r;   r<   r   )r   r:   r=   )r   rw   Z	dummytyper   r   r    p_abstract_declarator_1  s    zCParser.p_abstract_declarator_1c             C   s   | j |d |d |d< dS )zF abstract_declarator     : pointer direct_abstract_declarator
        rQ   r   r   N)r=   )r   rw   r   r   r    p_abstract_declarator_2  s    zCParser.p_abstract_declarator_2c             C   s   |d |d< dS )z> abstract_declarator     : direct_abstract_declarator
        r   r   Nr   )r   rw   r   r   r    p_abstract_declarator_3  s    zCParser.p_abstract_declarator_3c             C   s   |d |d< dS )zA direct_abstract_declarator  : LPAREN abstract_declarator RPAREN rQ   r   Nr   )r   rw   r   r   r    p_direct_abstract_declarator_1  s    z&CParser.p_direct_abstract_declarator_1c             C   s6   t jd|d g |d jd}| j|d |d|d< dS )zn direct_abstract_declarator  : direct_abstract_declarator LBRACKET assignment_expression_opt RBRACKET
        Nr   r   )r8   r   r   r.   )r;   r<   r   )r   r   r.   r=   )r   rw   r   r   r   r    p_direct_abstract_declarator_2  s    z&CParser.p_direct_abstract_declarator_2c             C   s4   t jt jddd|d g | j|jdd|d< dS )zS direct_abstract_declarator  : LBRACKET assignment_expression_opt RBRACKET
        NrQ   r   )r8   r   r   r.   r   )r   r   r:   r3   r   )r   rw   r   r   r    p_direct_abstract_declarator_3  s
    z&CParser.p_direct_abstract_declarator_3c             C   sJ   t jdt j|d | j|jdg |d jd}| j|d |d|d< dS )zZ direct_abstract_declarator  : direct_abstract_declarator LBRACKET TIMES RBRACKET
        Nr   r   )r8   r   r   r.   )r;   r<   r   )r   r   r   r3   r   r.   r=   )r   rw   r   r   r   r    p_direct_abstract_declarator_4  s    z&CParser.p_direct_abstract_declarator_4c             C   sH   t jt jdddt j|d | j|jdg | j|jdd|d< dS )z? direct_abstract_declarator  : LBRACKET TIMES RBRACKET
        Nr   r   )r8   r   r   r.   r   )r   r   r:   r   r3   r   )r   rw   r   r   r    p_direct_abstract_declarator_5  s
    z&CParser.p_direct_abstract_declarator_5c             C   s4   t j|d d|d jd}| j|d |d|d< dS )zh direct_abstract_declarator  : direct_abstract_declarator LPAREN parameter_type_list_opt RPAREN
        r   Nr   )r   r8   r.   )r;   r<   r   )r   rG   r.   r=   )r   rw   r   r   r   r    p_direct_abstract_declarator_6  s
    z&CParser.p_direct_abstract_declarator_6c             C   s2   t j|d t jddd| j|jdd|d< dS )zM direct_abstract_declarator  : LPAREN parameter_type_list_opt RPAREN
        rQ   Nr   )r   r8   r.   r   )r   rG   r:   r3   r   )r   rw   r   r   r    p_direct_abstract_declarator_7  s    z&CParser.p_direct_abstract_declarator_7c             C   s(   t |d tr|d n|d g|d< dS )zG block_item  : declaration
                        | statement
        r   r   N)r9   r   )r   rw   r   r   r    p_block_item*  s    zCParser.p_block_itemc             C   s:   t |dks|d dgkr"|d n|d |d  |d< dS )z_ block_item_list : block_item
                            | block_item_list block_item
        rQ   Nr   r   )rF   )r   rw   r   r   r    p_block_item_list2  s    zCParser.p_block_item_listc             C   s&   t j|d | j|jdd|d< dS )zA compound_statement : brace_open block_item_list_opt brace_close rQ   r   )Zblock_itemsr.   r   N)r   ZCompoundr3   r   )r   rw   r   r   r    p_compound_statement_19  s    zCParser.p_compound_statement_1c             C   s*   t j|d |d | j|jd|d< dS )z( labeled_statement : ID COLON statement r   r   r   N)r   ZLabelr3   r   )r   rw   r   r   r    p_labeled_statement_1?  s    zCParser.p_labeled_statement_1c             C   s,   t j|d |d g| j|jd|d< dS )z> labeled_statement : CASE constant_expression COLON statement rQ   r   r   r   N)r   ZCaser3   r   )r   rw   r   r   r    p_labeled_statement_2C  s    zCParser.p_labeled_statement_2c             C   s&   t j|d g| j|jd|d< dS )z- labeled_statement : DEFAULT COLON statement r   r   r   N)r   ZDefaultr3   r   )r   rw   r   r   r    p_labeled_statement_3G  s    zCParser.p_labeled_statement_3c             C   s,   t j|d |d d| j|jd|d< dS )z= selection_statement : IF LPAREN expression RPAREN statement r   r   Nr   r   )r   Ifr3   r   )r   rw   r   r   r    p_selection_statement_1K  s    zCParser.p_selection_statement_1c             C   s0   t j|d |d |d | j|jd|d< dS )zL selection_statement : IF LPAREN expression RPAREN statement ELSE statement r   r      r   r   N)r   r   r3   r   )r   rw   r   r   r    p_selection_statement_2O  s    zCParser.p_selection_statement_2c             C   s.   t tj|d |d | j|jd|d< dS )zA selection_statement : SWITCH LPAREN expression RPAREN statement r   r   r   r   N)r	   r   ZSwitchr3   r   )r   rw   r   r   r    p_selection_statement_3S  s    zCParser.p_selection_statement_3c             C   s*   t j|d |d | j|jd|d< dS )z@ iteration_statement : WHILE LPAREN expression RPAREN statement r   r   r   r   N)r   ZWhiler3   r   )r   rw   r   r   r    p_iteration_statement_1X  s    zCParser.p_iteration_statement_1c             C   s*   t j|d |d | j|jd|d< dS )zH iteration_statement : DO statement WHILE LPAREN expression RPAREN SEMI r   rQ   r   r   N)r   ZDoWhiler3   r   )r   rw   r   r   r    p_iteration_statement_2\  s    zCParser.p_iteration_statement_2c             C   s6   t j|d |d |d |d | j|jd|d< dS )zj iteration_statement : FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN statement r   r   r   	   r   r   N)r   Forr3   r   )r   rw   r   r   r    p_iteration_statement_3`  s    zCParser.p_iteration_statement_3c             C   sJ   t jt j|d | j|jd|d |d |d | j|jd|d< dS )zb iteration_statement : FOR LPAREN declaration expression_opt SEMI expression_opt RPAREN statement r   r   r         r   N)r   r   ZDeclListr3   r   )r   rw   r   r   r    p_iteration_statement_4d  s    zCParser.p_iteration_statement_4c             C   s$   t j|d | j|jd|d< dS )z  jump_statement  : GOTO ID SEMI rQ   r   r   N)r   ZGotor3   r   )r   rw   r   r   r    p_jump_statement_1i  s    zCParser.p_jump_statement_1c             C   s   t j| j|jd|d< dS )z jump_statement  : BREAK SEMI r   r   N)r   ZBreakr3   r   )r   rw   r   r   r    p_jump_statement_2m  s    zCParser.p_jump_statement_2c             C   s   t j| j|jd|d< dS )z! jump_statement  : CONTINUE SEMI r   r   N)r   ZContinuer3   r   )r   rw   r   r   r    p_jump_statement_3q  s    zCParser.p_jump_statement_3c             C   s4   t jt|dkr|d nd| j|jd|d< dS )z\ jump_statement  : RETURN expression SEMI
                            | RETURN SEMI
        r   rQ   Nr   r   )r   ZReturnrF   r3   r   )r   rw   r   r   r    p_jump_statement_4u  s    zCParser.p_jump_statement_4c             C   s8   |d dkr(t j| j|jd|d< n|d |d< dS )z, expression_statement : expression_opt SEMI r   Nr   )r   ZEmptyStatementr3   r   )r   rw   r   r   r    p_expression_statement{  s    zCParser.p_expression_statementc             C   sj   t |dkr|d |d< nLt|d tjsFtj|d g|d j|d< |d jj|d  |d |d< dS )zn expression  : assignment_expression
                        | expression COMMA assignment_expression
        rQ   r   r   r   N)rF   r9   r   ExprListr.   r   r&   )r   rw   r   r   r    p_expression  s    zCParser.p_expressionc             C   s(   t j|d g| j|jdd|d< dS )z typedef_name : TYPEID r   )r.   r   N)r   rE   r3   r   )r   rw   r   r   r    p_typedef_name  s    zCParser.p_typedef_namec             C   sD   t |dkr|d |d< n&tj|d |d |d |d j|d< dS )z assignment_expression   : conditional_expression
                                    | unary_expression assignment_operator assignment_expression
        rQ   r   r   r   N)rF   r   Z
Assignmentr.   )r   rw   r   r   r    p_assignment_expression  s    zCParser.p_assignment_expressionc             C   s   |d |d< dS )a   assignment_operator : EQUALS
                                | XOREQUAL
                                | TIMESEQUAL
                                | DIVEQUAL
                                | MODEQUAL
                                | PLUSEQUAL
                                | MINUSEQUAL
                                | LSHIFTEQUAL
                                | RSHIFTEQUAL
                                | ANDEQUAL
                                | OREQUAL
        r   r   Nr   )r   rw   r   r   r    p_assignment_operator  s    zCParser.p_assignment_operatorc             C   s   |d |d< dS )z. constant_expression : conditional_expression r   r   Nr   )r   rw   r   r   r    p_constant_expression  s    zCParser.p_constant_expressionc             C   sD   t |dkr|d |d< n&tj|d |d |d |d j|d< dS )z conditional_expression  : binary_expression
                                    | binary_expression CONDOP expression COLON conditional_expression
        rQ   r   r   r   r   N)rF   r   Z	TernaryOpr.   )r   rw   r   r   r    p_conditional_expression  s    z CParser.p_conditional_expressionc             C   sD   t |dkr|d |d< n&tj|d |d |d |d j|d< dS )ak   binary_expression   : cast_expression
                                | binary_expression TIMES binary_expression
                                | binary_expression DIVIDE binary_expression
                                | binary_expression MOD binary_expression
                                | binary_expression PLUS binary_expression
                                | binary_expression MINUS binary_expression
                                | binary_expression RSHIFT binary_expression
                                | binary_expression LSHIFT binary_expression
                                | binary_expression LT binary_expression
                                | binary_expression LE binary_expression
                                | binary_expression GE binary_expression
                                | binary_expression GT binary_expression
                                | binary_expression EQ binary_expression
                                | binary_expression NE binary_expression
                                | binary_expression AND binary_expression
                                | binary_expression OR binary_expression
                                | binary_expression XOR binary_expression
                                | binary_expression LAND binary_expression
                                | binary_expression LOR binary_expression
        rQ   r   r   r   N)rF   r   ZBinaryOpr.   )r   rw   r   r   r    p_binary_expression  s    zCParser.p_binary_expressionc             C   s   |d |d< dS )z$ cast_expression : unary_expression r   r   Nr   )r   rw   r   r   r    p_cast_expression_1  s    zCParser.p_cast_expression_1c             C   s*   t j|d |d | j|jd|d< dS )z; cast_expression : LPAREN type_name RPAREN cast_expression rQ   r   r   r   N)r   ZCastr3   r   )r   rw   r   r   r    p_cast_expression_2  s    zCParser.p_cast_expression_2c             C   s   |d |d< dS )z* unary_expression    : postfix_expression r   r   Nr   )r   rw   r   r   r    p_unary_expression_1  s    zCParser.p_unary_expression_1c             C   s$   t j|d |d |d j|d< dS )z unary_expression    : PLUSPLUS unary_expression
                                | MINUSMINUS unary_expression
                                | unary_operator cast_expression
        r   rQ   r   N)r   UnaryOpr.   )r   rw   r   r   r    p_unary_expression_2  s    zCParser.p_unary_expression_2c             C   s>   t j|d t|dkr|d n|d | j|jd|d< dS )zx unary_expression    : SIZEOF unary_expression
                                | SIZEOF LPAREN type_name RPAREN
        r   r   rQ   r   N)r   r   rF   r3   r   )r   rw   r   r   r    p_unary_expression_3  s    zCParser.p_unary_expression_3c             C   s   |d |d< dS )z unary_operator  : AND
                            | TIMES
                            | PLUS
                            | MINUS
                            | NOT
                            | LNOT
        r   r   Nr   )r   rw   r   r   r    p_unary_operator  s    zCParser.p_unary_operatorc             C   s   |d |d< dS )z* postfix_expression  : primary_expression r   r   Nr   )r   rw   r   r   r    p_postfix_expression_1  s    zCParser.p_postfix_expression_1c             C   s$   t j|d |d |d j|d< dS )zG postfix_expression  : postfix_expression LBRACKET expression RBRACKET r   r   r   N)r   ZArrayRefr.   )r   rw   r   r   r    p_postfix_expression_2  s    zCParser.p_postfix_expression_2c             C   s4   t j|d t|dkr|d nd|d j|d< dS )z postfix_expression  : postfix_expression LPAREN argument_expression_list RPAREN
                                | postfix_expression LPAREN RPAREN
        r   r   r   Nr   )r   FuncCallrF   r.   )r   rw   r   r   r    p_postfix_expression_3  s    zCParser.p_postfix_expression_3c             C   sB   t j|d | j|jd}t j|d |d ||d j|d< dS )z postfix_expression  : postfix_expression PERIOD ID
                                | postfix_expression PERIOD TYPEID
                                | postfix_expression ARROW ID
                                | postfix_expression ARROW TYPEID
        r   r   rQ   r   N)r   r   r3   r   Z	StructRefr.   )r   rw   Zfieldr   r   r    p_postfix_expression_4  s    zCParser.p_postfix_expression_4c             C   s(   t jd|d  |d |d j|d< dS )z{ postfix_expression  : postfix_expression PLUSPLUS
                                | postfix_expression MINUSMINUS
        rw   rQ   r   r   N)r   r   r.   )r   rw   r   r   r    p_postfix_expression_5  s    zCParser.p_postfix_expression_5c             C   s   t j|d |d |d< dS )z postfix_expression  : LPAREN type_name RPAREN brace_open initializer_list brace_close
                                | LPAREN type_name RPAREN brace_open initializer_list COMMA brace_close
        rQ   r   r   N)r   ZCompoundLiteral)r   rw   r   r   r    p_postfix_expression_6  s    zCParser.p_postfix_expression_6c             C   s   |d |d< dS )z" primary_expression  : identifier r   r   Nr   )r   rw   r   r   r    p_primary_expression_1   s    zCParser.p_primary_expression_1c             C   s   |d |d< dS )z  primary_expression  : constant r   r   Nr   )r   rw   r   r   r    p_primary_expression_2$  s    zCParser.p_primary_expression_2c             C   s   |d |d< dS )zp primary_expression  : unified_string_literal
                                | unified_wstring_literal
        r   r   Nr   )r   rw   r   r   r    p_primary_expression_3(  s    zCParser.p_primary_expression_3c             C   s   |d |d< dS )z0 primary_expression  : LPAREN expression RPAREN rQ   r   Nr   )r   rw   r   r   r    p_primary_expression_4.  s    zCParser.p_primary_expression_4c             C   sF   | j |jd}tjtj|d |tj|d |d g|||d< dS )zQ primary_expression  : OFFSETOF LPAREN type_name COMMA identifier RPAREN
        r   r   r   r   N)r3   r   r   r  r   r   )r   rw   r.   r   r   r    p_primary_expression_52  s    zCParser.p_primary_expression_5c             C   sN   t |dkr*tj|d g|d j|d< n |d jj|d  |d |d< dS )z argument_expression_list    : assignment_expression
                                        | argument_expression_list COMMA assignment_expression
        rQ   r   r   r   N)rF   r   r   r.   r   r&   )r   rw   r   r   r    p_argument_expression_list:  s    z"CParser.p_argument_expression_listc             C   s$   t j|d | j|jd|d< dS )z identifier  : ID r   r   N)r   r   r3   r   )r   rw   r   r   r    p_identifierD  s    zCParser.p_identifierc             C   s&   t jd|d | j|jd|d< dS )z constant    : INT_CONST_DEC
                        | INT_CONST_OCT
                        | INT_CONST_HEX
                        | INT_CONST_BIN
        r>   r   r   N)r   Constantr3   r   )r   rw   r   r   r    p_constant_1H  s    zCParser.p_constant_1c             C   s&   t jd|d | j|jd|d< dS )zM constant    : FLOAT_CONST
                        | HEX_FLOAT_CONST
        floatr   r   N)r   r  r3   r   )r   rw   r   r   r    p_constant_2Q  s    zCParser.p_constant_2c             C   s&   t jd|d | j|jd|d< dS )zH constant    : CHAR_CONST
                        | WCHAR_CONST
        charr   r   N)r   r  r3   r   )r   rw   r   r   r    p_constant_3X  s    zCParser.p_constant_3c             C   sh   t |dkr0tjd|d | j|jd|d< n4|d jdd |d dd  |d _|d |d< dS )z~ unified_string_literal  : STRING_LITERAL
                                    | unified_string_literal STRING_LITERAL
        rQ   stringr   r   Nr*   )rF   r   r  r3   r   value)r   rw   r   r   r    p_unified_string_literald  s
     (z CParser.p_unified_string_literalc             C   sl   t |dkr0tjd|d | j|jd|d< n8|d jj dd |d dd  |d _|d |d< dS )z unified_wstring_literal : WSTRING_LITERAL
                                    | unified_wstring_literal WSTRING_LITERAL
        rQ   r  r   r   Nr*   )rF   r   r  r3   r   r  rstrip)r   rw   r   r   r    p_unified_wstring_literalo  s
     ,z!CParser.p_unified_wstring_literalc             C   s   |d |d< dS )z  brace_open  :   LBRACE
        r   r   Nr   )r   rw   r   r   r    p_brace_openz  s    zCParser.p_brace_openc             C   s   |d |d< dS )z  brace_close :   RBRACE
        r   r   Nr   )r   rw   r   r   r    p_brace_close  s    zCParser.p_brace_closec             C   s   d|d< dS )zempty : Nr   r   )r   rw   r   r   r    p_empty  s    zCParser.p_emptyc             C   s<   |r,| j d|j | j|j| jj|d n| j dd d S )Nz
before: %s)r   r6   zAt end of inputr   )r,   r  r3   r   r   Zfind_tok_column)r   rw   r   r   r    p_error  s    zCParser.p_errorN)Tr   Tr   Fr   )r   r   )Frd   re   rd   rf   rd   rg   rd   rh   rd   ri   rd   rj   rk   rd   rl   rm   rn   ro   rd   rp   rq   rd   rr   rs   rd   rt   ru   rv   )
r   r!  r"  r#  r$  r%  r&  r'  r(  r)  )__name__
__module____qualname__r!   r$   r'   r)   r/   r0   r2   r   r   r   r   r7   r=   rI   rO   r]   r`   rc   Z
precedencerx   ry   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r    r
      sF       c	

	)7-Y         		;		
	
&					

	
		
		
	
	r
   __main__)reZplyr   r   r   Zc_lexerr   Z	plyparserr   r   r   Zast_transformsr	   r
   r*  pprintZtimesysr   r   r   r    <module>	   s,                PK     ʽ\  "  __pycache__/yacctab.cpython-36.pycnu [        3
]U               @   svA d Z dZdZddddddd	d
ddddddddgd dd d d d d d d d d d d d d  d! gfddddd	d
dd"d#dd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7dd8d9d:d;d<d=d>d?d@ddAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQddRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdnd!dodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddgddd d d d d d dd dV dw d d d d dY d9 d dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d dK d d  d' d( dH dJ d d dW dX d d d" d d d d d0 d1 d[ d d d	 d
 dO d d dK d  d dx d d d d d d d d d d d d d d d d d d d d dI db d d d\ d d d d$ d dm d d d2 d3 d4 d5 d6 d7 d dd d ddddu d dL d d d  d! d" d# d$ d% d& d' d d( d) d d* d+ d, d  dP d-d.d. d/ d/ dU dM d, d- dN d! dn d$ d d d dt d ddq d0 dds dy d d d d d d d d d1 d2 d3 d4 d5 d d d6 d7 d8 d9 d: d; d< d= d> dc d? d@ dA dB dC dD dE dQ dF dG dH d dI dv dd dp dr dJ dK dL dM dd dN dZ dO dP dQ d d d d dRdS dT dU dV dWdX dY d ddZ d[ d\ d d do d] gfddddd	d
ddddddddgddd d d d d d d d d d d  d! gfddddd	d
dd"ddd%d&d'd(d)d^d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7ddd_d`dd8d;dddddddCdDdEdFdGdHdIdJdKdLdMdNd
dOdPdQddRdTdadOdPdbdcddBdNdCd*d+ddddded ddd?d!d@dnd!dHdQdodpdqdsdtdudvdwdxdydzd{d|dfddSddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddd>dYddddmdndodpdqdrdsdtdudvddwddxddyddddddddddzd{d|d}ddddd~ddddddАddddddddِdddddddddddddddddRdddWddddddgd*d*d d d d d d*d d*dw d d d d d*d9 d dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< dMdPd dR d d*d*d*d\d\d d d\d d d" d d d d d0 d1 d[ d d d[d	 d
 dO d d}d*d*d\d*d*dh d\d\d\d\d\di dj dg dk dl d dh d\d\d d1 d d\ d[d[d*d d d}dm d d d2 d3 d4 d5 d6 d7 d\d}dd\d d\dz d{ d| d} df d d~ d d d d d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\ddd\d\d\d# d\d d\d\dh dh d\d\d\d, d[d  d\dP d\dM d, d- dN d! dn d}d}dt d\d\d\d\d\dq d0 ds d\d dg dD dE dQ dF d*d\dH d}dI d\dp dr d\d\d\d d\d\d# dQ d}d}d}d\d\dT dU dV d\d d}d\d[ d\ d}d}do d] gfddddd	d
dd"dd$dd%d&d'd(d)d*d^d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7dd8d;dddd@dddAdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQddRdTdadOdUdPdbdcdYddBdNdCd*d+ddd[d\ddded]d^d_d`ddadbdcdddedfdgdhdidjd ddd?d!d@dmdnd!dodpdqdsdtdudvdwdxdydzd{d|d}dfdddddddddddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZdddddddddd)dddmdndodpdrdsdtdudddddxddyddddddddddzd{d|d}dddddddddŐd~dƐdddddddddddddАdddddԐddddِdddېdddddddddddddddddRdddddWdddddddgd^d^d d d d d dd dd^dw d d d d dY d^d9 d dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d daddd*d*dd d dd d d" d d d d d0 d1 d[ d d d	 d
 dO d d*dadad*dd^ddh dddddd*di dj dg d d dk dl d d d d d	d d d d d d d d d d d dh d*d*d d1 d d d\ dad d d*dm d d d2 d3 d4 d5 d6 d7 d ddzd|d}d*dd*d d d  d! d" d*dz d{ d| d} df d d~ d d d d d*ddddddddddddddddddd*d*d# d$ d*d*d*dd) d d# d*d ddh dh d*d*d* d+ d, d  ddP ddM d, d- dN d! dn d*d*dt d*d*d*d*d*dq d0 ds d9 d: d; d< d= dd> ddd dg d? d@ dA dB dC dD dE dQ dF d^ddH d*dI dd*dp dr ddJ dK d*dd d*d# dN dZ dQ d*d*d*d*d*dT dU dV d*dX d dY d*d*dZ d[ d\ d*d*do d] gfddddd	d
dd"dd%d&d'd(d)d^d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7dd8ddddddCdDdEdFdGdHdIdJdKdLdMdNdOdPdQddRdadOdPdbdcdWdXdYddBdNdZdCd*d+ddd[d\ddded]d^d_d`dadbdcdddedfdgdhdidjd ddd?d!d@d!dodpdqdsdtdudvdwdxdydzd{d|d}dfdddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddddddddd)dddmdndodpdrdsdtdudddxddyddddddddddzd{d|d}dddddddddddddddddddddddddddŐd~dƐdddddddАddddddddِdddېdddܐddݐddddddddddddRdddddWdddddddgd,d,d d d d d d,d dw d d d d d,d9 d dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d,d,dcdd d d d d" d d d d,d0 d1 d[ d d d	 d
 dO d dd,dd,d,dh d did dddd dddi dj dg d d dk dl d d d d d d d d d d d d d d d dh drdsd d1 d\ d,d d ddm d d d2 d3 d4 d5 d6 d7 d dddd ddz d{ d| d} df d d~ d d d d dddddddddddddddddddddd# d$ d% dd& d' d dd( dd,d) d d# dd ddh dh ddd, d  ddP ddM d, d- dN d! dn dddt ddddddq d0 ds d d d dididididididididididididididid9 d: d; d< d= dd> d,d dg dD dE dQ dF d,ddH ddI ddp dr ddJ dK dddL d dM dd# dQ ddddddT dU dV ddX d dY dddZ d[ d\ dddo d] gfddddd	d
dddd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9dddddAdBdKdLdMdNdOdPdQdFddRddad*dd!d@dmd!dUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgd-d-d d d d d d-d dV dw d-d-d-d-dY d9 d-dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d-d_ d-d-d d-d-dW dX d-d[ d d d	 d
 dO d-d d-d` d-d-d-d-d-d d\ d-d-d-d d-d-d-dm d d d2 d3 d4 d5 d6 d7 d d-d-d-d-d-d* d+ d, d  d-d-dP dS d! dn dt d-dq d0 ds d-dB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gfddddd	d
dddd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9dddddAdBdKdLdMdNdOdPdQdFddRddad*dd!d@dmd!dUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgd.d.d d d d d d.d dV dw d.d.d.d.dY d9 d.dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d.d_ d.d.d d.d.dW dX d.d[ d d d	 d
 dO d.d d.d` d.d.d.d.d.d d\ d.d.d.d d.d.d.dm d d d2 d3 d4 d5 d6 d7 d d.d.d.d.d.d* d+ d, d  d.d.dP dS d! dn dt d.dq d0 ds d.dB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gfddddd	d
dddd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9dddddAdBdKdLdMdNdOdPdQdFddRddad*dd!d@dmd!dUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgd/d/d d d d d d/d dV dw d/d/d/d/dY d9 d/dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d/d_ d/d/d d/d/dW dX d/d[ d d d	 d
 dO d/d d/d` d/d/d/d/d/d d\ d/d/d/d d/d/d/dm d d d2 d3 d4 d5 d6 d7 d d/d/d/d/d/d* d+ d, d  d/d/dP dS d! dn dt d/dq d0 ds d/dB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyd0d0d d d d d d0d dV dw d0d0d0d0dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d0d_ d0d0d d0dW dX d d d	 d
 dO d0d d0d` d0d0d0d d0d0d0d d0d0d0dm d d d2 d3 d4 d5 d6 d7 d d0d0d0d0d0d* d+ d, d  d0d0dP dS d! dn dt d0dq d0 ds d0dB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyd1d1d d d d d d1d dV dw d1d1d1d1dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d1d_ d1d1d d1dW dX d d d	 d
 dO d1d d1d` d1d1d1d d1d1d1d d1d1d1dm d d d2 d3 d4 d5 d6 d7 d d1d1d1d1d1d* d+ d, d  d1d1dP dS d! dn dt d1dq d0 ds d1dB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQddRddaddmdsdtdudvdwdxdydzd{d|dd1dddddddddddddddddddddddddddddddddghd3d3d d d d d d3d dV dw d3d3d3d3dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d3d_ d3d3d d3dW dX d d d	 d
 dO d d3d` d3d3d d3dm d d d2 d3 d4 d5 d6 d7 d d3d* d+ d, d  dP d! dn dt d3dq d0 ds d3dB dC dD dE dQ dF dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] ghfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQddRddaddmdsdtdudvdwdxdydzd{d|dd1dddddddddddddddddddddddddddddddddghd4d4d d d d d d4d dV dw d4d4d4d4dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d4d_ d4d4d d4dW dX d d d	 d
 dO d d4d` d4d4d d4dm d d d2 d3 d4 d5 d6 d7 d d4d* d+ d, d  dP d! dn dt d4dq d0 ds d4dB dC dD dE dQ dF dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] ghfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9dddddAdBdLdMdNdOdPdQddRddadd@dmd!dsdtdudvdwdxdydzd{d|dd1dddddddddddddddddddddddddddddddddgld+d+d d d d d d+d dV dw d+d+d+d+dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d+d_ d+d+d d!d+dW dX d[ d d d	 d
 dO d d+d` d+d+dud d\ d+dm d d d2 d3 d4 d5 d6 d7 d d+d* d+ d, d  dP d! dn dt d+dq d0 ds d+dB dC dD dE dQ dF dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] glfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQddRddaddmdsdtdudvdwdxdydzd{d|dd1dddddddddddddddddddddddddddddddddghd5d5d d d d d d5d dV dw d5d5d5d5dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d5d_ d5d5d d5dW dX d d d	 d
 dO d d5d` d5d5d d5dm d d d2 d3 d4 d5 d6 d7 d d5d* d+ d, d  dP d! dn dt d5dq d0 ds d5dB dC dD dE dQ dF dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] ghfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQddRddaddmdsdtdudvdwdxdydzd{d|dd1dddddddddddddddddddddddddddddddddghd6d6d d d d d d6d dV dw d6d6d6d6dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d6d_ d6d6d d6dW dX d d d	 d
 dO d d6d` d6d6d d6dm d d d2 d3 d4 d5 d6 d7 d d6d* d+ d, d  dP d! dn dt d6dq d0 ds d6dB dC dD dE dQ dF dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] ghfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQddRddaddmdsdtdudvdwdxdydzd{d|dd1dddddddddddddddddddddddddddddddddghd7d7d d d d d d7d dV dw d7d7d7d7dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d7d_ d7d7d d7dW dX d d d	 d
 dO d d7d` d7d7d d7dm d d d2 d3 d4 d5 d6 d7 d d7d* d+ d, d  dP d! dn dt d7dq d0 ds d7dB dC dD dE dQ dF dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] ghfddddd	d
dddd$dd%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7ddd_d`dddd9d;ddddAdBdIdJdKdLdMdNdOdPdQdFddRddTdad*ddmdnd!dUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1d>dYdddd	ddddddddddddddddddddddАd-d.ddddddddddddddgd%d%d d d d d d%d dV dBdw d%d%d%d%dY d9 d dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< dNdQd dR d d%d_ d%dBd%d d%dW dX d d0 d1 d[ d d d	 d
 dO d%d d%d` dBd%d%d%d d d\ d%d%d%d d%d%d%dm d d d2 d3 d4 d5 d6 d7 d d%ddd%d%d%d%d* d+ d, d  d%d%dP dS d! dn dt d%dq d0 ds d%dB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyddd d d d d dd dV dw dddddY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d dd_ ddd ddW dX d d d	 d
 dO dd dd` dddd dddd ddddm d d d2 d3 d4 d5 d6 d7 d dddddd* d+ d, d  dddP dS d! dn dt ddq d0 ds ddB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyd_d_d d d d d d_d dV dw d_d_d_d_dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d_d_ d_d_d d_dW dX d d d	 d
 dO d_d d_d` d_d_d_d d_d_d_d d_d_d_dm d d d2 d3 d4 d5 d6 d7 d d_d_d_d_d_d* d+ d, d  d_d_dP dS d! dn dt d_dq d0 ds d_dB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfddddd	d
dddd$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7dddd9ddddAdBdMdNdOdPdQdFddRddad*ddmdUdVd\d]dpdqdsdtdudvdwdxdydzd{d|dd1dddd	ddddddddddddddddddddddАd-d.ddddddddddddddgyd`d`d d d d d d`d dV dw d`d`d`d`dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d d`d_ d`d`d d`dW dX d d d	 d
 dO d`d d`d` d`d`d`d d`d`d`d d`d`d`dm d d d2 d3 d4 d5 d6 d7 d d`d`d`d`d`d* d+ d, d  d`d`dP dS d! dn dt d`dq d0 ds d`dB dC dD dE dQ dF dT da dH dI dp dr dN dZ dQ dT dU dV d[ d\ do d] gyfdd$d*ddd_d`ddddd9dddAdBdMdNdOdPdQdRdd/dOd dmdsdtdudvdwdxdydzd{d|ddmdndodddddddddddd~dddddddddِdddܐddddddddddddddddddddgUd dV dY dOdOd dR dOd
 d d_ d dOd dW dX dOdOd	 dOdOdOd` dOdOd d dOdm d d d2 d3 d4 d5 d6 d7 dOd# dOd d* d+ d  d! dn dOdOdt dq d0 ds dOd dg dB dC dH dOdI dp dr dOdOdOd dOd# dN dZ dQ dOdOdOdT dU dV d dOd[ d\ dOdOdo d] gUfd"d$d%d&d'd(d)d*d+d-d.d/d0d1dddddddddddd2d3d4d5d6d7d8d9dAdBdCdDdEdFdGdHdMdNdPdQdSdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjdmd[d}ddddddddddddddddddddddƐddddddddddddݐddddddgkddV dw d d d d dY d9 dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< ddOdW dX d d d" d d d d d d
 dO dOd7d d d d d d d d d d d d d d d d d d dxd d# d$ d% d& d' d d( d) d ddh d* d+ d, d  dP d9 d: d; d< d= d> di dk dB dC dD dE dQ dF dJ dK dL dM dj dN dZ dX dY dZ gkfd"d$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d8d;dd@dAdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdTdadUdbdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd dmdnd!dodpdqd}ddddddd)dddddddddddddddddddƐddddddddddddddddېddddddddgdddw d d d d dY d9 d dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< dddddd d d" d d d d d0 d1 d[ d d d	 d
 dO dddddd d d d d d d d d d d d d d d d dpd d d\ dd d d d d  d! d" d# d$ dd) d dpdh d* d+ d, d  dP dM d, d- dN d9 d: d; d< d= d> dddpdi dk d? d@ dA dB dC dD dE dQ dF dJ dK dpdj dN dZ dX dpdY dZ gfd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d9d;d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdPdQdSdTdUdDdEdbdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldddmdnd!dIdTd[dpdqd}ddddddd2d3d4d5ddddddddddd)dddddddddwdddddddddddddddddddddddddddddddddddddddddƐddddǐdddddd̐dddΐdddddѐddՐdddddddddddddddddddgdV dw d d d d dY d9 d dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< dK d  dPdH dJ d dW dX d d d" d d d d d0 d1 d[ d d d
 dO dK d  d d1d] d dx d d d d d d d d d d d d d d d d d d d d dI db dvd d d d\ dwdb d d d d d{du dL d d d  d_ d` d d d! d" d# d$ d% d& d' d d( d{d d) d dd* d+ dwdwd, d d  dP dd/ dU dM d, d- dN d d{d^ dy d{d d d d d d d d d1 d2 d3 d4 d5 d d d6 d7 d8 d{dd9 d d: d; d< d= d> dl d  ddc de d? d@ dA dB dC da dD dE dc d dQ dF dG d{dv d{d{dJ dK dL dM dd dN dZ dO dP dS d ddf d{dX dY dZ gfd$d%d&d'd(d)d*d+d,d-d.d/d0d1dddddddddddd2d3d4d5d6d7d;dd@ddAdBdCdDdEdFdGdHddIdJdKdLdMdNdPdQdTdadUdGddd,dDdEdbdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdd"dAd dddmdnd!dpdqddddd2d3d4d5ddddddddddddd)dddddddddddddddddddddddddddddddddddddddddŐddddƐdddddddd̐dddddАddՐdddddddddddddRdddWdddgdV dw d d d d dY d9 d dE dF dG d= d d d> d d? d@ d d d dA dB dC dD d d8 d: d; d< d  d d d dW dX d d d" d d d dmd d0 d1 d[ d d d
 dO d  d d ddd^ d+ dd d] d dx d d d d d d d d d d d d d d d d d d d d d ddd% d& d d d d\ d d d du d d  d_ d` d d d! d" dd# d$ d% d& d' d d( d~dd d) d dʐd* d+ d, d  dP dM d, d- dN d$ de d^ dy d d d d d d d d d1 d2 d3 d4 d5 d d d6 d7 d8 dېd9 d d: d; d< d= dddܐd> dl d  d d? d@ dA dB dC da dD dE dQ dF ddv dddJ dK dL dM dN dZ dS d ddd dX dY d ddZ dgfd$d%d*d-d.d/d0d1dddddddddddd2dAdBdMdNdPdQdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdmdodpdqd}dddddddddddddddddddddddddddddddddddddddddddddddddddddddАddddddddddddgwdV dw dY dE dF dG d= d d d> d d? d@ d d d dA dB dC dD dW dX d d d
 dO dx d d d d d d d d d d d d d d d d d d d d d dyd d dddu d# d$ d% d& d' d d( d) d d* d+ d, d  dP ddM d, d- dN dd dy dd d d d d d d d d1 d2 d3 d4 d5 d d d6 d7 d8 d9 d: d; d< d= d> dB dC dD dE dQ dF dydv dJ dK dL dM dN dZ dS dX dY dZ gwfd-d.d/dddddJdKdLdOdRdOdcdYddBdNdCd*d+ddd[d\ddded]d^d_d`dadbdcdddedfdgdhdidjd ddd?d!d@d!dsdtdudvdwdxdydzd{d|d}dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}dddddddddŐd~dƐdddddddddِdddېdddddddddddddddRdddddWdddddddgdE dF dG ddd d d0 d1 d[ d	 dddh dddddddi dj dg d d dk dl d d d d d d d d d d d d d d d dh ddd d1 d\ ddm d d d2 d3 d4 d5 d6 d7 d dddddz d{ d| d} df d d~ d d d d dddddddddddddddddddddd# d$ dddd) d d# dd ddh dh ddd  ddd! dn dddt ddddddq d0 ds d9 d: d; d< d= dd> d dg ddH ddI ddp dr ddJ dK ddd dd# dQ ddddddT dU dV ddX d dY dddZ d[ d\ dddo d] gfd-d.d/dddddJdKdLdOdRdOdcdYddBdNdCd*d+ddd[d\ddded]d^d_d`dadbdcdddedfdgdhdidjd ddd?d!d@d!dsdtdudvdwdxdydzd{d|d}dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}dddddddddŐd~dƐdddddddddِdddېdddddddddddddddRdddddWdddddddgdE dF dG dBdBd d d0 d1 d[ d	 dBdBdh ddBdBdBdBdBdi dj dg d d dk dl d d d d d d d d d d d d d d d dh dBdBd d1 d\ dBdm d d d2 d3 d4 d5 d6 d7 d dBdBdBdBdz d{ d| d} df d d~ d d d d dBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBd# d$ dBdBdBd) d d# dBd dBdh dh dBdBd  dBdBd! dn dBdBdt dBdBdBdBdBdq d0 ds d9 d: d; d< d= dBd> d dg dBdH dBdI dBdp dr dBdJ dK dBdBd dBd# dQ dBdBdBdBdBdT dU dV dBdX d dY dBdBdZ d[ d\ dBdBdo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG dCdCd d d0 d1 d[ d	 dCdCdh dCdCdCdCdCdi dj dg dk dl d dh dCdCd d1 d\ dCdm d d d2 d3 d4 d5 d6 d7 dCdCdCdCdz d{ d| d} df d d~ d d d d dCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCd# dCd dCdh dh dCdCd  dCdCd! dn dCdCdt dCdCdCdCdCdq d0 ds dCd dg dCdH dCdI dCdp dr dCdCdCd dCd# dQ dCdCdCdCdCdT dU dV dCd dCdCd[ d\ dCdCdo d] gfd-d.d/dddddJdKdLdOdRdOdcdWdXdYddBdNdZdCd*d+ddd[d\ddded]d^d_d`dadbdcdddedfdgdhdidjd ddd?d!d@d!dsdtdudvdwdxdydzd{d|d}dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZdddddddddddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}dddddddddddddddddddddddddddŐd~dƐdddddddddِdddېdddܐddݐddddddddddddRdddddWdddddddgdE dF dG ddd d d0 d1 d[ d	 dddh d d$d dddd dddi dj dg d d dk dl d d d d d d d d d d d d d d d dh ddd d1 d\ ddm d d d2 d3 d4 d5 d6 d7 d dddddz d{ d| d} df d d~ d d d d dddddddddddddddddddddd# d$ d% dd& d' d dd( dd) d d# dd ddh dh ddd  ddd! dn dddt ddddddq d0 ds d d d d d d d d d1 d2 d3 d4 d5 d d$d$d$d$d9 d: d; d< d= dd> d dg ddH ddI ddp dr ddJ dK dddL d dM dd# dQ ddddddT dU dV ddX d dY dddZ d[ d\ dddo d] gfd-d.d/dddddJdKdLdOdRdOdcdWdXdYddBdNdZdCd*d+ddd[d\ddded]d^d_d`dadbdcdddedfdgdhdidjd ddd?d!d@d!dsdtdudvdwdxdydzd{d|d}dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZdddddddddddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}dddddddddddddddddddddddddddŐd~dƐdddddddddِdddېdddܐddݐddddddddddddRdddddWdddddddgdE dF dG d+d+d d d0 d1 d[ d	 d+d+dh d dld d+d+d+d d+d+di dj dg d d dk dl d d d d d d d d d d d d d d d dh d+d+d d1 d\ d+dm d d d2 d3 d4 d5 d6 d7 d d+d+d+d+dz d{ d| d} df d d~ d d d d d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d# d$ d% d+d& d' d d+d( d+d) d d# d+d d+dh dh d+d+d  d+d+d! dn d+d+dt d+d+d+d+d+dq d0 ds d d d d d dldldldldldldldldldldldldld9 d: d; d< d= d+d> d dg d+dH d+dI d+dp dr d+dJ dK d+d+dL d dM d+d# dQ d+d+d+d+d+dT dU dV d+dX d dY d+d+dZ d[ d\ d+d+do d] gfd-d.d/dddddJdKdLdOdRdOdcdWdXdYddBdNdZdCd*d+ddd[d\ddded]d^d_d`dadbdcdddedfdgdhdidjd ddd?d!d@d!dsdtdudvdwdxdydzd{d|d}dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZdddddddddddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}dddddddddddddddddddddddddddŐd~dƐdddddddddِdddېdddܐddݐddddddddddddRdddddWdddddddgdE dF dG ddd d d0 d1 d[ d	 dddh d dd dddd dddi dj dg d d dk dl d d d d d d d d d d d d d d d dh ddd d1 d\ ddm d d d2 d3 d4 d5 d6 d7 d dddddz d{ d| d} df d d~ d d d d dddddddddddddddddddddd# d$ d% dd& d' d dd( dd) d d# dd ddh dh ddd  ddd! dn dddt ddddddq d0 ds d d d d d dddddddddddddd9 d: d; d< d= dd> d dg ddH ddI ddp dr ddJ dK dddL d dM dd# dQ ddddddT dU dV ddX d dY dddZ d[ d\ dddo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG ddddd d d0 d1 d[ d	 dddddh dddddddddddi dj dg dk dl d dh ddddd d1 d\ dddm d d d2 d3 d4 d5 d6 d7 dddddddddz d{ d| d} df d d~ d d d d ddddddddddddddddddddddddddddddddddddddddddddddddd# ddd dddh dh ddddd  ddddd! dn dddddt dddddddddddq d0 ds ddd dg dddH dddI dddp dr ddddddd ddd# dQ dddddddddddT dU dV ddd ddddd[ d\ dddddo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG deded d d0 d1 d[ d	 dededh dedededededi dj dg dk dl d dh deded d1 d\ dedm d d d2 d3 d4 d5 d6 d7 dededededz d{ d| d} df d d~ d d d d dedededededededededededededededededededededededed# ded dedh dh deded  deded! dn dededt dedededededq d0 ds ded dg dedH dedI dedp dr dededed ded# dQ dedededededT dU dV ded deded[ d\ dededo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG ddd d d0 d1 d[ d	 dddh ddddddi dj dg dk dl d dh ddd d1 d\ ddm d d d2 d3 d4 d5 d6 d7 dddddz d{ d| d} df d d~ d d d d ddddddddddddddddddddddddd# dd ddh dh ddd  ddd! dn dddt ddddddq d0 ds dd dg ddH ddI ddp dr dddd dd# dQ ddddddT dU dV dd ddd[ d\ dddo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG dadad d d0 d1 d[ d	 dadadh dadadadadadi dj dg dk dl d dh dadad d1 d\ dadm d d d2 d3 d4 d5 d6 d7 dadadadadz d{ d| d} df d d~ d d d d dadadadadadadadadadadadadadadadadadadadadadadadad# dad dadh dh dadad  dadad! dn dadadt dadadadadadq d0 ds dad dg dadH dadI dadp dr dadadad dad# dQ dadadadadadT dU dV dad dadad[ d\ dadado d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG dbdbd d d0 d1 d[ d	 dbdbdh dbdbdbdbdbdi dj dg dk dl d dh dbdbd d1 d\ dbdm d d d2 d3 d4 d5 d6 d7 dbdbdbdbdz d{ d| d} df d d~ d d d d dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd# dbd dbdh dh dbdbd  dbdbd! dn dbdbdt dbdbdbdbdbdq d0 ds dbd dg dbdH dbdI dbdp dr dbdbdbd dbd# dQ dbdbdbdbdbdT dU dV dbd dbdbd[ d\ dbdbdo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG dcdcd d d0 d1 d[ d	 dcdcdh dcdcdcdcdcdi dj dg dk dl d dh dcdcd d1 d\ dcdm d d d2 d3 d4 d5 d6 d7 dcdcdcdcdz d{ d| d} df d d~ d d d d dcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd# dcd dcdh dh dcdcd  dcdcd! dn dcdcdt dcdcdcdcdcdq d0 ds dcd dg dcdH dcdI dcdp dr dcdcdcd dcd# dQ dcdcdcdcdcdT dU dV dcd dcdcd[ d\ dcdcdo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG ddddd d d0 d1 d[ d	 dddddh dddddddddddi dj dg dk dl d dh ddddd d1 d\ dddm d d d2 d3 d4 d5 d6 d7 dddddddddz d{ d| d} df d d~ d d d d ddddddddddddddddddddddddddddddddddddddddddddddddd# ddd dddh dh ddddd  ddddd! dn dddddt dddddddddddq d0 ds ddd dg dddH dddI dddp dr ddddddd ddd# dQ dddddddddddT dU dV ddd ddddd[ d\ dddddo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG deded d d0 d1 d[ d	 dededh dedededededi dj dg dk dl d dh deded d1 d\ dedm d d d2 d3 d4 d5 d6 d7 dededededz d{ d| d} df d d~ d d d d dedededededededededededededededededededededededed# ded dedh dh deded  deded! dn dededt dedededededq d0 ds ded dg dedH dedI dedp dr dededed ded# dQ dedededededT dU dV ded deded[ d\ dededo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG dfdfd d d0 d1 d[ d	 dfdfdh dfdfdfdfdfdi dj dg dk dl d dh dfdfd d1 d\ dfdm d d d2 d3 d4 d5 d6 d7 dfdfdfdfdz d{ d| d} df d d~ d d d d dfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd# dfd dfdh dh dfdfd  dfdfd! dn dfdfdt dfdfdfdfdfdq d0 ds dfd dg dfdH dfdI dfdp dr dfdfdfd dfd# dQ dfdfdfdfdfdT dU dV dfd dfdfd[ d\ dfdfdo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG dgdgd d d0 d1 d[ d	 dgdgdh dgdgdgdgdgdi dj dg dk dl d dh dgdgd d1 d\ dgdm d d d2 d3 d4 d5 d6 d7 dgdgdgdgdz d{ d| d} df d d~ d d d d dgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgd# dgd dgdh dh dgdgd  dgdgd! dn dgdgdt dgdgdgdgdgdq d0 ds dgd dg dgdH dgdI dgdp dr dgdgdgd dgd# dQ dgdgdgdgdgdT dU dV dgd dgdgd[ d\ dgdgdo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG dhdhd d d0 d1 d[ d	 dhdhdh dhdhdhdhdhdi dj dg dk dl d dh dhdhd d1 d\ dhdm d d d2 d3 d4 d5 d6 d7 dhdhdhdhdz d{ d| d} df d d~ d d d d dhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhdhd# dhd dhdh dh dhdhd  dhdhd! dn dhdhdt dhdhdhdhdhdq d0 ds dhd dg dhdH dhdI dhdp dr dhdhdhd dhd# dQ dhdhdhdhdhdT dU dV dhd dhdhd[ d\ dhdhdo d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded_did ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZdddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG didid d d0 d1 d[ d	 dididh didididididi dj dg dk dl dd d dh didid d1 d\ didm d d d2 d3 d4 d5 d6 d7 dididididz d{ d| d} df d d~ d d d d didididididididididididididididididididididididid) d# did didh dh didid  didid! dn dididt didididididq d0 ds did dg didH didI didp dr dididid did# dQ didididididT dU dV did didid[ d\ didido d] gfd-d.d/dddddJdKdLdOdRdOdcddBdNdCd*d+ddddded`djd ddd?d!d@d!dsdtdudvdwdxdydzd{d|dfddd6d7d8ddMdd%d&d'd(dLdgdhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZdddddddddmdndodpdrdsdtduddxdyddddddzd{d|d}ddddd~dddddddddِddddddddddddddddRdddWddddddgdE dF dG djdjd d d0 d1 d[ d	 djdjdh djdjdjdjdjdi dj dg dk dl dd d dh djdjd d1 d\ djdm d d d2 d3 d4 d5 d6 d7 djdjdjdjdz d{ d| d} df d d~ d d d d djdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjd d# djd djdh dh djdjd  djdjd! dn djdjdt djdjdjdjdjdq d0 ds djd dg djdH djdI djdp dr djdjdjd djd# dQ djdjdjdjdjdT dU dV djd djdjd[ d\ djdjdo d] gfd-d.d/dddJdLddcdddVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdd?d@d!ddddddddddddrddsddddddddddddddddddddddddddddƐddddddddddddgZdE dF dG d d d0 d[ ddd d dx d d d d d d d d d d d d d d d d d d d d d d d1 d\ du d# d$ d% d& d' d d( d) d ddddd  d dy d d d d d d d d d1 d2 d3 d4 d5 d d d6 d7 d8 dڐd9 d: d; d< d= d> ddddv dJ dK dL dM dS dX dY dZ gZfddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dfdfdm d d d2 d3 d4 d5 d6 d7 dfd  d! dn dfdfdt dq d0 ds dH dfdI dp dr dQ dfdfdfdT dU dV dfd[ d\ dfdfdo d] g*fddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dddm d d d2 d3 d4 d5 d6 d7 dd  d! dn dddt dq d0 ds dH ddI dp dr dQ ddddT dU dV dd[ d\ dddo d] g*fddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dddm d d d2 d3 d4 d5 d6 d7 dd  d! dn dddt dq d0 ds dH ddI dp dr dQ ddddT dU dV dd[ d\ dddo d] g*fddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dddm d d d2 d3 d4 d5 d6 d7 dd  d! dn dddt dq d0 ds dH ddI dp dr dQ ddddT dU dV dd[ d\ dddo d] g*fddOdRdsdtdudvdwdxdydzd{d|ddddddddddddddddddddddddddddddg+d d	 dddm d d d2 d3 d4 d5 d6 d7 dd  d! dn dddt ddq d0 ds dH ddI dp dr dQ ddddT dU dV dd[ d\ dddo d] g+fddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dddm d d d2 d3 d4 d5 d6 d7 dd  d! dn dddt dq d0 ds dH ddI dp dr dQ ddddT dU dV dd[ d\ dddo d] g*fddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dddm d d d2 d3 d4 d5 d6 d7 dd  d! dn dddt dq d0 ds dH ddI dp dr dQ ddddT dU dV dd[ d\ dddo d] g*fddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dSdSdm d d d2 d3 d4 d5 d6 d7 dSd  d! dn dSdSdt dq d0 ds dH dSdI dp dr dQ dSdSdSdT dU dV dSd[ d\ dSdSdo d] g*fddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dddm d d d2 d3 d4 d5 d6 d7 dd  d! dn dddt dq d0 ds dH ddI dp dr dQ ddddT dU dV dd[ d\ dddo d] g*fddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dddm d d d2 d3 d4 d5 d6 d7 dd  d! dn dddt dq d0 ds dH ddI dp dr dQ ddddT dU dV dd[ d\ dddo d] g*fddOdRdsdtdudvdwdxdydzd{d|dddddddddddddddddddddddddddddg*d d	 dddm d d d2 d3 d4 d5 d6 d7 dd  d! dn dddt dq d0 ds dH ddI dp dr dQ ddddT dU dV dd[ d\ dddo d] g*fddOdRdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdld dIdTd[d\d]d0drdsdtdudvdwdxdydzd{d|dddddddddd ddmdddwdddddddddddddddddddddddddddddddddddddǐddddd-d.ddddddddddddddddddddddddg}d d	 d dx d d d d d d d d d d d d d d d d d d d d db d ddb d dd dd d	 dm d d d2 d3 d4 d5 d6 d7 d# d$ d% d& d' d d( d) d dd* d) ddd d  dddS d! dn d dt dq d0 ds dy d d d d d d d d d1 d2 d3 d4 d5 d d d6 d7 d8 d9 d: d; d< d= d> dc dde dc d dT da dH dI dp dr dJ dK dL dM dd dQ dS ddf dT dU dV dX ddY dZ d[ d\ do d] g}fdOdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd d}dddddddddddddƐdddddېddddddg,d	 d>d d d d d d d d d d d d d d d d dqd d# d$ d) d dqdh d  d9 d: d; d< d= d> dqdi dk dJ dK dqdj dX dqdY dZ g,fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d dhd d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d4 d5 d d d6 d7 d8 d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d djd d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d djdjdjdjdjdjdjdjdjdjdjdjdjdjdjd9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d dkd d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d dkdkdkdkdkdkdkdkdkdkdkdkdkdkdkd9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d dJd d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d dJdJdJdJdJdJdJdJdJdJdJd9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d dKd d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d dKdKdKdKdKdKdKdKdKdKdKd9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d d9d d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d9d9d9d9d9d9d9d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d d:d d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d:d:d:d:d:d:d:d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d d;d d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d;d;d;d;d;d;d;d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d d<d d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d<d<d<d<d<d<d<d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d d=d d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d4 d5 d=d=d=d=d=d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d d#d d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d4 d5 d#d#d#d#d#d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d dXd d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d4 d5 d d d6 dXdXd9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d dZd d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d4 d5 d dZd6 dZdZd9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d dd d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d4 d5 d d d6 d7 dd9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddddddddddddddddddddg>d dd d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d d d d d d d d d1 d2 d3 d4 d5 d d d6 d7 d8 d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g>fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*d8d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*dd d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*dMd d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*dd d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*d%d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*d&d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*d'd d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*d(d d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*dLd d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdWdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}dddddddddddddddddddddddg*dgd d d d d d d d d d d d d d d d d d d# d$ d% d& d' d d( d) d d  d9 d: d; d< d= d> dJ dK dL dM dX dY dZ g*fdYd[d\d]d^d_d`dadbdcdddedfdgdhdidjd}ddddddddddddddddg"dYd d d d d d d d d d d d d d d d d d# d$ d) d d  d9 d: d; d< d= d> dJ dK dX dY dZ g"fdwdxdydzd{d|ddddddddddddddddddgd2 d3 d4 d5 d6 d7 d  d! dt dq d0 ds dH dI dp dr dQ ddU dV d[ d\ do d] gfd1gdgfdĜaZi Zx^ej D ]R\ZZxDeed ed D ].\Z	Z
e	ek ri ee	< e
ee	 e< qW qW [dgdgfdgdgfddd"d&d'd(d)d,d8d9dddddRdadbd ddd?d!dodpdqdsdd)dddddddאddddddRdddWddg.ddd<dDdDdDdDdJd<ddddJd drdd4dmddddJdddddd4ddddddddddddddddddg.fddgddgfddgddgfddddd9dRdsdgd	d	ddddududgfddgd
d
gfddd"d^d8ddadPdbdodgddd9ddSdddSd2ddgfdddd&d'd(d)dd9dddRdaddsd1ddgd"d"d8dEdEdEdEd8d8dbdbd8dbdbd8dbd8dbgfddddd9dRdsdgd#d#d#d#d#d#d#d#gfddd"dd^d8d;ddTdadPdbdodgd$d$d$dAd$d$dAd$dAd$d$d$d$d$gfddd"d^d8ddIdadPdbdod)ddgddd;ddTd;dndTdd;dTdddgfdddd&d'd(d)d,dd9ddddKdFdRdad*dd!d@dUdVd\dpdqdsd1dddd	ddddg$d&d&d&d&d&d&d&dLd&d&d&dLd&d!dpd&d&dpd&dLd!dpdpdpdpdpd&d&dpdpdpdpdpdpd&d&g$fdddd&d'd(d)dd9dddFdRdad*ddUdVd\dpdqdsd1dddd	ddddgd'd'd'd'd'd'd'd'd'd'd'dqd'd'dqd'dqdqdqdqdqd'd'dqdqdqdqdqdqd'd'gfdddd&d'd(d)dd9dddRdaddsd1ddgd(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(d(gfdddd&d'd(d)dd9dddRdaddsd1ddgd)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)d)gfdddd&d'd(d)dd9dddFdRdad*ddUdVd\dpdqdsd1dddd	ddddgdddddddddddddddddddddddddddddddgfdddd&d'd(d)dd9dddFdRdad*ddUdVd\dpdqdsd1dddd	ddddgdddddddddddddddddddddddddddddddgfdddd&d'd(d)dd9dddFdRdad*ddUdVd\dpdqdsd1dddd	ddddgd2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2gfdddd&d'd(d)dd9dddFdRdad*ddUdVd\dpdqdsd1dddd	ddddgdddddddddddddddddddddddddddddddgfdd9gdd/gfdd9gddgfd"d8gd:d:gfd"d8gd=d=gfd"d8dPgd>d>dgfd"d8ddadbdod)dgd?d?dGdGd5dd5dGgfd"d8d;ddTdadbdod)ddgd@d@dUd@dUd@d@d@d@dUd@gfd&d'd(d)gdCdFdGdHgfd,dd!gdId?dtgfd,dd!gdKd@dKgfdddddMdNdPdQdRd/dOdsddnddd~dӐdddܐdddddddgd
dFdRd dHdQdUdVdRdRd dRdRd dRdRddRdddd dRdRdRdRdRdRgfddRd/dsddddddddddgddyddydydydydydydydydydydygfddaddgddddgfdddaddgd,d"d,d,d,gfdddaddgdDdDdDdDdDgfdddadd1dgdEdEdEdEddEgfddd?gdddgfdddRdOd*dd?dsddd6dhddddddndtdudddzd{d|d}dddאddddddddRddWddg)ddlddlddddddddddddddldddddddddddddlddddddddddg)fdddRdOd*dd?dsdfddd6dhddddddndpdtdudxdydddzd{d|d}ddddאdddddddddRddWddg/dVdVdVdVdVdVdVdVddVdVdVdVdVdVdVdVdVdVddVdVdddVdVdVdVdVdVdVddVdVddVdVdVdVdVdVdVdVdVdVdVdVg/fdddRdOddBdNdCd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdtdudxdydddzd{d|d}dd~dddאddddddddddRddWddgGdWdWdWdWdddddWdWdWdWddWdWdWdWdddddddddddddddddddWdWdWdWdWdWddWdWdddWdWdWdWdWdWdWdddWdWddWddWdWdWdWdWdWdWdWdWdWdWgGfdddRdOd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdtdudxdydddzd{d|d}ddddאdddddddddRddWddgAdXdXdXdXdXdXdXdXdXdXdXdXdXdddddddddddddddddddXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXgAfdddRdOddBdNdCd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdtdudxdydddzd{d|d}dd~dddאddddddddddRddWddgGdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYgGfdddRdOddBdNdCd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdtdudxdydddzd{d|d}dd~dddאddddddddddRddWddgGdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNdNgGfdddRdOdNd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdtdudxdydddzd{d|d}dd~dddאddddddddddRddWddgDdZdZdZdZddZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZddZdZdZdZdZddZdZdZdZdZdZdZdZdZdZdZgDfdddRdOddBdNdCd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdtdudxdydddzd{d|d}dd~dddאddddddddddRddWddgGd[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[gGfddddRdOddBdNdCd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdqdtdudvdxdydddzd{d|d}dd~dddאdddddddddddRddWddgKd]d]dd]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]dd]d]dd]d]d]d]d]d]d]d]d]d]d]d]d]d]d]d]dd]d]d]d]d]d]d]d]d]d]d]gKfdddRdOddBdNdCd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdtdudxdydddzd{d|d}dd~dddאddddddddddRddWddgGd^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^d^gGfdddRdOddBdNdCd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdtdudxdydddzd{d|d}dd~dddאddddddddddRddWddgGd_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_d_gGfdddRdOddBdNdCd*dd?dsdfddd6dhdidjdkdlddJdKd9d:d;d<d=d#d$dXdZddddddddndpdtdudxdydddzd{d|d}dd~dddאddddddddddRddWddgGd`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`d`gGfddOdndgdkdddgfdgdAgfdgdgfd
dHdQgdIddgfd
dHdQdwgdTdTdTdgfdFdUdVgd\ddgfdFdUdVd\ddgd]d]d]dddgfdFd*dUdVd\dpdqdddd	ddgdod)dodododdd)d)d)d)dodogfdRgd0gfdRgdsgfdRdsgdtdgfdRdsddddddddddgdvdvddddddddddgfdRdsddddddddddgdwdwdwdwdwdwdwdwdwdwdwdwgfdRdsddddddddddgdxdxdxdxdxdxdxdxdxdxdxdxgfdRdsddddddddddgdzdzdzdzdzdzdzdzdzdzdzdzgfdRdsddddddddddgd{d{d{d{d{d{d{d{d{d{d{d{gfdRdsddddddddddgd|d|d|d|d|d|d|d|d|d|d|d|gfdRdsdddddddddddRddWddgd~d~d~d~d~dd~dd~d~d~ddd~dd~d~gfdRd*dsdddhdddddddzd|d}dddddddddRddWddgddddddddddddddddddddddddddddgfdbd)gd3dgfdWgd6gfd*dddd	gdddddgfd gd gfd dgddgfd dddgdnddndgfd dddgdodododogfd dddgddddgfd ddddgdddddgfdId\d0d dddddddgdddddddddddgfdogdgfdogdgfdodgddgfdpdqgddgfdfdpdxdydgdddddgfdgdgfdŜTZi Zx^ej D ]R\ZZxDeed ed D ].\Z	Z
e	ek (ri ee	< e
ee	 e< (qW (qW [dƐdddȐdȐdfdɐdddːdd4fd͐dddːdd5fdΐdddАdd4fdѐdddАdd5fdҐdddԐdd4fdՐdddԐdd5fd֐dddؐdd4fdِdddؐdd5fdڐdddܐdd4fdݐdddܐdd5fdސddddd4fdddddd5fdddddd4fdddddd5fdddddd4fdddddd5fdddddd4fdddddd5fdddddd4fdddddd5fdddddd4fdddddd5fdddddd4fdddddd5fdddddd4fdddddd5fdddd dd4fdddd dd5fddddddfddddddfd	d
ddddfdd
ddddfddddddfddddddfddddddfddddddfdddddd fd!d"dd#dd$fd%d"dd&dd'fd(d)dd*dd+fd,d)dd*dd-fd.d)dd*dd/fd0d)dd*dd1fd2d)dd*dd3fd4d)dd*dd5fd6d7dd8dd9fd:d;dd<dd=fd>d?dd@ddAfdBd?dd@ddCfdDdEddFddGfdHdEddIddJfdKdEddLddMfdNdEddOddPfdQdRddSddTfdUdRddSddVfdWdRddSddXfdYdRddSddZfd[dRddSdd\fd]d^dd_dd`fdadbddcdddfdedbddcddffdgdbddcddhfdidbddcddjfdkdbddcddlfdmdbddcddnfdodbddcddpfdqdbddcddrfdsdbddcddtfdudbddcddvfdwdbddcddxfdydbddzdd{fd|dbddzdd}fd~dbddzddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddĐddfdƐdddĐddfdȐdddʐddfd̐ddd͐ddfdϐddd͐ddfdѐdddӐddfdՐdddӐddfdאdddؐddfdڐdddېddfdݐdddېddfdߐdddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfdddddd fddd	dddfddd	dddfddddddfd	ddd
ddfdddd
ddfddddddfddddddfddddddfddddddfddddddfddddddfd d!dd"dd#fd$d!dd"dd%fd&d'dd(dd)fd*d'dd+dd,fd-d.dd/dd0fd1d.dd/dd2fd3d4dd5dd6fd7d4dd8dd9fd:d4dd8dd;fd<d=dd>dd?fd@d=dd>ddAfdBdCddDddEfdFdGddHddIfdJdGddHddKfdLdMddNddOfdPdMddNddQfdRdSddTddUfdVdWddXddYfdZdWdd[dd\fd]dWdd^dd_fd`daddbddcfdddaddeddffdgdaddhddifdjdaddkddlfdmdaddnddofdpdaddqddrfdsdaddtddufdvdwddxddyfdzdwddxdd{fd|d}dd~ddfdd}dd~ddfddddddfddddddfddddddfddddddfddddddfddd
dddfddddddfddddddfddd
dddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfdĐdddƐddfdȐdddƐddfdʐddd̐ddfdΐddd̐ddfdАddd̐ddfdҐddd̐ddfdԐddd̐ddfd֐ddd̐ddfdؐddd̐ddfdڐddd̐ddfdܐddd̐ddfdސddd̐ddfdddd̐ddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfd dddddfddddddfddddddfddddddfdddddd	fd
dddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfdddd dd!fd"ddd dd#fd$ddd dd%fd&ddd'dd(fd)ddd'dd*fd+d,dd-dd.fd/d,dd-dd0fd1d,dd-dd2fd3d,dd-dd4fd5d,dd-dd6fd7d,dd-dd8fd9d:dd;dd<fd=d:dd>dd?fd@d:ddAddBfdCd:ddAddDfdEd:ddFddGfdHd:ddFddIfdJd:ddFddKfdLd:ddFddMfdNd:ddOddPfdQd:ddOddRfdSd:d	dTddUfdVd:d
dTddWfdXdYddZdd[fd\dYdd]dd^fd_dYdd`ddafdbdYdd`ddcfdddYddeddffdgdYd	dhddifdjdkddlddmfdndkddlddofdpdqddrddsfdtduddvddwfdxduddvddyfdzduddvdd{fd|duddvdd}fd~duddddfdduddddfdduddddfdduddddfddddddfddddddfddddddfddddddfddddddfddddddfddddddfgZdS (  z3.8ZLALRZ 0B26D831EE3ADD67934989B5D61F8ACA                               2   C   Z      i  i.  i           !   "   #   $   %       /   &   '   i     
                                                (   )   *   +   ,   -   7   8   9   :   ;   <   ?   A   B   F   G   H   I   J   K   L   M   O   P   Q   R   S   T   V   W   X   [   ]   ^   b   o   p   q   r   v   |   }                                                                                                                                                                  i  i  i  i  i  i!  i#  i$  i%  i&  i'  i(  i*  i+  i,  i-  i/  i0  i1  i3  i4  i5  i;  i<  i=  i>  i?  i@  iC  iE  iF  iG  iH  iI  iJ  iK  iL  iM  iN  iO  iP  iQ  iR  iS  iT  iU  iV  iY  i[  i\  i]  i^  ic  ih  io  ip  iq  ir  is  iw  ix  i{  i|  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  =   >   @   D   E   6   .         	   3   4   5   z   e   f   i  U                                          i  s   {            N                                 i  x   y   g   i}  i~  `                                                         t   w   h   i   Y   d                     u   a   c      i              i                       0   1   _   j   l   ~                           i  i	  i
  i  i  i  i  i  i  i  i  i  i)  i6  i7  i8  i9  ib  ii  ik  i  i  i  i  i  i  i  i  i  i  i                 ie  if  i  \   i  i   i"  i  i  i  il  in  i  i  i  iB  iD  iW  iX  iZ  id  ig  ij  iv  iy  iz  i  i  i  i  i  i  i  m   k   n   i  iA  i_  i`  ia  i  i  i  i2  i  i  im  it  iu  i:  )az$endSEMIZPPHASHZIDZLPARENZTIMESZCONSTZRESTRICTZVOLATILEZVOIDZ_BOOLZCHARZSHORTZINTZLONGZFLOATZDOUBLEZ_COMPLEXZSIGNEDZUNSIGNEDZAUTOZREGISTERZSTATICZEXTERNZTYPEDEFZINLINEZTYPEIDZENUMZSTRUCTZUNIONLBRACEZEQUALSZLBRACKETCOMMAZRPARENCOLONZPLUSPLUSZ
MINUSMINUSZSIZEOFZANDPLUSMINUSZNOTZLNOTZOFFSETOFZINT_CONST_DECZINT_CONST_OCTZINT_CONST_HEXZINT_CONST_BINZFLOAT_CONSTZHEX_FLOAT_CONSTZ
CHAR_CONSTZWCHAR_CONSTZSTRING_LITERALZWSTRING_LITERALZRBRACKETZCASEZDEFAULTZIFZSWITCHZWHILEZDOZFORZGOTOZBREAKZCONTINUEZRETURNRBRACEZPERIODZCONDOPZDIVIDEZMODZRSHIFTZLSHIFTZLTZLEZGEZGTZEQZNEORZXORZLANDZLORZXOREQUALZ
TIMESEQUALZDIVEQUALZMODEQUAL	PLUSEQUALZ
MINUSEQUALZLSHIFTEQUALZRSHIFTEQUALZANDEQUALZOREQUALZARROWELSEELLIPSIS)Ttranslation_unit_or_emptytranslation_unitemptyexternal_declarationfunction_definitiondeclarationpp_directive
declaratordeclaration_specifiers	decl_bodydirect_declaratorpointertype_qualifiertype_specifierstorage_class_specifierfunction_specifiertypedef_nameenum_specifierstruct_or_union_specifierstruct_or_uniondeclaration_list_optdeclaration_listinit_declarator_list_optinit_declarator_listinit_declaratorabstract_declaratordirect_abstract_declaratordeclaration_specifiers_opttype_qualifier_list_opttype_qualifier_list
brace_opencompound_statementparameter_type_list_optparameter_type_listparameter_listparameter_declarationassignment_expression_optassignment_expressionconditional_expressionunary_expressionbinary_expressionpostfix_expressionunary_operatorcast_expressionprimary_expression
identifierconstantunified_string_literalunified_wstring_literalinitializeridentifier_list_optidentifier_listenumerator_list
enumeratorstruct_declaration_liststruct_declarationspecifier_qualifier_listblock_item_list_optblock_item_list
block_item	statementlabeled_statementexpression_statementselection_statementiteration_statementjump_statementexpression_opt
expressionabstract_declarator_optassignment_operator	type_nameinitializer_list_optinitializer_listdesignation_optdesignationdesignator_list
designatorbrace_closestruct_declarator_list_optstruct_declarator_liststruct_declaratorspecifier_qualifier_list_optconstant_expressionargument_expression_listzS' -> translation_unit_or_emptyzS'Nz abstract_declarator_opt -> emptyrQ  Zp_abstract_declarator_optzplyparser.pyz.abstract_declarator_opt -> abstract_declaratorz"assignment_expression_opt -> emptyr1  Zp_assignment_expression_optz2assignment_expression_opt -> assignment_expressionzblock_item_list_opt -> emptyrF  Zp_block_item_list_optz&block_item_list_opt -> block_item_listzdeclaration_list_opt -> emptyr!  Zp_declaration_list_optz(declaration_list_opt -> declaration_listz#declaration_specifiers_opt -> emptyr(  Zp_declaration_specifiers_optz4declaration_specifiers_opt -> declaration_specifierszdesignation_opt -> emptyrV  Zp_designation_optzdesignation_opt -> designationzexpression_opt -> emptyrO  Zp_expression_optzexpression_opt -> expressionzidentifier_list_opt -> emptyr?  Zp_identifier_list_optz&identifier_list_opt -> identifier_listz!init_declarator_list_opt -> emptyr#  Zp_init_declarator_list_optz0init_declarator_list_opt -> init_declarator_listzinitializer_list_opt -> emptyrT  Zp_initializer_list_optz(initializer_list_opt -> initializer_listz parameter_type_list_opt -> emptyr-  Zp_parameter_type_list_optz.parameter_type_list_opt -> parameter_type_listz%specifier_qualifier_list_opt -> emptyr^  Zp_specifier_qualifier_list_optz8specifier_qualifier_list_opt -> specifier_qualifier_listz#struct_declarator_list_opt -> emptyr[  Zp_struct_declarator_list_optz4struct_declarator_list_opt -> struct_declarator_listz type_qualifier_list_opt -> emptyr)  Zp_type_qualifier_list_optz.type_qualifier_list_opt -> type_qualifier_listz-translation_unit_or_empty -> translation_unitr  Zp_translation_unit_or_emptyzc_parser.pyi  z"translation_unit_or_empty -> emptyi  z(translation_unit -> external_declarationr  Zp_translation_unit_1i  z9translation_unit -> translation_unit external_declarationZp_translation_unit_2i  z+external_declaration -> function_definitionr  Zp_external_declaration_1i  z#external_declaration -> declarationZp_external_declaration_2i  z$external_declaration -> pp_directiveZp_external_declaration_3i  zexternal_declaration -> SEMIZp_external_declaration_4i   zpp_directive -> PPHASHr  Zp_pp_directivei%  zIfunction_definition -> declarator declaration_list_opt compound_statementr  Zp_function_definition_1i.  z`function_definition -> declaration_specifiers declarator declaration_list_opt compound_statementZp_function_definition_2i?  zstatement -> labeled_statementrI  Zp_statementiJ  z!statement -> expression_statementiK  zstatement -> compound_statementiL  z statement -> selection_statementiM  z statement -> iteration_statementiN  zstatement -> jump_statementiO  z<decl_body -> declaration_specifiers init_declarator_list_optr  Zp_decl_bodyi]  zdeclaration -> decl_body SEMIr  Zp_declarationi  zdeclaration_list -> declarationr"  Zp_declaration_listi  z0declaration_list -> declaration_list declarationi  zCdeclaration_specifiers -> type_qualifier declaration_specifiers_optr  Zp_declaration_specifiers_1i  zCdeclaration_specifiers -> type_specifier declaration_specifiers_optZp_declaration_specifiers_2i  zLdeclaration_specifiers -> storage_class_specifier declaration_specifiers_optZp_declaration_specifiers_3i  zGdeclaration_specifiers -> function_specifier declaration_specifiers_optZp_declaration_specifiers_4i  zstorage_class_specifier -> AUTOr  Zp_storage_class_specifieri  z#storage_class_specifier -> REGISTERi  z!storage_class_specifier -> STATICi  z!storage_class_specifier -> EXTERNi  z"storage_class_specifier -> TYPEDEFi  zfunction_specifier -> INLINEr  Zp_function_specifieri  ztype_specifier -> VOIDr  Zp_type_specifier_1i  ztype_specifier -> _BOOLi  ztype_specifier -> CHARi  ztype_specifier -> SHORTi  ztype_specifier -> INTi  ztype_specifier -> LONGi  ztype_specifier -> FLOATi  ztype_specifier -> DOUBLEi  ztype_specifier -> _COMPLEXi  ztype_specifier -> SIGNEDi  ztype_specifier -> UNSIGNEDi  ztype_specifier -> typedef_nameZp_type_specifier_2i  z type_specifier -> enum_specifieri  z+type_specifier -> struct_or_union_specifieri  ztype_qualifier -> CONSTr  Zp_type_qualifieri  ztype_qualifier -> RESTRICTi  ztype_qualifier -> VOLATILEi  z'init_declarator_list -> init_declaratorr$  Zp_init_declarator_list_1i  zBinit_declarator_list -> init_declarator_list COMMA init_declaratori  z*init_declarator_list -> EQUALS initializerZp_init_declarator_list_2i  z+init_declarator_list -> abstract_declaratorZp_init_declarator_list_3i  zinit_declarator -> declaratorr%  Zp_init_declaratori  z0init_declarator -> declarator EQUALS initializeri  zGspecifier_qualifier_list -> type_qualifier specifier_qualifier_list_optrE  Zp_specifier_qualifier_list_1i  zGspecifier_qualifier_list -> type_specifier specifier_qualifier_list_optZp_specifier_qualifier_list_2i  z/struct_or_union_specifier -> struct_or_union IDr  Zp_struct_or_union_specifier_1i  z3struct_or_union_specifier -> struct_or_union TYPEIDi  z[struct_or_union_specifier -> struct_or_union brace_open struct_declaration_list brace_closeZp_struct_or_union_specifier_2i  z^struct_or_union_specifier -> struct_or_union ID brace_open struct_declaration_list brace_closeZp_struct_or_union_specifier_3i'  zbstruct_or_union_specifier -> struct_or_union TYPEID brace_open struct_declaration_list brace_closei(  zstruct_or_union -> STRUCTr   Zp_struct_or_unioni1  zstruct_or_union -> UNIONi2  z-struct_declaration_list -> struct_declarationrC  Zp_struct_declaration_listi9  zEstruct_declaration_list -> struct_declaration_list struct_declarationi:  zNstruct_declaration -> specifier_qualifier_list struct_declarator_list_opt SEMIrD  Zp_struct_declaration_1i?  zGstruct_declaration -> specifier_qualifier_list abstract_declarator SEMIZp_struct_declaration_2ie  z+struct_declarator_list -> struct_declaratorr\  Zp_struct_declarator_listis  zHstruct_declarator_list -> struct_declarator_list COMMA struct_declaratorit  zstruct_declarator -> declaratorr]  Zp_struct_declarator_1i|  z9struct_declarator -> declarator COLON constant_expressionZp_struct_declarator_2i  z.struct_declarator -> COLON constant_expressioni  zenum_specifier -> ENUM IDr  Zp_enum_specifier_1i  zenum_specifier -> ENUM TYPEIDi  z=enum_specifier -> ENUM brace_open enumerator_list brace_closeZp_enum_specifier_2i  z@enum_specifier -> ENUM ID brace_open enumerator_list brace_closeZp_enum_specifier_3i  zDenum_specifier -> ENUM TYPEID brace_open enumerator_list brace_closei  zenumerator_list -> enumeratorrA  Zp_enumerator_listi  z(enumerator_list -> enumerator_list COMMAi  z3enumerator_list -> enumerator_list COMMA enumeratori  zenumerator -> IDrB  Zp_enumeratori  z+enumerator -> ID EQUALS constant_expressioni  zdeclarator -> direct_declaratorr  Zp_declarator_1i  z'declarator -> pointer direct_declaratorZp_declarator_2i  zdeclarator -> pointer TYPEIDZp_declarator_3i  zdirect_declarator -> IDr  Zp_direct_declarator_1i  z-direct_declarator -> LPAREN declarator RPARENZp_direct_declarator_2i  zjdirect_declarator -> direct_declarator LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKETZp_direct_declarator_3i  zmdirect_declarator -> direct_declarator LBRACKET STATIC type_qualifier_list_opt assignment_expression RBRACKETZp_direct_declarator_4i  zidirect_declarator -> direct_declarator LBRACKET type_qualifier_list STATIC assignment_expression RBRACKETi  zVdirect_declarator -> direct_declarator LBRACKET type_qualifier_list_opt TIMES RBRACKETZp_direct_declarator_5i  zHdirect_declarator -> direct_declarator LPAREN parameter_type_list RPARENZp_direct_declarator_6i  zHdirect_declarator -> direct_declarator LPAREN identifier_list_opt RPARENi  z(pointer -> TIMES type_qualifier_list_optr  Z	p_pointeri)  z0pointer -> TIMES type_qualifier_list_opt pointeri*  z%type_qualifier_list -> type_qualifierr*  Zp_type_qualifier_listiG  z9type_qualifier_list -> type_qualifier_list type_qualifieriH  z%parameter_type_list -> parameter_listr.  Zp_parameter_type_listiM  z4parameter_type_list -> parameter_list COMMA ELLIPSISiN  z'parameter_list -> parameter_declarationr/  Zp_parameter_listiV  z<parameter_list -> parameter_list COMMA parameter_declarationiW  z:parameter_declaration -> declaration_specifiers declaratorr0  Zp_parameter_declaration_1i`  zGparameter_declaration -> declaration_specifiers abstract_declarator_optZp_parameter_declaration_2ik  zidentifier_list -> identifierr@  Zp_identifier_listi  z3identifier_list -> identifier_list COMMA identifieri  z$initializer -> assignment_expressionr>  Zp_initializer_1i  z:initializer -> brace_open initializer_list_opt brace_closeZp_initializer_2i  z<initializer -> brace_open initializer_list COMMA brace_closei  z/initializer_list -> designation_opt initializerrU  Zp_initializer_listi  zFinitializer_list -> initializer_list COMMA designation_opt initializeri  z%designation -> designator_list EQUALSrW  Zp_designationi  zdesignator_list -> designatorrX  Zp_designator_listi  z-designator_list -> designator_list designatori  z3designator -> LBRACKET constant_expression RBRACKETrY  Zp_designatori  zdesignator -> PERIOD identifieri  z=type_name -> specifier_qualifier_list abstract_declarator_optrS  Zp_type_namei  zabstract_declarator -> pointerr&  Zp_abstract_declarator_1i  z9abstract_declarator -> pointer direct_abstract_declaratorZp_abstract_declarator_2i  z1abstract_declarator -> direct_abstract_declaratorZp_abstract_declarator_3i  z?direct_abstract_declarator -> LPAREN abstract_declarator RPARENr'  Zp_direct_abstract_declarator_1i  zddirect_abstract_declarator -> direct_abstract_declarator LBRACKET assignment_expression_opt RBRACKETZp_direct_abstract_declarator_2i  zIdirect_abstract_declarator -> LBRACKET assignment_expression_opt RBRACKETZp_direct_abstract_declarator_3i  zPdirect_abstract_declarator -> direct_abstract_declarator LBRACKET TIMES RBRACKETZp_direct_abstract_declarator_4i  z5direct_abstract_declarator -> LBRACKET TIMES RBRACKETZp_direct_abstract_declarator_5i  z^direct_abstract_declarator -> direct_abstract_declarator LPAREN parameter_type_list_opt RPARENZp_direct_abstract_declarator_6i  zCdirect_abstract_declarator -> LPAREN parameter_type_list_opt RPARENZp_direct_abstract_declarator_7i   zblock_item -> declarationrH  Zp_block_itemi+  zblock_item -> statementi,  zblock_item_list -> block_itemrG  Zp_block_item_listi3  z-block_item_list -> block_item_list block_itemi4  z@compound_statement -> brace_open block_item_list_opt brace_closer,  Zp_compound_statement_1i:  z'labeled_statement -> ID COLON statementrJ  Zp_labeled_statement_1i@  z=labeled_statement -> CASE constant_expression COLON statementZp_labeled_statement_2iD  z,labeled_statement -> DEFAULT COLON statementZp_labeled_statement_3iH  z<selection_statement -> IF LPAREN expression RPAREN statementrL  Zp_selection_statement_1iL  zKselection_statement -> IF LPAREN expression RPAREN statement ELSE statementZp_selection_statement_2iP  z@selection_statement -> SWITCH LPAREN expression RPAREN statementZp_selection_statement_3iT  z?iteration_statement -> WHILE LPAREN expression RPAREN statementrM  Zp_iteration_statement_1iY  zGiteration_statement -> DO statement WHILE LPAREN expression RPAREN SEMIZp_iteration_statement_2i]  ziiteration_statement -> FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN statementZp_iteration_statement_3ia  zaiteration_statement -> FOR LPAREN declaration expression_opt SEMI expression_opt RPAREN statementZp_iteration_statement_4ie  zjump_statement -> GOTO ID SEMIrN  Zp_jump_statement_1ij  zjump_statement -> BREAK SEMIZp_jump_statement_2in  zjump_statement -> CONTINUE SEMIZp_jump_statement_3ir  z(jump_statement -> RETURN expression SEMIZp_jump_statement_4iv  zjump_statement -> RETURN SEMIiw  z+expression_statement -> expression_opt SEMIrK  Zp_expression_statementi|  z#expression -> assignment_expressionrP  Zp_expressioni  z4expression -> expression COMMA assignment_expressioni  ztypedef_name -> TYPEIDr  Zp_typedef_namei  z/assignment_expression -> conditional_expressionr2  Zp_assignment_expressioni  zSassignment_expression -> unary_expression assignment_operator assignment_expressioni  zassignment_operator -> EQUALSrR  Zp_assignment_operatori  zassignment_operator -> XOREQUALi  z!assignment_operator -> TIMESEQUALi  zassignment_operator -> DIVEQUALi  zassignment_operator -> MODEQUALi  z assignment_operator -> PLUSEQUALi  z!assignment_operator -> MINUSEQUALi  z"assignment_operator -> LSHIFTEQUALi  z"assignment_operator -> RSHIFTEQUALi  zassignment_operator -> ANDEQUALi  zassignment_operator -> OREQUALi  z-constant_expression -> conditional_expressionr_  Zp_constant_expressioni  z+conditional_expression -> binary_expressionr3  Zp_conditional_expressioni  zZconditional_expression -> binary_expression CONDOP expression COLON conditional_expressioni  z$binary_expression -> cast_expressionr5  Zp_binary_expressioni  z>binary_expression -> binary_expression TIMES binary_expressioni  z?binary_expression -> binary_expression DIVIDE binary_expressioni  z<binary_expression -> binary_expression MOD binary_expressioni  z=binary_expression -> binary_expression PLUS binary_expressioni  z>binary_expression -> binary_expression MINUS binary_expressioni  z?binary_expression -> binary_expression RSHIFT binary_expressioni  z?binary_expression -> binary_expression LSHIFT binary_expressioni  z;binary_expression -> binary_expression LT binary_expressioni  z;binary_expression -> binary_expression LE binary_expressioni  z;binary_expression -> binary_expression GE binary_expressioni  z;binary_expression -> binary_expression GT binary_expressioni  z;binary_expression -> binary_expression EQ binary_expressioni  z;binary_expression -> binary_expression NE binary_expressioni  z<binary_expression -> binary_expression AND binary_expressioni  z;binary_expression -> binary_expression OR binary_expressioni  z<binary_expression -> binary_expression XOR binary_expressioni  z=binary_expression -> binary_expression LAND binary_expressioni  z<binary_expression -> binary_expression LOR binary_expressioni  z#cast_expression -> unary_expressionr8  Zp_cast_expression_1i  z:cast_expression -> LPAREN type_name RPAREN cast_expressionZp_cast_expression_2i  z&unary_expression -> postfix_expressionr4  Zp_unary_expression_1i  z-unary_expression -> PLUSPLUS unary_expressionZp_unary_expression_2i  z/unary_expression -> MINUSMINUS unary_expressioni  z2unary_expression -> unary_operator cast_expressioni  z+unary_expression -> SIZEOF unary_expressionZp_unary_expression_3i  z2unary_expression -> SIZEOF LPAREN type_name RPARENi  zunary_operator -> ANDr7  Zp_unary_operatori  zunary_operator -> TIMESi  zunary_operator -> PLUSi  zunary_operator -> MINUSi  zunary_operator -> NOTi  zunary_operator -> LNOTi  z(postfix_expression -> primary_expressionr6  Zp_postfix_expression_1i  zEpostfix_expression -> postfix_expression LBRACKET expression RBRACKETZp_postfix_expression_2i  zOpostfix_expression -> postfix_expression LPAREN argument_expression_list RPARENZp_postfix_expression_3i  z6postfix_expression -> postfix_expression LPAREN RPARENi  z2postfix_expression -> postfix_expression PERIOD IDZp_postfix_expression_4i  z6postfix_expression -> postfix_expression PERIOD TYPEIDi  z1postfix_expression -> postfix_expression ARROW IDi  z5postfix_expression -> postfix_expression ARROW TYPEIDi  z1postfix_expression -> postfix_expression PLUSPLUSZp_postfix_expression_5i  z3postfix_expression -> postfix_expression MINUSMINUSi  zUpostfix_expression -> LPAREN type_name RPAREN brace_open initializer_list brace_closeZp_postfix_expression_6i  z[postfix_expression -> LPAREN type_name RPAREN brace_open initializer_list COMMA brace_closei  z primary_expression -> identifierr9  Zp_primary_expression_1i!  zprimary_expression -> constantZp_primary_expression_2i%  z,primary_expression -> unified_string_literalZp_primary_expression_3i)  z-primary_expression -> unified_wstring_literali*  z.primary_expression -> LPAREN expression RPARENZp_primary_expression_4i/  zGprimary_expression -> OFFSETOF LPAREN type_name COMMA identifier RPARENZp_primary_expression_5i3  z1argument_expression_list -> assignment_expressionr`  Zp_argument_expression_listi;  zPargument_expression_list -> argument_expression_list COMMA assignment_expressioni<  zidentifier -> IDr:  Zp_identifieriE  zconstant -> INT_CONST_DECr;  Zp_constant_1iI  zconstant -> INT_CONST_OCTiJ  zconstant -> INT_CONST_HEXiK  zconstant -> INT_CONST_BINiL  zconstant -> FLOAT_CONSTZp_constant_2iR  zconstant -> HEX_FLOAT_CONSTiS  zconstant -> CHAR_CONSTZp_constant_3iY  zconstant -> WCHAR_CONSTiZ  z(unified_string_literal -> STRING_LITERALr<  Zp_unified_string_literalie  z?unified_string_literal -> unified_string_literal STRING_LITERALif  z*unified_wstring_literal -> WSTRING_LITERALr=  Zp_unified_wstring_literalip  zBunified_wstring_literal -> unified_wstring_literal WSTRING_LITERALiq  zbrace_open -> LBRACEr+  Zp_brace_openi{  zbrace_close -> RBRACErZ  Zp_brace_closei  zempty -> <empty>r  Zp_emptyi  )Z_tabversionZ
_lr_methodZ_lr_signatureZ_lr_action_itemsZ
_lr_actionitemsZ_kZ_vzipZ_xZ_yZ_lr_goto_itemsZ_lr_gotoZ_lr_productions rc  rc  /usr/lib/python3.6/yacctab.py<module>   s                                                                                                                                                                                                                                                                                                            PK     ʽ\	  	  )  __pycache__/ast_transforms.cpython-36.pycnu [        3
gwU                 @   s    d dl mZ dd Zdd ZdS )   )c_astc             C   s   t | tjstt | jtjs"| S tjg | jj}d}xh| jjD ]\}t |tjtj	frz|jj
| t||j |jd }q@|dkr|jj
| q@|jj
| q@W || _| S )a   The 'case' statements in a 'switch' come out of parsing with one
        child node, so subsequent statements are just tucked to the parent
        Compound. Additionally, consecutive (fall-through) case statements
        come out messy. This is a peculiarity of the C grammar. The following:

            switch (myvar) {
                case 10:
                    k = 10;
                    p = k + 1;
                    return 10;
                case 20:
                case 30:
                    return 20;
                default:
                    break;
            }

        Creates this tree (pseudo-dump):

            Switch
                ID: myvar
                Compound:
                    Case 10:
                        k = 10
                    p = k + 1
                    return 10
                    Case 20:
                        Case 30:
                            return 20
                    Default:
                        break

        The goal of this transform it to fix this mess, turning it into the
        following:

            Switch
                ID: myvar
                Compound:
                    Case 10:
                        k = 10
                        p = k + 1
                        return 10
                    Case 20:
                    Case 30:
                        return 20
                    Default:
                        break

        A fixed AST node is returned. The argument may be modified.
    Nr   )
isinstancer   ZSwitchAssertionErrorZstmtZCompoundZcoordZblock_itemsCaseDefaultappend_extract_nested_casestmts)Zswitch_nodeZnew_compoundZ	last_caseZchild r   $/usr/lib/python3.6/ast_transforms.pyfix_switch_cases   s    3r   c             C   s:   t | jd tjtjfr6|j| jj  t|d | dS )z Recursively extract consecutive Case statements that are made nested
        by the parser and add them to the stmts_list.
        r   Nr   )r   r
   r   r   r   r   popr	   )Z	case_nodeZ
stmts_listr   r   r   r	   b   s    r	   N) r   r   r	   r   r   r   r   <module>
   s   UPK     ʽ\/)	  	  )  __pycache__/__init__.cpython-36.opt-1.pycnu [        3
gwUW                 @   sB   d ddgZ dZddlmZmZ ddlmZ dd
dZdddZdS )Zc_lexerc_parserZc_astz2.14    )PopenPIPE   )CParsercpp c             C   s   |g}t |tr||7 }n|dkr,||g7 }|| g7 }yt|tdd}|j d }W n2 tk
r } ztd	d|  W Y dd}~X nX |S )
ae   Preprocess a file using cpp.

        filename:
            Name of the file you want to preprocess.

        cpp_path:
        cpp_args:
            Refer to the documentation of parse_file for the meaning of these
            arguments.

        When successful, returns the preprocessed file's contents.
        Errors from cpp will be printed out.
    r   T)stdoutZuniversal_newlinesr   zUnable to invoke 'cpp'.  z(Make sure its path was passed correctly
zOriginal error: %sNzAUnable to invoke 'cpp'.  Make sure its path was passed correctly
)
isinstancelistr   r   ZcommunicateOSErrorRuntimeError)filenamecpp_pathcpp_args	path_listpipetexte r   /usr/lib/python3.6/__init__.pypreprocess_file   s     



r   FNc          
   C   sJ   |rt | ||}nt| d}|j }W dQ R X |dkr>t }|j|| S )a   Parse a C file using pycparser.

        filename:
            Name of the file you want to parse.

        use_cpp:
            Set to True if you want to execute the C pre-processor
            on the file prior to parsing it.

        cpp_path:
            If use_cpp is True, this is the path to 'cpp' on your
            system. If no path is provided, it attempts to just
            execute 'cpp', so it must be in your PATH.

        cpp_args:
            If use_cpp is True, set this to the command line arguments strings
            to cpp. Be careful with quotes - it's best to pass a raw string
            (r'') here. For example:
            r'-I../utils/fake_libc_include'
            If several arguments are required, pass a list of strings.

        parser:
            Optional parser object to be used instead of the default CParser

        When successful, an AST is returned. ParseError can be
        thrown if the file doesn't parse successfully.

        Errors from cpp will be printed out.
    ZrUN)r   openreadr   parse)r   Zuse_cppr   r   parserr   fr   r   r   
parse_file6   s    r   )r   r   )Fr   r   N)	__all____version__
subprocessr   r   r   r   r   r   r   r   r   r   <module>
   s   

% PK     ʽ\ǦX+:  +:  &  __pycache__/c_generator.cpython-36.pycnu [        3
gwU5                 @   s    d dl mZ G dd deZdS )   )c_astc               @   s  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdldd Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1dmd_d`Z2dadb Z3g fdcddZ4dedf Z5dgdh Z6didj Z7dkS )n
CGeneratorz Uses the same visitor pattern as c_ast.NodeVisitor, but modified to
        return a value from each visit method, using string accumulation in
        generic_visit.
    c             C   s
   d| _ d S )N    )indent_level)self r   !/usr/lib/python3.6/c_generator.py__init__   s    zCGenerator.__init__c             C   s
   d| j  S )N )r   )r   r   r   r   _make_indent   s    zCGenerator._make_indentc             C   s   d|j j }t| || j|S )NZvisit_)	__class____name__getattrgeneric_visit)r   nodemethodr   r   r   visit   s    zCGenerator.visitc                s,   |d krdS dj  fdd|j D S d S )N c             3   s   | ]\}} j |V  qd S )N)r   ).0Zc_namec)r   r   r   	<genexpr>#   s    z+CGenerator.generic_visit.<locals>.<genexpr>)joinZchildren)r   r   r   )r   r   r      s    zCGenerator.generic_visitc             C   s   |j S )N)value)r   nr   r   r   visit_Constant%   s    zCGenerator.visit_Constantc             C   s   |j S )N)name)r   r   r   r   r   visit_ID(   s    zCGenerator.visit_IDc             C   s$   | j |j}|d | j|j d S )N[])_parenthesize_unless_simpler   r   Z	subscript)r   r   Zarrrefr   r   r   visit_ArrayRef+   s    zCGenerator.visit_ArrayRefc             C   s"   | j |j}||j | j|j S )N)r   r   typer   Zfield)r   r   Zsrefr   r   r   visit_StructRef/   s    zCGenerator.visit_StructRefc             C   s$   | j |j}|d | j|j d S )N())r   r   r   args)r   r   Zfrefr   r   r   visit_FuncCall3   s    zCGenerator.visit_FuncCallc             C   s\   | j |j}|jdkrd| S |jdkr0d| S |jdkrJd| j|j S d|j|f S d S )Nzp++z%s++zp--z%s--Zsizeofz
sizeof(%s)z%s%s)r   expropr   )r   r   Zoperandr   r   r   visit_UnaryOp7   s    


zCGenerator.visit_UnaryOpc                s<    j |j fdd} j |j fdd}d||j|f S )Nc                s    j |  S )N)_is_simple_node)d)r   r   r   <lambda>F   s    z+CGenerator.visit_BinaryOp.<locals>.<lambda>c                s    j |  S )N)r*   )r+   )r   r   r   r,   H   s    z%s %s %s)_parenthesize_ifleftrightr(   )r   r   Zlval_strrval_strr   )r   r   visit_BinaryOpD   s
    zCGenerator.visit_BinaryOpc             C   s*   | j |jdd }d| j|j|j|f S )Nc             S   s   t | tjS )N)
isinstancer   
Assignment)r   r   r   r   r,   N   s    z-CGenerator.visit_Assignment.<locals>.<lambda>z%s %s %s)r-   Zrvaluer   Zlvaluer(   )r   r   r0   r   r   r   visit_AssignmentK   s    
zCGenerator.visit_Assignmentc             C   s   dj |jS )Nr
   )r   names)r   r   r   r   r   visit_IdentifierTypeQ   s    zCGenerator.visit_IdentifierTypec             C   sJ   t |tjrd| j| d S t |tjr<d| j| d S | j|S d S )N{}r#   r$   )r2   r   ZInitListr   ExprList)r   r   r   r   r   _visit_exprT   s
    zCGenerator._visit_exprFc             C   sL   |r
|j n| j|}|jr.|d| j|j 7 }|jrH|d| j|j 7 }|S )Nz : z = )r   _generate_declZbitsizer   initr:   )r   r   no_typesr   r   r   
visit_Decl\   s     zCGenerator.visit_Declc                sL    j |jd }t|jdkrH|ddj fdd|jdd  D  7 }|S )Nr   r   z, c             3   s   | ]} j |d dV  qdS )T)r=   N)r?   )r   decl)r   r   r   r   i   s   z,CGenerator.visit_DeclList.<locals>.<genexpr>)r   declslenr   )r   r   r>   r   )r   r   visit_DeclListf   s
    zCGenerator.visit_DeclListc             C   s2   d}|j r|dj|j d 7 }|| j|j7 }|S )Nr   r
   )storager   _generate_typer!   )r   r   r>   r   r   r   visit_Typedefm   s
     zCGenerator.visit_Typedefc             C   s(   d| j |j d }|d | j|j S )Nr#   r$   r
   )rE   Zto_typer   r'   )r   r   r>   r   r   r   
visit_Casts   s    zCGenerator.visit_Castc             C   s.   g }x|j D ]}|j| j| qW dj|S )Nz, )exprsappendr:   r   )r   r   visited_subexprsr'   r   r   r   visit_ExprListw   s    zCGenerator.visit_ExprListc             C   s.   g }x|j D ]}|j| j| qW dj|S )Nz, )rH   rI   r:   r   )r   r   rJ   r'   r   r   r   visit_InitList}   s    zCGenerator.visit_InitListc             C   s   d}|j r|d|j  7 }|jr|d7 }xXt|jjD ]H\}}||j 7 }|jr`|d| j|j 7 }|t|jjd kr4|d7 }q4W |d7 }|S )Nenumr
   z {z = r   z, r8   )r   values	enumerateZenumeratorsr   r   rB   )r   r   r>   iZ
enumeratorr   r   r   
visit_Enum   s     
zCGenerator.visit_Enumc                sj    j |j}d _ j |j}|jrVdj fdd|jD }|d | d | d S |d | d S d S )Nr   z;
c             3   s   | ]} j |V  qd S )N)r   )r   p)r   r   r   r      s    z+CGenerator.visit_FuncDef.<locals>.<genexpr>
)r   r@   r   bodyZparam_declsr   )r   r   r@   rT   Zknrdeclsr   )r   r   visit_FuncDef   s    zCGenerator.visit_FuncDefc             C   sF   d}x<|j D ]2}t|tjr,|| j|7 }q|| j|d 7 }qW |S )Nr   z;
)extr2   r   ZFuncDefr   )r   r   r>   rV   r   r   r   visit_FileAST   s    zCGenerator.visit_FileASTc                s`    j  d }  jd7  _|jr>|dj fdd|jD 7 }  jd8  _| j  d 7 }|S )Nz{
   r   c             3   s   | ]} j |V  qd S )N)_generate_stmt)r   stmt)r   r   r   r      s    z,CGenerator.visit_Compound.<locals>.<genexpr>z}
)r   r   Zblock_itemsr   )r   r   r>   r   )r   r   visit_Compound   s    zCGenerator.visit_Compoundc             C   s   dS )N;r   )r   r   r   r   r   visit_EmptyStatement   s    zCGenerator.visit_EmptyStatementc                s   dj  fdd|jD S )Nz, c             3   s   | ]} j |V  qd S )N)r   )r   Zparam)r   r   r   r      s    z-CGenerator.visit_ParamList.<locals>.<genexpr>)r   Zparams)r   r   r   )r   r   visit_ParamList   s    zCGenerator.visit_ParamListc             C   s&   d}|j r|d| j|j  7 }|d S )Nreturnr
   r\   )r'   r   )r   r   r>   r   r   r   visit_Return   s     zCGenerator.visit_Returnc             C   s   dS )Nzbreak;r   )r   r   r   r   r   visit_Break   s    zCGenerator.visit_Breakc             C   s   dS )Nz	continue;r   )r   r   r   r   r   visit_Continue   s    zCGenerator.visit_Continuec             C   s8   | j |jd }|| j |jd 7 }|| j |j7 }|S )Nz ? z : )r:   condiftrueiffalse)r   r   r>   r   r   r   visit_TernaryOp   s    zCGenerator.visit_TernaryOpc             C   sd   d}|j r|| j|j 7 }|d7 }|| j|jdd7 }|jr`|| j d 7 }|| j|jdd7 }|S )Nzif (z)
T)
add_indentzelse
)rc   r   rY   rd   re   r   )r   r   r>   r   r   r   visit_If   s     zCGenerator.visit_Ifc             C   s~   d}|j r|| j|j 7 }|d7 }|jr<|d| j|j 7 }|d7 }|jr^|d| j|j 7 }|d7 }|| j|jdd7 }|S )Nzfor (r\   r
   z)
T)rg   )r<   r   rc   nextrY   rZ   )r   r   r>   r   r   r   	visit_For   s       zCGenerator.visit_Forc             C   s:   d}|j r|| j|j 7 }|d7 }|| j|jdd7 }|S )Nzwhile (z)
T)rg   )rc   r   rY   rZ   )r   r   r>   r   r   r   visit_While   s     zCGenerator.visit_Whilec             C   sJ   d}|| j |jdd7 }|| j d 7 }|jr>|| j|j7 }|d7 }|S )Nzdo
T)rg   zwhile (z);)rY   rZ   r   rc   r   )r   r   r>   r   r   r   visit_DoWhile   s     zCGenerator.visit_DoWhilec             C   s,   d| j |j d }|| j|jdd7 }|S )Nzswitch (z)
T)rg   )r   rc   rY   rZ   )r   r   r>   r   r   r   visit_Switch   s    zCGenerator.visit_Switchc             C   s:   d| j |j d }x |jD ]}|| j|dd7 }qW |S )Nzcase z:
T)rg   )r   r'   stmtsrY   )r   r   r>   rZ   r   r   r   
visit_Case   s    zCGenerator.visit_Casec             C   s*   d}x |j D ]}|| j|dd7 }qW |S )Nz	default:
T)rg   )rn   rY   )r   r   r>   rZ   r   r   r   visit_Default   s    zCGenerator.visit_Defaultc             C   s   |j d | j|j S )Nz:
)r   rY   rZ   )r   r   r   r   r   visit_Label   s    zCGenerator.visit_Labelc             C   s   d|j  d S )Nzgoto r\   )r   )r   r   r   r   r   
visit_Goto   s    zCGenerator.visit_Gotoc             C   s   dS )Nz...r   )r   r   r   r   r   visit_EllipsisParam   s    zCGenerator.visit_EllipsisParamc             C   s   | j |dS )Nstruct)_generate_struct_union)r   r   r   r   r   visit_Struct  s    zCGenerator.visit_Structc             C   s   | j |jS )N)rE   r!   )r   r   r   r   r   visit_Typename  s    zCGenerator.visit_Typenamec             C   s   | j |dS )Nunion)ru   )r   r   r   r   r   visit_Union  s    zCGenerator.visit_Unionc             C   sf   d}xH|j D ]>}t|tjr,|d|j  7 }qt|tjr|d|j d 7 }qW |d| j|j 7 }|S )Nr   .r   r   z = )r   r2   r   IDConstantr   r   r'   )r   r   r>   r   r   r   r   visit_NamedInitializer  s    z!CGenerator.visit_NamedInitializerc             C   s
   | j |S )N)rE   )r   r   r   r   r   visit_FuncDecl  s    zCGenerator.visit_FuncDeclc             C   s   |d |j pd }|jr~|d7 }|| j 7 }|  jd7  _|d7 }x|jD ]}|| j|7 }qJW |  jd8  _|| j d 7 }|S )ze Generates code for structs and unions. name should be either
            'struct' or union.
        r
   r   rS   rX   z{
r8   )r   rA   r   r   rY   )r   r   r   r>   r@   r   r   r   ru     s    z!CGenerator._generate_struct_unionc             C   s   t |}|r|  jd7  _| j }|r4|  jd8  _|tjtjtjtjtjtj	tj
tjtjtjtjtjtjfkr|| j| d S |tjfkr| j|S || j| d S dS )z Generation from a statement node. This method exists as a wrapper
            for individual visit_* methods to handle different treatment of
            some statements in this context.
        rX   z;
rS   N)r!   r   r   r   Declr3   ZCastZUnaryOpZBinaryOpZ	TernaryOpFuncCallArrayRef	StructRefr|   r{   ZTypedefr9   r   ZCompound)r   r   rg   typindentr   r   r   rY   (  s      

zCGenerator._generate_stmtc             C   sH   d}|j rdj|j d }|jr4|dj|jd 7 }|| j|j7 }|S )z& Generation from a Decl node.
        r   r
   )Zfuncspecr   rD   rE   r!   )r   r   r>   r   r   r   r;   D  s      zCGenerator._generate_declc             C   s  t |}|tjkrNd}|jr2|dj|jd 7 }|| j|j 7 }|jrN|jnd}xt|D ]\}}t|tj	r|dkrt||d  tj
rd| d }|d| j|j d 7 }q\t|tjr|dkrt||d  tj
rd| d }|d| j|j d 7 }q\t|tj
r\|jr,d	dj|j|f }q\d
| }q\W |rJ|d| 7 }|S |tjkrf| j|j S |tjkr~| j|j S |tjkrdj|jd S |tj	tj
tjfkr| j|j ||g S | j|S dS )z Recursive generation from a type node. n is the type node.
            modifiers collects the PtrDecl, ArrayDecl and FuncDecl modifiers
            encountered on the way down to a TypeDecl, to allow proper
            generation from it.
        r   r
   r   r   r#   r$   r   r   z* %s %s*N)r!   r   ZTypeDeclZqualsr   r   ZdeclnamerO   r2   Z	ArrayDeclZPtrDeclZdimZFuncDeclr%   r   r;   ZTypenamerE   ZIdentifierTyper5   )r   r   Z	modifiersr   r>   ZnstrrP   Zmodifierr   r   r   rE   M  s@      zCGenerator._generate_typec             C   s&   | j |}||rd| d S |S dS )z Visits 'n' and returns its string representation, parenthesized
            if the condition function applied to the node returns True.
        r#   r$   N)r:   )r   r   Z	conditionr>   r   r   r   r-   {  s    
zCGenerator._parenthesize_ifc                s    j | fddS )z. Common use case for _parenthesize_if
        c                s    j |  S )N)r*   )r+   )r   r   r   r,     s    z8CGenerator._parenthesize_unless_simple.<locals>.<lambda>)r-   )r   r   r   )r   r   r     s    z&CGenerator._parenthesize_unless_simplec             C   s   t |tjtjtjtjtjfS )z~ Returns True for nodes that are "simple" - i.e. nodes that always
            have higher precedence than operators.
        )r2   r   r|   r{   r   r   r   )r   r   r   r   r   r*     s    zCGenerator._is_simple_nodeN)F)F)8r   
__module____qualname____doc__r	   r   r   r   r   r   r    r"   r&   r)   r1   r4   r6   r:   r?   rC   rF   rG   rK   rL   rQ   rU   rW   r[   r]   r^   r`   ra   rb   rf   rh   rj   rk   rl   rm   ro   rp   rq   rr   rs   rv   rw   ry   r}   r~   ru   rY   r;   rE   r-   r   r*   r   r   r   r   r      sj   


		


	.
r   N)r   r   objectr   r   r   r   r   <module>	   s   PK     ʽ\ǦX+:  +:  ,  __pycache__/c_generator.cpython-36.opt-1.pycnu [        3
gwU5                 @   s    d dl mZ G dd deZdS )   )c_astc               @   s  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdldd Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1dmd_d`Z2dadb Z3g fdcddZ4dedf Z5dgdh Z6didj Z7dkS )n
CGeneratorz Uses the same visitor pattern as c_ast.NodeVisitor, but modified to
        return a value from each visit method, using string accumulation in
        generic_visit.
    c             C   s
   d| _ d S )N    )indent_level)self r   !/usr/lib/python3.6/c_generator.py__init__   s    zCGenerator.__init__c             C   s
   d| j  S )N )r   )r   r   r   r   _make_indent   s    zCGenerator._make_indentc             C   s   d|j j }t| || j|S )NZvisit_)	__class____name__getattrgeneric_visit)r   nodemethodr   r   r   visit   s    zCGenerator.visitc                s,   |d krdS dj  fdd|j D S d S )N c             3   s   | ]\}} j |V  qd S )N)r   ).0Zc_namec)r   r   r   	<genexpr>#   s    z+CGenerator.generic_visit.<locals>.<genexpr>)joinZchildren)r   r   r   )r   r   r      s    zCGenerator.generic_visitc             C   s   |j S )N)value)r   nr   r   r   visit_Constant%   s    zCGenerator.visit_Constantc             C   s   |j S )N)name)r   r   r   r   r   visit_ID(   s    zCGenerator.visit_IDc             C   s$   | j |j}|d | j|j d S )N[])_parenthesize_unless_simpler   r   Z	subscript)r   r   Zarrrefr   r   r   visit_ArrayRef+   s    zCGenerator.visit_ArrayRefc             C   s"   | j |j}||j | j|j S )N)r   r   typer   Zfield)r   r   Zsrefr   r   r   visit_StructRef/   s    zCGenerator.visit_StructRefc             C   s$   | j |j}|d | j|j d S )N())r   r   r   args)r   r   Zfrefr   r   r   visit_FuncCall3   s    zCGenerator.visit_FuncCallc             C   s\   | j |j}|jdkrd| S |jdkr0d| S |jdkrJd| j|j S d|j|f S d S )Nzp++z%s++zp--z%s--Zsizeofz
sizeof(%s)z%s%s)r   expropr   )r   r   Zoperandr   r   r   visit_UnaryOp7   s    


zCGenerator.visit_UnaryOpc                s<    j |j fdd} j |j fdd}d||j|f S )Nc                s    j |  S )N)_is_simple_node)d)r   r   r   <lambda>F   s    z+CGenerator.visit_BinaryOp.<locals>.<lambda>c                s    j |  S )N)r*   )r+   )r   r   r   r,   H   s    z%s %s %s)_parenthesize_ifleftrightr(   )r   r   Zlval_strrval_strr   )r   r   visit_BinaryOpD   s
    zCGenerator.visit_BinaryOpc             C   s*   | j |jdd }d| j|j|j|f S )Nc             S   s   t | tjS )N)
isinstancer   
Assignment)r   r   r   r   r,   N   s    z-CGenerator.visit_Assignment.<locals>.<lambda>z%s %s %s)r-   Zrvaluer   Zlvaluer(   )r   r   r0   r   r   r   visit_AssignmentK   s    
zCGenerator.visit_Assignmentc             C   s   dj |jS )Nr
   )r   names)r   r   r   r   r   visit_IdentifierTypeQ   s    zCGenerator.visit_IdentifierTypec             C   sJ   t |tjrd| j| d S t |tjr<d| j| d S | j|S d S )N{}r#   r$   )r2   r   ZInitListr   ExprList)r   r   r   r   r   _visit_exprT   s
    zCGenerator._visit_exprFc             C   sL   |r
|j n| j|}|jr.|d| j|j 7 }|jrH|d| j|j 7 }|S )Nz : z = )r   _generate_declZbitsizer   initr:   )r   r   no_typesr   r   r   
visit_Decl\   s     zCGenerator.visit_Declc                sL    j |jd }t|jdkrH|ddj fdd|jdd  D  7 }|S )Nr   r   z, c             3   s   | ]} j |d dV  qdS )T)r=   N)r?   )r   decl)r   r   r   r   i   s   z,CGenerator.visit_DeclList.<locals>.<genexpr>)r   declslenr   )r   r   r>   r   )r   r   visit_DeclListf   s
    zCGenerator.visit_DeclListc             C   s2   d}|j r|dj|j d 7 }|| j|j7 }|S )Nr   r
   )storager   _generate_typer!   )r   r   r>   r   r   r   visit_Typedefm   s
     zCGenerator.visit_Typedefc             C   s(   d| j |j d }|d | j|j S )Nr#   r$   r
   )rE   Zto_typer   r'   )r   r   r>   r   r   r   
visit_Casts   s    zCGenerator.visit_Castc             C   s.   g }x|j D ]}|j| j| qW dj|S )Nz, )exprsappendr:   r   )r   r   visited_subexprsr'   r   r   r   visit_ExprListw   s    zCGenerator.visit_ExprListc             C   s.   g }x|j D ]}|j| j| qW dj|S )Nz, )rH   rI   r:   r   )r   r   rJ   r'   r   r   r   visit_InitList}   s    zCGenerator.visit_InitListc             C   s   d}|j r|d|j  7 }|jr|d7 }xXt|jjD ]H\}}||j 7 }|jr`|d| j|j 7 }|t|jjd kr4|d7 }q4W |d7 }|S )Nenumr
   z {z = r   z, r8   )r   values	enumerateZenumeratorsr   r   rB   )r   r   r>   iZ
enumeratorr   r   r   
visit_Enum   s     
zCGenerator.visit_Enumc                sj    j |j}d _ j |j}|jrVdj fdd|jD }|d | d | d S |d | d S d S )Nr   z;
c             3   s   | ]} j |V  qd S )N)r   )r   p)r   r   r   r      s    z+CGenerator.visit_FuncDef.<locals>.<genexpr>
)r   r@   r   bodyZparam_declsr   )r   r   r@   rT   Zknrdeclsr   )r   r   visit_FuncDef   s    zCGenerator.visit_FuncDefc             C   sF   d}x<|j D ]2}t|tjr,|| j|7 }q|| j|d 7 }qW |S )Nr   z;
)extr2   r   ZFuncDefr   )r   r   r>   rV   r   r   r   visit_FileAST   s    zCGenerator.visit_FileASTc                s`    j  d }  jd7  _|jr>|dj fdd|jD 7 }  jd8  _| j  d 7 }|S )Nz{
   r   c             3   s   | ]} j |V  qd S )N)_generate_stmt)r   stmt)r   r   r   r      s    z,CGenerator.visit_Compound.<locals>.<genexpr>z}
)r   r   Zblock_itemsr   )r   r   r>   r   )r   r   visit_Compound   s    zCGenerator.visit_Compoundc             C   s   dS )N;r   )r   r   r   r   r   visit_EmptyStatement   s    zCGenerator.visit_EmptyStatementc                s   dj  fdd|jD S )Nz, c             3   s   | ]} j |V  qd S )N)r   )r   Zparam)r   r   r   r      s    z-CGenerator.visit_ParamList.<locals>.<genexpr>)r   Zparams)r   r   r   )r   r   visit_ParamList   s    zCGenerator.visit_ParamListc             C   s&   d}|j r|d| j|j  7 }|d S )Nreturnr
   r\   )r'   r   )r   r   r>   r   r   r   visit_Return   s     zCGenerator.visit_Returnc             C   s   dS )Nzbreak;r   )r   r   r   r   r   visit_Break   s    zCGenerator.visit_Breakc             C   s   dS )Nz	continue;r   )r   r   r   r   r   visit_Continue   s    zCGenerator.visit_Continuec             C   s8   | j |jd }|| j |jd 7 }|| j |j7 }|S )Nz ? z : )r:   condiftrueiffalse)r   r   r>   r   r   r   visit_TernaryOp   s    zCGenerator.visit_TernaryOpc             C   sd   d}|j r|| j|j 7 }|d7 }|| j|jdd7 }|jr`|| j d 7 }|| j|jdd7 }|S )Nzif (z)
T)
add_indentzelse
)rc   r   rY   rd   re   r   )r   r   r>   r   r   r   visit_If   s     zCGenerator.visit_Ifc             C   s~   d}|j r|| j|j 7 }|d7 }|jr<|d| j|j 7 }|d7 }|jr^|d| j|j 7 }|d7 }|| j|jdd7 }|S )Nzfor (r\   r
   z)
T)rg   )r<   r   rc   nextrY   rZ   )r   r   r>   r   r   r   	visit_For   s       zCGenerator.visit_Forc             C   s:   d}|j r|| j|j 7 }|d7 }|| j|jdd7 }|S )Nzwhile (z)
T)rg   )rc   r   rY   rZ   )r   r   r>   r   r   r   visit_While   s     zCGenerator.visit_Whilec             C   sJ   d}|| j |jdd7 }|| j d 7 }|jr>|| j|j7 }|d7 }|S )Nzdo
T)rg   zwhile (z);)rY   rZ   r   rc   r   )r   r   r>   r   r   r   visit_DoWhile   s     zCGenerator.visit_DoWhilec             C   s,   d| j |j d }|| j|jdd7 }|S )Nzswitch (z)
T)rg   )r   rc   rY   rZ   )r   r   r>   r   r   r   visit_Switch   s    zCGenerator.visit_Switchc             C   s:   d| j |j d }x |jD ]}|| j|dd7 }qW |S )Nzcase z:
T)rg   )r   r'   stmtsrY   )r   r   r>   rZ   r   r   r   
visit_Case   s    zCGenerator.visit_Casec             C   s*   d}x |j D ]}|| j|dd7 }qW |S )Nz	default:
T)rg   )rn   rY   )r   r   r>   rZ   r   r   r   visit_Default   s    zCGenerator.visit_Defaultc             C   s   |j d | j|j S )Nz:
)r   rY   rZ   )r   r   r   r   r   visit_Label   s    zCGenerator.visit_Labelc             C   s   d|j  d S )Nzgoto r\   )r   )r   r   r   r   r   
visit_Goto   s    zCGenerator.visit_Gotoc             C   s   dS )Nz...r   )r   r   r   r   r   visit_EllipsisParam   s    zCGenerator.visit_EllipsisParamc             C   s   | j |dS )Nstruct)_generate_struct_union)r   r   r   r   r   visit_Struct  s    zCGenerator.visit_Structc             C   s   | j |jS )N)rE   r!   )r   r   r   r   r   visit_Typename  s    zCGenerator.visit_Typenamec             C   s   | j |dS )Nunion)ru   )r   r   r   r   r   visit_Union  s    zCGenerator.visit_Unionc             C   sf   d}xH|j D ]>}t|tjr,|d|j  7 }qt|tjr|d|j d 7 }qW |d| j|j 7 }|S )Nr   .r   r   z = )r   r2   r   IDConstantr   r   r'   )r   r   r>   r   r   r   r   visit_NamedInitializer  s    z!CGenerator.visit_NamedInitializerc             C   s
   | j |S )N)rE   )r   r   r   r   r   visit_FuncDecl  s    zCGenerator.visit_FuncDeclc             C   s   |d |j pd }|jr~|d7 }|| j 7 }|  jd7  _|d7 }x|jD ]}|| j|7 }qJW |  jd8  _|| j d 7 }|S )ze Generates code for structs and unions. name should be either
            'struct' or union.
        r
   r   rS   rX   z{
r8   )r   rA   r   r   rY   )r   r   r   r>   r@   r   r   r   ru     s    z!CGenerator._generate_struct_unionc             C   s   t |}|r|  jd7  _| j }|r4|  jd8  _|tjtjtjtjtjtj	tj
tjtjtjtjtjtjfkr|| j| d S |tjfkr| j|S || j| d S dS )z Generation from a statement node. This method exists as a wrapper
            for individual visit_* methods to handle different treatment of
            some statements in this context.
        rX   z;
rS   N)r!   r   r   r   Declr3   ZCastZUnaryOpZBinaryOpZ	TernaryOpFuncCallArrayRef	StructRefr|   r{   ZTypedefr9   r   ZCompound)r   r   rg   typindentr   r   r   rY   (  s      

zCGenerator._generate_stmtc             C   sH   d}|j rdj|j d }|jr4|dj|jd 7 }|| j|j7 }|S )z& Generation from a Decl node.
        r   r
   )Zfuncspecr   rD   rE   r!   )r   r   r>   r   r   r   r;   D  s      zCGenerator._generate_declc             C   s  t |}|tjkrNd}|jr2|dj|jd 7 }|| j|j 7 }|jrN|jnd}xt|D ]\}}t|tj	r|dkrt||d  tj
rd| d }|d| j|j d 7 }q\t|tjr|dkrt||d  tj
rd| d }|d| j|j d 7 }q\t|tj
r\|jr,d	dj|j|f }q\d
| }q\W |rJ|d| 7 }|S |tjkrf| j|j S |tjkr~| j|j S |tjkrdj|jd S |tj	tj
tjfkr| j|j ||g S | j|S dS )z Recursive generation from a type node. n is the type node.
            modifiers collects the PtrDecl, ArrayDecl and FuncDecl modifiers
            encountered on the way down to a TypeDecl, to allow proper
            generation from it.
        r   r
   r   r   r#   r$   r   r   z* %s %s*N)r!   r   ZTypeDeclZqualsr   r   ZdeclnamerO   r2   Z	ArrayDeclZPtrDeclZdimZFuncDeclr%   r   r;   ZTypenamerE   ZIdentifierTyper5   )r   r   Z	modifiersr   r>   ZnstrrP   Zmodifierr   r   r   rE   M  s@      zCGenerator._generate_typec             C   s&   | j |}||rd| d S |S dS )z Visits 'n' and returns its string representation, parenthesized
            if the condition function applied to the node returns True.
        r#   r$   N)r:   )r   r   Z	conditionr>   r   r   r   r-   {  s    
zCGenerator._parenthesize_ifc                s    j | fddS )z. Common use case for _parenthesize_if
        c                s    j |  S )N)r*   )r+   )r   r   r   r,     s    z8CGenerator._parenthesize_unless_simple.<locals>.<lambda>)r-   )r   r   r   )r   r   r     s    z&CGenerator._parenthesize_unless_simplec             C   s   t |tjtjtjtjtjfS )z~ Returns True for nodes that are "simple" - i.e. nodes that always
            have higher precedence than operators.
        )r2   r   r|   r{   r   r   r   )r   r   r   r   r   r*     s    zCGenerator._is_simple_nodeN)F)F)8r   
__module____qualname____doc__r	   r   r   r   r   r   r    r"   r&   r)   r1   r4   r6   r:   r?   rC   rF   rG   rK   rL   rQ   rU   rW   r[   r]   r^   r`   ra   rb   rf   rh   rj   rk   rl   rm   ro   rp   rq   rr   rs   rv   rw   ry   r}   r~   ru   rY   r;   rE   r-   r   r*   r   r   r   r   r      sj   


		


	.
r   N)r   r   objectr   r   r   r   r   <module>	   s   PK     ʽ\A&[\/  /  (  __pycache__/c_lexer.cpython-36.opt-1.pycnu [        3
]m8                 @   s<   d dl Z d dlZd dlmZ d dlmZ G dd deZdS )    N)lex)TOKENc            <   @   sl  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd ZdZi Zx<eD ]4Zedkrreed7< q\edkreed8< q\eeej < q\W ed ZdtZduZdvZdwZdxZdyZdze d{ e d| Zd}e Zee e Zee e Zd~ZdZdZdZdZde d e d e d Z de  d| Z!de! d Z"de" Z#de! d e! d Z$de! d e d Z%de  d| Z&de& d Z'de' Z(de& d e e& d Z)dZ*dZ+de+ d| e* d e* d Z,dZ-de d e d e d Z.de d e d e. d| e- d Z/dZ0dd Z1e2e'dd Z3e2edd Z4dd Z5dd Z6dZ7dd Z8dd Z9dd Z:dZ;e2e'dd Z<e2edd Z=dd Z>dZ?dd Z@dZAdZBdZCdZDdZEdZFdZGdZHdZIdZJdZKdZLdZMdZNdZOdZPdZQdZRdZSdZTdZUdZVdZWdZXdZYdZZdZ[dZ\dZ]dZ^dZ_dZ`dZadZbdZcdZddZedZfdZgdZhdZidZjdZkdZle2ddd Zme2ddd Zne'Zoe2e,dd Zpe2e/dd Zqe2edd Zre2edd Zse2edd Zte2edd Zue2edd Zve2e"dd Zwe2e#dd Zxe2e$dd  Zye2e%dd Zze2e(dd Z{e2e)dd Z|e2edd Z}d	d
 Z~dS (  CLexera   A lexer for the C language. After building it, set the
        input text with input(), and call token() to get new
        tokens.

        The public attribute filename can be set to an initial
        filaneme, but the lexer will update it upon #line
        directives.
    c             C   s@   || _ || _|| _|| _d| _d| _tjd| _tjd| _	dS )ab   Create a new Lexer.

            error_func:
                An error function. Will be called with an error
                message, line and column as arguments, in case of
                an error during lexing.

            on_lbrace_func, on_rbrace_func:
                Called when an LBRACE or RBRACE is encountered
                (likely to push/pop type_lookup_func's scope)

            type_lookup_func:
                A type lookup function. Given a string, it must
                return True IFF this string is a name of a type
                that was defined with a typedef earlier.
         Nz([ 	]*line\W)|([ 	]*\d+)z[ 	]*pragma\W)

error_funcon_lbrace_funcon_rbrace_functype_lookup_funcfilename
last_tokenrecompileline_patternpragma_pattern)selfr   r   r   r	    r   /usr/lib/python3.6/c_lexer.py__init__   s    zCLexer.__init__c             K   s   t j f d| i|| _dS )z Builds the lexer from the specification. Must be
            called after the lexer object is created.

            This method exists separately, because the PLY
            manual warns against calling lex.lex inside
            __init__
        objectN)r   lexer)r   kwargsr   r   r   build:   s    zCLexer.buildc             C   s   d| j _dS )z? Resets the internal line number counter of the lexer.
           N)r   lineno)r   r   r   r   reset_linenoD   s    zCLexer.reset_linenoc             C   s   | j j| d S )N)r   input)r   textr   r   r   r   I   s    zCLexer.inputc             C   s   | j j | _| jS )N)r   tokenr   )r   r   r   r   r   L   s    zCLexer.tokenc             C   s   | j jjdd|j}|j| S )z3 Find the column of the token in its line.
        
r   )r   lexdatarfindlexpos)r   r   Zlast_crr   r   r   find_tok_columnP   s    zCLexer.find_tok_columnc             C   s0   | j |}| j||d |d  | jjd d S )Nr   r   )_make_tok_locationr   r   skip)r   msgr   locationr   r   r   _error[   s    
zCLexer._errorc             C   s   |j | j|fS )N)r   r"   )r   r   r   r   r   r#   `   s    zCLexer._make_tok_location_BOOL_COMPLEXAUTOBREAKCASECHARCONSTCONTINUEDEFAULTDODOUBLEELSEENUMEXTERNFLOATFORGOTOIFINLINEINTLONGREGISTEROFFSETOFRESTRICTRETURNSHORTSIGNEDSIZEOFSTATICSTRUCTSWITCHTYPEDEFUNIONUNSIGNEDVOIDVOLATILEWHILEZ_BoolZ_ComplexIDTYPEIDINT_CONST_DECINT_CONST_OCTINT_CONST_HEXINT_CONST_BINFLOAT_CONSTHEX_FLOAT_CONST
CHAR_CONSTWCHAR_CONSTSTRING_LITERALWSTRING_LITERALPLUSMINUSTIMESDIVIDEMODORANDNOTXORLSHIFTRSHIFTLORLANDLNOTLTLEGTGEEQNEEQUALS
TIMESEQUALDIVEQUALMODEQUAL	PLUSEQUAL
MINUSEQUALLSHIFTEQUALRSHIFTEQUALANDEQUALXOREQUALOREQUALPLUSPLUS
MINUSMINUSARROWCONDOPLPARENRPARENLBRACKETRBRACKETLBRACERBRACECOMMAPERIODSEMICOLONELLIPSISPPHASHz[a-zA-Z_$][0-9a-zA-Z_$]*z0[xX]z[0-9a-fA-F]+z0[bB]z[01]+zD(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?z(0z)|([1-9][0-9]*)z0[0-7]*z0[0-7]*[89]z([a-zA-Z._~!=&\^\-\\?'"])z(\d+)z(x[0-9a-fA-F]+)z#([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])z(\\(|z))z
([^'\\\n]|'Lz('z*\n)|('z*$)z[^'
]+')|('')|('z	[^'\n]*')z
([^"\\\n]|"z*"*z([eE][-+]?[0-9]+)z([0-9]*\.[0-9]+)|([0-9]+\.)z((((z
?)|([0-9]+z
))[FfLl]?)z([pP][+-]?[0-9]+)z(((z)?\.z)|(z\.))(z[FfLl]?)ppline	exclusivepppragmac             C   sf   | j j|jj|jjdr2|jjd d | _| _n0| jj|jj|jjdrX|jjd n
d|_	|S dS )z[ \t]*\#)posr   Nr   r   )
r   matchr   r   r!   beginpp_linepp_filenamer   type)r   tr   r   r   t_PPHASH   s    zCLexer.t_PPHASHc             C   s0   | j d kr| jd| n|jjdjd| _d S )Nz$filename before line number in #liner   )r   r'   valuelstriprstripr   )r   r   r   r   r   t_ppline_FILENAME  s    
zCLexer.t_ppline_FILENAMEc             C   s   | j d kr|j| _ n d S )N)r   r   )r   r   r   r   r   t_ppline_LINE_NUMBER
  s    

zCLexer.t_ppline_LINE_NUMBERc             C   sH   | j dkr| jd| n t| j | j_| jdk	r8| j| _|jjd dS )z\nNzline number missing in #lineINITIAL)r   r'   intr   r   r   r
   r   )r   r   r   r   r   t_ppline_NEWLINE  s    

zCLexer.t_ppline_NEWLINEc             C   s   dS )lineNr   )r   r   r   r   r   t_ppline_PPLINE   s    zCLexer.t_ppline_PPLINEz 	c             C   s   | j d| d S )Nzinvalid #line directive)r'   )r   r   r   r   r   t_ppline_error&  s    zCLexer.t_ppline_errorc             C   s    |j  jd7  _|j jd dS )z\nr   r   N)r   r   r   )r   r   r   r   r   t_pppragma_NEWLINE,  s    zCLexer.t_pppragma_NEWLINEc             C   s   dS )ZpragmaNr   )r   r   r   r   r   t_pppragma_PPPRAGMA1  s    zCLexer.t_pppragma_PPPRAGMAz$ 	<>.-{}();=+-*/$%@&^~!?:,0123456789c             C   s   d S )Nr   )r   r   r   r   r   t_pppragma_STR7  s    zCLexer.t_pppragma_STRc             C   s   d S )Nr   )r   r   r   r   r   t_pppragma_ID:  s    zCLexer.t_pppragma_IDc             C   s   | j d| d S )Nzinvalid #pragma directive)r'   )r   r   r   r   r   t_pppragma_error=  s    zCLexer.t_pppragma_errorc             C   s   |j  j|jjd7  _dS )z\n+r   N)r   r   r   count)r   r   r   r   r   	t_NEWLINEF  s    zCLexer.t_NEWLINEz\+-z\*/%z\|&~z\^z<<z>>z\|\|z&&!<>z<=z>=z==z!==z\*=z/=z%=z\+=z-=z<<=z>>=z&=z\|=z\^=z\+\+z--z->z\?z\(z\)z\[z\],z\.;:z\.\.\.z\{c             C   s   | j   |S )N)r   )r   r   r   r   r   t_LBRACE  s    zCLexer.t_LBRACEz\}c             C   s   | j   |S )N)r   )r   r   r   r   r   t_RBRACE  s    zCLexer.t_RBRACEc             C   s   |S )Nr   )r   r   r   r   r   t_FLOAT_CONST  s    zCLexer.t_FLOAT_CONSTc             C   s   |S )Nr   )r   r   r   r   r   t_HEX_FLOAT_CONST  s    zCLexer.t_HEX_FLOAT_CONSTc             C   s   |S )Nr   )r   r   r   r   r   t_INT_CONST_HEX  s    zCLexer.t_INT_CONST_HEXc             C   s   |S )Nr   )r   r   r   r   r   t_INT_CONST_BIN  s    zCLexer.t_INT_CONST_BINc             C   s   d}| j || d S )NzInvalid octal constant)r'   )r   r   r%   r   r   r   t_BAD_CONST_OCT  s    zCLexer.t_BAD_CONST_OCTc             C   s   |S )Nr   )r   r   r   r   r   t_INT_CONST_OCT  s    zCLexer.t_INT_CONST_OCTc             C   s   |S )Nr   )r   r   r   r   r   t_INT_CONST_DEC  s    zCLexer.t_INT_CONST_DECc             C   s   |S )Nr   )r   r   r   r   r   t_CHAR_CONST  s    zCLexer.t_CHAR_CONSTc             C   s   |S )Nr   )r   r   r   r   r   t_WCHAR_CONST  s    zCLexer.t_WCHAR_CONSTc             C   s   d}| j || d S )NzUnmatched ')r'   )r   r   r%   r   r   r   t_UNMATCHED_QUOTE  s    zCLexer.t_UNMATCHED_QUOTEc             C   s   d|j  }| j|| d S )NzInvalid char constant %s)r   r'   )r   r   r%   r   r   r   t_BAD_CHAR_CONST  s    
zCLexer.t_BAD_CHAR_CONSTc             C   s   |S )Nr   )r   r   r   r   r   t_WSTRING_LITERAL  s    zCLexer.t_WSTRING_LITERALc             C   s   d}| j || d S )Nz#String contains invalid escape code)r'   )r   r   r%   r   r   r   t_BAD_STRING_LITERAL  s    zCLexer.t_BAD_STRING_LITERALc             C   s2   | j j|jd|_|jdkr.| j|jr.d|_|S )NrM   rN   )keyword_mapgetr   r   r	   )r   r   r   r   r   t_ID  s    zCLexer.t_IDc             C   s"   dt |jd  }| j|| d S )NzIllegal character %sr   )reprr   r'   )r   r   r%   r   r   r   t_error  s    zCLexer.t_errorN)%r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   );rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   )__name__
__module____qualname____doc__r   r   r   r   r   r"   r'   r#   keywordsr   keywordlowertokensZ
identifierZ
hex_prefixZ
hex_digitsZ
bin_prefixZ
bin_digitsZinteger_suffix_optZdecimal_constantZoctal_constantZhex_constantZbin_constantZbad_octal_constantZsimple_escapeZdecimal_escapeZ
hex_escapeZ
bad_escapeZescape_sequenceZcconst_charZ
char_constZwchar_constZunmatched_quoteZbad_char_constZstring_charZstring_literalZwstring_literalZbad_string_literalZexponent_partZfractional_constantZfloating_constantZbinary_exponent_partZhex_fractional_constantZhex_floating_constantZstatesr   r   r   r   r   r   Zt_ppline_ignorer   r   r   Zt_pppragma_ignorer   r   r   Zt_ignorer   Zt_PLUSZt_MINUSZt_TIMESZt_DIVIDEZt_MODZt_ORZt_ANDZt_NOTZt_XORZt_LSHIFTZt_RSHIFTZt_LORZt_LANDZt_LNOTZt_LTZt_GTZt_LEZt_GEZt_EQZt_NEZt_EQUALSZt_TIMESEQUALZ
t_DIVEQUALZ
t_MODEQUALZt_PLUSEQUALZt_MINUSEQUALZt_LSHIFTEQUALZt_RSHIFTEQUALZ
t_ANDEQUALZ	t_OREQUALZ
t_XOREQUALZ
t_PLUSPLUSZt_MINUSMINUSZt_ARROWZt_CONDOPZt_LPARENZt_RPARENZ
t_LBRACKETZ
t_RBRACKETZt_COMMAZt_PERIODZt_SEMIZt_COLONZ
t_ELLIPSISr   r   Zt_STRING_LITERALr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s@  !
      


                         		$ 	r   )r   sysZplyr   Zply.lexr   r   r   r   r   r   r   <module>	   s   PK     ʽ\A&[\/  /  "  __pycache__/c_lexer.cpython-36.pycnu [        3
]m8                 @   s<   d dl Z d dlZd dlmZ d dlmZ G dd deZdS )    N)lex)TOKENc            <   @   sl  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd ZdZi Zx<eD ]4Zedkrreed7< q\edkreed8< q\eeej < q\W ed ZdtZduZdvZdwZdxZdyZdze d{ e d| Zd}e Zee e Zee e Zd~ZdZdZdZdZde d e d e d Z de  d| Z!de! d Z"de" Z#de! d e! d Z$de! d e d Z%de  d| Z&de& d Z'de' Z(de& d e e& d Z)dZ*dZ+de+ d| e* d e* d Z,dZ-de d e d e d Z.de d e d e. d| e- d Z/dZ0dd Z1e2e'dd Z3e2edd Z4dd Z5dd Z6dZ7dd Z8dd Z9dd Z:dZ;e2e'dd Z<e2edd Z=dd Z>dZ?dd Z@dZAdZBdZCdZDdZEdZFdZGdZHdZIdZJdZKdZLdZMdZNdZOdZPdZQdZRdZSdZTdZUdZVdZWdZXdZYdZZdZ[dZ\dZ]dZ^dZ_dZ`dZadZbdZcdZddZedZfdZgdZhdZidZjdZkdZle2ddd Zme2ddd Zne'Zoe2e,dd Zpe2e/dd Zqe2edd Zre2edd Zse2edd Zte2edd Zue2edd Zve2e"dd Zwe2e#dd Zxe2e$dd  Zye2e%dd Zze2e(dd Z{e2e)dd Z|e2edd Z}d	d
 Z~dS (  CLexera   A lexer for the C language. After building it, set the
        input text with input(), and call token() to get new
        tokens.

        The public attribute filename can be set to an initial
        filaneme, but the lexer will update it upon #line
        directives.
    c             C   s@   || _ || _|| _|| _d| _d| _tjd| _tjd| _	dS )ab   Create a new Lexer.

            error_func:
                An error function. Will be called with an error
                message, line and column as arguments, in case of
                an error during lexing.

            on_lbrace_func, on_rbrace_func:
                Called when an LBRACE or RBRACE is encountered
                (likely to push/pop type_lookup_func's scope)

            type_lookup_func:
                A type lookup function. Given a string, it must
                return True IFF this string is a name of a type
                that was defined with a typedef earlier.
         Nz([ 	]*line\W)|([ 	]*\d+)z[ 	]*pragma\W)

error_funcon_lbrace_funcon_rbrace_functype_lookup_funcfilename
last_tokenrecompileline_patternpragma_pattern)selfr   r   r   r	    r   /usr/lib/python3.6/c_lexer.py__init__   s    zCLexer.__init__c             K   s   t j f d| i|| _dS )z Builds the lexer from the specification. Must be
            called after the lexer object is created.

            This method exists separately, because the PLY
            manual warns against calling lex.lex inside
            __init__
        objectN)r   lexer)r   kwargsr   r   r   build:   s    zCLexer.buildc             C   s   d| j _dS )z? Resets the internal line number counter of the lexer.
           N)r   lineno)r   r   r   r   reset_linenoD   s    zCLexer.reset_linenoc             C   s   | j j| d S )N)r   input)r   textr   r   r   r   I   s    zCLexer.inputc             C   s   | j j | _| jS )N)r   tokenr   )r   r   r   r   r   L   s    zCLexer.tokenc             C   s   | j jjdd|j}|j| S )z3 Find the column of the token in its line.
        
r   )r   lexdatarfindlexpos)r   r   Zlast_crr   r   r   find_tok_columnP   s    zCLexer.find_tok_columnc             C   s0   | j |}| j||d |d  | jjd d S )Nr   r   )_make_tok_locationr   r   skip)r   msgr   locationr   r   r   _error[   s    
zCLexer._errorc             C   s   |j | j|fS )N)r   r"   )r   r   r   r   r   r#   `   s    zCLexer._make_tok_location_BOOL_COMPLEXAUTOBREAKCASECHARCONSTCONTINUEDEFAULTDODOUBLEELSEENUMEXTERNFLOATFORGOTOIFINLINEINTLONGREGISTEROFFSETOFRESTRICTRETURNSHORTSIGNEDSIZEOFSTATICSTRUCTSWITCHTYPEDEFUNIONUNSIGNEDVOIDVOLATILEWHILEZ_BoolZ_ComplexIDTYPEIDINT_CONST_DECINT_CONST_OCTINT_CONST_HEXINT_CONST_BINFLOAT_CONSTHEX_FLOAT_CONST
CHAR_CONSTWCHAR_CONSTSTRING_LITERALWSTRING_LITERALPLUSMINUSTIMESDIVIDEMODORANDNOTXORLSHIFTRSHIFTLORLANDLNOTLTLEGTGEEQNEEQUALS
TIMESEQUALDIVEQUALMODEQUAL	PLUSEQUAL
MINUSEQUALLSHIFTEQUALRSHIFTEQUALANDEQUALXOREQUALOREQUALPLUSPLUS
MINUSMINUSARROWCONDOPLPARENRPARENLBRACKETRBRACKETLBRACERBRACECOMMAPERIODSEMICOLONELLIPSISPPHASHz[a-zA-Z_$][0-9a-zA-Z_$]*z0[xX]z[0-9a-fA-F]+z0[bB]z[01]+zD(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?z(0z)|([1-9][0-9]*)z0[0-7]*z0[0-7]*[89]z([a-zA-Z._~!=&\^\-\\?'"])z(\d+)z(x[0-9a-fA-F]+)z#([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])z(\\(|z))z
([^'\\\n]|'Lz('z*\n)|('z*$)z[^'
]+')|('')|('z	[^'\n]*')z
([^"\\\n]|"z*"*z([eE][-+]?[0-9]+)z([0-9]*\.[0-9]+)|([0-9]+\.)z((((z
?)|([0-9]+z
))[FfLl]?)z([pP][+-]?[0-9]+)z(((z)?\.z)|(z\.))(z[FfLl]?)ppline	exclusivepppragmac             C   sf   | j j|jj|jjdr2|jjd d | _| _n0| jj|jj|jjdrX|jjd n
d|_	|S dS )z[ \t]*\#)posr   Nr   r   )
r   matchr   r   r!   beginpp_linepp_filenamer   type)r   tr   r   r   t_PPHASH   s    zCLexer.t_PPHASHc             C   s0   | j d kr| jd| n|jjdjd| _d S )Nz$filename before line number in #liner   )r   r'   valuelstriprstripr   )r   r   r   r   r   t_ppline_FILENAME  s    
zCLexer.t_ppline_FILENAMEc             C   s   | j d kr|j| _ n d S )N)r   r   )r   r   r   r   r   t_ppline_LINE_NUMBER
  s    

zCLexer.t_ppline_LINE_NUMBERc             C   sH   | j dkr| jd| n t| j | j_| jdk	r8| j| _|jjd dS )z\nNzline number missing in #lineINITIAL)r   r'   intr   r   r   r
   r   )r   r   r   r   r   t_ppline_NEWLINE  s    

zCLexer.t_ppline_NEWLINEc             C   s   dS )lineNr   )r   r   r   r   r   t_ppline_PPLINE   s    zCLexer.t_ppline_PPLINEz 	c             C   s   | j d| d S )Nzinvalid #line directive)r'   )r   r   r   r   r   t_ppline_error&  s    zCLexer.t_ppline_errorc             C   s    |j  jd7  _|j jd dS )z\nr   r   N)r   r   r   )r   r   r   r   r   t_pppragma_NEWLINE,  s    zCLexer.t_pppragma_NEWLINEc             C   s   dS )ZpragmaNr   )r   r   r   r   r   t_pppragma_PPPRAGMA1  s    zCLexer.t_pppragma_PPPRAGMAz$ 	<>.-{}();=+-*/$%@&^~!?:,0123456789c             C   s   d S )Nr   )r   r   r   r   r   t_pppragma_STR7  s    zCLexer.t_pppragma_STRc             C   s   d S )Nr   )r   r   r   r   r   t_pppragma_ID:  s    zCLexer.t_pppragma_IDc             C   s   | j d| d S )Nzinvalid #pragma directive)r'   )r   r   r   r   r   t_pppragma_error=  s    zCLexer.t_pppragma_errorc             C   s   |j  j|jjd7  _dS )z\n+r   N)r   r   r   count)r   r   r   r   r   	t_NEWLINEF  s    zCLexer.t_NEWLINEz\+-z\*/%z\|&~z\^z<<z>>z\|\|z&&!<>z<=z>=z==z!==z\*=z/=z%=z\+=z-=z<<=z>>=z&=z\|=z\^=z\+\+z--z->z\?z\(z\)z\[z\],z\.;:z\.\.\.z\{c             C   s   | j   |S )N)r   )r   r   r   r   r   t_LBRACE  s    zCLexer.t_LBRACEz\}c             C   s   | j   |S )N)r   )r   r   r   r   r   t_RBRACE  s    zCLexer.t_RBRACEc             C   s   |S )Nr   )r   r   r   r   r   t_FLOAT_CONST  s    zCLexer.t_FLOAT_CONSTc             C   s   |S )Nr   )r   r   r   r   r   t_HEX_FLOAT_CONST  s    zCLexer.t_HEX_FLOAT_CONSTc             C   s   |S )Nr   )r   r   r   r   r   t_INT_CONST_HEX  s    zCLexer.t_INT_CONST_HEXc             C   s   |S )Nr   )r   r   r   r   r   t_INT_CONST_BIN  s    zCLexer.t_INT_CONST_BINc             C   s   d}| j || d S )NzInvalid octal constant)r'   )r   r   r%   r   r   r   t_BAD_CONST_OCT  s    zCLexer.t_BAD_CONST_OCTc             C   s   |S )Nr   )r   r   r   r   r   t_INT_CONST_OCT  s    zCLexer.t_INT_CONST_OCTc             C   s   |S )Nr   )r   r   r   r   r   t_INT_CONST_DEC  s    zCLexer.t_INT_CONST_DECc             C   s   |S )Nr   )r   r   r   r   r   t_CHAR_CONST  s    zCLexer.t_CHAR_CONSTc             C   s   |S )Nr   )r   r   r   r   r   t_WCHAR_CONST  s    zCLexer.t_WCHAR_CONSTc             C   s   d}| j || d S )NzUnmatched ')r'   )r   r   r%   r   r   r   t_UNMATCHED_QUOTE  s    zCLexer.t_UNMATCHED_QUOTEc             C   s   d|j  }| j|| d S )NzInvalid char constant %s)r   r'   )r   r   r%   r   r   r   t_BAD_CHAR_CONST  s    
zCLexer.t_BAD_CHAR_CONSTc             C   s   |S )Nr   )r   r   r   r   r   t_WSTRING_LITERAL  s    zCLexer.t_WSTRING_LITERALc             C   s   d}| j || d S )Nz#String contains invalid escape code)r'   )r   r   r%   r   r   r   t_BAD_STRING_LITERAL  s    zCLexer.t_BAD_STRING_LITERALc             C   s2   | j j|jd|_|jdkr.| j|jr.d|_|S )NrM   rN   )keyword_mapgetr   r   r	   )r   r   r   r   r   t_ID  s    zCLexer.t_IDc             C   s"   dt |jd  }| j|| d S )NzIllegal character %sr   )reprr   r'   )r   r   r%   r   r   r   t_error  s    zCLexer.t_errorN)%r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   );rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   )__name__
__module____qualname____doc__r   r   r   r   r   r"   r'   r#   keywordsr   keywordlowertokensZ
identifierZ
hex_prefixZ
hex_digitsZ
bin_prefixZ
bin_digitsZinteger_suffix_optZdecimal_constantZoctal_constantZhex_constantZbin_constantZbad_octal_constantZsimple_escapeZdecimal_escapeZ
hex_escapeZ
bad_escapeZescape_sequenceZcconst_charZ
char_constZwchar_constZunmatched_quoteZbad_char_constZstring_charZstring_literalZwstring_literalZbad_string_literalZexponent_partZfractional_constantZfloating_constantZbinary_exponent_partZhex_fractional_constantZhex_floating_constantZstatesr   r   r   r   r   r   Zt_ppline_ignorer   r   r   Zt_pppragma_ignorer   r   r   Zt_ignorer   Zt_PLUSZt_MINUSZt_TIMESZt_DIVIDEZt_MODZt_ORZt_ANDZt_NOTZt_XORZt_LSHIFTZt_RSHIFTZt_LORZt_LANDZt_LNOTZt_LTZt_GTZt_LEZt_GEZt_EQZt_NEZt_EQUALSZt_TIMESEQUALZ
t_DIVEQUALZ
t_MODEQUALZt_PLUSEQUALZt_MINUSEQUALZt_LSHIFTEQUALZt_RSHIFTEQUALZ
t_ANDEQUALZ	t_OREQUALZ
t_XOREQUALZ
t_PLUSPLUSZt_MINUSMINUSZt_ARROWZt_CONDOPZt_LPARENZt_RPARENZ
t_LBRACKETZ
t_RBRACKETZt_COMMAZt_PERIODZt_SEMIZt_COLONZ
t_ELLIPSISr   r   Zt_STRING_LITERALr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s@  !
      


                         		$ 	r   )r   sysZplyr   Zply.lexr   r   r   r   r   r   r   <module>	   s   PK     ʽ\/)	  	  #  __pycache__/__init__.cpython-36.pycnu [        3
gwUW                 @   sB   d ddgZ dZddlmZmZ ddlmZ dd
dZdddZdS )Zc_lexerc_parserZc_astz2.14    )PopenPIPE   )CParsercpp c             C   s   |g}t |tr||7 }n|dkr,||g7 }|| g7 }yt|tdd}|j d }W n2 tk
r } ztd	d|  W Y dd}~X nX |S )
ae   Preprocess a file using cpp.

        filename:
            Name of the file you want to preprocess.

        cpp_path:
        cpp_args:
            Refer to the documentation of parse_file for the meaning of these
            arguments.

        When successful, returns the preprocessed file's contents.
        Errors from cpp will be printed out.
    r   T)stdoutZuniversal_newlinesr   zUnable to invoke 'cpp'.  z(Make sure its path was passed correctly
zOriginal error: %sNzAUnable to invoke 'cpp'.  Make sure its path was passed correctly
)
isinstancelistr   r   ZcommunicateOSErrorRuntimeError)filenamecpp_pathcpp_args	path_listpipetexte r   /usr/lib/python3.6/__init__.pypreprocess_file   s     



r   FNc          
   C   sJ   |rt | ||}nt| d}|j }W dQ R X |dkr>t }|j|| S )a   Parse a C file using pycparser.

        filename:
            Name of the file you want to parse.

        use_cpp:
            Set to True if you want to execute the C pre-processor
            on the file prior to parsing it.

        cpp_path:
            If use_cpp is True, this is the path to 'cpp' on your
            system. If no path is provided, it attempts to just
            execute 'cpp', so it must be in your PATH.

        cpp_args:
            If use_cpp is True, set this to the command line arguments strings
            to cpp. Be careful with quotes - it's best to pass a raw string
            (r'') here. For example:
            r'-I../utils/fake_libc_include'
            If several arguments are required, pass a list of strings.

        parser:
            Optional parser object to be used instead of the default CParser

        When successful, an AST is returned. ParseError can be
        thrown if the file doesn't parse successfully.

        Errors from cpp will be printed out.
    ZrUN)r   openreadr   parse)r   Zuse_cppr   r   parserr   fr   r   r   
parse_file6   s    r   )r   r   )Fr   r   N)	__all____version__
subprocessr   r   r   r   r   r   r   r   r   r   <module>
   s   

% PK     ʽ\m8  m8  
  c_lexer.pynu [        #------------------------------------------------------------------------------
# pycparser: c_lexer.py
#
# CLexer class: lexer for the C language
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#------------------------------------------------------------------------------
import re
import sys

from ply import lex
from ply.lex import TOKEN


class CLexer(object):
    """ A lexer for the C language. After building it, set the
        input text with input(), and call token() to get new
        tokens.

        The public attribute filename can be set to an initial
        filaneme, but the lexer will update it upon #line
        directives.
    """
    def __init__(self, error_func, on_lbrace_func, on_rbrace_func,
                 type_lookup_func):
        """ Create a new Lexer.

            error_func:
                An error function. Will be called with an error
                message, line and column as arguments, in case of
                an error during lexing.

            on_lbrace_func, on_rbrace_func:
                Called when an LBRACE or RBRACE is encountered
                (likely to push/pop type_lookup_func's scope)

            type_lookup_func:
                A type lookup function. Given a string, it must
                return True IFF this string is a name of a type
                that was defined with a typedef earlier.
        """
        self.error_func = error_func
        self.on_lbrace_func = on_lbrace_func
        self.on_rbrace_func = on_rbrace_func
        self.type_lookup_func = type_lookup_func
        self.filename = ''

        # Keeps track of the last token returned from self.token()
        self.last_token = None

        # Allow either "# line" or "# <num>" to support GCC's
        # cpp output
        #
        self.line_pattern = re.compile('([ \t]*line\W)|([ \t]*\d+)')
        self.pragma_pattern = re.compile('[ \t]*pragma\W')

    def build(self, **kwargs):
        """ Builds the lexer from the specification. Must be
            called after the lexer object is created.

            This method exists separately, because the PLY
            manual warns against calling lex.lex inside
            __init__
        """
        self.lexer = lex.lex(object=self, **kwargs)

    def reset_lineno(self):
        """ Resets the internal line number counter of the lexer.
        """
        self.lexer.lineno = 1

    def input(self, text):
        self.lexer.input(text)

    def token(self):
        self.last_token = self.lexer.token()
        return self.last_token

    def find_tok_column(self, token):
        """ Find the column of the token in its line.
        """
        last_cr = self.lexer.lexdata.rfind('\n', 0, token.lexpos)
        return token.lexpos - last_cr

    ######################--   PRIVATE   --######################

    ##
    ## Internal auxiliary methods
    ##
    def _error(self, msg, token):
        location = self._make_tok_location(token)
        self.error_func(msg, location[0], location[1])
        self.lexer.skip(1)

    def _make_tok_location(self, token):
        return (token.lineno, self.find_tok_column(token))

    ##
    ## Reserved keywords
    ##
    keywords = (
        '_BOOL', '_COMPLEX', 'AUTO', 'BREAK', 'CASE', 'CHAR', 'CONST',
        'CONTINUE', 'DEFAULT', 'DO', 'DOUBLE', 'ELSE', 'ENUM', 'EXTERN',
        'FLOAT', 'FOR', 'GOTO', 'IF', 'INLINE', 'INT', 'LONG', 
        'REGISTER', 'OFFSETOF',
        'RESTRICT', 'RETURN', 'SHORT', 'SIGNED', 'SIZEOF', 'STATIC', 'STRUCT',
        'SWITCH', 'TYPEDEF', 'UNION', 'UNSIGNED', 'VOID',
        'VOLATILE', 'WHILE',
    )

    keyword_map = {}
    for keyword in keywords:
        if keyword == '_BOOL':
            keyword_map['_Bool'] = keyword
        elif keyword == '_COMPLEX':
            keyword_map['_Complex'] = keyword
        else:
            keyword_map[keyword.lower()] = keyword

    ##
    ## All the tokens recognized by the lexer
    ##
    tokens = keywords + (
        # Identifiers
        'ID',

        # Type identifiers (identifiers previously defined as
        # types with typedef)
        'TYPEID',

        # constants
        'INT_CONST_DEC', 'INT_CONST_OCT', 'INT_CONST_HEX', 'INT_CONST_BIN',
        'FLOAT_CONST', 'HEX_FLOAT_CONST',
        'CHAR_CONST',
        'WCHAR_CONST',

        # String literals
        'STRING_LITERAL',
        'WSTRING_LITERAL',

        # Operators
        'PLUS', 'MINUS', 'TIMES', 'DIVIDE', 'MOD',
        'OR', 'AND', 'NOT', 'XOR', 'LSHIFT', 'RSHIFT',
        'LOR', 'LAND', 'LNOT',
        'LT', 'LE', 'GT', 'GE', 'EQ', 'NE',

        # Assignment
        'EQUALS', 'TIMESEQUAL', 'DIVEQUAL', 'MODEQUAL',
        'PLUSEQUAL', 'MINUSEQUAL',
        'LSHIFTEQUAL','RSHIFTEQUAL', 'ANDEQUAL', 'XOREQUAL',
        'OREQUAL',

        # Increment/decrement
        'PLUSPLUS', 'MINUSMINUS',

        # Structure dereference (->)
        'ARROW',

        # Conditional operator (?)
        'CONDOP',

        # Delimeters
        'LPAREN', 'RPAREN',         # ( )
        'LBRACKET', 'RBRACKET',     # [ ]
        'LBRACE', 'RBRACE',         # { }
        'COMMA', 'PERIOD',          # . ,
        'SEMI', 'COLON',            # ; :

        # Ellipsis (...)
        'ELLIPSIS',

        # pre-processor
        'PPHASH',      # '#'
    )

    ##
    ## Regexes for use in tokens
    ##
    ##

    # valid C identifiers (K&R2: A.2.3), plus '$' (supported by some compilers)
    identifier = r'[a-zA-Z_$][0-9a-zA-Z_$]*'

    hex_prefix = '0[xX]'
    hex_digits = '[0-9a-fA-F]+'
    bin_prefix = '0[bB]'
    bin_digits = '[01]+'

    # integer constants (K&R2: A.2.5.1)
    integer_suffix_opt = r'(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?'
    decimal_constant = '(0'+integer_suffix_opt+')|([1-9][0-9]*'+integer_suffix_opt+')'
    octal_constant = '0[0-7]*'+integer_suffix_opt
    hex_constant = hex_prefix+hex_digits+integer_suffix_opt
    bin_constant = bin_prefix+bin_digits+integer_suffix_opt

    bad_octal_constant = '0[0-7]*[89]'

    # character constants (K&R2: A.2.5.2)
    # Note: a-zA-Z and '.-~^_!=&;,' are allowed as escape chars to support #line
    # directives with Windows paths as filenames (..\..\dir\file)
    # For the same reason, decimal_escape allows all digit sequences. We want to
    # parse all correct code, even if it means to sometimes parse incorrect
    # code.
    #
    simple_escape = r"""([a-zA-Z._~!=&\^\-\\?'"])"""
    decimal_escape = r"""(\d+)"""
    hex_escape = r"""(x[0-9a-fA-F]+)"""
    bad_escape = r"""([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])"""

    escape_sequence = r"""(\\("""+simple_escape+'|'+decimal_escape+'|'+hex_escape+'))'
    cconst_char = r"""([^'\\\n]|"""+escape_sequence+')'
    char_const = "'"+cconst_char+"'"
    wchar_const = 'L'+char_const
    unmatched_quote = "('"+cconst_char+"*\\n)|('"+cconst_char+"*$)"
    bad_char_const = r"""('"""+cconst_char+"""[^'\n]+')|('')|('"""+bad_escape+r"""[^'\n]*')"""

    # string literals (K&R2: A.2.6)
    string_char = r"""([^"\\\n]|"""+escape_sequence+')'
    string_literal = '"'+string_char+'*"'
    wstring_literal = 'L'+string_literal
    bad_string_literal = '"'+string_char+'*'+bad_escape+string_char+'*"'

    # floating constants (K&R2: A.2.5.3)
    exponent_part = r"""([eE][-+]?[0-9]+)"""
    fractional_constant = r"""([0-9]*\.[0-9]+)|([0-9]+\.)"""
    floating_constant = '(((('+fractional_constant+')'+exponent_part+'?)|([0-9]+'+exponent_part+'))[FfLl]?)'
    binary_exponent_part = r'''([pP][+-]?[0-9]+)'''
    hex_fractional_constant = '((('+hex_digits+r""")?\."""+hex_digits+')|('+hex_digits+r"""\.))"""
    hex_floating_constant = '('+hex_prefix+'('+hex_digits+'|'+hex_fractional_constant+')'+binary_exponent_part+'[FfLl]?)'

    ##
    ## Lexer states: used for preprocessor \n-terminated directives
    ##
    states = (
        # ppline: preprocessor line directives
        #
        ('ppline', 'exclusive'),

        # pppragma: pragma
        #
        ('pppragma', 'exclusive'),
    )

    def t_PPHASH(self, t):
        r'[ \t]*\#'
        if self.line_pattern.match(t.lexer.lexdata, pos=t.lexer.lexpos):
            t.lexer.begin('ppline')
            self.pp_line = self.pp_filename = None
        elif self.pragma_pattern.match(t.lexer.lexdata, pos=t.lexer.lexpos):
            t.lexer.begin('pppragma')
        else:
            t.type = 'PPHASH'
            return t

    ##
    ## Rules for the ppline state
    ##
    @TOKEN(string_literal)
    def t_ppline_FILENAME(self, t):
        if self.pp_line is None:
            self._error('filename before line number in #line', t)
        else:
            self.pp_filename = t.value.lstrip('"').rstrip('"')

    @TOKEN(decimal_constant)
    def t_ppline_LINE_NUMBER(self, t):
        if self.pp_line is None:
            self.pp_line = t.value
        else:
            # Ignore: GCC's cpp sometimes inserts a numeric flag
            # after the file name
            pass

    def t_ppline_NEWLINE(self, t):
        r'\n'

        if self.pp_line is None:
            self._error('line number missing in #line', t)
        else:
            self.lexer.lineno = int(self.pp_line)

            if self.pp_filename is not None:
                self.filename = self.pp_filename

        t.lexer.begin('INITIAL')

    def t_ppline_PPLINE(self, t):
        r'line'
        pass

    t_ppline_ignore = ' \t'

    def t_ppline_error(self, t):
        self._error('invalid #line directive', t)

    ##
    ## Rules for the pppragma state
    ##
    def t_pppragma_NEWLINE(self, t):
        r'\n'
        t.lexer.lineno += 1
        t.lexer.begin('INITIAL')

    def t_pppragma_PPPRAGMA(self, t):
        r'pragma'
        pass

    t_pppragma_ignore = ' \t<>.-{}();=+-*/$%@&^~!?:,0123456789'

    @TOKEN(string_literal)
    def t_pppragma_STR(self, t): pass

    @TOKEN(identifier)
    def t_pppragma_ID(self, t): pass

    def t_pppragma_error(self, t):
        self._error('invalid #pragma directive', t)

    ##
    ## Rules for the normal state
    ##
    t_ignore = ' \t'

    # Newlines
    def t_NEWLINE(self, t):
        r'\n+'
        t.lexer.lineno += t.value.count("\n")

    # Operators
    t_PLUS              = r'\+'
    t_MINUS             = r'-'
    t_TIMES             = r'\*'
    t_DIVIDE            = r'/'
    t_MOD               = r'%'
    t_OR                = r'\|'
    t_AND               = r'&'
    t_NOT               = r'~'
    t_XOR               = r'\^'
    t_LSHIFT            = r'<<'
    t_RSHIFT            = r'>>'
    t_LOR               = r'\|\|'
    t_LAND              = r'&&'
    t_LNOT              = r'!'
    t_LT                = r'<'
    t_GT                = r'>'
    t_LE                = r'<='
    t_GE                = r'>='
    t_EQ                = r'=='
    t_NE                = r'!='

    # Assignment operators
    t_EQUALS            = r'='
    t_TIMESEQUAL        = r'\*='
    t_DIVEQUAL          = r'/='
    t_MODEQUAL          = r'%='
    t_PLUSEQUAL         = r'\+='
    t_MINUSEQUAL        = r'-='
    t_LSHIFTEQUAL       = r'<<='
    t_RSHIFTEQUAL       = r'>>='
    t_ANDEQUAL          = r'&='
    t_OREQUAL           = r'\|='
    t_XOREQUAL          = r'\^='

    # Increment/decrement
    t_PLUSPLUS          = r'\+\+'
    t_MINUSMINUS        = r'--'

    # ->
    t_ARROW             = r'->'

    # ?
    t_CONDOP            = r'\?'

    # Delimeters
    t_LPAREN            = r'\('
    t_RPAREN            = r'\)'
    t_LBRACKET          = r'\['
    t_RBRACKET          = r'\]'
    t_COMMA             = r','
    t_PERIOD            = r'\.'
    t_SEMI              = r';'
    t_COLON             = r':'
    t_ELLIPSIS          = r'\.\.\.'

    # Scope delimiters
    # To see why on_lbrace_func is needed, consider:
    #   typedef char TT;
    #   void foo(int TT) { TT = 10; }
    #   TT x = 5;
    # Outside the function, TT is a typedef, but inside (starting and ending
    # with the braces) it's a parameter.  The trouble begins with yacc's
    # lookahead token.  If we open a new scope in brace_open, then TT has
    # already been read and incorrectly interpreted as TYPEID.  So, we need
    # to open and close scopes from within the lexer.
    # Similar for the TT immediately outside the end of the function.
    #
    @TOKEN(r'\{')
    def t_LBRACE(self, t):
        self.on_lbrace_func()
        return t
    @TOKEN(r'\}')
    def t_RBRACE(self, t):
        self.on_rbrace_func()
        return t

    t_STRING_LITERAL = string_literal

    # The following floating and integer constants are defined as
    # functions to impose a strict order (otherwise, decimal
    # is placed before the others because its regex is longer,
    # and this is bad)
    #
    @TOKEN(floating_constant)
    def t_FLOAT_CONST(self, t):
        return t

    @TOKEN(hex_floating_constant)
    def t_HEX_FLOAT_CONST(self, t):
        return t

    @TOKEN(hex_constant)
    def t_INT_CONST_HEX(self, t):
        return t

    @TOKEN(bin_constant)
    def t_INT_CONST_BIN(self, t):
        return t

    @TOKEN(bad_octal_constant)
    def t_BAD_CONST_OCT(self, t):
        msg = "Invalid octal constant"
        self._error(msg, t)

    @TOKEN(octal_constant)
    def t_INT_CONST_OCT(self, t):
        return t

    @TOKEN(decimal_constant)
    def t_INT_CONST_DEC(self, t):
        return t

    # Must come before bad_char_const, to prevent it from
    # catching valid char constants as invalid
    #
    @TOKEN(char_const)
    def t_CHAR_CONST(self, t):
        return t

    @TOKEN(wchar_const)
    def t_WCHAR_CONST(self, t):
        return t

    @TOKEN(unmatched_quote)
    def t_UNMATCHED_QUOTE(self, t):
        msg = "Unmatched '"
        self._error(msg, t)

    @TOKEN(bad_char_const)
    def t_BAD_CHAR_CONST(self, t):
        msg = "Invalid char constant %s" % t.value
        self._error(msg, t)

    @TOKEN(wstring_literal)
    def t_WSTRING_LITERAL(self, t):
        return t

    # unmatched string literals are caught by the preprocessor

    @TOKEN(bad_string_literal)
    def t_BAD_STRING_LITERAL(self, t):
        msg = "String contains invalid escape code"
        self._error(msg, t)

    @TOKEN(identifier)
    def t_ID(self, t):
        t.type = self.keyword_map.get(t.value, "ID")
        if t.type == 'ID' and self.type_lookup_func(t.value):
            t.type = "TYPEID"
        return t

    def t_error(self, t):
        msg = 'Illegal character %s' % repr(t.value[0])
        self._error(msg, t)

PK     ʽ\k^W  W    __init__.pynu [        #-----------------------------------------------------------------
# pycparser: __init__.py
#
# This package file exports some convenience functions for
# interacting with pycparser
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------
__all__ = ['c_lexer', 'c_parser', 'c_ast']
__version__ = '2.14'

from subprocess import Popen, PIPE
from .c_parser import CParser


def preprocess_file(filename, cpp_path='cpp', cpp_args=''):
    """ Preprocess a file using cpp.

        filename:
            Name of the file you want to preprocess.

        cpp_path:
        cpp_args:
            Refer to the documentation of parse_file for the meaning of these
            arguments.

        When successful, returns the preprocessed file's contents.
        Errors from cpp will be printed out.
    """
    path_list = [cpp_path]
    if isinstance(cpp_args, list):
        path_list += cpp_args
    elif cpp_args != '':
        path_list += [cpp_args]
    path_list += [filename]

    try:
        # Note the use of universal_newlines to treat all newlines
        # as \n for Python's purpose
        #
        pipe = Popen(   path_list,
                        stdout=PIPE,
                        universal_newlines=True)
        text = pipe.communicate()[0]
    except OSError as e:
        raise RuntimeError("Unable to invoke 'cpp'.  " +
            'Make sure its path was passed correctly\n' +
            ('Original error: %s' % e))

    return text


def parse_file(filename, use_cpp=False, cpp_path='cpp', cpp_args='',
               parser=None):
    """ Parse a C file using pycparser.

        filename:
            Name of the file you want to parse.

        use_cpp:
            Set to True if you want to execute the C pre-processor
            on the file prior to parsing it.

        cpp_path:
            If use_cpp is True, this is the path to 'cpp' on your
            system. If no path is provided, it attempts to just
            execute 'cpp', so it must be in your PATH.

        cpp_args:
            If use_cpp is True, set this to the command line arguments strings
            to cpp. Be careful with quotes - it's best to pass a raw string
            (r'') here. For example:
            r'-I../utils/fake_libc_include'
            If several arguments are required, pass a list of strings.

        parser:
            Optional parser object to be used instead of the default CParser

        When successful, an AST is returned. ParseError can be
        thrown if the file doesn't parse successfully.

        Errors from cpp will be printed out.
    """
    if use_cpp:
        text = preprocess_file(filename, cpp_path, cpp_args)
    else:
        with open(filename, 'rU') as f:
            text = f.read()

    if parser is None:
        parser = CParser()
    return parser.parse(text, filename)
PK     ʽ\T  T  
  _c_ast.cfgnu [        #-----------------------------------------------------------------
# pycparser: _c_ast.cfg
#
# Defines the AST Node classes used in pycparser.
#
# Each entry is a Node sub-class name, listing the attributes
# and child nodes of the class:
#   <name>*     - a child node
#   <name>**    - a sequence of child nodes
#   <name>      - an attribute
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------

# ArrayDecl is a nested declaration of an array with the given type.
# dim: the dimension (for example, constant 42)
# dim_quals: list of dimension qualifiers, to support C99's allowing 'const'
#            and 'static' within the array dimension in function declarations.
ArrayDecl: [type*, dim*, dim_quals]

ArrayRef: [name*, subscript*]

# op: =, +=, /= etc.
#
Assignment: [op, lvalue*, rvalue*]

BinaryOp: [op, left*, right*]

Break: []

Case: [expr*, stmts**]

Cast: [to_type*, expr*]

# Compound statement in C99 is a list of block items (declarations or
# statements).
#
Compound: [block_items**]

# Compound literal (anonymous aggregate) for C99.
# (type-name) {initializer_list}
# type: the typename
# init: InitList for the initializer list
#
CompoundLiteral: [type*, init*]

# type: int, char, float, etc. see CLexer for constant token types
#
Constant: [type, value]

Continue: []

# name: the variable being declared
# quals: list of qualifiers (const, volatile)
# funcspec: list function specifiers (i.e. inline in C99)
# storage: list of storage specifiers (extern, register, etc.)
# type: declaration type (probably nested with all the modifiers)
# init: initialization value, or None
# bitsize: bit field size, or None
#
Decl: [name, quals, storage, funcspec, type*, init*, bitsize*]

DeclList: [decls**]

Default: [stmts**]

DoWhile: [cond*, stmt*]

# Represents the ellipsis (...) parameter in a function
# declaration
#
EllipsisParam: []

# An empty statement (a semicolon ';' on its own)
#
EmptyStatement: []

# Enumeration type specifier
# name: an optional ID
# values: an EnumeratorList
#
Enum: [name, values*]

# A name/value pair for enumeration values
#
Enumerator: [name, value*]

# A list of enumerators
#
EnumeratorList: [enumerators**]

# A list of expressions separated by the comma operator.
#
ExprList: [exprs**]

# This is the top of the AST, representing a single C file (a
# translation unit in K&R jargon). It contains a list of
# "external-declaration"s, which is either declarations (Decl),
# Typedef or function definitions (FuncDef).
#
FileAST: [ext**]

# for (init; cond; next) stmt
#
For: [init*, cond*, next*, stmt*]

# name: Id
# args: ExprList
#
FuncCall: [name*, args*]

# type <decl>(args)
#
FuncDecl: [args*, type*]

# Function definition: a declarator for the function name and
# a body, which is a compound statement.
# There's an optional list of parameter declarations for old
# K&R-style definitions
#
FuncDef: [decl*, param_decls**, body*]

Goto: [name]

ID: [name]

# Holder for types that are a simple identifier (e.g. the built
# ins void, char etc. and typedef-defined types)
#
IdentifierType: [names]

If: [cond*, iftrue*, iffalse*]

# An initialization list used for compound literals.
#
InitList: [exprs**]

Label: [name, stmt*]

# A named initializer for C99.
# The name of a NamedInitializer is a sequence of Nodes, because
# names can be hierarchical and contain constant expressions.
#
NamedInitializer: [name**, expr*]

# a list of comma separated function parameter declarations
#
ParamList: [params**]

PtrDecl: [quals, type*]

Return: [expr*]

# name: struct tag name
# decls: declaration of members
#
Struct: [name, decls**]

# type: . or ->
# name.field or name->field
#
StructRef: [name*, type, field*]

Switch: [cond*, stmt*]

# cond ? iftrue : iffalse
#
TernaryOp: [cond*, iftrue*, iffalse*]

# A base type declaration
#
TypeDecl: [declname, quals, type*]

# A typedef declaration.
# Very similar to Decl, but without some attributes
#
Typedef: [name, quals, storage, type*]

Typename: [name, quals, type*]

UnaryOp: [op, expr*]

# name: union tag name
# decls: declaration of members
#
Union: [name, decls**]

While: [cond*, stmt*]
PK     ʽ\?:  :    plyparser.pynu [        #-----------------------------------------------------------------
# plyparser.py
#
# PLYParser class and other utilites for simplifying programming
# parsers with PLY
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------


class Coord(object):
    """ Coordinates of a syntactic element. Consists of:
            - File name
            - Line number
            - (optional) column number, for the Lexer
    """
    __slots__ = ('file', 'line', 'column', '__weakref__')
    def __init__(self, file, line, column=None):
        self.file = file
        self.line = line
        self.column = column

    def __str__(self):
        str = "%s:%s" % (self.file, self.line)
        if self.column: str += ":%s" % self.column
        return str


class ParseError(Exception): pass


class PLYParser(object):
    def _create_opt_rule(self, rulename):
        """ Given a rule name, creates an optional ply.yacc rule
            for it. The name of the optional rule is
            <rulename>_opt
        """
        optname = rulename + '_opt'

        def optrule(self, p):
            p[0] = p[1]

        optrule.__doc__ = '%s : empty\n| %s' % (optname, rulename)
        optrule.__name__ = 'p_%s' % optname
        setattr(self.__class__, optrule.__name__, optrule)

    def _coord(self, lineno, column=None):
        return Coord(
                file=self.clex.filename,
                line=lineno,
                column=column)

    def _parse_error(self, msg, coord):
        raise ParseError("%s: %s" % (coord, msg))
PK     ʽ\mN  N  	  lextab.pynu [        # lextab.py. This file automatically created by PLY (version 3.9). Don't edit!
_tabversion   = '3.8'
_lextokens    = set(('CONDOP', 'SIGNED', 'XOR', 'DO', 'LNOT', 'ELLIPSIS', 'LSHIFT', 'CASE', 'INT_CONST_DEC', 'PLUS', 'PPHASH', 'DOUBLE', 'AND', 'PLUSEQUAL', 'LBRACKET', 'ELSE', 'SEMI', 'NOT', 'CONTINUE', 'CONST', 'STRING_LITERAL', 'ENUM', 'MOD', 'INLINE', 'FOR', 'LONG', 'GT', 'STRUCT', 'COMMA', 'TYPEDEF', 'RSHIFT', 'VOID', 'RPAREN', 'TYPEID', 'ANDEQUAL', 'UNSIGNED', 'SIZEOF', 'CHAR_CONST', 'CHAR', 'FLOAT_CONST', 'INT', 'FLOAT', '_BOOL', '_COMPLEX', 'GE', 'OREQUAL', 'STATIC', 'RSHIFTEQUAL', 'EXTERN', 'TIMESEQUAL', 'ARROW', 'WCHAR_CONST', 'REGISTER', 'RBRACKET', 'DIVIDE', 'HEX_FLOAT_CONST', 'INT_CONST_OCT', 'SWITCH', 'INT_CONST_HEX', 'DEFAULT', 'LSHIFTEQUAL', 'EQUALS', 'BREAK', 'RESTRICT', 'VOLATILE', 'COLON', 'LPAREN', 'RETURN', 'LOR', 'OFFSETOF', 'RBRACE', 'LE', 'WHILE', 'ID', 'AUTO', 'SHORT', 'LBRACE', 'UNION', 'WSTRING_LITERAL', 'PERIOD', 'MODEQUAL', 'PLUSPLUS', 'MINUS', 'IF', 'LAND', 'MINUSEQUAL', 'EQ', 'LT', 'NE', 'OR', 'TIMES', 'MINUSMINUS', 'DIVEQUAL', 'GOTO', 'INT_CONST_BIN', 'XOREQUAL'))
_lexreflags   = 0
_lexliterals  = ''
_lexstateinfo = {'INITIAL': 'inclusive', 'ppline': 'exclusive', 'pppragma': 'exclusive'}
_lexstatere   = {'INITIAL': [('(?P<t_PPHASH>[ \\t]*\\#)|(?P<t_NEWLINE>\\n+)|(?P<t_LBRACE>\\{)|(?P<t_RBRACE>\\})|(?P<t_FLOAT_CONST>((((([0-9]*\\.[0-9]+)|([0-9]+\\.))([eE][-+]?[0-9]+)?)|([0-9]+([eE][-+]?[0-9]+)))[FfLl]?))|(?P<t_HEX_FLOAT_CONST>(0[xX]([0-9a-fA-F]+|((([0-9a-fA-F]+)?\\.[0-9a-fA-F]+)|([0-9a-fA-F]+\\.)))([pP][+-]?[0-9]+)[FfLl]?))|(?P<t_INT_CONST_HEX>0[xX][0-9a-fA-F]+(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|(?P<t_INT_CONST_BIN>0[bB][01]+(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|(?P<t_BAD_CONST_OCT>0[0-7]*[89])|(?P<t_INT_CONST_OCT>0[0-7]*(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|(?P<t_INT_CONST_DEC>(0(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|([1-9][0-9]*(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?))|(?P<t_CHAR_CONST>\'([^\'\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))\')|(?P<t_WCHAR_CONST>L\'([^\'\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))\')|(?P<t_UNMATCHED_QUOTE>(\'([^\'\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))*\\n)|(\'([^\'\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))*$))|(?P<t_BAD_CHAR_CONST>(\'([^\'\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))[^\'\n]+\')|(\'\')|(\'([\\\\][^a-zA-Z._~^!=&\\^\\-\\\\?\'"x0-7])[^\'\\n]*\'))|(?P<t_WSTRING_LITERAL>L"([^"\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_BAD_STRING_LITERAL>"([^"\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))*([\\\\][^a-zA-Z._~^!=&\\^\\-\\\\?\'"x0-7])([^"\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_ID>[a-zA-Z_$][0-9a-zA-Z_$]*)|(?P<t_STRING_LITERAL>"([^"\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_ELLIPSIS>\\.\\.\\.)|(?P<t_LOR>\\|\\|)|(?P<t_PLUSPLUS>\\+\\+)|(?P<t_LSHIFTEQUAL><<=)|(?P<t_OREQUAL>\\|=)|(?P<t_PLUSEQUAL>\\+=)|(?P<t_RSHIFTEQUAL>>>=)|(?P<t_TIMESEQUAL>\\*=)|(?P<t_XOREQUAL>\\^=)|(?P<t_ANDEQUAL>&=)|(?P<t_ARROW>->)|(?P<t_CONDOP>\\?)|(?P<t_DIVEQUAL>/=)|(?P<t_EQ>==)|(?P<t_GE>>=)|(?P<t_LAND>&&)|(?P<t_LBRACKET>\\[)|(?P<t_LE><=)|(?P<t_LPAREN>\\()|(?P<t_LSHIFT><<)|(?P<t_MINUSEQUAL>-=)|(?P<t_MINUSMINUS>--)|(?P<t_MODEQUAL>%=)|(?P<t_NE>!=)|(?P<t_OR>\\|)|(?P<t_PERIOD>\\.)|(?P<t_PLUS>\\+)|(?P<t_RBRACKET>\\])|(?P<t_RPAREN>\\))|(?P<t_RSHIFT>>>)|(?P<t_TIMES>\\*)|(?P<t_XOR>\\^)|(?P<t_AND>&)|(?P<t_COLON>:)|(?P<t_COMMA>,)|(?P<t_DIVIDE>/)|(?P<t_EQUALS>=)|(?P<t_GT>>)|(?P<t_LNOT>!)|(?P<t_LT><)|(?P<t_MINUS>-)|(?P<t_MOD>%)|(?P<t_NOT>~)|(?P<t_SEMI>;)', [None, ('t_PPHASH', 'PPHASH'), ('t_NEWLINE', 'NEWLINE'), ('t_LBRACE', 'LBRACE'), ('t_RBRACE', 'RBRACE'), ('t_FLOAT_CONST', 'FLOAT_CONST'), None, None, None, None, None, None, None, None, None, ('t_HEX_FLOAT_CONST', 'HEX_FLOAT_CONST'), None, None, None, None, None, None, None, ('t_INT_CONST_HEX', 'INT_CONST_HEX'), None, None, None, None, None, None, None, ('t_INT_CONST_BIN', 'INT_CONST_BIN'), None, None, None, None, None, None, None, ('t_BAD_CONST_OCT', 'BAD_CONST_OCT'), ('t_INT_CONST_OCT', 'INT_CONST_OCT'), None, None, None, None, None, None, None, ('t_INT_CONST_DEC', 'INT_CONST_DEC'), None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, ('t_CHAR_CONST', 'CHAR_CONST'), None, None, None, None, None, None, ('t_WCHAR_CONST', 'WCHAR_CONST'), None, None, None, None, None, None, ('t_UNMATCHED_QUOTE', 'UNMATCHED_QUOTE'), None, None, None, None, None, None, None, None, None, None, None, None, None, None, ('t_BAD_CHAR_CONST', 'BAD_CHAR_CONST'), None, None, None, None, None, None, None, None, None, None, ('t_WSTRING_LITERAL', 'WSTRING_LITERAL'), None, None, None, None, None, None, ('t_BAD_STRING_LITERAL', 'BAD_STRING_LITERAL'), None, None, None, None, None, None, None, None, None, None, None, None, None, ('t_ID', 'ID'), (None, 'STRING_LITERAL'), None, None, None, None, None, None, (None, 'ELLIPSIS'), (None, 'LOR'), (None, 'PLUSPLUS'), (None, 'LSHIFTEQUAL'), (None, 'OREQUAL'), (None, 'PLUSEQUAL'), (None, 'RSHIFTEQUAL'), (None, 'TIMESEQUAL'), (None, 'XOREQUAL'), (None, 'ANDEQUAL'), (None, 'ARROW'), (None, 'CONDOP'), (None, 'DIVEQUAL'), (None, 'EQ'), (None, 'GE'), (None, 'LAND'), (None, 'LBRACKET'), (None, 'LE'), (None, 'LPAREN'), (None, 'LSHIFT'), (None, 'MINUSEQUAL'), (None, 'MINUSMINUS'), (None, 'MODEQUAL'), (None, 'NE'), (None, 'OR'), (None, 'PERIOD'), (None, 'PLUS'), (None, 'RBRACKET'), (None, 'RPAREN'), (None, 'RSHIFT'), (None, 'TIMES'), (None, 'XOR'), (None, 'AND'), (None, 'COLON'), (None, 'COMMA'), (None, 'DIVIDE'), (None, 'EQUALS'), (None, 'GT'), (None, 'LNOT'), (None, 'LT'), (None, 'MINUS'), (None, 'MOD'), (None, 'NOT'), (None, 'SEMI')])], 'ppline': [('(?P<t_ppline_FILENAME>"([^"\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_ppline_LINE_NUMBER>(0(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?)|([1-9][0-9]*(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?))|(?P<t_ppline_NEWLINE>\\n)|(?P<t_ppline_PPLINE>line)', [None, ('t_ppline_FILENAME', 'FILENAME'), None, None, None, None, None, None, ('t_ppline_LINE_NUMBER', 'LINE_NUMBER'), None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, ('t_ppline_NEWLINE', 'NEWLINE'), ('t_ppline_PPLINE', 'PPLINE')])], 'pppragma': [('(?P<t_pppragma_NEWLINE>\\n)|(?P<t_pppragma_PPPRAGMA>pragma)|(?P<t_pppragma_STR>"([^"\\\\\\n]|(\\\\(([a-zA-Z._~!=&\\^\\-\\\\?\'"])|(\\d+)|(x[0-9a-fA-F]+))))*")|(?P<t_pppragma_ID>[a-zA-Z_$][0-9a-zA-Z_$]*)', [None, ('t_pppragma_NEWLINE', 'NEWLINE'), ('t_pppragma_PPPRAGMA', 'PPPRAGMA'), ('t_pppragma_STR', 'STR'), None, None, None, None, None, None, ('t_pppragma_ID', 'ID')])]}
_lexstateignore = {'INITIAL': ' \t', 'ppline': ' \t', 'pppragma': ' \t<>.-{}();=+-*/$%@&^~!?:,0123456789'}
_lexstateerrorf = {'INITIAL': 't_error', 'ppline': 't_ppline_error', 'pppragma': 't_pppragma_error'}
_lexstateeoff = {}
PK     ʽ\65  5    c_generator.pynu [        #------------------------------------------------------------------------------
# pycparser: c_generator.py
#
# C code generator from pycparser AST nodes.
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#------------------------------------------------------------------------------
from . import c_ast


class CGenerator(object):
    """ Uses the same visitor pattern as c_ast.NodeVisitor, but modified to
        return a value from each visit method, using string accumulation in
        generic_visit.
    """
    def __init__(self):
        # Statements start with indentation of self.indent_level spaces, using
        # the _make_indent method
        #
        self.indent_level = 0

    def _make_indent(self):
        return ' ' * self.indent_level

    def visit(self, node):
        method = 'visit_' + node.__class__.__name__
        return getattr(self, method, self.generic_visit)(node)

    def generic_visit(self, node):
        #~ print('generic:', type(node))
        if node is None:
            return ''
        else:
            return ''.join(self.visit(c) for c_name, c in node.children())

    def visit_Constant(self, n):
        return n.value

    def visit_ID(self, n):
        return n.name

    def visit_ArrayRef(self, n):
        arrref = self._parenthesize_unless_simple(n.name)
        return arrref + '[' + self.visit(n.subscript) + ']'

    def visit_StructRef(self, n):
        sref = self._parenthesize_unless_simple(n.name)
        return sref + n.type + self.visit(n.field)

    def visit_FuncCall(self, n):
        fref = self._parenthesize_unless_simple(n.name)
        return fref + '(' + self.visit(n.args) + ')'

    def visit_UnaryOp(self, n):
        operand = self._parenthesize_unless_simple(n.expr)
        if n.op == 'p++':
            return '%s++' % operand
        elif n.op == 'p--':
            return '%s--' % operand
        elif n.op == 'sizeof':
            # Always parenthesize the argument of sizeof since it can be
            # a name.
            return 'sizeof(%s)' % self.visit(n.expr)
        else:
            return '%s%s' % (n.op, operand)

    def visit_BinaryOp(self, n):
        lval_str = self._parenthesize_if(n.left,
                            lambda d: not self._is_simple_node(d))
        rval_str = self._parenthesize_if(n.right,
                            lambda d: not self._is_simple_node(d))
        return '%s %s %s' % (lval_str, n.op, rval_str)

    def visit_Assignment(self, n):
        rval_str = self._parenthesize_if(
                            n.rvalue,
                            lambda n: isinstance(n, c_ast.Assignment))
        return '%s %s %s' % (self.visit(n.lvalue), n.op, rval_str)

    def visit_IdentifierType(self, n):
        return ' '.join(n.names)

    def _visit_expr(self, n):
        if isinstance(n, c_ast.InitList):
            return '{' + self.visit(n) + '}'
        elif isinstance(n, c_ast.ExprList):
            return '(' + self.visit(n) + ')'
        else:
            return self.visit(n)

    def visit_Decl(self, n, no_type=False):
        # no_type is used when a Decl is part of a DeclList, where the type is
        # explicitly only for the first declaration in a list.
        #
        s = n.name if no_type else self._generate_decl(n)
        if n.bitsize: s += ' : ' + self.visit(n.bitsize)
        if n.init:
            s += ' = ' + self._visit_expr(n.init)
        return s

    def visit_DeclList(self, n):
        s = self.visit(n.decls[0])
        if len(n.decls) > 1:
            s += ', ' + ', '.join(self.visit_Decl(decl, no_type=True)
                                    for decl in n.decls[1:])
        return s

    def visit_Typedef(self, n):
        s = ''
        if n.storage: s += ' '.join(n.storage) + ' '
        s += self._generate_type(n.type)
        return s

    def visit_Cast(self, n):
        s = '(' + self._generate_type(n.to_type) + ')'
        return s + ' ' + self._parenthesize_unless_simple(n.expr)

    def visit_ExprList(self, n):
        visited_subexprs = []
        for expr in n.exprs:
            visited_subexprs.append(self._visit_expr(expr))
        return ', '.join(visited_subexprs)

    def visit_InitList(self, n):
        visited_subexprs = []
        for expr in n.exprs:
            visited_subexprs.append(self._visit_expr(expr))
        return ', '.join(visited_subexprs)

    def visit_Enum(self, n):
        s = 'enum'
        if n.name: s += ' ' + n.name
        if n.values:
            s += ' {'
            for i, enumerator in enumerate(n.values.enumerators):
                s += enumerator.name
                if enumerator.value:
                    s += ' = ' + self.visit(enumerator.value)
                if i != len(n.values.enumerators) - 1:
                    s += ', '
            s += '}'
        return s

    def visit_FuncDef(self, n):
        decl = self.visit(n.decl)
        self.indent_level = 0
        body = self.visit(n.body)
        if n.param_decls:
            knrdecls = ';\n'.join(self.visit(p) for p in n.param_decls)
            return decl + '\n' + knrdecls + ';\n' + body + '\n'
        else:
            return decl + '\n' + body + '\n'

    def visit_FileAST(self, n):
        s = ''
        for ext in n.ext:
            if isinstance(ext, c_ast.FuncDef):
                s += self.visit(ext)
            else:
                s += self.visit(ext) + ';\n'
        return s

    def visit_Compound(self, n):
        s = self._make_indent() + '{\n'
        self.indent_level += 2
        if n.block_items:
            s += ''.join(self._generate_stmt(stmt) for stmt in n.block_items)
        self.indent_level -= 2
        s += self._make_indent() + '}\n'
        return s

    def visit_EmptyStatement(self, n):
        return ';'

    def visit_ParamList(self, n):
        return ', '.join(self.visit(param) for param in n.params)

    def visit_Return(self, n):
        s = 'return'
        if n.expr: s += ' ' + self.visit(n.expr)
        return s + ';'

    def visit_Break(self, n):
        return 'break;'

    def visit_Continue(self, n):
        return 'continue;'

    def visit_TernaryOp(self, n):
        s = self._visit_expr(n.cond) + ' ? '
        s += self._visit_expr(n.iftrue) + ' : '
        s += self._visit_expr(n.iffalse)
        return s

    def visit_If(self, n):
        s = 'if ('
        if n.cond: s += self.visit(n.cond)
        s += ')\n'
        s += self._generate_stmt(n.iftrue, add_indent=True)
        if n.iffalse:
            s += self._make_indent() + 'else\n'
            s += self._generate_stmt(n.iffalse, add_indent=True)
        return s

    def visit_For(self, n):
        s = 'for ('
        if n.init: s += self.visit(n.init)
        s += ';'
        if n.cond: s += ' ' + self.visit(n.cond)
        s += ';'
        if n.next: s += ' ' + self.visit(n.next)
        s += ')\n'
        s += self._generate_stmt(n.stmt, add_indent=True)
        return s

    def visit_While(self, n):
        s = 'while ('
        if n.cond: s += self.visit(n.cond)
        s += ')\n'
        s += self._generate_stmt(n.stmt, add_indent=True)
        return s

    def visit_DoWhile(self, n):
        s = 'do\n'
        s += self._generate_stmt(n.stmt, add_indent=True)
        s += self._make_indent() + 'while ('
        if n.cond: s += self.visit(n.cond)
        s += ');'
        return s

    def visit_Switch(self, n):
        s = 'switch (' + self.visit(n.cond) + ')\n'
        s += self._generate_stmt(n.stmt, add_indent=True)
        return s

    def visit_Case(self, n):
        s = 'case ' + self.visit(n.expr) + ':\n'
        for stmt in n.stmts:
            s += self._generate_stmt(stmt, add_indent=True)
        return s

    def visit_Default(self, n):
        s = 'default:\n'
        for stmt in n.stmts:
            s += self._generate_stmt(stmt, add_indent=True)
        return s

    def visit_Label(self, n):
        return n.name + ':\n' + self._generate_stmt(n.stmt)

    def visit_Goto(self, n):
        return 'goto ' + n.name + ';'

    def visit_EllipsisParam(self, n):
        return '...'

    def visit_Struct(self, n):
        return self._generate_struct_union(n, 'struct')

    def visit_Typename(self, n):
        return self._generate_type(n.type)

    def visit_Union(self, n):
        return self._generate_struct_union(n, 'union')

    def visit_NamedInitializer(self, n):
        s = ''
        for name in n.name:
            if isinstance(name, c_ast.ID):
                s += '.' + name.name
            elif isinstance(name, c_ast.Constant):
                s += '[' + name.value + ']'
        s += ' = ' + self.visit(n.expr)
        return s

    def visit_FuncDecl(self, n):
        return self._generate_type(n)

    def _generate_struct_union(self, n, name):
        """ Generates code for structs and unions. name should be either
            'struct' or union.
        """
        s = name + ' ' + (n.name or '')
        if n.decls:
            s += '\n'
            s += self._make_indent()
            self.indent_level += 2
            s += '{\n'
            for decl in n.decls:
                s += self._generate_stmt(decl)
            self.indent_level -= 2
            s += self._make_indent() + '}'
        return s

    def _generate_stmt(self, n, add_indent=False):
        """ Generation from a statement node. This method exists as a wrapper
            for individual visit_* methods to handle different treatment of
            some statements in this context.
        """
        typ = type(n)
        if add_indent: self.indent_level += 2
        indent = self._make_indent()
        if add_indent: self.indent_level -= 2

        if typ in (
                c_ast.Decl, c_ast.Assignment, c_ast.Cast, c_ast.UnaryOp,
                c_ast.BinaryOp, c_ast.TernaryOp, c_ast.FuncCall, c_ast.ArrayRef,
                c_ast.StructRef, c_ast.Constant, c_ast.ID, c_ast.Typedef,
                c_ast.ExprList):
            # These can also appear in an expression context so no semicolon
            # is added to them automatically
            #
            return indent + self.visit(n) + ';\n'
        elif typ in (c_ast.Compound,):
            # No extra indentation required before the opening brace of a
            # compound - because it consists of multiple lines it has to
            # compute its own indentation.
            #
            return self.visit(n)
        else:
            return indent + self.visit(n) + '\n'

    def _generate_decl(self, n):
        """ Generation from a Decl node.
        """
        s = ''
        if n.funcspec: s = ' '.join(n.funcspec) + ' '
        if n.storage: s += ' '.join(n.storage) + ' '
        s += self._generate_type(n.type)
        return s

    def _generate_type(self, n, modifiers=[]):
        """ Recursive generation from a type node. n is the type node.
            modifiers collects the PtrDecl, ArrayDecl and FuncDecl modifiers
            encountered on the way down to a TypeDecl, to allow proper
            generation from it.
        """
        typ = type(n)
        #~ print(n, modifiers)

        if typ == c_ast.TypeDecl:
            s = ''
            if n.quals: s += ' '.join(n.quals) + ' '
            s += self.visit(n.type)

            nstr = n.declname if n.declname else ''
            # Resolve modifiers.
            # Wrap in parens to distinguish pointer to array and pointer to
            # function syntax.
            #
            for i, modifier in enumerate(modifiers):
                if isinstance(modifier, c_ast.ArrayDecl):
                    if (i != 0 and isinstance(modifiers[i - 1], c_ast.PtrDecl)):
                        nstr = '(' + nstr + ')'
                    nstr += '[' + self.visit(modifier.dim) + ']'
                elif isinstance(modifier, c_ast.FuncDecl):
                    if (i != 0 and isinstance(modifiers[i - 1], c_ast.PtrDecl)):
                        nstr = '(' + nstr + ')'
                    nstr += '(' + self.visit(modifier.args) + ')'
                elif isinstance(modifier, c_ast.PtrDecl):
                    if modifier.quals:
                        nstr = '* %s %s' % (' '.join(modifier.quals), nstr)
                    else:
                        nstr = '*' + nstr
            if nstr: s += ' ' + nstr
            return s
        elif typ == c_ast.Decl:
            return self._generate_decl(n.type)
        elif typ == c_ast.Typename:
            return self._generate_type(n.type)
        elif typ == c_ast.IdentifierType:
            return ' '.join(n.names) + ' '
        elif typ in (c_ast.ArrayDecl, c_ast.PtrDecl, c_ast.FuncDecl):
            return self._generate_type(n.type, modifiers + [n])
        else:
            return self.visit(n)

    def _parenthesize_if(self, n, condition):
        """ Visits 'n' and returns its string representation, parenthesized
            if the condition function applied to the node returns True.
        """
        s = self._visit_expr(n)
        if condition(n):
            return '(' + s + ')'
        else:
            return s

    def _parenthesize_unless_simple(self, n):
        """ Common use case for _parenthesize_if
        """
        return self._parenthesize_if(n, lambda d: not self._is_simple_node(d))

    def _is_simple_node(self, n):
        """ Returns True for nodes that are "simple" - i.e. nodes that always
            have higher precedence than operators.
        """
        return isinstance(n,(   c_ast.Constant, c_ast.ID, c_ast.ArrayRef,
                                c_ast.StructRef, c_ast.FuncCall))
PK     ʽ\ĬR([  ([    c_ast.pynu [        #-----------------------------------------------------------------
# ** ATTENTION **
# This code was automatically generated from the file:
# _c_ast.cfg
#
# Do not modify it directly. Modify the configuration file and
# run the generator again.
# ** ** *** ** **
#
# pycparser: c_ast.py
#
# AST Node classes.
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------


import sys


class Node(object):
    __slots__ = ()
    """ Abstract base class for AST nodes.
    """
    def children(self):
        """ A sequence of all children that are Nodes
        """
        pass

    def show(self, buf=sys.stdout, offset=0, attrnames=False, nodenames=False, showcoord=False, _my_node_name=None):
        """ Pretty print the Node and all its attributes and
            children (recursively) to a buffer.

            buf:
                Open IO buffer into which the Node is printed.

            offset:
                Initial offset (amount of leading spaces)

            attrnames:
                True if you want to see the attribute names in
                name=value pairs. False to only see the values.

            nodenames:
                True if you want to see the actual node names
                within their parents.

            showcoord:
                Do you want the coordinates of each Node to be
                displayed.
        """
        lead = ' ' * offset
        if nodenames and _my_node_name is not None:
            buf.write(lead + self.__class__.__name__+ ' <' + _my_node_name + '>: ')
        else:
            buf.write(lead + self.__class__.__name__+ ': ')

        if self.attr_names:
            if attrnames:
                nvlist = [(n, getattr(self,n)) for n in self.attr_names]
                attrstr = ', '.join('%s=%s' % nv for nv in nvlist)
            else:
                vlist = [getattr(self, n) for n in self.attr_names]
                attrstr = ', '.join('%s' % v for v in vlist)
            buf.write(attrstr)

        if showcoord:
            buf.write(' (at %s)' % self.coord)
        buf.write('\n')

        for (child_name, child) in self.children():
            child.show(
                buf,
                offset=offset + 2,
                attrnames=attrnames,
                nodenames=nodenames,
                showcoord=showcoord,
                _my_node_name=child_name)


class NodeVisitor(object):
    """ A base NodeVisitor class for visiting c_ast nodes.
        Subclass it and define your own visit_XXX methods, where
        XXX is the class name you want to visit with these
        methods.

        For example:

        class ConstantVisitor(NodeVisitor):
            def __init__(self):
                self.values = []

            def visit_Constant(self, node):
                self.values.append(node.value)

        Creates a list of values of all the constant nodes
        encountered below the given node. To use it:

        cv = ConstantVisitor()
        cv.visit(node)

        Notes:

        *   generic_visit() will be called for AST nodes for which
            no visit_XXX method was defined.
        *   The children of nodes for which a visit_XXX was
            defined will not be visited - if you need this, call
            generic_visit() on the node.
            You can use:
                NodeVisitor.generic_visit(self, node)
        *   Modeled after Python's own AST visiting facilities
            (the ast module of Python 3.0)
    """
    def visit(self, node):
        """ Visit a node.
        """
        method = 'visit_' + node.__class__.__name__
        visitor = getattr(self, method, self.generic_visit)
        return visitor(node)

    def generic_visit(self, node):
        """ Called if no explicit visitor function exists for a
            node. Implements preorder visiting of the node.
        """
        for c_name, c in node.children():
            self.visit(c)


class ArrayDecl(Node):
    __slots__ = ('type', 'dim', 'dim_quals', 'coord', '__weakref__')
    def __init__(self, type, dim, dim_quals, coord=None):
        self.type = type
        self.dim = dim
        self.dim_quals = dim_quals
        self.coord = coord

    def children(self):
        nodelist = []
        if self.type is not None: nodelist.append(("type", self.type))
        if self.dim is not None: nodelist.append(("dim", self.dim))
        return tuple(nodelist)

    attr_names = ('dim_quals', )

class ArrayRef(Node):
    __slots__ = ('name', 'subscript', 'coord', '__weakref__')
    def __init__(self, name, subscript, coord=None):
        self.name = name
        self.subscript = subscript
        self.coord = coord

    def children(self):
        nodelist = []
        if self.name is not None: nodelist.append(("name", self.name))
        if self.subscript is not None: nodelist.append(("subscript", self.subscript))
        return tuple(nodelist)

    attr_names = ()

class Assignment(Node):
    __slots__ = ('op', 'lvalue', 'rvalue', 'coord', '__weakref__')
    def __init__(self, op, lvalue, rvalue, coord=None):
        self.op = op
        self.lvalue = lvalue
        self.rvalue = rvalue
        self.coord = coord

    def children(self):
        nodelist = []
        if self.lvalue is not None: nodelist.append(("lvalue", self.lvalue))
        if self.rvalue is not None: nodelist.append(("rvalue", self.rvalue))
        return tuple(nodelist)

    attr_names = ('op', )

class BinaryOp(Node):
    __slots__ = ('op', 'left', 'right', 'coord', '__weakref__')
    def __init__(self, op, left, right, coord=None):
        self.op = op
        self.left = left
        self.right = right
        self.coord = coord

    def children(self):
        nodelist = []
        if self.left is not None: nodelist.append(("left", self.left))
        if self.right is not None: nodelist.append(("right", self.right))
        return tuple(nodelist)

    attr_names = ('op', )

class Break(Node):
    __slots__ = ('coord', '__weakref__')
    def __init__(self, coord=None):
        self.coord = coord

    def children(self):
        return ()

    attr_names = ()

class Case(Node):
    __slots__ = ('expr', 'stmts', 'coord', '__weakref__')
    def __init__(self, expr, stmts, coord=None):
        self.expr = expr
        self.stmts = stmts
        self.coord = coord

    def children(self):
        nodelist = []
        if self.expr is not None: nodelist.append(("expr", self.expr))
        for i, child in enumerate(self.stmts or []):
            nodelist.append(("stmts[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class Cast(Node):
    __slots__ = ('to_type', 'expr', 'coord', '__weakref__')
    def __init__(self, to_type, expr, coord=None):
        self.to_type = to_type
        self.expr = expr
        self.coord = coord

    def children(self):
        nodelist = []
        if self.to_type is not None: nodelist.append(("to_type", self.to_type))
        if self.expr is not None: nodelist.append(("expr", self.expr))
        return tuple(nodelist)

    attr_names = ()

class Compound(Node):
    __slots__ = ('block_items', 'coord', '__weakref__')
    def __init__(self, block_items, coord=None):
        self.block_items = block_items
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.block_items or []):
            nodelist.append(("block_items[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class CompoundLiteral(Node):
    __slots__ = ('type', 'init', 'coord', '__weakref__')
    def __init__(self, type, init, coord=None):
        self.type = type
        self.init = init
        self.coord = coord

    def children(self):
        nodelist = []
        if self.type is not None: nodelist.append(("type", self.type))
        if self.init is not None: nodelist.append(("init", self.init))
        return tuple(nodelist)

    attr_names = ()

class Constant(Node):
    __slots__ = ('type', 'value', 'coord', '__weakref__')
    def __init__(self, type, value, coord=None):
        self.type = type
        self.value = value
        self.coord = coord

    def children(self):
        nodelist = []
        return tuple(nodelist)

    attr_names = ('type', 'value', )

class Continue(Node):
    __slots__ = ('coord', '__weakref__')
    def __init__(self, coord=None):
        self.coord = coord

    def children(self):
        return ()

    attr_names = ()

class Decl(Node):
    __slots__ = ('name', 'quals', 'storage', 'funcspec', 'type', 'init', 'bitsize', 'coord', '__weakref__')
    def __init__(self, name, quals, storage, funcspec, type, init, bitsize, coord=None):
        self.name = name
        self.quals = quals
        self.storage = storage
        self.funcspec = funcspec
        self.type = type
        self.init = init
        self.bitsize = bitsize
        self.coord = coord

    def children(self):
        nodelist = []
        if self.type is not None: nodelist.append(("type", self.type))
        if self.init is not None: nodelist.append(("init", self.init))
        if self.bitsize is not None: nodelist.append(("bitsize", self.bitsize))
        return tuple(nodelist)

    attr_names = ('name', 'quals', 'storage', 'funcspec', )

class DeclList(Node):
    __slots__ = ('decls', 'coord', '__weakref__')
    def __init__(self, decls, coord=None):
        self.decls = decls
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.decls or []):
            nodelist.append(("decls[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class Default(Node):
    __slots__ = ('stmts', 'coord', '__weakref__')
    def __init__(self, stmts, coord=None):
        self.stmts = stmts
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.stmts or []):
            nodelist.append(("stmts[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class DoWhile(Node):
    __slots__ = ('cond', 'stmt', 'coord', '__weakref__')
    def __init__(self, cond, stmt, coord=None):
        self.cond = cond
        self.stmt = stmt
        self.coord = coord

    def children(self):
        nodelist = []
        if self.cond is not None: nodelist.append(("cond", self.cond))
        if self.stmt is not None: nodelist.append(("stmt", self.stmt))
        return tuple(nodelist)

    attr_names = ()

class EllipsisParam(Node):
    __slots__ = ('coord', '__weakref__')
    def __init__(self, coord=None):
        self.coord = coord

    def children(self):
        return ()

    attr_names = ()

class EmptyStatement(Node):
    __slots__ = ('coord', '__weakref__')
    def __init__(self, coord=None):
        self.coord = coord

    def children(self):
        return ()

    attr_names = ()

class Enum(Node):
    __slots__ = ('name', 'values', 'coord', '__weakref__')
    def __init__(self, name, values, coord=None):
        self.name = name
        self.values = values
        self.coord = coord

    def children(self):
        nodelist = []
        if self.values is not None: nodelist.append(("values", self.values))
        return tuple(nodelist)

    attr_names = ('name', )

class Enumerator(Node):
    __slots__ = ('name', 'value', 'coord', '__weakref__')
    def __init__(self, name, value, coord=None):
        self.name = name
        self.value = value
        self.coord = coord

    def children(self):
        nodelist = []
        if self.value is not None: nodelist.append(("value", self.value))
        return tuple(nodelist)

    attr_names = ('name', )

class EnumeratorList(Node):
    __slots__ = ('enumerators', 'coord', '__weakref__')
    def __init__(self, enumerators, coord=None):
        self.enumerators = enumerators
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.enumerators or []):
            nodelist.append(("enumerators[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class ExprList(Node):
    __slots__ = ('exprs', 'coord', '__weakref__')
    def __init__(self, exprs, coord=None):
        self.exprs = exprs
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.exprs or []):
            nodelist.append(("exprs[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class FileAST(Node):
    __slots__ = ('ext', 'coord', '__weakref__')
    def __init__(self, ext, coord=None):
        self.ext = ext
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.ext or []):
            nodelist.append(("ext[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class For(Node):
    __slots__ = ('init', 'cond', 'next', 'stmt', 'coord', '__weakref__')
    def __init__(self, init, cond, next, stmt, coord=None):
        self.init = init
        self.cond = cond
        self.next = next
        self.stmt = stmt
        self.coord = coord

    def children(self):
        nodelist = []
        if self.init is not None: nodelist.append(("init", self.init))
        if self.cond is not None: nodelist.append(("cond", self.cond))
        if self.next is not None: nodelist.append(("next", self.next))
        if self.stmt is not None: nodelist.append(("stmt", self.stmt))
        return tuple(nodelist)

    attr_names = ()

class FuncCall(Node):
    __slots__ = ('name', 'args', 'coord', '__weakref__')
    def __init__(self, name, args, coord=None):
        self.name = name
        self.args = args
        self.coord = coord

    def children(self):
        nodelist = []
        if self.name is not None: nodelist.append(("name", self.name))
        if self.args is not None: nodelist.append(("args", self.args))
        return tuple(nodelist)

    attr_names = ()

class FuncDecl(Node):
    __slots__ = ('args', 'type', 'coord', '__weakref__')
    def __init__(self, args, type, coord=None):
        self.args = args
        self.type = type
        self.coord = coord

    def children(self):
        nodelist = []
        if self.args is not None: nodelist.append(("args", self.args))
        if self.type is not None: nodelist.append(("type", self.type))
        return tuple(nodelist)

    attr_names = ()

class FuncDef(Node):
    __slots__ = ('decl', 'param_decls', 'body', 'coord', '__weakref__')
    def __init__(self, decl, param_decls, body, coord=None):
        self.decl = decl
        self.param_decls = param_decls
        self.body = body
        self.coord = coord

    def children(self):
        nodelist = []
        if self.decl is not None: nodelist.append(("decl", self.decl))
        if self.body is not None: nodelist.append(("body", self.body))
        for i, child in enumerate(self.param_decls or []):
            nodelist.append(("param_decls[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class Goto(Node):
    __slots__ = ('name', 'coord', '__weakref__')
    def __init__(self, name, coord=None):
        self.name = name
        self.coord = coord

    def children(self):
        nodelist = []
        return tuple(nodelist)

    attr_names = ('name', )

class ID(Node):
    __slots__ = ('name', 'coord', '__weakref__')
    def __init__(self, name, coord=None):
        self.name = name
        self.coord = coord

    def children(self):
        nodelist = []
        return tuple(nodelist)

    attr_names = ('name', )

class IdentifierType(Node):
    __slots__ = ('names', 'coord', '__weakref__')
    def __init__(self, names, coord=None):
        self.names = names
        self.coord = coord

    def children(self):
        nodelist = []
        return tuple(nodelist)

    attr_names = ('names', )

class If(Node):
    __slots__ = ('cond', 'iftrue', 'iffalse', 'coord', '__weakref__')
    def __init__(self, cond, iftrue, iffalse, coord=None):
        self.cond = cond
        self.iftrue = iftrue
        self.iffalse = iffalse
        self.coord = coord

    def children(self):
        nodelist = []
        if self.cond is not None: nodelist.append(("cond", self.cond))
        if self.iftrue is not None: nodelist.append(("iftrue", self.iftrue))
        if self.iffalse is not None: nodelist.append(("iffalse", self.iffalse))
        return tuple(nodelist)

    attr_names = ()

class InitList(Node):
    __slots__ = ('exprs', 'coord', '__weakref__')
    def __init__(self, exprs, coord=None):
        self.exprs = exprs
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.exprs or []):
            nodelist.append(("exprs[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class Label(Node):
    __slots__ = ('name', 'stmt', 'coord', '__weakref__')
    def __init__(self, name, stmt, coord=None):
        self.name = name
        self.stmt = stmt
        self.coord = coord

    def children(self):
        nodelist = []
        if self.stmt is not None: nodelist.append(("stmt", self.stmt))
        return tuple(nodelist)

    attr_names = ('name', )

class NamedInitializer(Node):
    __slots__ = ('name', 'expr', 'coord', '__weakref__')
    def __init__(self, name, expr, coord=None):
        self.name = name
        self.expr = expr
        self.coord = coord

    def children(self):
        nodelist = []
        if self.expr is not None: nodelist.append(("expr", self.expr))
        for i, child in enumerate(self.name or []):
            nodelist.append(("name[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class ParamList(Node):
    __slots__ = ('params', 'coord', '__weakref__')
    def __init__(self, params, coord=None):
        self.params = params
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.params or []):
            nodelist.append(("params[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ()

class PtrDecl(Node):
    __slots__ = ('quals', 'type', 'coord', '__weakref__')
    def __init__(self, quals, type, coord=None):
        self.quals = quals
        self.type = type
        self.coord = coord

    def children(self):
        nodelist = []
        if self.type is not None: nodelist.append(("type", self.type))
        return tuple(nodelist)

    attr_names = ('quals', )

class Return(Node):
    __slots__ = ('expr', 'coord', '__weakref__')
    def __init__(self, expr, coord=None):
        self.expr = expr
        self.coord = coord

    def children(self):
        nodelist = []
        if self.expr is not None: nodelist.append(("expr", self.expr))
        return tuple(nodelist)

    attr_names = ()

class Struct(Node):
    __slots__ = ('name', 'decls', 'coord', '__weakref__')
    def __init__(self, name, decls, coord=None):
        self.name = name
        self.decls = decls
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.decls or []):
            nodelist.append(("decls[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ('name', )

class StructRef(Node):
    __slots__ = ('name', 'type', 'field', 'coord', '__weakref__')
    def __init__(self, name, type, field, coord=None):
        self.name = name
        self.type = type
        self.field = field
        self.coord = coord

    def children(self):
        nodelist = []
        if self.name is not None: nodelist.append(("name", self.name))
        if self.field is not None: nodelist.append(("field", self.field))
        return tuple(nodelist)

    attr_names = ('type', )

class Switch(Node):
    __slots__ = ('cond', 'stmt', 'coord', '__weakref__')
    def __init__(self, cond, stmt, coord=None):
        self.cond = cond
        self.stmt = stmt
        self.coord = coord

    def children(self):
        nodelist = []
        if self.cond is not None: nodelist.append(("cond", self.cond))
        if self.stmt is not None: nodelist.append(("stmt", self.stmt))
        return tuple(nodelist)

    attr_names = ()

class TernaryOp(Node):
    __slots__ = ('cond', 'iftrue', 'iffalse', 'coord', '__weakref__')
    def __init__(self, cond, iftrue, iffalse, coord=None):
        self.cond = cond
        self.iftrue = iftrue
        self.iffalse = iffalse
        self.coord = coord

    def children(self):
        nodelist = []
        if self.cond is not None: nodelist.append(("cond", self.cond))
        if self.iftrue is not None: nodelist.append(("iftrue", self.iftrue))
        if self.iffalse is not None: nodelist.append(("iffalse", self.iffalse))
        return tuple(nodelist)

    attr_names = ()

class TypeDecl(Node):
    __slots__ = ('declname', 'quals', 'type', 'coord', '__weakref__')
    def __init__(self, declname, quals, type, coord=None):
        self.declname = declname
        self.quals = quals
        self.type = type
        self.coord = coord

    def children(self):
        nodelist = []
        if self.type is not None: nodelist.append(("type", self.type))
        return tuple(nodelist)

    attr_names = ('declname', 'quals', )

class Typedef(Node):
    __slots__ = ('name', 'quals', 'storage', 'type', 'coord', '__weakref__')
    def __init__(self, name, quals, storage, type, coord=None):
        self.name = name
        self.quals = quals
        self.storage = storage
        self.type = type
        self.coord = coord

    def children(self):
        nodelist = []
        if self.type is not None: nodelist.append(("type", self.type))
        return tuple(nodelist)

    attr_names = ('name', 'quals', 'storage', )

class Typename(Node):
    __slots__ = ('name', 'quals', 'type', 'coord', '__weakref__')
    def __init__(self, name, quals, type, coord=None):
        self.name = name
        self.quals = quals
        self.type = type
        self.coord = coord

    def children(self):
        nodelist = []
        if self.type is not None: nodelist.append(("type", self.type))
        return tuple(nodelist)

    attr_names = ('name', 'quals', )

class UnaryOp(Node):
    __slots__ = ('op', 'expr', 'coord', '__weakref__')
    def __init__(self, op, expr, coord=None):
        self.op = op
        self.expr = expr
        self.coord = coord

    def children(self):
        nodelist = []
        if self.expr is not None: nodelist.append(("expr", self.expr))
        return tuple(nodelist)

    attr_names = ('op', )

class Union(Node):
    __slots__ = ('name', 'decls', 'coord', '__weakref__')
    def __init__(self, name, decls, coord=None):
        self.name = name
        self.decls = decls
        self.coord = coord

    def children(self):
        nodelist = []
        for i, child in enumerate(self.decls or []):
            nodelist.append(("decls[%d]" % i, child))
        return tuple(nodelist)

    attr_names = ('name', )

class While(Node):
    __slots__ = ('cond', 'stmt', 'coord', '__weakref__')
    def __init__(self, cond, stmt, coord=None):
        self.cond = cond
        self.stmt = stmt
        self.coord = coord

    def children(self):
        nodelist = []
        if self.cond is not None: nodelist.append(("cond", self.cond))
        if self.stmt is not None: nodelist.append(("stmt", self.stmt))
        return tuple(nodelist)

    attr_names = ()

PK       ʽ\ Q                     c_parser.pynu [        PK       ʽ\}{!  !              >  _ast_gen.pynu [        PK       ʽ\8KF4U U 
            P yacctab.pynu [        PK       ʽ\cxS  S               _build_tables.pynu [        PK       ʽ\L#&                r ast_transforms.pynu [        PK       ʽ\×    $             __pycache__/plyparser.cpython-36.pycnu [        PK       ʽ\}F    #             __pycache__/c_parser.cpython-36.pycnu [        PK       ʽ\  (            $ __pycache__/yacctab.cpython-36.opt-1.pycnu [        PK       ʽ\$V0!  !  #            s __pycache__/_ast_gen.cpython-36.pycnu [        PK       ʽ\#t  #t  &             __pycache__/c_ast.cpython-36.opt-1.pycnu [        PK       ʽ\ 1    .            , __pycache__/_build_tables.cpython-36.opt-1.pycnu [        PK       ʽ\×    *            G. __pycache__/plyparser.cpython-36.opt-1.pycnu [        PK       ʽ\>2U  U  !            6 __pycache__/lextab.cpython-36.pycnu [        PK       ʽ\ 1    (            LM __pycache__/_build_tables.cpython-36.pycnu [        PK       ʽ\$V0!  !  )            wO __pycache__/_ast_gen.cpython-36.opt-1.pycnu [        PK       ʽ\#t  #t               q __pycache__/c_ast.cpython-36.pycnu [        PK       ʽ\>2U  U  '             __pycache__/lextab.cpython-36.opt-1.pycnu [        PK       ʽ\AB	  	  /             __pycache__/ast_transforms.cpython-36.opt-1.pycnu [        PK       ʽ\(31CL  L  )             __pycache__/c_parser.cpython-36.opt-1.pycnu [        PK       ʽ\  "            W __pycache__/yacctab.cpython-36.pycnu [        PK       ʽ\	  	  )            ~	 __pycache__/ast_transforms.cpython-36.pycnu [        PK       ʽ\/)	  	  )            	 __pycache__/__init__.cpython-36.opt-1.pycnu [        PK       ʽ\ǦX+:  +:  &            	 __pycache__/c_generator.cpython-36.pycnu [        PK       ʽ\ǦX+:  +:  ,            y	 __pycache__/c_generator.cpython-36.opt-1.pycnu [        PK       ʽ\A&[\/  /  (             
 __pycache__/c_lexer.cpython-36.opt-1.pycnu [        PK       ʽ\A&[\/  /  "            '8
 __pycache__/c_lexer.cpython-36.pycnu [        PK       ʽ\/)	  	  #            Hh
 __pycache__/__init__.cpython-36.pycnu [        PK       ʽ\m8  m8  
            r
 c_lexer.pynu [        PK       ʽ\k^W  W              1
 __init__.pynu [        PK       ʽ\T  T  
            ö
 _c_ast.cfgnu [        PK       ʽ\?:  :              Q
 plyparser.pynu [        PK       ʽ\mN  N  	            
 lextab.pynu [        PK       ʽ\65  5              N
 c_generator.pynu [        PK       ʽ\ĬR([  ([               c_as