
__NVc           @   s   d  d l  Z  d  d l m Z d d l m Z d d l m Z d d l m Z m	 Z	 m
 Z
 d d l m Z d e f d	     YZ e d
 k r d  d l Z d  d l Z d  d l Z n  d S(   iN(   t   yacci   (   t   c_ast(   t   CLexer(   t	   PLYParsert   Coordt
   ParseError(   t   fix_switch_casest   CParserc           B   s{  e  Z 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 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   Z/ dB   Z0 dC   Z1 dD   Z2 dE   Z3 dF   Z4 dG   Z5 dH   Z6 dI   Z7 dJ   Z8 dK   Z9 dL   Z: dM   Z; dN   Z< dO   Z= dP   Z> dQ   Z? dR   Z@ dS   ZA dT   ZB dU   ZC dV   ZD dW   ZE dX   ZF dY   ZG dZ   ZH d[   ZI d\   ZJ d]   ZK d^   ZL d_   ZM d`   ZN da   ZO db   ZP dc   ZQ dd   ZR de   ZS df   ZT dg   ZU dh   ZV di   ZW dj   ZX dk   ZY dl   ZZ dm   Z[ dn   Z\ do   Z] dp   Z^ dq   Z_ dr   Z` ds   Za dt   Zb du   Zc dv   Zd dw   Ze dx   Zf dy   Zg dz   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 RS(   s   pycparser.lextabs   pycparser.yacctabt    c   	      C   s   t  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.

            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_specifierst   designationt
   expressiont   identifier_listt   init_declarator_listt   initializer_listt   parameter_type_listt   specifier_qualifier_listt   block_item_listt   type_qualifier_listt   struct_declarator_listt   modulet   startt   translation_unit_or_emptyt   debugt	   tabmoduleN(   R   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_optimizeR   t   yacc_optimizet   yacctabt
   yacc_debugt   taboutputdirt   rules_with_optt   rule(    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   __init__   sF    5					
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   inputt   lexerR!   N(	   R'   t   filenamet   reset_linenoR,   R-   R.   R/   R+   t   parse(   R0   t   textR;   t
   debuglevel(    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyR=   ~   s    		c         C   s   |  j  j t    d  S(   N(   R-   t   appendR,   (   R0   (    (    s6   /usr/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(   R0   (    (    s6   /usr/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(   R0   t   namet   coord(    (    s6   /usr/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-   RF   t   FalseRH   (   R0   RI   RJ   (    (    s6   /usr/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-   RF   R.   RL   (   R0   RI   t   scopet   in_scope(    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   _is_type_in_scope   s
     c         C   s    |  j  | |  j | |   d  S(   N(   RH   t   _coord(   R0   t   msgt   linet   column(    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyR#      s    c         C   s   |  j    d  S(   N(   RA   (   R0   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyR$      s    c         C   s   |  j    d  S(   N(   RE   (   R0   (    (    s6   /usr/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.
        (   RQ   (   R0   RI   t   is_type(    (    s6   /usr/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(   R0   (    (    s6   /usr/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(   R0   t   declt   modifiert   modifier_headt   modifier_tailt	   decl_tail(    (    s6   /usr/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   intRJ   i    (   RZ   R   R[   RY   t   declnameRI   t   qualst   IdentifierTypeRB   RH   RJ   t   FuncDeclt   names(   R0   R\   t   typenameRY   t   tnt   idRI   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   _fix_decl_name_type,  s.    		)c      
   C   s?   | p$ t  d g  d g  d g  d g   } | | 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.
            Returns the declaration specifier, with the new
            specifier incorporated.
        t   qualt   storageRY   t   functioni    (   R,   t   insert(   R0   t   declspect   newspect   kindt   spec(    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   _add_declaration_specifierY  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   typedefRm   i    t   bitsizeR\   RY   i   ii   t   ?RJ   s   Invalid declarationRc   Rd   RI   Rl   t   funcspecRn   t   initN(   RF   R.   RB   Rg   RQ   t   hasattrRJ   RH   R   R[   RZ   t   Structt   UnionRe   RY   Rc   RC   t   Typedeft   DeclRk   RK   RI   RM   R@   (   R0   Rs   t   declst   typedef_namespacet
   is_typedeft   declarationsRJ   t   tt   decls_0_tailR\   t   declarationt
   fixed_decl(    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   _build_declarationsj  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.
        Ru   Rm   Rs   R   R\   Ry   R   i    t   param_declst   bodyRJ   N(   RC   R   R,   R.   RG   R   t   FuncDefRJ   (   R0   Rs   R\   R   R   R   (    (    s6   /usr/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|   (   R0   t   token(    (    s6   /usr/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(   R.   R   t   FileAST(   R0   t   p(    (    s6   /usr/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(    (   R0   R   (    (    s6   /usr/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(   R.   t   extend(   R0   R   (    (    s6   /usr/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(    (   R0   R   (    (    s6   /usr/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(    (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_external_declaration_2  s    c         C   s   | d | d <d S(   s0    external_declaration    : pp_directive
        i   i    N(    (   R0   R   (    (    s6   /usr/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(   R.   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_external_declaration_4  s    c         C   s&   |  j  d |  j | j d    d S(   s     pp_directive  : PPHASH
        s   Directives not supported yeti   N(   RH   RR   t   lineno(   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_pp_directive$  s    	c         C   s   t  d g  d g  d t j d g d |  j | j d   g d g   } |  j d | d	 | d d
 | d d | d  | d <d S(   sR    function_definition : declarator declaration_list_opt compound_statement
        Rl   Rm   RY   Rb   RJ   i   Rn   Rs   R\   R   i   R   i   i    N(   R,   R   Re   RR   R   R   (   R0   R   Rs   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_function_definition_1-  s    		

c      
   C   sB   | d } |  j  d | d | d d | d d | d  | d	 <d
 S(   si    function_definition : declaration_specifiers declarator declaration_list_opt compound_statement
        i   Rs   R\   i   R   i   R   i   i    N(   R   (   R0   R   Rs   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_function_definition_2>  s    
	

c         C   s   | d | d <d S(   s
   statement   : labeled_statement
                        | expression_statement
                        | compound_statement
                        | selection_statement
                        | iteration_statement
                        | jump_statement
        i   i    N(    (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_statementI  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(   sE    decl_body : declaration_specifiers init_declarator_list_opt
        i   i   RY   i    RI   Rd   Rl   Rm   Rx   Rn   Ry   Rv   RJ   Rs   R   R\   R   N(   R.   R   R{   R|   t   EnumRB   RZ   R~   RJ   R   R,   RG   (   R0   R   Rs   t   tyt   s_u_or_eR   (    (    s6   /usr/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(    (   R0   R   (    (    s6   /usr/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(   RB   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_declaration_list  s    c         C   s%   |  j  | d | d d  | d <d S(   sM    declaration_specifiers  : type_qualifier declaration_specifiers_opt
        i   i   Rl   i    N(   Rt   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_declaration_specifiers_1  s    c         C   s%   |  j  | d | d d  | d <d S(   sM    declaration_specifiers  : type_specifier declaration_specifiers_opt
        i   i   RY   i    N(   Rt   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_declaration_specifiers_2  s    c         C   s%   |  j  | d | d d  | d <d S(   sV    declaration_specifiers  : storage_class_specifier declaration_specifiers_opt
        i   i   Rm   i    N(   Rt   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_declaration_specifiers_3  s    c         C   s%   |  j  | d | d d  | d <d S(   sQ    declaration_specifiers  : function_specifier declaration_specifiers_opt
        i   i   Rn   i    N(   Rt   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_declaration_specifiers_4  s    c         C   s   | d | d <d S(   s    storage_class_specifier : AUTO
                                    | REGISTER
                                    | STATIC
                                    | EXTERN
                                    | TYPEDEF
        i   i    N(    (   R0   R   (    (    s6   /usr/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(    (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_function_specifier  s    c         C   s6   t  j | d g d |  j | j d   | d <d S(   s   type_specifier  : VOID
                            | _BOOL
                            | CHAR
                            | SHORT
                            | INT
                            | LONG
                            | FLOAT
                            | DOUBLE
                            | _COMPLEX
                            | SIGNED
                            | UNSIGNED
        i   RJ   i    N(   R   Re   RR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_type_specifier_1  s    c         C   s   | d | d <d S(   s    type_specifier  : typedef_name
                            | enum_specifier
                            | struct_or_union_specifier
        i   i    N(    (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_type_specifier_2  s    c         C   s   | d | d <d S(   so    type_qualifier  : CONST
                            | RESTRICT
                            | VOLATILE
        i   i    N(    (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_type_qualifier  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(   RB   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_init_declarator_list_1  s    c         C   s$   t  d d d | d  g | d <d S(   s6    init_declarator_list    : EQUALS initializer
        R\   Ry   i   i    N(   R,   R.   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_init_declarator_list_2  s    c         C   s$   t  d | d d d  g | d <d S(   s7    init_declarator_list    : abstract_declarator
        R\   i   Ry   i    N(   R,   R.   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_init_declarator_list_3  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   Ry   i   i   i    N(   R,   RB   R.   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_init_declarator   s    c         C   s%   |  j  | d | d d  | d <d S(   sS    specifier_qualifier_list    : type_qualifier specifier_qualifier_list_opt
        i   i   Rl   i    N(   Rt   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_specifier_qualifier_list_1  s    c         C   s%   |  j  | d | d d  | d <d S(   sS    specifier_qualifier_list    : type_specifier specifier_qualifier_list_opt
        i   i   RY   i    N(   Rt   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_specifier_qualifier_list_2  s    c      	   C   sL   |  j  | d  } | d | d d d d |  j | j d    | d <d S(   s{    struct_or_union_specifier   : struct_or_union ID
                                        | struct_or_union TYPEID
        i   RI   i   R   RJ   i    N(   R   R.   RR   R   (   R0   R   t   klass(    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_or_union_specifier_1  s
    
c      	   C   sL   |  j  | d  } | d d d | d d |  j | j d    | d <d S(	   sd    struct_or_union_specifier : struct_or_union brace_open struct_declaration_list brace_close
        i   RI   R   i   RJ   i   i    N(   R   R.   RR   R   (   R0   R   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_or_union_specifier_2  s
    
c      	   C   sP   |  j  | d  } | d | d d | d d |  j | j d    | d <d S(	   s    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
        i   RI   i   R   i   RJ   i    N(   R   RR   R   (   R0   R   R   (    (    s6   /usr/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(    (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_or_union0  s    c         C   s6   t  |  d k r | d n | d | d | d <d S(   s    struct_declaration_list     : struct_declaration
                                        | struct_declaration_list struct_declaration
        i   i   i    N(   RB   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_declaration_list8  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   Ru   Rm   i   Rs   R   RY   i    R\   Ry   N(	   RC   R.   R   RB   RZ   R   t   NodeRe   R,   (   R0   R   Rs   R   t   nodet	   decl_type(    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_declaration_1>  s$    
				c      	   C   s:   |  j  d | d d t d | d d d  g  | d <d S(	   sP    struct_declaration : specifier_qualifier_list abstract_declarator SEMI
        Rs   i   R   R\   i   Ry   i    N(   R   R,   R.   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_declaration_2d  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(   RB   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_declarator_listr  s    c         C   s    i | d d 6d d 6| d <d S(   s(    struct_declarator : declarator
        i   R\   Rv   i    N(   R.   (   R0   R   (    (    s6   /usr/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\   Rv   i    i   N(   RB   R   R[   R.   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_struct_declarator_2  s    #c         C   s3   t  j | d d |  j | j d    | d <d S(   sM    enum_specifier  : ENUM ID
                            | ENUM TYPEID
        i   i   i    N(   R   R   R.   RR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_enum_specifier_1  s    c         C   s3   t  j d | d |  j | j d    | d <d S(   sG    enum_specifier  : ENUM brace_open enumerator_list brace_close
        i   i   i    N(   R   R   R.   RR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_enum_specifier_2  s    c         C   s7   t  j | d | d |  j | 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   RR   R   (   R0   R   (    (    s6   /usr/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(   RB   R   t   EnumeratorListRJ   t   enumeratorsR@   (   R0   R   (    (    s6   /usr/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 | j d    } n/ t j | d | d |  j | j d    } |  j | j | j  | | d <d S(   sR    enumerator  : ID
                        | ID EQUALS constant_expression
        i   i   i   i    N(	   RB   R   t
   EnumeratorR.   RR   R   RM   RI   RJ   (   R0   R   t
   enumerator(    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_enumerator  s    
c         C   s   | d | d <d S(   s)    declarator  : direct_declarator
        i   i    N(    (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_declarator_1  s    c         C   s"   |  j  | d | d  | d <d S(   s1    declarator  : pointer direct_declarator
        i   i   i    N(   Ra   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_declarator_2  s    c         C   sX   t  j d | d d d d d d |  j | j d    } |  j | | d  | d <d S(	   s&    declarator  : pointer TYPEID
        Rc   i   RY   Rd   RJ   i   i    N(   R   R[   R.   RR   R   Ra   (   R0   R   R\   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_declarator_3  s    	
c         C   sB   t  j d | d d d d d d |  j | j d    | d <d S(   s"    direct_declarator   : ID
        Rc   i   RY   Rd   RJ   i    N(   R   R[   R.   RR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_declarator_1  s
    	
c         C   s   | d | d <d S(   s8    direct_declarator   : LPAREN declarator RPAREN
        i   i    N(    (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_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(   su    direct_declarator   : direct_declarator LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKET
        i   i   RY   t   dimi   t	   dim_qualsRJ   i   R\   R]   i    N(   RB   R   t	   ArrayDeclR.   RJ   Ra   (   R0   R   Rd   t   arr(    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_declarator_3  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_declarator   : direct_declarator LBRACKET STATIC type_qualifier_list_opt assignment_expression RBRACKET
                                | direct_declarator LBRACKET type_qualifier_list STATIC assignment_expression RBRACKET
        i   i   RY   R   i   R   RJ   i   R\   R]   i    N(   RZ   t   listR.   R   R   RJ   Ra   (   R0   R   t   itemt   listed_qualst   sublistRl   R   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_declarator_4  s    <	
c      
   C   s   t  j d d d t  j | d |  j | j d    d | d d k rQ | d n g  d | d j  } |  j d | d d	 |  | d
 <d S(   sa    direct_declarator   : direct_declarator LBRACKET type_qualifier_list_opt TIMES RBRACKET
        RY   R   i   R   i   RJ   i   R\   R]   i    N(   R   R   R.   t   IDRR   R   RJ   Ra   (   R0   R   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_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_declarator   : direct_declarator LPAREN parameter_type_list RPAREN
                                | direct_declarator LPAREN identifier_list_opt RPAREN
        t   argsi   RY   RJ   i   t   LBRACER\   R]   i    N(   R   Rf   R.   RJ   RX   RY   R   t   paramsRZ   t   EllipsisParamRM   RI   Ra   (   R0   R   t   funct   param(    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_declarator_6  s    	
  c         C   s   |  j  | j d   } t j d | d p. g  d d d |  } t |  d k r | d } x | j d k	 rz | j } q_ W| | _ | d | d <n
 | | d <d S(	   sm    pointer : TIMES type_qualifier_list_opt
                    | TIMES type_qualifier_list_opt pointer
        i   Rd   i   RY   RJ   i   i    N(   RR   R   R   t   PtrDeclR.   RB   RY   (   R0   R   RJ   t   nested_typet	   tail_type(    (    s6   /usr/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(   RB   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_type_qualifier_listF  s    c         C   sV   t  |  d k rD | d j j t j |  j | j d     n  | d | d <d S(   sn    parameter_type_list : parameter_list
                                | parameter_list COMMA ELLIPSIS
        i   i   i   i    N(   RB   R   R@   R   R   RR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_parameter_type_listL  s    2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(   RB   R   t	   ParamListRJ   R   R@   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_parameter_listU  s    'c         C   s|   | d } | d sH t  j d g d |  j | j d   g | d <n  |  j d | d t d | d  g  d	 | d	 <d
 S(   sE    parameter_declaration   : declaration_specifiers declarator
        i   RY   Rb   RJ   Rs   R   R\   i   i    N(   R   Re   RR   R   R   R,   (   R0   R   Rs   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_parameter_declaration_1_  s    

%	c         C   sK  | d } | d sH t  j d g d |  j | 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 } no t  j
 d d d | d d | d
 pt  j d d d  d |  j | j d
    } | d } |  j | |  } | | d <d S(   sR    parameter_declaration   : declaration_specifiers abstract_declarator_opt
        i   RY   Rb   RJ   ii    Rs   R   R\   i   Ry   RI   R   Rd   Rl   N(   R   Re   RR   R   RB   Rg   RQ   R   R,   R.   t   TypenameR[   Rk   (   R0   R   Rs   R\   Rh   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_parameter_declaration_2j  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(   RB   R   R   RJ   R   R@   (   R0   R   (    (    s6   /usr/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(    (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_initializer_1  s    c         C   sM   | d d k r; t j g  |  j | 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(   R.   R   t   InitListRR   R   (   R0   R   (    (    s6   /usr/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(   RB   R.   R   t   NamedInitializerR  RJ   t   exprsR@   (   R0   R   Ry   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_initializer_list  s    4#4c         C   s   | d | d <d S(   s.    designation : designator_list EQUALS
        i   i    N(    (   R0   R   (    (    s6   /usr/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(   RB   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_designator_list  s    c         C   s   | d | d <d S(   si    designator  : LBRACKET constant_expression RBRACKET
                        | PERIOD identifier
        i   i    N(    (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_designator  s    c         C   sy   t  j d d d | d d d | d p9 t  j d
 d
 d
  d |  j | j d    } |  j | | d d  | d	 <d
 S(   sH    type_name   : specifier_qualifier_list abstract_declarator_opt
        RI   R   Rd   i   Rl   RY   i   RJ   i    N(   R   R   R[   R.   RR   R   Rk   (   R0   R   Rh   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_type_name  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[   R.   Ra   (   R0   R   t	   dummytype(    (    s6   /usr/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(   Ra   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_abstract_declarator_2  s    c         C   s   | d | d <d S(   s>    abstract_declarator     : direct_abstract_declarator
        i   i    N(    (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_abstract_declarator_3  s    c         C   s   | d | d <d S(   sA    direct_abstract_declarator  : LPAREN abstract_declarator RPAREN i   i    N(    (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_abstract_declarator_1  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
        RY   R   i   R   RJ   i   R\   R]   i    N(   R   R   R.   RJ   Ra   (   R0   R   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_abstract_declarator_2  s    	
c         C   sQ   t  j d t  j d d d  d | d d g  d |  j | j d    | d <d S(	   sS    direct_abstract_declarator  : LBRACKET assignment_expression_opt RBRACKET
        RY   R   i   R   RJ   i   i    N(   R   R   R[   R.   RR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_abstract_declarator_3  s
    	
c      
   C   sq   t  j d d
 d t  j | d |  j | j d    d g  d | d j  } |  j d | d d |  | d	 <d
 S(   sZ    direct_abstract_declarator  : direct_abstract_declarator LBRACKET TIMES RBRACKET
        RY   R   i   R   RJ   i   R\   R]   i    N(   R   R   R.   R   RR   R   RJ   Ra   (   R0   R   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_abstract_declarator_4  s    	(c         C   so   t  j d t  j d d d  d t  j | d |  j | j d    d g  d |  j | j d    | d <d S(	   s?    direct_abstract_declarator  : LBRACKET TIMES RBRACKET
        RY   R   i   R   RJ   i   i    N(   R   R   R[   R.   R   RR   R   (   R0   R   (    (    s6   /usr/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   RY   RJ   i   R\   R]   i    N(   R   Rf   R.   RJ   Ra   (   R0   R   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_direct_abstract_declarator_6  s
    	
c      	   C   sK   t  j d | d d t  j d d d  d |  j | j d    | d <d S(   sM    direct_abstract_declarator  : LPAREN parameter_type_list_opt RPAREN
        R   i   RY   RJ   i   i    N(   R   Rf   R[   R.   RR   R   (   R0   R   (    (    s6   /usr/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(   RZ   R   (   R0   R   (    (    s6   /usr/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(   RB   R.   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_block_item_list2  s    c         C   s6   t  j d | d d |  j | j d    | d <d S(   sA    compound_statement : brace_open block_item_list_opt brace_close t   block_itemsi   RJ   i   i    N(   R   t   CompoundRR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_compound_statement_19  s    	
c         C   s7   t  j | d | d |  j | j d    | d <d S(   s(    labeled_statement : ID COLON statement i   i   i    N(   R   t   LabelRR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_labeled_statement_1?  s    c         C   s:   t  j | d | d g |  j | j d    | d <d S(   s>    labeled_statement : CASE constant_expression COLON statement i   i   i   i    N(   R   t   CaseRR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_labeled_statement_2C  s    c         C   s3   t  j | d g |  j | j d    | d <d S(   s-    labeled_statement : DEFAULT COLON statement i   i   i    N(   R   t   DefaultRR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_labeled_statement_3G  s    c         C   s:   t  j | d | d d |  j | j d    | d <d S(   s=    selection_statement : IF LPAREN expression RPAREN statement i   i   i   i    N(   R   t   IfR.   RR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_selection_statement_1K  s    c         C   s>   t  j | d | d | d |  j | j d    | d <d S(   sL    selection_statement : IF LPAREN expression RPAREN statement ELSE statement i   i   i   i   i    N(   R   R!  RR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_selection_statement_2O  s    c         C   s=   t  t j | d | d |  j | j d     | d <d S(   sA    selection_statement : SWITCH LPAREN expression RPAREN statement i   i   i   i    N(   R   R   t   SwitchRR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_selection_statement_3S  s    c         C   s7   t  j | d | d |  j | j d    | d <d S(   s@    iteration_statement : WHILE LPAREN expression RPAREN statement i   i   i   i    N(   R   t   WhileRR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_iteration_statement_1X  s    c         C   s7   t  j | d | d |  j | j d    | d <d S(   sH    iteration_statement : DO statement WHILE LPAREN expression RPAREN SEMI i   i   i   i    N(   R   t   DoWhileRR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_iteration_statement_2\  s    c         C   sE   t  j | d | d | d | d |  j | j d    | d <d S(   sj    iteration_statement : FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN statement i   i   i   i	   i   i    N(   R   t   ForRR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_iteration_statement_3`  s    c         C   sc   t  j t  j | d |  j | j d    | d | d | d |  j | j d    | d <d S(   sb    iteration_statement : FOR LPAREN declaration expression_opt SEMI expression_opt RPAREN statement i   i   i   i   i   i    N(   R   R*  t   DeclListRR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_iteration_statement_4d  s    +c         C   s0   t  j | d |  j | j d    | d <d S(   s     jump_statement  : GOTO ID SEMI i   i   i    N(   R   t   GotoRR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_jump_statement_1i  s    c         C   s)   t  j |  j | j d    | d <d S(   s    jump_statement  : BREAK SEMI i   i    N(   R   t   BreakRR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_jump_statement_2m  s    c         C   s)   t  j |  j | j d    | d <d S(   s!    jump_statement  : CONTINUE SEMI i   i    N(   R   t   ContinueRR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_jump_statement_3q  s    c         C   sH   t  j t |  d k r" | d n d |  j | j d    | d <d S(   s\    jump_statement  : RETURN expression SEMI
                            | RETURN SEMI
        i   i   i   i    N(   R   t   ReturnRB   R.   RR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_jump_statement_4u  s    c         C   sJ   | d d k r8 t j |  j | j d    | d <n | d | d <d S(   s,    expression_statement : expression_opt SEMI i   i    N(   R.   R   t   EmptyStatementRR   R   (   R0   R   (    (    s6   /usr/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(   RB   RZ   R   t   ExprListRJ   R  R@   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_expression  s    'c         C   s6   t  j | d g d |  j | j d   | d <d S(   s    typedef_name : TYPEID i   RJ   i    N(   R   Re   RR   R   (   R0   R   (    (    s6   /usr/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(   RB   R   t
   AssignmentRJ   (   R0   R   (    (    s6   /usr/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(    (   R0   R   (    (    s6   /usr/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(    (   R0   R   (    (    s6   /usr/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(   RB   R   t	   TernaryOpRJ   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_conditional_expression  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(   RB   R   t   BinaryOpRJ   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_binary_expression  s    c         C   s   | d | d <d S(   s$    cast_expression : unary_expression i   i    N(    (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_cast_expression_1  s    c         C   s7   t  j | d | d |  j | j d    | d <d S(   s;    cast_expression : LPAREN type_name RPAREN cast_expression i   i   i   i    N(   R   t   CastRR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_cast_expression_2  s    c         C   s   | d | d <d S(   s*    unary_expression    : postfix_expression i   i    N(    (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_unary_expression_1  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   UnaryOpRJ   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_unary_expression_2  s    c         C   sS   t  j | d t |  d k r) | d n | d |  j | j d    | d <d S(   sx    unary_expression    : SIZEOF unary_expression
                                | SIZEOF LPAREN type_name RPAREN
        i   i   i   i    N(   R   RG  RB   RR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_unary_expression_3  s    #c         C   s   | d | d <d S(   s    unary_operator  : AND
                            | TIMES
                            | PLUS
                            | MINUS
                            | NOT
                            | LNOT
        i   i    N(    (   R0   R   (    (    s6   /usr/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(    (   R0   R   (    (    s6   /usr/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   ArrayRefRJ   (   R0   R   (    (    s6   /usr/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   FuncCallRB   R.   RJ   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_postfix_expression_3  s    c         C   sW   t  j | d |  j | 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   RR   R   t	   StructRefRJ   (   R0   R   t   field(    (    s6   /usr/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   RG  RJ   (   R0   R   (    (    s6   /usr/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(   R0   R   (    (    s6   /usr/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(    (   R0   R   (    (    s6   /usr/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(    (   R0   R   (    (    s6   /usr/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(    (   R0   R   (    (    s6   /usr/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(    (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_primary_expression_4.  s    c         C   s_   |  j  | j d   } t j t j | d |  t j | d | d g |  |  | d <d S(   sQ    primary_expression  : OFFSETOF LPAREN type_name COMMA identifier RPAREN
        i   i   i   i    N(   RR   R   R   RN  R   R8  (   R0   R   RJ   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_primary_expression_52  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(   RB   R   R8  RJ   R  R@   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_argument_expression_list:  s    'c         C   s0   t  j | d |  j | j d    | d <d S(   s    identifier  : ID i   i    N(   R   R   RR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_identifierD  s    c         C   s3   t  j d | d |  j | j d    | d <d S(   s    constant    : INT_CONST_DEC
                        | INT_CONST_OCT
                        | INT_CONST_HEX
                        | INT_CONST_BIN
        Rb   i   i    N(   R   t   ConstantRR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_constant_1H  s    c         C   s3   t  j d | d |  j | j d    | d <d S(   sM    constant    : FLOAT_CONST
                        | HEX_FLOAT_CONST
        t   floati   i    N(   R   R]  RR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_constant_2Q  s    c         C   s3   t  j d | d |  j | j d    | d <d S(   sH    constant    : CHAR_CONST
                        | WCHAR_CONST
        t   chari   i    N(   R   R]  RR   R   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_constant_3X  s    c         C   sz   t  |  d k rD t j d | d |  j | 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(   RB   R   R]  RR   R   t   value(   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_unified_string_literald  s
    ,$c         C   s   t  |  d k rD t j d | d |  j | 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   Rc  i   i    iN(   RB   R   R]  RR   R   Rd  t   rstrip(   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_unified_wstring_literalo  s
    ,*c         C   s   | d | d <d S(   s     brace_open  :   LBRACE
        i   i    N(    (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_brace_openz  s    c         C   s   | d | d <d S(   s     brace_close :   RBRACE
        i   i    N(    (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_brace_close  s    c         C   s   d | d <d S(   s   empty : i    N(   R.   (   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_empty  s    c         C   sU   | rA |  j  d | j |  j d | j d |  j j |    n |  j  d d  d  S(   Ns
   before: %sR   RU   s   At end of inputR   (   RH   Rd  RR   R   R'   t   find_tok_column(   R0   R   (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   p_error  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   (   t   __name__t
   __module__RG   RL   R8   R=   RA   RE   RK   RM   RQ   R#   R$   R%   R&   RX   Ra   Rk   Rt   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/  R1  R3  R5  R7  R9  R:  R<  R=  R>  R@  RB  RC  RE  RF  RH  RI  RJ  RK  RM  RO  RR  RS  RU  RV  RW  RX  RY  RZ  R[  R\  R^  R`  Rb  Re  Rg  Rh  Ri  Rj  Rl  (    (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyR      sF  c					
	
						)	7	-	Y																	;																				
			
			&																											
			
											
								
																																		
													
										t   __main__(   t   ret   plyR    R   R   t   c_lexerR   t	   plyparserR   R   R   t   ast_transformsR   R   Rm  t   pprintt   timet   sys(    (    (    s6   /usr/lib/python2.7/site-packages/pycparser/c_parser.pyt   <module>	   s         