3
+:XX              
   @   sF  d dl mZ d2ZdZdd ZdZdZdZdd ZeZ	dZ
dd Zdd Zdd Zdd Zdd Zd dlZd dlZd dlZd dlZejdZd d!d"d#d$d%d&d'd(d)	Zd*d+ ZG d,d- d-eZG d.d/ d/eZed0krBd dljZej Zd dl Z e!e j"d1 Z#e#j$ Z%eeZ&e&j'e%e j"d1  x"e&j( Z)e)s0P e*e&j+e) q W dS )3    )
generatorsCPP_IDCPP_INTEGER	CPP_FLOAT
CPP_STRINGCPP_CHARCPP_WSCPP_COMMENT1CPP_COMMENT2	CPP_POUND
CPP_DPOUNDz+-*/%|&~^<>=!?()[]{}.,;:\'"c             C   s   | j  j| jjd7  _| S )z\s+
)lexerlinenovaluecount)t r   Q/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/pycparser/ply/cpp.pyt_CPP_WS   s    r   z\#z\#\#z[A-Za-z_][\w_]*c             C   s   | S )zA(((((0x)|(0X))[0-9a-fA-F]+)|(\d+))([uU][lL]|[lL][uU]|[uU]|[lL])?)r   )r   r   r   r   r   $   s    z?((\d+)(\.\d+)(e(\+|-)?(\d+))? | (\d+)e(\+|-)?(\d+))([lL]|[fF])?c             C   s   | j  j| jjd7  _| S )z\"([^\\\n]|(\\(.|\n)))*?\"r   )r   r   r   r   )r   r   r   r   t_CPP_STRING.   s    r   c             C   s   | j  j| jjd7  _| S )z(L)?\'([^\\\n]|(\\(.|\n)))*?\'r   )r   r   r   r   )r   r   r   r   
t_CPP_CHAR4   s    r   c             C   s8   | j jd}| j j|7  _d| _|r.d| nd| _ | S )z(/\*(.|\n)*?\*/)r   r    )r   r   r   r   type)r   Zncrr   r   r   t_CPP_COMMENT1:   s
     r   c             C   s   d| _ d| _dS )z(//.*?(\n|$))r   r   N)r   r   )r   r   r   r   t_CPP_COMMENT2C   s     r   c             C   s(   | j d | _| j d | _ | jjd | S )Nr      )r   r   r   skip)r   r   r   r   t_errorH   s    r   Nz\?\?[=/\'\(\)\!<>\-]#\^[]|{}~)	=/'()!<>-c             C   s   t jdd | S )Nc             S   s   t | j d  S )Nr   )_trigraph_repgroup)gr   r   r   <lambda>r   s    ztrigraph.<locals>.<lambda>)_trigraph_patsub)inputr   r   r   trigraphq   s    r9   c               @   s   e Zd ZdddZdS )MacroNFc             C   s0   || _ || _|| _|| _|r&|d | _d | _d S )Nr   r1   )namer   arglistvariadicvarargsource)selfr;   r   r<   r=   r   r   r   __init__   s    
zMacro.__init__)NF)__name__
__module____qualname__rA   r   r   r   r   r:      s   r:   c               @   s   e Zd Zd&ddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zd'ddZdd Zd(ddZdd Zdd Zd d! Zdi fd"d#Zd$d% ZdS ))PreprocessorNc             C   sl   |d krt j}|| _i | _g | _g | _| j  tj }| jdtj	d|  | jdtj	d|  d | _
d S )Nz__DATE__ "%s"z%b %d %Yz__TIME__ "%s"z%H:%M:%S)lexr   macrospath	temp_pathlexprobetime	localtimedefinestrftimeparser)r@   r   tmr   r   r   rA      s    zPreprocessor.__init__c             C   s4   g }| j j| x| j j }|s"P |j| qW |S )N)r   r8   tokenappend)r@   texttokenstokr   r   r   tokenize   s    
 zPreprocessor.tokenizec             C   s   t d|||f  d S )Nz%s:%d %s)print)r@   filelinemsgr   r   r   error   s    zPreprocessor.errorc          	   C   s  | j jd | j j }| s&|jdkr0td n|j| _| j jd | j j }| sbt|jdkrltd n|j| _t|j| _	| j jd | j j }| s|jdkrtd n|j| _
