芝麻web文件管理V1.00
编辑当前文件:/home/conskgoa/doughi.co.uk/pycparser.zip
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=
: init=
} 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',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 de ZG dd deZG dd de ZdS )c @ s&