
;[c           @   s   d  d l  Z  d d l m Z d d l m Z d d l m Z d d l m Z m	 Z	 m
 Z
 m Z m Z d d l m Z e d e f d	     Y Z d S(
   iNi   (   t   yacc(   t   c_ast(   t   CLexer(   t	   PLYParsert   Coordt
   ParseErrort   parameterizedt   template(   t   fix_switch_casest   CParserc           B   sq  e  Z e e d  e d e d d  Z d d d  Z d   Z d   Z d   Z	 d	   Z
 d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e d  Z e d  Z d   Z d   Z d d d d d d d d d d f
 Z d)   Z d*   Z d+   Z d,   Z d-   Z d.   Z d/   Z d0   Z d1   Z  d2   Z! d3   Z" d4   Z# d5   Z$ d6   Z% d7   Z& d8   Z' d9   Z( d:   Z) d;   Z* d<   Z+ d=   Z, d>   Z- d?   Z. d@   Z/ dA   Z0 dB   Z1 dC   Z2 dD   Z3 dE   Z4 dF   Z5 dG   Z6 dH   Z7 dI   Z8 dJ   Z9 dK   Z: dL   Z; dM   Z< dN   Z= dO   Z> dP   Z? dQ   Z@ dR   ZA dS   ZB dT   ZC dU   ZD dV   ZE dW   ZF dX   ZG dY   ZH dZ   ZI d[   ZJ d\   ZK d]   ZL d^   ZM d_   ZN eO d d d  de    ZP eO d d d  df    ZQ eO d d d  dg    ZR eO d d  dh    ZS eO d d d  di    ZT eO d d d  dj    ZU eO d d d  dk    ZV eO d d d  dl    ZW dm   ZX dn   ZY do   ZZ dp   Z[ dq   Z\ dr   Z] ds   Z^ dt   Z_ du   Z` dv   Za dw   Zb dx   Zc dy   Zd dz   Ze d{   Zf d|   Zg d}   Zh d~   Zi d   Zj d   Zk d   Zl d   Zm d   Zn d   Zo d   Zp d   Zq d   Zr d   Zs d   Zt d   Zu d   Zv d   Zw d   Zx d   Zy d   Zz d   Z{ d   Z| d   Z} d   Z~ d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   s   pycparser.lextabs   pycparser.yacctabt    c   
      C   s   | d |  j  d |  j d |  j d |  j  |  _ |  j j d | d | d |  |  j j |  _ d d	 d
 d d d d d d d d d d d g } x | D] }	 |  j |	  q Wt j d |  d d d | d | d | d |  |  _	 t
   g |  _ d |  _ d S(   s   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.

            lexer:
                Set this parameter to define the lexer to use if
                you're not using the default CLexer.

            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.
        t
   error_funct   on_lbrace_funct   on_rbrace_funct   type_lookup_funct   optimizet   lextabt	   outputdirt   abstract_declaratort   assignment_expressiont   declaration_listt   declaration_specifiers_no_typet   designationt
   expressiont   identifier_listt   init_declarator_listt   id_init_declarator_listt   initializer_listt   parameter_type_listt   block_item_listt   type_qualifier_listt   struct_declarator_listt   modulet   startt   translation_unit_or_emptyt   debugt	   tabmoduleN(   t   _lex_error_funct   _lex_on_lbrace_funct   _lex_on_rbrace_funct   _lex_type_lookup_funct   clext   buildt   tokenst   _create_opt_ruleR    t   cparsert   dictt   _scope_stackt   Nonet   _last_yielded_token(
   t   selft   lex_optimizet   lexerR   t   yacc_optimizet   yacctabt
   yacc_debugt   taboutputdirt   rules_with_optt   rule(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   __init__   sF    :					
i    c         C   sS   | |  j  _ |  j  j   t   g |  _ d |  _ |  j j d | d |  j  d |  S(   s&   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
        t   inputR4   R#   N(	   R)   t   filenamet   reset_linenoR.   R/   R0   R1   R-   t   parse(   R2   t   textR=   t
   debuglevel(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyR?      s    		c         C   s   |  j  j t    d  S(   N(   R/   t   appendR.   (   R2   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   _push_scope   s    c         C   s,   t  |  j  d k s t  |  j j   d  S(   Ni   (   t   lenR/   t   AssertionErrort   pop(   R2   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt
   _pop_scope   s    c         C   sE   |  j  d j | t  s0 |  j d | |  n  t |  j  d | <d S(   sC    Add a new typedef name (ie a TYPEID) to the current scope
        is;   Typedef %r previously declared as non-typedef in this scopeN(   R/   t   gett   Truet   _parse_error(   R2   t   namet   coord(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   _add_typedef_name   s
    c         C   sE   |  j  d j | t  r0 |  j d | |  n  t |  j  d | <d S(   se    Add a new object, function, or enum member name (ie an ID) to the
            current scope
        is;   Non-typedef %r previously declared as typedef in this scopeN(   R/   RH   t   FalseRJ   (   R2   RK   RL   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   _add_identifier   s
    c         C   s=   x6 t  |  j  D]% } | j |  } | d k	 r | Sq Wt S(   s8    Is *name* a typedef-name in the current scope?
        N(   t   reversedR/   RH   R0   RN   (   R2   RK   t   scopet   in_scope(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   _is_type_in_scope   s
     c         C   s    |  j  | |  j | |   d  S(   N(   RJ   t   _coord(   R2   t   msgt   linet   column(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyR%      s    c         C   s   |  j    d  S(   N(   RC   (   R2   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyR&      s    c         C   s   |  j    d  S(   N(   RG   (   R2   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyR'      s    c         C   s   |  j  |  } | S(   s    Looks up types that were previously defined with
            typedef.
            Passed to the lexer for recognizing identifiers that
            are types.
        (   RS   (   R2   RK   t   is_type(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyR(      s    c         C   s
   |  j  j S(   s    We need access to yacc's lookahead token in certain cases.
            This is the last token yacc requested from the lexer, so we
            ask the lexer.
        (   R)   t
   last_token(   R2   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   _get_yacc_lookahead_token   s    c         C   s   | } | } x | j  r$ | j  } q Wt | t j  rD | | _  | S| } x" t | j  t j  sn | j  } qM W| j  | _  | | _  | Sd S(   s    Tacks a type modifier on a declarator, and returns
            the modified declarator.

            Note: the declarator and modifier may be modified
        N(   t   typet
   isinstanceR   t   TypeDecl(   R2   t   declt   modifiert   modifier_headt   modifier_tailt	   decl_tail(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   _type_modify_decl   s    		c         C   s3  | } x t  | t j  s' | j } q	 W| j | _ | j | _ xX | D]P } t  | t j  sG t |  d k r |  j	 d | j
  q | | _ | SqG qG W| s t  | j t j  s |  j	 d | j
  n  t j d g d | j
 | _ nB t j g  | D] } | j D] } | ^ qq d | d j
 | _ | S(   s-    Fixes a declaration. Modifies decl.
        i   s    Invalid multiple types specifieds   Missing type in declarationt   intRL   i    (   R\   R   R]   R[   t   declnameRK   t   qualst   IdentifierTypeRD   RJ   RL   t   FuncDeclt   names(   R2   R^   t   typenameR[   t   tnt   idRK   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   _fix_decl_name_type2  s.    		)c      	   C   sY   | p$ t  d g  d g  d g  d g   } | rA | | j |  n | | j d |  | S(   s   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.
            If `append` is True, the new specifier is added to the end of
            the specifiers list, otherwise it's added at the beginning.
            Returns the declaration specifier, with the new
            specifier incorporated.
        t   qualt   storageR[   t   functioni    (   R.   RB   t   insert(   R2   t   declspect   newspect   kindRB   t   spec(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   _add_declaration_specifier_  s
    'c         C   s+  d | d k } g  } | d j  d  d k	 r2 n| d d d k r6t | d  d k  s t | d d j  d	 k s |  j | d d j d  r d
 } x. | d D]" } t | d  r | j } Pq q W|  j d |  n  t j	 d | d d j d d d d d d | d d j  | d d <| d d =n t
 | d d t j t j t j f  s| d d } x t
 | t j	  s| j } qpW| j d k r| d d j d | _ | d d =qn  x]| D]U}	 |	 d d k	 st  | r0t j d d d | d d | d d |	 d d |	 d j  }
 ne t j d d d | d d | d d | d d |	 d d |	 j  d  d |	 j  d  d |	 d j  }
 t
 |
 j t j t j t j f  r|
 } n |  j |
 | d  } | r| r|  j | j | j  q|  j | j | j  n  | j |  qW| S(   s    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.
        t   typedefRo   i    t   bitsizeR^   R[   i   ii   t   ?RL   s   Invalid declarationRe   Rf   RK   Rn   t   funcspecRp   t   initN(   RH   R0   RD   Ri   RS   t   hasattrRL   RJ   R   R]   R\   t   Structt   UnionRg   R[   Re   RE   t   Typedeft   DeclRm   RM   RK   RO   RB   (   R2   Ru   t   declst   typedef_namespacet
   is_typedeft   declarationsRL   t   tt   decls_0_tailR^   t   declarationt
   fixed_decl(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   _build_declarationsw  sn    3			


	



		c      	   C   so   d | d k s t   |  j d | d t d | d d  g d t  d } t j d | d	 | d
 | d | j  S(   s'    Builds a function definition.
        Rw   Ro   Ru   R   R^   R{   R   i    t   param_declst   bodyRL   N(   RE   R   R.   R0   RI   R   t   FuncDefRL   (   R2   Ru   R^   R   R   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   _build_function_definition  s    		c         C   s   | d k r t  j St  j Sd S(   s`    Given a token (either STRUCT or UNION), selects the
            appropriate AST class.
        t   structN(   R   R}   R~   (   R2   t   token(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   _select_struct_union_class  s    t   leftt   LORt   LANDt   ORt   XORt   ANDt   EQt   NEt   GTt   GEt   LTt   LEt   RSHIFTt   LSHIFTt   PLUSt   MINUSt   TIMESt   DIVIDEt   MODc         C   sA   | d d k r& t j g   | d <n t j | d  | d <d S(   sh    translation_unit_or_empty   : translation_unit
                                        | empty
        i   i    N(   R0   R   t   FileAST(   R2   t   p(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_translation_unit_or_empty  s    c         C   s   | d | d <d S(   s4    translation_unit    : external_declaration
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_translation_unit_1
  s    c         C   s:   | d d k	 r( | d j | d  n  | d | d <d S(   sE    translation_unit    : translation_unit external_declaration
        i   i   i    N(   R0   t   extend(   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_translation_unit_2  s    c         C   s   | d g | d <d S(   s7    external_declaration    : function_definition
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_external_declaration_1  s    c         C   s   | d | d <d S(   s/    external_declaration    : declaration
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_external_declaration_2"  s    c         C   s   | d g | d <d S(   si    external_declaration    : pp_directive
                                    | pppragma_directive
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_external_declaration_3'  s    c         C   s   d | d <d S(   s(    external_declaration    : SEMI
        i    N(   R0   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_external_declaration_4-  s    c         C   s    |  j  d |  j | d   d S(   s     pp_directive  : PPHASH
        s   Directives not supported yeti   N(   RJ   t   _token_coord(   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_pp_directive2  s    	c         C   sa   t  |  d k r; t j | d |  j | d   | d <n" t j d |  j | d   | d <d S(   sg    pppragma_directive      : PPPRAGMA
                                    | PPPRAGMA PPPRAGMASTR
        i   i   i    R
   i   N(   RD   R   t   PragmaR   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_pppragma_directive8  s    )c         C   sz   t  d g  d g  d t j d g d |  j | d  g d g   } |  j d | d	 | d d
 | d d | d  | d <d S(   sU    function_definition : id_declarator declaration_list_opt compound_statement
        Rn   Ro   R[   Rd   RL   i   Rp   Ru   R^   R   i   R   i   i    N(   R.   R   Rg   R   R   (   R2   R   Ru   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_function_definition_1D  s    		

c      
   C   sB   | d } |  j  d | d | d d | d d | d  | d	 <d
 S(   sl    function_definition : declaration_specifiers id_declarator declaration_list_opt compound_statement
        i   Ru   R^   i   R   i   R   i   i    N(   R   (   R2   R   Ru   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_function_definition_2U  s    
	

c         C   s   | d | d <d S(   s7   statement   : labeled_statement
                        | expression_statement
                        | compound_statement
                        | selection_statement
                        | iteration_statement
                        | jump_statement
                        | pppragma_directive
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_statement`  s    	c         C   ss   t  | d t j  ra t |  d k ra t j d | d | d g d |  j | d   | d <n | d | d <d S(   sx    pragmacomp_or_statement     : pppragma_directive statement
                                        | statement
        i   i   t   block_itemsi   RL   i    N(   R\   R   R   RD   t   CompoundR   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_pragmacomp_or_statement  s
    (	c         C   s  | d } | d d k r | d } t j t j t j f } t |  d k r t | d |  r t j d d d | d d | d d	 | d
 d | d d d d d d | d j  g } q|  j	 d | d t
 d d d d  g d t  } n" |  j	 d | d | d d t  } | | d <d S(   s    decl_body : declaration_specifiers init_declarator_list_opt
                      | declaration_specifiers_no_type id_init_declarator_list_opt
        i   i   R[   i    RK   Rf   Rn   Ro   Rz   Rp   R{   Rx   RL   Ru   R   R^   R   N(   R0   R   R}   R~   t   EnumRD   R\   R   RL   R   R.   RI   (   R2   R   Ru   t   tyt   s_u_or_eR   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_decl_body  s.    

%	



		
	c         C   s   | d | d <d S(   s&    declaration : decl_body SEMI
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_declaration  s    c         C   s6   t  |  d k r | d n | d | d | d <d S(   sj    declaration_list    : declaration
                                | declaration_list declaration
        i   i   i    N(   RD   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_declaration_list  s    c         C   s%   |  j  | d | d d  | d <d S(   s]    declaration_specifiers_no_type  : type_qualifier declaration_specifiers_no_type_opt
        i   i   Rn   i    N(   Rv   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt"   p_declaration_specifiers_no_type_1  s    c         C   s%   |  j  | d | d d  | d <d S(   sf    declaration_specifiers_no_type  : storage_class_specifier declaration_specifiers_no_type_opt
        i   i   Ro   i    N(   Rv   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt"   p_declaration_specifiers_no_type_2  s    c         C   s%   |  j  | d | d d  | d <d S(   sa    declaration_specifiers_no_type  : function_specifier declaration_specifiers_no_type_opt
        i   i   Rp   i    N(   Rv   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt"   p_declaration_specifiers_no_type_3  s    c         C   s+   |  j  | d | d d d t | d <d S(   sI    declaration_specifiers  : declaration_specifiers type_qualifier
        i   i   Rn   RB   i    N(   Rv   RI   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_declaration_specifiers_1	  s    c         C   s+   |  j  | d | d d d t | d <d S(   sR    declaration_specifiers  : declaration_specifiers storage_class_specifier
        i   i   Ro   RB   i    N(   Rv   RI   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_declaration_specifiers_2  s    c         C   s+   |  j  | d | d d d t | d <d S(   sM    declaration_specifiers  : declaration_specifiers function_specifier
        i   i   Rp   RB   i    N(   Rv   RI   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_declaration_specifiers_3  s    c         C   s+   |  j  | d | d d d t | d <d S(   sS    declaration_specifiers  : declaration_specifiers type_specifier_no_typeid
        i   i   R[   RB   i    N(   Rv   RI   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_declaration_specifiers_4  s    c         C   s!   |  j  d | d d  | d <d S(   s2    declaration_specifiers  : type_specifier
        i   R[   i    N(   Rv   R0   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_declaration_specifiers_5  s    c         C   s+   |  j  | d | d d d t | d <d S(   sQ    declaration_specifiers  : declaration_specifiers_no_type type_specifier
        i   i   R[   RB   i    N(   Rv   RI   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_declaration_specifiers_6"  s    c         C   s   | d | d <d S(   s    storage_class_specifier : AUTO
                                    | REGISTER
                                    | STATIC
                                    | EXTERN
                                    | TYPEDEF
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_storage_class_specifier(  s    c         C   s   | d | d <d S(   s&    function_specifier  : INLINE
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_function_specifier1  s    c         C   s0   t  j | d g d |  j | d  | d <d S(   s+   type_specifier_no_typeid  : VOID
                                      | _BOOL
                                      | CHAR
                                      | SHORT
                                      | INT
                                      | LONG
                                      | FLOAT
                                      | DOUBLE
                                      | _COMPLEX
                                      | SIGNED
                                      | UNSIGNED
                                      | __INT128
        i   RL   i    N(   R   Rg   R   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_type_specifier_no_typeid6  s    c         C   s   | d | d <d S(   s    type_specifier  : typedef_name
                            | enum_specifier
                            | struct_or_union_specifier
                            | type_specifier_no_typeid
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_type_specifierF  s    c         C   s   | d | d <d S(   so    type_qualifier  : CONST
                            | RESTRICT
                            | VOLATILE
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_type_qualifierN  s    c         C   s<   t  |  d k r' | d | d g n
 | d g | d <d S(   s    init_declarator_list    : init_declarator
                                    | init_declarator_list COMMA init_declarator
        i   i   i   i    N(   RD   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_init_declarator_listU  s    c         C   s=   t  d | d d t |  d k r, | d n d  | d <d S(   sb    init_declarator : declarator
                            | declarator EQUALS initializer
        R^   i   R{   i   i   i    N(   R.   RD   R0   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_init_declarator^  s    c         C   s<   t  |  d k r' | d | d g n
 | d g | d <d S(   s    id_init_declarator_list    : id_init_declarator
                                       | id_init_declarator_list COMMA init_declarator
        i   i   i   i    N(   RD   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_id_init_declarator_listd  s    c         C   s=   t  d | d d t |  d k r, | d n d  | d <d S(   sn    id_init_declarator : id_declarator
                               | id_declarator EQUALS initializer
        R^   i   R{   i   i   i    N(   R.   RD   R0   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_id_init_declaratorj  s    c         C   s+   |  j  | d | d d d t | d <d S(   sY    specifier_qualifier_list    : specifier_qualifier_list type_specifier_no_typeid
        i   i   R[   RB   i    N(   Rv   RI   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_specifier_qualifier_list_1r  s    c         C   s+   |  j  | d | d d d t | d <d S(   sO    specifier_qualifier_list    : specifier_qualifier_list type_qualifier
        i   i   Rn   RB   i    N(   Rv   RI   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_specifier_qualifier_list_2w  s    c         C   s!   |  j  d | d d  | d <d S(   s4    specifier_qualifier_list  : type_specifier
        i   R[   i    N(   Rv   R0   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_specifier_qualifier_list_3|  s    c      	   C   sL   t  d | d d g  d g  d g   } |  j | | d d d t | d <d	 S(
   sH    specifier_qualifier_list  : type_qualifier_list type_specifier
        Rn   i   Ro   R[   Rp   i   RB   i    N(   R.   Rv   RI   (   R2   R   Ru   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_specifier_qualifier_list_4  s    %c      	   C   sF   |  j  | d  } | d | d d d d |  j | d   | d <d S(   s{    struct_or_union_specifier   : struct_or_union ID
                                        | struct_or_union TYPEID
        i   RK   i   R   RL   i    N(   R   R0   R   (   R2   R   t   klass(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_or_union_specifier_1  s
    
c      	   C   s   |  j  | d  } t |  d k rS | d d	 d g  d |  j | d   | d <n/ | d d	 d | d d |  j | d   | d <d	 S(
   s    struct_or_union_specifier : struct_or_union brace_open struct_declaration_list brace_close
                                      | struct_or_union brace_open brace_close
        i   i   RK   R   RL   i   i    i   N(   R   RD   R0   R   (   R2   R   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_or_union_specifier_2  s    
c      	   C   s   |  j  | d  } t |  d k rW | d | d d g  d |  j | d   | d <n3 | d | d d | d d |  j | d   | d <d	 S(
   s   struct_or_union_specifier   : struct_or_union ID brace_open struct_declaration_list brace_close
                                        | struct_or_union ID brace_open brace_close
                                        | struct_or_union TYPEID brace_open struct_declaration_list brace_close
                                        | struct_or_union TYPEID brace_open brace_close
        i   i   RK   i   R   RL   i    i   N(   R   RD   R   (   R2   R   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_or_union_specifier_3  s    


c         C   s   | d | d <d S(   sF    struct_or_union : STRUCT
                            | UNION
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_or_union  s    c         C   sI   t  |  d k r) | d p g  | d <n | d | d p= g  | d <d S(   s    struct_declaration_list     : struct_declaration
                                        | struct_declaration_list struct_declaration
        i   i   i    N(   RD   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_declaration_list  s    c      	   C   s   | d } d | d k s  t   | d d k	 rO |  j d | d | d  } n t | d  d k r | d d } t | t j  r | } n t j |  } |  j d | d t d	 |  g  } n* |  j d | d t d	 d d
 d  g  } | | d <d S(   sW    struct_declaration : specifier_qualifier_list struct_declarator_list_opt SEMI
        i   Rw   Ro   i   Ru   R   R[   i    R^   R{   N(	   RE   R0   R   RD   R\   R   t   NodeRg   R.   (   R2   R   Ru   R   t   nodet	   decl_type(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_declaration_1  s$    
				c         C   s   d | d <d S(   s#    struct_declaration : SEMI
        i    N(   R0   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_declaration_2  s    c         C   s   | d g | d <d S(   s1    struct_declaration : pppragma_directive
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_declaration_3  s    c         C   s<   t  |  d k r' | d | d g n
 | d g | d <d S(   s    struct_declarator_list  : struct_declarator
                                    | struct_declarator_list COMMA struct_declarator
        i   i   i   i    N(   RD   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_declarator_list  s    c         C   s    i | d d 6d d 6| d <d S(   s(    struct_declarator : declarator
        i   R^   Rx   i    N(   R0   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_declarator_1  s    c         C   sd   t  |  d k r5 i | d d 6| d d 6| d <n+ i t j d d d  d 6| d d 6| d <d S(   s    struct_declarator   : declarator COLON constant_expression
                                | COLON constant_expression
        i   i   R^   Rx   i    i   N(   RD   R   R]   R0   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_declarator_2	  s    #c         C   s-   t  j | d d |  j | d   | d <d S(   sM    enum_specifier  : ENUM ID
                            | ENUM TYPEID
        i   i   i    N(   R   R   R0   R   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_enum_specifier_1  s    c         C   s-   t  j d | d |  j | d   | d <d S(   sG    enum_specifier  : ENUM brace_open enumerator_list brace_close
        i   i   i    N(   R   R   R0   R   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_enum_specifier_2  s    c         C   s1   t  j | d | d |  j | d   | d <d S(   s    enum_specifier  : ENUM ID brace_open enumerator_list brace_close
                            | ENUM TYPEID brace_open enumerator_list brace_close
        i   i   i   i    N(   R   R   R   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_enum_specifier_3  s    c         C   s   t  |  d k r9 t j | d g | d j  | d <nI t  |  d k r\ | d | d <n& | d j j | d  | d | d <d S(   s    enumerator_list : enumerator
                            | enumerator_list COMMA
                            | enumerator_list COMMA enumerator
        i   i   i    i   N(   RD   R   t   EnumeratorListRL   t   enumeratorsRB   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_enumerator_list#  s    'c         C   s   t  |  d k r: t j | d d |  j | d   } n) t j | d | d |  j | d   } |  j | j | j  | | d <d S(   sR    enumerator  : ID
                        | ID EQUALS constant_expression
        i   i   i   i    N(   RD   R   t
   EnumeratorR0   R   RO   RK   RL   (   R2   R   t
   enumerator(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_enumerator0  s    
c         C   s   | d | d <d S(   sQ    declarator  : id_declarator
                        | typeid_declarator
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_declarator@  s    Rl   t   IDt   typeidt   TYPEIDt   typeid_noparenc         C   s   | d | d <d S(   s1    xxx_declarator  : direct_xxx_declarator
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_xxx_declarator_1F  s    c         C   s"   |  j  | d | d  | d <d S(   s9    xxx_declarator  : pointer direct_xxx_declarator
        i   i   i    N(   Rc   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_xxx_declarator_2L  s    c         C   s<   t  j d | d d d d d d |  j | d   | d <d S(   s'    direct_xxx_declarator   : yyy
        Re   i   R[   Rf   RL   i    N(   R   R]   R0   R   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_xxx_declarator_1R  s
    	
c         C   s   | d | d <d S(   s@    direct_xxx_declarator   : LPAREN xxx_declarator RPAREN
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_xxx_declarator_2\  s    c      
   C   s   t  |  d k r | d n g  p% g  } t j d d d t  |  d k rS | d n | d d | d | d j  } |  j d	 | d d
 |  | d <d S(   s}    direct_xxx_declarator   : direct_xxx_declarator LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKET
        i   i   R[   t   dimi   t	   dim_qualsRL   i   R^   R_   i    N(   RD   R   t	   ArrayDeclR0   RL   Rc   (   R2   R   Rf   t   arr(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_xxx_declarator_3b  s    (	&c      
   C   s   g  | d | d g D]$ } t  | t  r0 | n | g ^ q } g  | D]% } | D] } | d k	 rP | ^ qP qF } t j d d d | d d | d | d j  } |  j d	 | d d
 |  | d <d S(   s    direct_xxx_declarator   : direct_xxx_declarator LBRACKET STATIC type_qualifier_list_opt assignment_expression RBRACKET
                                    | direct_xxx_declarator LBRACKET type_qualifier_list STATIC assignment_expression RBRACKET
        i   i   R[   R   i   R   RL   i   R^   R_   i    N(   R\   t   listR0   R   R   RL   Rc   (   R2   R   t   itemt   listed_qualst   sublistRn   R   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_xxx_declarator_4q  s    <	
c      
   C   s   t  j d d d t  j | d |  j | d   d | d d k rK | d n g  d | d j  } |  j d | d d	 |  | d
 <d S(   si    direct_xxx_declarator   : direct_xxx_declarator LBRACKET type_qualifier_list_opt TIMES RBRACKET
        R[   R   i   R   i   RL   i   R^   R_   i    N(   R   R   R0   R   R   RL   Rc   (   R2   R   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_xxx_declarator_5  s    	" c         C   s   t  j d | d d d
 d | d j  } |  j   j d k r | j d
 k	 r xC | j j D]2 } t | t  j	  rv Pn  |  j
 | j | j  qZ Wq n  |  j d | d d |  | d	 <d
 S(   s    direct_xxx_declarator   : direct_xxx_declarator LPAREN parameter_type_list RPAREN
                                    | direct_xxx_declarator LPAREN identifier_list_opt RPAREN
        t   argsi   R[   RL   i   t   LBRACER^   R_   i    N(   R   Rh   R0   RL   RZ   R[   R   t   paramsR\   t   EllipsisParamRO   RK   Rc   (   R2   R   t   funct   param(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_xxx_declarator_6  s    	
  c         C   s   |  j  | d  } t j d | d p( g  d d d |  } t |  d k r | d } x | j d k	 rt | j } qY W| | _ | d | d <n
 | | d <d S(	   sm    pointer : TIMES type_qualifier_list_opt
                    | TIMES type_qualifier_list_opt pointer
        i   Rf   i   R[   RL   i   i    N(   R   R   t   PtrDeclR0   RD   R[   (   R2   R   RL   t   nested_typet	   tail_type(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt	   p_pointer  s    (
	c         C   s<   t  |  d k r | d g n | d | d g | d <d S(   ss    type_qualifier_list : type_qualifier
                                | type_qualifier_list type_qualifier
        i   i   i    N(   RD   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_type_qualifier_list  s    c         C   sP   t  |  d k r> | d j j t j |  j | d    n  | d | d <d S(   sn    parameter_type_list : parameter_list
                                | parameter_list COMMA ELLIPSIS
        i   i   i   i    N(   RD   R  RB   R   R  R   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_parameter_type_list  s    ,c         C   sc   t  |  d k r9 t j | d g | d j  | d <n& | d j j | d  | d | d <d S(   sz    parameter_list  : parameter_declaration
                            | parameter_list COMMA parameter_declaration
        i   i   i    i   N(   RD   R   t	   ParamListRL   R  RB   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_parameter_list  s    'c         C   sv   | d } | d sB t  j d g d |  j | d  g | d <n  |  j d | d t d | d  g  d	 | d	 <d
 S(   s    parameter_declaration   : declaration_specifiers id_declarator
                                    | declaration_specifiers typeid_noparen_declarator
        i   R[   Rd   RL   Ru   R   R^   i   i    N(   R   Rg   R   R   R.   (   R2   R   Ru   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_parameter_declaration_1  s    

	c         C   s?  | d } | d sB t  j d g d |  j | d  g | d <n  t | d  d k r t | d d j  d k r |  j | d d j d  r |  j d | d t d	 | d
 d d  g  d } ni t  j	 d d d | d d | d
 p t  j
 d d d  d |  j | d
   } | d } |  j | |  } | | d <d S(   sR    parameter_declaration   : declaration_specifiers abstract_declarator_opt
        i   R[   Rd   RL   ii    Ru   R   R^   i   R{   RK   R
   Rf   Rn   N(   R   Rg   R   RD   Ri   RS   R   R.   R0   t   TypenameR]   Rm   (   R2   R   Ru   R^   Rj   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_parameter_declaration_2  s"    

3	&	

c         C   sc   t  |  d k r9 t j | d g | d j  | d <n& | d j j | d  | d | d <d S(   se    identifier_list : identifier
                            | identifier_list COMMA identifier
        i   i   i    i   N(   RD   R   R  RL   R  RB   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_identifier_list  s    'c         C   s   | d | d <d S(   s-    initializer : assignment_expression
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_initializer_1&  s    c         C   sG   | d d k r5 t j g  |  j | d   | d <n | d | d <d S(   s    initializer : brace_open initializer_list_opt brace_close
                        | brace_open initializer_list COMMA brace_close
        i   i   i    N(   R0   R   t   InitListR   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_initializer_2+  s    %c         C   s   t  |  d k ri | d d k r, | d n t j | d | d  } t j | g | d j  | d <nV | d d k r | d n t j | d | d  } | d j j |  | d | d <d S(   s    initializer_list    : designation_opt initializer
                                | initializer_list COMMA designation_opt initializer
        i   i   i   i    i   N(   RD   R0   R   t   NamedInitializerR  RL   t   exprsRB   (   R2   R   R{   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_initializer_list4  s    4#4c         C   s   | d | d <d S(   s.    designation : designator_list EQUALS
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_designation@  s    c         C   s<   t  |  d k r | d g n | d | d g | d <d S(   s_    designator_list : designator
                            | designator_list designator
        i   i   i    N(   RD   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_designator_listH  s    c         C   s   | d | d <d S(   si    designator  : LBRACKET constant_expression RBRACKET
                        | PERIOD identifier
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_designatorN  s    c         C   ss   t  j d d d | d d d | d p9 t  j d
 d
 d
  d |  j | d   } |  j | | d d  | d	 <d
 S(   sH    type_name   : specifier_qualifier_list abstract_declarator_opt
        RK   R
   Rf   i   Rn   R[   i   RL   i    N(   R   R  R]   R0   R   Rm   (   R2   R   Rj   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_type_nameT  s    	c         C   s9   t  j d d d  } |  j d | d | d  | d <d S(   s+    abstract_declarator     : pointer
        R^   R_   i   i    N(   R   R]   R0   Rc   (   R2   R   t	   dummytype(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_abstract_declarator_1_  s    	c         C   s"   |  j  | d | d  | d <d S(   sF    abstract_declarator     : pointer direct_abstract_declarator
        i   i   i    N(   Rc   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_abstract_declarator_2g  s    c         C   s   | d | d <d S(   s>    abstract_declarator     : direct_abstract_declarator
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_abstract_declarator_3l  s    c         C   s   | d | d <d S(   sA    direct_abstract_declarator  : LPAREN abstract_declarator RPAREN i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_abstract_declarator_1v  s    c      
   C   sS   t  j d d
 d | d d g  d | d j  } |  j d | d d |  | d	 <d
 S(   sn    direct_abstract_declarator  : direct_abstract_declarator LBRACKET assignment_expression_opt RBRACKET
        R[   R   i   R   RL   i   R^   R_   i    N(   R   R   R0   RL   Rc   (   R2   R   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_abstract_declarator_2z  s    	
c         C   sK   t  j d t  j d d d  d | d d g  d |  j | d   | d <d S(	   sS    direct_abstract_declarator  : LBRACKET assignment_expression_opt RBRACKET
        R[   R   i   R   RL   i   i    N(   R   R   R]   R0   R   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_abstract_declarator_3  s
    	
c      
   C   sk   t  j d d
 d t  j | d |  j | d   d g  d | d j  } |  j d | d d |  | d	 <d
 S(   sZ    direct_abstract_declarator  : direct_abstract_declarator LBRACKET TIMES RBRACKET
        R[   R   i   R   RL   i   R^   R_   i    N(   R   R   R0   R   R   RL   Rc   (   R2   R   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_abstract_declarator_4  s    	"c         C   sc   t  j d t  j d d d  d t  j | d |  j | d   d g  d |  j | d   | d <d S(	   s?    direct_abstract_declarator  : LBRACKET TIMES RBRACKET
        R[   R   i   R   RL   i   i    N(   R   R   R]   R0   R   R   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_abstract_declarator_5  s
    	"c         C   sM   t  j d | d d d	 d | d j  } |  j d | d d |  | d <d	 S(
   sh    direct_abstract_declarator  : direct_abstract_declarator LPAREN parameter_type_list_opt RPAREN
        R   i   R[   RL   i   R^   R_   i    N(   R   Rh   R0   RL   Rc   (   R2   R   R  (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_abstract_declarator_6  s
    	
c      	   C   sE   t  j d | d d t  j d d d  d |  j | d   | d <d S(   sM    direct_abstract_declarator  : LPAREN parameter_type_list_opt RPAREN
        R   i   R[   RL   i   i    N(   R   Rh   R]   R0   R   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_abstract_declarator_7  s    	
c         C   s2   t  | d t  r | d n
 | d g | d <d S(   sG    block_item  : declaration
                        | statement
        i   i    N(   R\   R   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_block_item  s    c         C   sI   t  |  d k s% | d d g k r/ | d n | d | d | d <d S(   s_    block_item_list : block_item
                            | block_item_list block_item
        i   i   i    N(   RD   R0   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_block_item_list  s    c         C   s0   t  j d | d d |  j | d   | d <d S(   sA    compound_statement : brace_open block_item_list_opt brace_close R   i   RL   i   i    N(   R   R   R   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_compound_statement_1  s    	
c         C   s1   t  j | d | d |  j | d   | d <d S(   s6    labeled_statement : ID COLON pragmacomp_or_statement i   i   i    N(   R   t   LabelR   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_labeled_statement_1  s    c         C   s4   t  j | d | d g |  j | d   | d <d S(   sL    labeled_statement : CASE constant_expression COLON pragmacomp_or_statement i   i   i   i    N(   R   t   CaseR   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_labeled_statement_2  s    c         C   s-   t  j | d g |  j | d   | d <d S(   s;    labeled_statement : DEFAULT COLON pragmacomp_or_statement i   i   i    N(   R   t   DefaultR   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_labeled_statement_3  s    c         C   s4   t  j | d | d d |  j | d   | d <d S(   sK    selection_statement : IF LPAREN expression RPAREN pragmacomp_or_statement i   i   i   i    N(   R   t   IfR0   R   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_selection_statement_1  s    c         C   s8   t  j | d | d | d |  j | d   | d <d S(   sZ    selection_statement : IF LPAREN expression RPAREN statement ELSE pragmacomp_or_statement i   i   i   i   i    N(   R   R1  R   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_selection_statement_2  s    c         C   s7   t  t j | d | d |  j | d    | d <d S(   sO    selection_statement : SWITCH LPAREN expression RPAREN pragmacomp_or_statement i   i   i   i    N(   R   R   t   SwitchR   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_selection_statement_3  s    c         C   s1   t  j | d | d |  j | d   | d <d S(   sN    iteration_statement : WHILE LPAREN expression RPAREN pragmacomp_or_statement i   i   i   i    N(   R   t   WhileR   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_iteration_statement_1  s    c         C   s1   t  j | d | d |  j | d   | d <d S(   sV    iteration_statement : DO pragmacomp_or_statement WHILE LPAREN expression RPAREN SEMI i   i   i   i    N(   R   t   DoWhileR   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_iteration_statement_2  s    c         C   s?   t  j | d | d | d | d |  j | d   | d <d S(   sx    iteration_statement : FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN pragmacomp_or_statement i   i   i   i	   i   i    N(   R   t   ForR   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_iteration_statement_3  s    c         C   sW   t  j t  j | d |  j | d   | d | d | d |  j | d   | d <d S(   sp    iteration_statement : FOR LPAREN declaration expression_opt SEMI expression_opt RPAREN pragmacomp_or_statement i   i   i   i   i   i    N(   R   R:  t   DeclListR   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_iteration_statement_4  s    %c         C   s*   t  j | d |  j | d   | d <d S(   s     jump_statement  : GOTO ID SEMI i   i   i    N(   R   t   GotoR   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_jump_statement_1  s    c         C   s#   t  j |  j | d   | d <d S(   s    jump_statement  : BREAK SEMI i   i    N(   R   t   BreakR   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_jump_statement_2  s    c         C   s#   t  j |  j | d   | d <d S(   s!    jump_statement  : CONTINUE SEMI i   i    N(   R   t   ContinueR   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_jump_statement_3  s    c         C   sB   t  j t |  d k r" | d n d |  j | d   | d <d S(   s\    jump_statement  : RETURN expression SEMI
                            | RETURN SEMI
        i   i   i   i    N(   R   t   ReturnRD   R0   R   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_jump_statement_4  s    c         C   sD   | d d k r2 t j |  j | d   | d <n | d | d <d S(   s,    expression_statement : expression_opt SEMI i   i   i    N(   R0   R   t   EmptyStatementR   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_expression_statement  s    "c         C   s   t  |  d k r# | d | d <nc t | d t j  s` t j | d g | d j  | d <n  | d j j | d  | d | d <d S(   sn    expression  : assignment_expression
                        | expression COMMA assignment_expression
        i   i   i    i   N(   RD   R\   R   t   ExprListRL   R  RB   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_expression  s    'c         C   s0   t  j | d g d |  j | d  | d <d S(   s    typedef_name : TYPEID i   RL   i    N(   R   Rg   R   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_typedef_name  s    c         C   sV   t  |  d k r# | d | d <n/ t j | d | d | d | d j  | d <d S(   s    assignment_expression   : conditional_expression
                                    | unary_expression assignment_operator assignment_expression
        i   i   i    i   N(   RD   R   t
   AssignmentRL   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_assignment_expression   s    c         C   s   | d | d <d S(   s   assignment_operator : EQUALS
                                | XOREQUAL
                                | TIMESEQUAL
                                | DIVEQUAL
                                | MODEQUAL
                                | PLUSEQUAL
                                | MINUSEQUAL
                                | LSHIFTEQUAL
                                | RSHIFTEQUAL
                                | ANDEQUAL
                                | OREQUAL
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_assignment_operator.  s    c         C   s   | d | d <d S(   s.    constant_expression : conditional_expression i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_constant_expression=  s    c         C   sV   t  |  d k r# | d | d <n/ t j | d | d | d | d j  | d <d S(   s    conditional_expression  : binary_expression
                                    | binary_expression CONDOP expression COLON conditional_expression
        i   i   i    i   i   N(   RD   R   t	   TernaryOpRL   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_conditional_expressionA  s    c         C   sV   t  |  d k r# | d | d <n/ t j | d | d | d | d j  | d <d S(   sk   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
        i   i   i    i   N(   RD   R   t   BinaryOpRL   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_binary_expressionJ  s    c         C   s   | d | d <d S(   s$    cast_expression : unary_expression i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_cast_expression_1d  s    c         C   s1   t  j | d | d |  j | d   | d <d S(   s;    cast_expression : LPAREN type_name RPAREN cast_expression i   i   i   i    N(   R   t   CastR   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_cast_expression_2h  s    c         C   s   | d | d <d S(   s*    unary_expression    : postfix_expression i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_unary_expression_1l  s    c         C   s,   t  j | d | d | d j  | d <d S(   s    unary_expression    : PLUSPLUS unary_expression
                                | MINUSMINUS unary_expression
                                | unary_operator cast_expression
        i   i   i    N(   R   t   UnaryOpRL   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_unary_expression_2p  s    c         C   sM   t  j | d t |  d k r) | d n | d |  j | d   | d <d S(   sx    unary_expression    : SIZEOF unary_expression
                                | SIZEOF LPAREN type_name RPAREN
        i   i   i   i    N(   R   RW  RD   R   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_unary_expression_3w  s    #c         C   s   | d | d <d S(   s    unary_operator  : AND
                            | TIMES
                            | PLUS
                            | MINUS
                            | NOT
                            | LNOT
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_unary_operator  s    c         C   s   | d | d <d S(   s*    postfix_expression  : primary_expression i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_postfix_expression_1  s    c         C   s,   t  j | d | d | d j  | d <d S(   sG    postfix_expression  : postfix_expression LBRACKET expression RBRACKET i   i   i    N(   R   t   ArrayRefRL   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_postfix_expression_2  s    c         C   sD   t  j | d t |  d k r) | d n d | d j  | d <d S(   s    postfix_expression  : postfix_expression LPAREN argument_expression_list RPAREN
                                | postfix_expression LPAREN RPAREN
        i   i   i   i    N(   R   t   FuncCallRD   R0   RL   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_postfix_expression_3  s    c         C   sQ   t  j | d |  j | d   } t  j | d | d | | d j  | d <d S(   s    postfix_expression  : postfix_expression PERIOD ID
                                | postfix_expression PERIOD TYPEID
                                | postfix_expression ARROW ID
                                | postfix_expression ARROW TYPEID
        i   i   i   i    N(   R   R   R   t	   StructRefRL   (   R2   R   t   field(    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_postfix_expression_4  s    "c         C   s0   t  j d | d | d | d j  | d <d S(   s{    postfix_expression  : postfix_expression PLUSPLUS
                                | postfix_expression MINUSMINUS
        R   i   i   i    N(   R   RW  RL   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_postfix_expression_5  s    c         C   s"   t  j | d | d  | d <d S(   s    postfix_expression  : LPAREN type_name RPAREN brace_open initializer_list brace_close
                                | LPAREN type_name RPAREN brace_open initializer_list COMMA brace_close
        i   i   i    N(   R   t   CompoundLiteral(   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_postfix_expression_6  s    c         C   s   | d | d <d S(   s"    primary_expression  : identifier i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_primary_expression_1  s    c         C   s   | d | d <d S(   s     primary_expression  : constant i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_primary_expression_2  s    c         C   s   | d | d <d S(   sp    primary_expression  : unified_string_literal
                                | unified_wstring_literal
        i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_primary_expression_3  s    c         C   s   | d | d <d S(   s0    primary_expression  : LPAREN expression RPAREN i   i    N(    (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_primary_expression_4  s    c         C   sY   |  j  | d  } t j t j | d |  t j | d | d g |  |  | d <d S(   sa    primary_expression  : OFFSETOF LPAREN type_name COMMA offsetof_member_designator RPAREN
        i   i   i   i    N(   R   R   R^  R   RH  (   R2   R   RL   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_primary_expression_5  s    c         C   s   t  |  d k r# | d | d <n t  |  d k r t j | d |  j | d   } t j | d | d | | d j  | d <nS t  |  d k r t j | d | d | d j  | d <n t d t  |    d S(	   s    offsetof_member_designator : identifier
                                         | offsetof_member_designator PERIOD identifier
                                         | offsetof_member_designator LBRACKET expression RBRACKET
        i   i   i    i   i   i   s$   Unexpected parsing state. len(p): %uN(   RD   R   R   R   R`  RL   R\  t   NotImplementedError(   R2   R   Ra  (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_offsetof_member_designator  s    ".+c         C   sc   t  |  d k r9 t j | d g | d j  | d <n& | d j j | d  | d | d <d S(   s    argument_expression_list    : assignment_expression
                                        | argument_expression_list COMMA assignment_expression
        i   i   i    i   N(   RD   R   RH  RL   R  RB   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_argument_expression_list  s    'c         C   s*   t  j | d |  j | d   | d <d S(   s    identifier  : ID i   i    N(   R   R   R   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_identifier  s    c         C   s-   t  j d | d |  j | d   | d <d S(   s    constant    : INT_CONST_DEC
                        | INT_CONST_OCT
                        | INT_CONST_HEX
                        | INT_CONST_BIN
        Rd   i   i    N(   R   t   ConstantR   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_constant_1  s    c         C   s   d | d j    k r d } n@ | d d d k r< d } n# | d d d k rY d	 } n d
 } t j | | d |  j | d   | d <d S(   sM    constant    : FLOAT_CONST
                        | HEX_FLOAT_CONST
        t   xi   t   floatit   ft   Ft   lt   Ls   long doublet   doublei    N(   Rs  Rt  (   Ru  Rv  (   t   lowerR   Ro  R   (   R2   R   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_constant_2  s    			c         C   s-   t  j d | d |  j | d   | d <d S(   sH    constant    : CHAR_CONST
                        | WCHAR_CONST
        t   chari   i    N(   R   Ro  R   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_constant_3  s    c         C   st   t  |  d k r> t j d | d |  j | d   | d <n2 | d j d  | d d | d _ | d | d <d S(   s~    unified_string_literal  : STRING_LITERAL
                                    | unified_string_literal STRING_LITERAL
        i   t   stringi   i    iN(   RD   R   Ro  R   t   value(   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_unified_string_literal
  s
    &$c         C   sz   t  |  d k r> t j d | d |  j | d   | d <n8 | d j j   d  | d d | d _ | d | d <d S(   s    unified_wstring_literal : WSTRING_LITERAL
                                    | unified_wstring_literal WSTRING_LITERAL
        i   R|  i   i    iN(   RD   R   Ro  R   R}  t   rstrip(   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_unified_wstring_literal  s
    &*c         C   s+   | d | d <| j  d | j d   d S(   s     brace_open  :   LBRACE
        i   i    N(   t
   set_linenot   lineno(   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_brace_open   s    c         C   s+   | d | d <| j  d | j d   d S(   s     brace_close :   RBRACE
        i   i    N(   R  R  (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_brace_close&  s    c         C   s   d | d <d S(   s   empty : i    N(   R0   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_empty,  s    c         C   s[   | rA |  j  d | j |  j d | j d |  j j |    n |  j  d |  j j  d  S(   Ns
   before: %sR  RW   s   At end of input(   RJ   R}  RT   R  R)   t   find_tok_columnR=   (   R2   R   (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   p_error0  s    
(   R   R   (   R   R   (   R   R   (   R   R   (   R   R   (   R   R   R   (   R   R   R   R   R   (   R   R   R   (   R   R   R   (   R   R   R   R   (   Rl   R   (   R   R   (   R   R   (   Rl   R   (   R   R   (   R   R   (   Rl   R   (   R   R   (   R   R   (   Rl   R   (   R   R   (   Rl   R   (   R   R   (   R   R   (   Rl   R   (   R   R   (   R   R   (   Rl   R   (   R   R   (   R   R   (   Rl   R   (   R   R   (   R   R   (   t   __name__t
   __module__RI   R   RN   R;   R?   RC   RG   RM   RO   RS   R%   R&   R'   R(   RZ   Rc   Rm   Rv   R   R   R   t
   precedenceR   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R  R
  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R   R!  R"  R#  R$  R%  R&  R'  R(  R)  R*  R,  R.  R0  R2  R3  R5  R7  R9  R;  R=  R?  RA  RC  RE  RG  RI  RJ  RL  RM  RN  RP  RR  RS  RU  RV  RX  RY  RZ  R[  R]  R_  Rb  Rc  Re  Rf  Rg  Rh  Ri  Rj  Rl  Rm  Rn  Rp  Ry  R{  R~  R  R  R  R  R  (    (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyR	      s^  g					
	
						)	7	-Y																5		<																																			&													
								
											
								
																																		
														
										(   t   ret   plyR    R
   R   t   c_lexerR   t	   plyparserR   R   R   R   R   t   ast_transformsR   R	   (    (    (    s1   lib/python2.7/site-packages/pycparser/c_parser.pyt   <module>	   s   (