| j jd | j j }| s|jdkrd | _n|j| _| j jd	 | j j }| s|jd	kr(d | _td
 n|j| _| j| jf| _dddddddddg	}xD|D ]<}| j j| | j j }| s|j|krZtd|  qZW d S )N
identifierz"Couldn't determine identifier typeZ12345i90  zCouldn't determine integer typez
"filename"zCouldn't determine string typez  r   z%Couldn't determine token for newlinesr.   r/   r   z##r    r+   r,   ,.z,Unable to lex '%s' required for preprocessor)r   r8   rQ   r   rW   r   t_IDint	t_INTEGERt_INTEGER_TYPEt_STRINGZt_SPACEZ	t_NEWLINEt_WS)r@   rU   charscr   r   r   rJ      sD    










zPreprocessor.lexprobec             C   s   | j j| d S )N)rH   rR   )r@   rH   r   r   r   add_path  s    zPreprocessor.add_pathc             c   s   | j j }dd |j D }xhtt|D ]X}|d }xJ|| jdr|t|k r|| d d ||  ||< d||< |d7 }q8W q*W dj|}|j| d|_g }x<|j	 }|sP |j
| |j| jkrd|jkr|V  g }qW |r|V  d S )Nc             S   s   g | ]}|j  qS r   )rstrip).0xr   r   r   
<listcomp>  s    z,Preprocessor.group_lines.<locals>.<listcomp>r   r     r   r1   )r   clone
splitlinesxrangelenendswithjoinr8   r   rQ   rR   r   rd   r   )r@   r8   rF   linesijcurrent_linerU   r   r   r   group_lines  s,    



zPreprocessor.group_linesc             C   s|   d}x(|t |k r,|| j| jkr,|d7 }qW |d |= t |d }x$|dkrh|| j| jkrh|d8 }qFW ||d d = |S )Nr   r   )rp   r   rd   )r@   rT   rt   r   r   r   
tokenstrip0  s    
zPreprocessor.tokenstripc       	      C   s  g }g }g }d}t |}d}x$||k r@|| j| jkr@|d7 }qW ||k rh|| jdkrh|j|d  n | j| j|d jd dg g fS |d7 }x||k rf|| }|jdkr|j| |d7 }n|jdkr|d8 }|dkr|r|j| j| |j| |d ||fS |j| nD|jdkrR|dkrR|j| j| |j|d  g }n
|j| |d7 }qW | j| j|d jd dg g fS )	Nr   r   r+   zMissing '(' in macro argumentsr,   r]   zMissing ')' in macro argumentsr1   )	rp   r   rd   r   rR   r[   r?   r   rx   )	r@   	tokenlistargs	positionsZcurrent_argZnestingZtokenlenrt   r   r   r   r   collect_argsL  sD    






zPreprocessor.collect_argsc             C   s  g |_ g |_g |_d}x|t|jk r |j| j| jkoL|j| j|jkrh|jj|j| j}|dkr|j|d  jdkrt	j	|j| |j|< | j
|j| _|j|d = |jj||d f qn|dko|j|d  jdkr|j jd||d f |j|d = qnZ|d t|jk rT|j|d  jdkrT|j jd||f |d7 }qn|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  |d7 }qW |j jdd	 d
d d S )Nr   r   r   z##rf   er]   c             S   s   | d S )N   r   )rj   r   r   r   r5     s    z,Preprocessor.macro_prescan.<locals>.<lambda>T)keyreverse)patch	str_patchvar_comma_patchrp   r   r   r_   r<   indexcopyrc   rR   r=   r>   sort)r@   macrort   argnumr   r   r   macro_prescan  s:    &*(,zPreprocessor.macro_prescanc       
      C   s0  dd |j D }i }xb|jD ]X\}}||krTddjdd || D  jdd||< tj|| ||< || || _ qW d}|jr|d  rx|jD ]}d ||< d
}qW i }xj|jD ]`\}	}}|	dkr|| |||d	 < q|	dkr||kr | j|| ||< || |||d	 < qW |r,dd |D }|S )Nc             S   s   g | ]}t j |qS r   )r   )ri   _xr   r   r   rk     s    z2Preprocessor.macro_expand_args.<locals>.<listcomp>z"%s"rl   c             S   s   g | ]
}|j qS r   )r   )ri   rj   r   r   r   rk     s    r    z\\Fr   Trf   r}   c             S   s   g | ]}|r|qS r   r   )ri   _ir   r   r   rk     s    r1   )	r   r   rr   replacer   r=   r   r   expand_macros)
r@   r   rz   repZstr_expansionr   rt   Zcomma_patchexpandedptyper   r   r   macro_expand_args  s.    (
zPreprocessor.macro_expand_argsc             C   s  |d kri }d}x|t |k r|| }|j| jkr|j| jkoL|j|krd||j< | j|j }|js| jdd |jD |}x|D ]}|j|_qW ||||d < |t |7 }n|d }x(|t |k r|| j| jkr|d7 }qW || jdkr| j	||d  \}	}
}|j
 r`t |
