3
ãde‚  ã            
   @   s`  d dl Z e jjdk reefZneZe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�r\d 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.�sJP e/e+j0e.ƒ �q:W dS )3é    Né   Ú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   úH/var/www/agendate/envp3/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_STRING5   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_CHAR;   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_COMMENT1A   s
     r   c             C   s   d| _ d| _| S )z(//.*?(\n|$))r   r   )r   r   )r   r   r   r   Út_CPP_COMMENT2J   s     r   c             C   s(   | j d | _| j d | _ | jjdƒ | S )Nr   é   )r   r   r   Úskip)r   r   r   r   Út_errorP   s    r   z\?\?[=/\'\(\)\!<>\-]ú#ú\ú^ú[ú]ú|Ú{Ú}ú~)	ú=ú/ú'ú(ú)ú!ú<ú>ú-c             C   s   t jdd„ | ƒS )Nc             S   s   t | jƒ d  S )Nr   éÿÿÿÿ)Ú_trigraph_repÚgroup)Úgr   r   r   Ú<lambda>z   s    ztrigraph.<locals>.<lambda>)Ú_trigraph_patÚsub)Úinputr   r   r   Útrigraphy   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r°tdƒ n|j| _
| j jdƒ | j jƒ }| sÞ|jdkræd | _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	ƒ }|s´P |j
|ƒ |j| jkr¦d|jkr¦|V  g }q¦W |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   Ú
tokenstrip8  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 }q’W | 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_argsT  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rÈt	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  r¨x|jD ]}d ||< d
}q”W i }xj|jD ]`\}	}}|	dkrÜ|| |||d	 …< q´|	dkr´||k�r | j|| ƒ||< || |||d	 …< q´W |�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�r°d||j< | j|j }|jsº| jdd„ |jD ƒ|ƒ}x|D ]}|j|_qŠW ||||d …< |t |ƒ7 }�nê|d }x(|t |ƒk rê|| j| jkrê|d7 }qÄW || jdk�r¤| j	||d … ƒ\}	}
}|j
 �r`t |
ƒt |jƒk�r`| j| j|jd|jt |jƒf ƒ ||	 }�nD|j
�rèt |
ƒt |jƒd k �rèt |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r–d}nd}|sÞP n<|| jdkr¶d}n(|| jd	krÈP n| j| j|| jd
ƒ |d7 }qHW | j	|| _| j
|ƒ|| _||d |d …= |d7 }qW | j|ƒ}x´t|ƒ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… || _�q¬W �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   S  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Ú	Exception)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r‚d|jkr‚|j|ƒ q‚W | 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  �q®W 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|ƒ}|�sŒd}d}nd}nê|dk�rô|�rÜ|d d �rò|�r¼d}n|�sò| j|ƒ}|�ròd}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  �qœW 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   Úparsegenc  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r¬d}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 qôX qôW 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ƒr| j|ƒ}|}�y||d }t|ƒdkr:|d }nd }|s^t|jg ƒ}|| j|j< �n6|j| jkr”t|j| j	|dd … ƒƒ}|| j|j< �n |jdk�rŒ| j
|dd … ƒ\}}}d}	�xÔ|D ]æ}
|	rÖtdƒ P djdd	„ |
D ƒƒ}|d
k�r d}	| j|
d _d|
d _d}	|
dd …= qÄnb|dd … d
k�r‚|
d j| jk�r‚d}	|
dd …= |
d jdd … d
krÄ|
d jd d… |
d _qÄt|
ƒdk�s |
d j| jkrÄtdƒ P qÄW | j	|d| d … ƒ}d}x�|t|ƒk �rX|d t|ƒk �rL|| j| jk�r||d  jdk�r||= �qÊn0|| jdk�rL||d  j| jk�rL||d = |d7 }�qÊW 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   1  s    z'Preprocessor.define.<locals>.<listcomp>z...TZ__VA_ARGS__r   zInvalid macro argumentz##c             S   s   g | ]}|d  j ‘qS )r   )r   )ri   rj   r   r   r   rk   O  s    zBad macro definitionéýÿÿÿr±   r±   )Ú
isinstanceÚSTRING_TYPESrV   rp   r:   r   rG   r   rd   rx   r|   rW   rr   r_   r‰   ÚLookupError)r@   rT   Zlinetokr;   Ú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ž   ]  s
    
zPreprocessor.undefc             C   s   || _ | j||ƒ| _d S )N)Úignorer§   rO   )r@   r8   r?   r¸   r   r   r   Úparsei  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   r  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   )1ÚsysÚversion_infoÚmajorr–   Úunicoder³   Úrangero   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   r©   ÚargvÚfrª   r8   r¯   r¹   rQ   rU   rW   r?   r   r   r   r   Ú<module>
   sj   
	
     c

 