
]Mc        	   @   s  d  d l  m Z d d d d d d d d	 d
 f	 Z d Z d   Z d Z d Z d Z d   Z e Z	 d Z
 d   Z d   Z d   Z d   Z d  d l Z d  d l Z d  d l Z d  d l Z e j d  Z i	 d d 6d d 6d d 6d d 6d  d! 6d" d# 6d$ d% 6d& d' 6d( d) 6Z d*   Z d+ e f d,     YZ d- e f d.     YZ e d/ k rd  d l j Z e j   Z d  d l Z e  e j! d0  Z" e" j#   Z$ e e  Z% e% j& e$ e j! d0  x/ e' re% j(   Z) e) rPn  e% j* e) f GHqWn  d S(1   i(   t
   generatorst   CPP_IDt   CPP_INTEGERt	   CPP_FLOATt
   CPP_STRINGt   CPP_CHARt   CPP_WSt   CPP_COMMENTt	   CPP_POUNDt
   CPP_DPOUNDs   +-*/%|&~^<>=!?()[]{}.,;:\'"c         C   s"   |  j  j |  j j d  7_ |  S(   s   \s+s   
(   t   lexert   linenot   valuet   count(   t   t(    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt   t_CPP_WS   s    s   \#s   \#\#s   [A-Za-z_][\w_]*c         C   s   |  S(   sA   (((((0x)|(0X))[0-9a-fA-F]+)|(\d+))([uU]|[lL]|[uU][lL]|[lL][uU])?)(    (   R   (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyR   $   s    s?   ((\d+)(\.\d+)(e(\+|-)?(\d+))? | (\d+)e(\+|-)?(\d+))([lL]|[fF])?c         C   s"   |  j  j |  j j d  7_ |  S(   s   \"([^\\\n]|(\\(.|\n)))*?\"s   
(   R
   R   R   R   (   R   (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt   t_CPP_STRING.   s    c         C   s"   |  j  j |  j j d  7_ |  S(   s   (L)?\'([^\\\n]|(\\(.|\n)))*?\'s   
(   R
   R   R   R   (   R   (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt
   t_CPP_CHAR4   s    c         C   s"   |  j  j |  j j d  7_ |  S(   s   (/\*(.|\n)*?\*/)|(//.*?\n)s   
(   R
   R   R   R   (   R   (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt   t_CPP_COMMENT:   s    c         C   s4   |  j  d |  _ |  j  d |  _  |  j j d  |  S(   Ni    i   (   R   t   typeR
   t   skip(   R   (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt   t_error?   s    Ns   \?\?[=/\'\(\)\!<>\-]t   #t   =s   \t   /t   ^t   't   [t   (t   ]t   )t   |t   !t   {t   <t   }t   >t   ~t   -c         C   s   t  j d   |   S(   Nc         S   s   t  |  j   d S(   Ni(   t   _trigraph_rept   group(   t   g(    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt   <lambda>i   s    (   t   _trigraph_patt   sub(   t   input(    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt   trigraphh   s    t   Macroc           B   s   e  Z d e d   Z RS(   c         C   sG   | |  _  | |  _ | |  _ | |  _ | r: | d |  _ n  d  |  _ d  S(   Ni(   t   nameR   t   arglistt   variadict   varargt   Nonet   source(   t   selfR0   R   R1   R2   (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt   __init__|   s    				N(   t   __name__t
   __module__R4   t   FalseR7   (    (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyR/   {   s   t   Preprocessorc           B   s   e  Z d d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z d	   Z d d
  Z d   Z d d  Z d   Z d   Z d   Z d i  d  Z d   Z RS(   c         C   s   | d  k r t j } n  | |  _ i  |  _ g  |  _ g  |  _ |  j   t j   } |  j	 d t j
 d |   |  j	 d t j
 d |   d  |  _ d  S(   Ns   __DATE__ "%s"s   %b %d %Ys   __TIME__ "%s"s   %H:%M:%S(   R4   t   lexR
   t   macrost   patht	   temp_patht   lexprobet   timet	   localtimet   definet   strftimet   parser(   R6   R
   t   tm(    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyR7      s    				
c         C   sM   g  } |  j  j |  x0 t rH |  j  j   } | s8 Pn  | j |  q W| S(   N(   R
   R-   t   Truet   tokent   append(   R6   t   textt   tokenst   tok(    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt   tokenize   s    	 c         C   s   d | | | f GHd  S(   Ns   %s:%d %s(    (   R6   t   filet   linet   msg(    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt   error   s    c         C   s  |  j  j d  |  j  j   } | s5 | j d k r= d GHn | j |  _ |  j  j d  |  j  j   } | s t | j  d k r d GHn | j |  _ t | j  |  _ |  j  j d  |  j  j   } | s | j d k r d GHn | j |  _	 |  j  j d  |  j  j   } | s(| j d k r4d  |  _ n | j |  _ |  j  j d	  |  j  j   } | su| j d	 k rd  |  _ d
 GHn | j |  _ |  j |  j f |  _ d d d d d d d d d g	 } xO | D]G } |  j  j |  |  j  j   } | s
| j | k rd | GHqqWd  S(   Nt
   identifiers"   Couldn't determine identifier typet   12345i90  s   Couldn't determine integer types
   "filename"s   Couldn't determine string types     s   
s%   Couldn't determine token for newlinesR"   R$   R   s   ##s   \R   R   t   ,t   .s,   Unable to lex '%s' required for preprocessor(   R
   R-   RH   R   R   t   t_IDt   intt	   t_INTEGERt   t_INTEGER_TYPEt   t_STRINGR4   t   t_SPACEt	   t_NEWLINEt   t_WS(   R6   RL   t   charst   c(    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyR@      sD    	!c         C   s   |  j  j |  d  S(   N(   R>   RI   (   R6   R>   (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt   add_path   s    c   	      c   sQ  |  j  j   } g  | j   D] } | j   ^ q } x~ t t |   D]j } | d } xW | | j d  r | t |  k  r | | d  | | | | <d | | <| d 7} qZ WqG Wd j |  } | j |  d | _	 g  } x\ t
 r>| j   } | s Pn  | j |  | j |  j k r d | j k r | Vg  } q q W| rM| Vn  d  S(   Ni   s   \it    s   
(   R
   t   clonet
   splitlinest   rstript   xranget   lent   endswitht   joinR-   R   RG   RH   RI   R   R]   R   (	   R6   R-   R<   t   xt   linest   it   jt   current_lineRL   (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt   group_lines  s,    %
(
		!c         C   s   d } x6 | t  |  k  r> | | j |  j k r> | d 7} q	 W| | 4t  |  d } x0 | d k r | | j |  j k r | d 8} qY W| | d 3| S(   Ni    i   (   Rf   R   R]   (   R6   RK   Rk   (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt
   tokenstrip'  s    +%c   	      C   s  g  } g  } g  } d } t  |  } d } x0 | | k  r\ | | j |  j k r\ | d 7} q- W| | k  r | | j d k r | j | d  n* |  j |  j | d j d  d g  g  f S| d 7} x| | k  r| | } | j d k r| j |  | d 7} n | j d k rx| d 8} | d k rh| rW| j |  j |   | j |  n  | d | | f S| j |  nX | j d k r| d k r| j |  j |   | j | d  g  } n | j |  | d 7} q W|  j |  j | d j d  d g  g  f S(	   Ni   i    R   s   Missing '(' in macro argumentsR   RT   is   Missing ')' in macro arguments(	   Rf   R   R]   R   RI   RQ   R5   R   Ro   (	   R6   t	   tokenlistt   argst	   positionst   current_argt   nestingt   tokenlenRk   R   (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt   collect_argsC  sD    %


	c      	   C   s  g  | _  g  | _ g  | _ d } xv| t | j  k  r| j | j |  j k r| j | j | j k r| j j | j | j  } | d k r| j | d j d k rt	 j	 | j |  | j | <|  j
 | j | _ | j | d =| j j | | d f  q$ q| d k rb| j | d j d k rb| j  j d | | d f  | j | d =q$ q| d t | j  k  r| j | d j d k r| j  j d | | f  | d 7} q$ q| j  j d | | f  n | j | j d k r| j r| d k r| j | d j d k r| d t | j  k  r| j | d j |  j k r| j | d j | j k r| j j | d  qn  | d 7} q$ W| j  j d d	   d
 t  d  S(   Ni    i   R   s   ##R_   t   eRT   t   keyc         S   s   |  d S(   Ni   (    (   Ri   (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyR*     s    t   reverse(   t   patcht	   str_patcht   var_comma_patchRf   R   R   RV   R1   t   indext   copyRZ   RI   R2   R3   t   sortRG   (   R6   t   macroRk   t   argnum(    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt   macro_prescanx  s:    			2&&3
/6c         C   s  g  | j  D] } t j |  ^ q
 } i  } x | j D] \ } } | | k r d d j g  | | D] } | j  ^ qa  j d d  | | <n  t j | |  | | <| | | | _  q5 Wt }	 | j r | d r x$ | j D] } d  | | <t	 }	 q Wn  i  }
 x | j
 D]} \ } } } | d k r=| | | | | d +q
| d k r
| |
 k ro|  j | |  |
 | <n  |
 | | | | d +q
q
W|	 rg  | D] } | r| ^ q} n  | S(	   Ns   "%s"Ra   s   \s   \\iR_   i   Rw   (   R   R~   R{   Rh   t   replaceR:   R2   R|   R4   RG   Rz   t   expand_macros(   R6   R   Rq   t   _xt   rept   str_expansionR   Rk   Ri   t   comma_patcht   expandedt   ptypet   _i(    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt   macro_expand_args  s.    %@
"c         C   s  | d  k r i  } n  d } x| t |  k  r| | } | j |  j k r| j |  j k r| j | k rt | | j <|  j | j } | j s|  j g  | j D] } t	 j	 |  ^ q |  } x | D] } | j
 | _
 q W| | | | d +| t |  7} nq| d }	 x6 |	 t |  k  rG| |	 j |  j k rG|	 d 7}	 qW| |	 j d k rv|  j | |	  \ }
 } } | j rt |  t | j  k r|  j |  j | j
 d | j t | j  f  |	 |
 } qv| j rt |  t | j  d k  rt | j  d k rK|  j |  j | j
 d | j t | j  d f  n3 |  j |  j | j
 d | j t | j  d f  |	 |
 } qv| j rt |  t | j  d k r| j g   q| |	 | t | j  d |	 |
 d !| t | j  d <| t | j  3n  |  j | |  } |  j | |  } x | D] } | j
 | _
 q<W| | | |	 |
 +| t |  7} n  | | j =q q| j d k r|  j | _ |  j | j
  | _ qn  | d 7} q W| S(	   Ni    i   R   s   Macro %s requires %d argumentsi   s(   Macro %s must have at least %d argumentss'   Macro %s must have at least %d argumentt   __LINE__(   R4   Rf   R   RV   R   R=   RG   R1   R   R~   R   R]   Rv   R2   RQ   R5   RI   R   RX   RY   (   R6   RK   R   Rk   R   t   mR   t   exRw   Rl   t   tokcountRq   Rr   R   t   r(    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyR     s\    	
!	1
+%/(63	;
c   	      C   s"  d } x{| t  |  k  r| | j |  j k rv| | j d k rv| d } t } d } x | t  |  k  r:| | j |  j k r | d 7} q] n | | j |  j k r | | j |  j k r d } n d } | s-Pq-nP | | j d k r t } n4 | | j d k rPn |  j |  j	 | | j
 d  | d 7} q] W|  j | | _ |  j |  | | _ | | d | d 5n  | d 7} q	 W|  j |  } x t |  D] \ } } | j |  j k rt j |  | | <|  j | | _ |  j d  | | _ q| j |  j k rt j |  | | <t | | j  | | _ x6 | | j d	 d
 k rn| | j d	  | | _ q<WqqWd j g  | D] } t | j  ^ q } | j d d  } | j d d  } | j d d  } y t |  } Wn4 t k
 r|  j |  j	 | d j
 d  d } n X| S(   Ni    t   definedi   t   0Lt   1LR   R   s   Malformed defined()it   0123456789abcdefABCDEFRa   s   &&s    and s   ||s    or R    s    not s   Couldn't evaluate expression(   Rf   R   RV   R   R:   R]   R=   RG   RQ   R5   R   RX   RY   R   t	   enumerateR~   t   strRh   R   t   evalt   StandardError(	   R6   RK   Rk   Rl   t	   needparent   resultR   Ri   t   expr(    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt   evalexpr  s^    )

	 	#+
c         c   s  t  |  } |  j |  } | s* d } n  |  j d |  | |  _ g  } t } t } g  } x;| D]3}	 x0 t |	  D]" \ }
 } | j |  j k rv Pqv qv W| j	 d k rx< |	 D]4 } | |  j k r d | j	 k r | j
 |  q q W|  j |	 |
 d  } | r*| d j	 } |  j | d  } n d } g  } | d k r| r}x |  j |  D] } | VqXWg  } |  j |  q}q| d k r| r}x |  j |  D] } | VqWg  } |  j d	 } x |  j |  D] } | VqW| |  j d	 <| |  _ q}q| d
 k rI| r}x |  j |  D] } | Vq!Wg  } |  j |  q}q| d k r| j
 | | f  | r}| d j	 |  j k rt } t } qt } q}q| d k r| j
 | | f  | r}| d j	 |  j k rt } t } qt } q}q| d k rJ| j
 | | f  | r}|  j |  } | s>t } t } qGt } q}q| d k r| r| d d r| ryt } q| s|  j |  } | rt } t } qqqq}|  j |  j | d j d  q| d k r6| r| d d r3| rt } q| st } t } qq3q}|  j |  j | d j d  q| d k r| r]| j   \ } } q}|  j |  j | d j d  qqc | rc | j |	  qc qc Wx |  j |  D] } | VqWg  } d  S(   NRa   s   __FILE__ "%s"R   s   
i   i    RC   t   includet   __FILE__t   undeft   ifdeft   ifndeft   ift   elifis   Misplaced #elift   elses   Misplaced #elset   endifs   Misplaced #endif(   R.   Rn   RC   R5   RG   R:   R   R   R]   R   RI   Ro   R   R=   R   R   R   RQ   R   t   popt   extend(   R6   R-   R5   R   Rj   t   chunkt   enablet	   iftriggert   ifstackRi   Rk   RL   t	   dirtokensR0   Rq   t   oldfileR   (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt   parsegenR  s    		 								 	  	c         c   s  | s
 d  S| r=| d j  d k rK | d j |  j k rK |  j |  } n  | d j  d k r d } x@ | t |  k  r | | j  d k r Pn  | d 7} qg Wd GHd  Sd j g  | d | !D] } | j  ^ q  } |  j d g |  j } q=| d j |  j k r1| d j  d d !} |  j d g |  j } q=d GHd  Sn  x | D] } t j j | |  } y} t	 | d	  j
   } t j j |  }	 |	 r|  j j d |	  n  x |  j | |  D] }
 |
 VqW|	 r|  j d =n  PWqDt k
 rqDXqDWd
 | GHd  S(   Ni    R"   i   R$   s   Malformed #include <...>Ra   is   Malformed #include statementR   s   Couldn't find '%s'(   R   R   RZ   R   Rf   Rh   R>   R?   t   ost   opent   readt   dirnamet   insertR   t   IOError(   R6   RK   Rk   Ri   t   filenameR>   t   pt   inamet   datat   dnameRL   (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyR     sF    ),	c         C   sk  t  | t t f  r' |  j |  } n  | } y!| d } t |  d k rY | d } n d  } | s t | j g   } | |  j | j <n| j	 |  j
 k r t | j |  j | d   } | |  j | j <n| j d k rH|  j | d  \ } } } t }	 xK| D]}
 |	 rd GHPn  d j g  |
 D] } t | j  ^ q( } | d k rt }	 |  j |
 d _	 d |
 d _ t }	 |
 d 3qnk | d	 d k r|
 d j	 |  j k rt }	 |
 d 3|
 d j d	 d k r|
 d j d	  |
 d _ qqn  t |
  d k s|
 d j	 |  j k rd
 GHPqqW|  j | d |  } d } x | t |  k  r| d t |  k  r| | j	 |  j
 k r| | d j d k r| | =qHq| | j d k r| | d j	 |  j
 k r| | d =qn  | d 7} qHWt | j | g  | D] } | d j ^ q	|	  } |  j |  | |  j | j <n d GHWn t k
 rfd GHn Xd  S(   Ni    i   i   R   s0   No more arguments may follow a variadic argumentRa   s   ...t   __VA_ARGS__is   Invalid macro arguments   ##s   Bad macro definition(   t
   isinstanceR   t   unicodeRM   Rf   R4   R/   R   R=   R   R]   Ro   Rv   R:   Rh   RG   RV   R   t   LookupError(   R6   RK   t   linetokR0   t   mtypeR   R   Rq   Rr   R2   t   aR   t   astrt   mvalueRk   Ri   (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyRC     sl    
+&(--2	c         C   s3   | d j  } y |  j | =Wn t k
 r. n Xd  S(   Ni    (   R   R=   R   (   R6   RK   t   id(    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyR   K  s
    c         C   s"   | |  _  |  j | |  |  _ d  S(   N(   t   ignoreR   RE   (   R6   R-   R5   R   (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt   parseW  s    	c         C   sX   y6 x/ t  r4 t |  j  } | j |  j k r | Sq WWn t k
 rS d  |  _ d  SXd  S(   N(   RG   t   nextRE   R   R   t   StopIterationR4   (   R6   RL   (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyRH   `  s    	 	N(   R8   R9   R4   R7   RM   RQ   R@   R`   Rn   Ro   Rv   R   R   R   R   R   R   RC   R   R   RH   (    (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyR;      s$   			<		!		5	+	2B	;	1	F		t   __main__i   (+   t
   __future__R    RK   t   literalsR   t   t_CPP_POUNDt   t_CPP_DPOUNDt   t_CPP_IDR   t   t_CPP_INTEGERt   t_CPP_FLOATR   R   R   R   t   reR~   RA   t   os.pathR   t   compileR+   R'   R.   t   objectR/   R;   R8   t   ply.lexR<   R
   t   sysR   t   argvt   fR   R-   R   R   RG   RH   RL   R5   (    (    (    s+   /usr/lib/python2.7/site-packages/ply/cpp.pyt   <module>
   s\   !						
	  	 