t |jkr`| j| j|jd|jt |jf  ||	 }nD|j
rt |
t |jd k rt |jdkr| j| j|jd	|jt |jd f  n&| j| j|jd
|jt |jd f  ||	 }n|j
rXt |
t |jd kr|
jg  nD|||t |jd   ||	 d  |
t |jd < |
t |jd = | j||
}| j||}x|D ]}|j|_qvW |||||	 < |t |7 }||j= qn"|jdkr| j|_| j|j|_|d7 }qW |S )Nr   Tc             S   s   g | ]}t j |qS r   )r   )ri   r   r   r   r   rk     s    z.Preprocessor.expand_macros.<locals>.<listcomp>r   r+   zMacro %s requires %d argumentsr~   z(Macro %s must have at least %d argumentsz'Macro %s must have at least %d argumentZ__LINE__)rp   r   r_   r   rG   r<   r   r   rd   r|   r=   r[   r?   rR   r   ra   rb   )r@   rT   r   rt   r   mexr}   ru   tokcountrz   r{   r   rr   r   r   r     s\    

" (&
4
zPreprocessor.expand_macrosc             C   s^  d}x|t |k r"|| j| jko2|| jdkr|d }d}d}x|t |k r|| j| jkrp|d7 }qHnn|| j| jkr|| j| jkrd}nd}|sP n<|| jdkrd}n(|| jd	krP n| j| j|| jd
 |d7 }qHW | j	|| _| j
||| _||d |d = |d7 }qW | j|}xt|D ]\}}|j| jkrztj|||< | j	|| _| j
d|| _nd|j| j	kr8tj|||< t|| j|| _x2|| jd dkr|| jd d || _qW q8W djdd |D }|jdd}|jdd}|jdd}yt|}W n0 tk
rX   | j| j|d jd d}Y nX |S )Nr   Zdefinedr   FZ0LZ1Lr+   Tr,   zMalformed defined()Z0123456789abcdefABCDEFrl   c             S   s   g | ]}t |jqS r   )strr   )ri   rj   r   r   r   rk   K  s    z)Preprocessor.evalexpr.<locals>.<listcomp>z&&z and z||z or r-   z not zCouldn't evaluate expressionr1   r1   )rp   r   r_   r   rd   rG   r[   r?   r   ra   rb   r   	enumerater   r   rr   r   evalStandardError)r@   rT   rt   ru   Z	needparenresultr   exprr   r   r   evalexpr   s^      
$
zPreprocessor.evalexprc             c   s  t |}| j|}|sd}| jd|  || _g }d}d}g }xN|D ]D}	x"t|	D ]\}
}|j| jkrVP qVW |jdkr~x,|	D ]$}|j| jkrd|jkr|j| qW | j	|	|
d d  }|r|d j}| j	|dd  }nd}g }|d	kr(|r|x| j
|D ]}|V  qW g }| j| q|d
kr|r|x| j
|D ]}|V  qDW g }| jd }x| j|D ]}|V  qnW || jd< || _q|dkr|r|x| j
|D ]}|V  qW g }| j| q|dkr|j||f |r||d j| jkr
d}d}nd}q|dkrT|j||f |r||d j| jkrLd}d}nd}q|dkr|j||f |r|| j|}|sd}d}nd}n|dkr|r|d d r|rd}n|s| j|}|rd}d}n| j| j|d jd n|dkrF|r.|d d rD|rd}n|sDd}d}n| j| j|d jd n6|dkr|rd|j \}}n| j| j|d jd n qF|rF|j|	 qFW x| j
|D ]}|V  qW g }d S )Nrl   z__FILE__ "%s"TFr   r   r   r   rM   includeZ__FILE__undefZifdefZifndefifelifzMisplaced #elifelsezMisplaced #elseendifzMisplaced #endifr1   r1   )r9   rw   rM   r?   r   r   rd   r   rR   rx   r   rG   r   r   r   r[   r   popextend)r@   r8   r?   r   rs   chunkenableZ	iftriggerZifstackrj   rt   rU   Z	dirtokensr;   rz   Zoldfiler   r   r   r   parsegen[  s    
 















zPreprocessor.parsegenc       
      c   s  |sd S |r|d j dkr4|d j| jkr4| j|}|d j dkrd}x4|t|k rn|| j dkrdP |d7 }qHW td d S djdd |d| D }| jdg | j }nB|d j| jkr|d j dd }| jdg | j }ntd	 d S x|D ]}t	jj||}y`t
|d
j }t	jj|}|r6| jjd| x| j||D ]}	|	V  qDW |rb| jd= P W q tk
r|   Y qX qW td|  d S )Nr   r.   r   r/   zMalformed #include <...>rl   c             S   s   g | ]
}|j qS r   )r   )ri   rj   r   r   r   rk     s    z(Preprocessor.include.<locals>.<listcomp>zMalformed #include statementr   zCouldn't find '%s'r1   )r   r   rc   r   rp   rW   rr   rH   rI   osopenreaddirnameinsertr   IOError)
r@   rT   rt   filenamerH   pZinamedataZdnamerU   r   r   r   r     sF    


zPreprocessor.includec             C   s  t |ttfr| j|}|}y||d }t|dkr>|d }nd }|sbt|jg }|| j|j< n6|j| j	krt|j| j
|dd  }|| j|j< n |jdkr| j|dd  \}}}d}	x|D ]}
|	rtd P djdd	 |
D }|d
kr$d}	| j|
d _d|
d _d}	|
dd = qnb|dd  d
kr|
d j| jkrd}	|
dd = |
d jdd  d
kr|
d jd d |
d _qt|
dks|
d j| jkrtd P qW | j
|d| d  }d}x|t|k r\|d t|k rP|| j| j	kr ||d  jdkr ||= qn0|| jdkrP||d  j| j	krP||d = |d7 }qW t|j|dd	 |D |	}| j| || j|j< ntd W n tk
r   td Y nX d S )Nr   r   r~   r+   Fz0No more arguments may follow a variadic argumentrl   c             S   s   g | ]}t |jqS r   )r   r   )ri   r   r   r   r   rk   )  s    z'Preprocessor.define.<locals>.<listcomp>z...TZ__VA_ARGS__   zInvalid macro argumentz##c             S   s   g | ]}|d  j qS )r   )r   )ri   rj   r   r   r   rk   G  s    zBad macro definitionr   r   )
isinstancer   unicoderV   rp   r:   r   rG   r   rd   rx   r|   rW   rr   r_   r   LookupError)r@   rT   Zlinetokr;   Zmtyper   r   rz   r{   r=   aZastrZmvaluert   r   r   r   rM     sl    




$
&&

zPreprocessor.definec             C   s0   |d j }y| j|= W n tk
r*   Y nX d S )Nr   )r   rG   r   )r@   rT   idr   r   r   r   U  s
    
zPreprocessor.undefc             C   s   || _ | j||| _d S )N)ignorer   rO   )r@   r8   r?   r   r   r   r   parsea  s    zPreprocessor.parsec             C   sD   y$xt | j}|j| jkr|S qW W n tk
r>   d | _d S X d S )N)nextrO   r   r   StopIteration)r@   rU   r   r   r   rQ   j  s    
 zPreprocessor.token)N)N)N)rB   rC   rD   rA   rV   r[   rJ   rg   rw   rx   r|   r   r   r   r   r   r   rM   r   r   rQ   r   r   r   r   rE      s&   
<!5+2
B;
 1F	rE   __main__r   )
r   r   r   r   r   r   r	   r
   r   r   ),
__future__r   rT   literalsr   Zt_CPP_POUNDZt_CPP_DPOUNDZt_CPP_IDr   Zt_CPP_INTEGERZt_CPP_FLOATr   r   r   r   r   rer   rK   os.pathr   compiler6   r2   r9   objectr:   rE   rB   Zply.lexrF   r   sysr   argvfr   r8   r   r   rQ   rU   rW   r?   r   r   r   r   <module>
   sb   	
     c

 