
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
rãÆWõ‚  ã            
   @   sl  d dl mZ d dlZejjdk r*eefZneZeZ	d3Z
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/d0„ d0e!ƒZ#e$d1k�rhd dl%j&Z&e&j&ƒ Z'd dlZe(ej)d2 ƒZ*e*j+ƒ Z,e#e'ƒZ-e-j.e,ej)d2 ƒ x"e-j/ƒ Z0e0�sVP e1e-j2e0ƒ �qFW dS )4é    )Ú
generatorsNé   Ú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   ú/usr/lib/python3.6/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_STRING7   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_COMMENT1C   s
     r   c             C   s   d| _ d| _dS )z(//.*?(\n|$))r	   r   N)r   r   )r   r   r   r   Út_CPP_COMMENT2L   s     r   c             C   s(   | j d | _| j d | _ | jjdƒ | S )Nr   é   )r   r   r   Úskip)r   r   r   r   Út_errorQ   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>{   s    ztrigraph.<locals>.<lambda>)Ú_trigraph_patÚsub)Úinputr   r   r   Útrigraphz   s    r:   c               @   s   e Zd Zddd„ZdS )ÚMacroNFc             C   s0   || _ || _|| _|| _|r&|d | _d | _d S )Nr   r2   )Únamer   ÚarglistÚvariadicÚvarargÚsource)Úselfr<   r   r=   r>   r   r   r   Ú__init__Ž   s    
zMacro.__init__)NF)Ú__name__Ú
__module__Ú__qualname__rB   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ÚtimeZ	localtimeÚdefineZstrftimeÚparser)rA   r   Ztmr   r   r   rB   Ÿ   s    zPreprocessor.__init__c             C   s4   g }| j j|ƒ x| j jƒ }|s"P |j|ƒ qW |S )N)r   r9   ÚtokenÚappend)rA   ÚtextÚtokensÚtokr   r   r   Útokenizeµ   s    
 zPreprocessor.tokenizec             C   s   t d|||f ƒ d S )Nz%s:%d %s)Úprint)rA   Ú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 )NZ
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/   r0   r    z##r!   r,   r-   ú,Ú.z,Unable to lex '%s' required for preprocessor)r   r9   rO   r   rU   r   Út_IDÚintÚ	t_INTEGERÚt_INTEGER_TYPEÚt_STRINGZt_SPACEZ	t_NEWLINEÚt_WS)rA   rS   ÚcharsÚcr   r   r   rK   Ð   sD    










zPreprocessor.lexprobec             C   s   | j j|ƒ d S )N)rI   rP   )rA   rI   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   r2   )r   ZcloneÚ
splitlinesÚxrangeÚlenÚendswithÚjoinr9   r   rO   rP   r   ra   r   )rA   r9   rG   ÚlinesÚiÚjZcurrent_linerS   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   )rl   r   ra   )rA   rR   rp   r   r   r   Ú
tokenstrip9  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-   rZ   zMissing ')' in macro argumentsr2   )	rl   r   ra   r   rP   rY   r@   r   rs   )	rA   Z	tokenlistÚargsÚ	positionsZcurrent_argZnestingZtokenlenrp   r   r   r   r   Úcollect_argsU  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##rc   ÚerZ   c             S   s   | d S )Né   r   )rg   r   r   r   r6   «  s    z,Preprocessor.macro_prescan.<locals>.<lambda>T)ÚkeyÚreverse)ÚpatchÚ	str_patchÚvar_comma_patchrl   r   r   r\   r=   ÚindexÚcopyr`   rP   r>   r?   Úsort)rA   Úmacrorp   Ú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   )rf   Ú_xr   r   r   rh   ·  s    z2Preprocessor.macro_expand_args.<locals>.<listcomp>z"%s"ri   c             S   s   g | ]
}|j ‘qS r   )r   )rf   rg   r   r   r   rh   ¾  s    r!   z\\Fr   Trc   rw   c             S   s   g | ]}|r|‘qS r   r   )rf   Ú_ir   r   r   rh   Ú  s    r2   )	r   r|   rn   Úreplacer   r>   r}   r{   Úexpand_macros)
rA   r�   rt   ÚrepZstr_expansionr‚   rp   Zcomma_patchÚexpandedZ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   )rf   r„   r   r   r   rh   õ  s    z.Preprocessor.expand_macros.<locals>.<listcomp>r   r,   zMacro %s requires %d argumentsrx   z(Macro %s must have at least %d argumentsz'Macro %s must have at least %d argumentZ__LINE__)rl   r   r\   r   rH   r=   r‡   r   ra   rv   r>   rY   r@   rP   rŠ   r^   r_   )rA   rR   r‰   rp   r   ÚmZexrw   rq   Útokcountrt   ru   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0123456789abcdefABCDEFri   c             S   s   g | ]}t |jƒ‘qS r   )Ústrr   )rf   rg   r   r   r   rh   T  s    z)Preprocessor.evalexpr.<locals>.<listcomp>z&&z and z||z or r.   z not zCouldn't evaluate expressionr2   r2   )rl   r   r\   r   ra   rH   rY   r@   r   r^   r_   r‡   Ú	enumerater   rŽ   rn   r†   ÚevalÚ	Exception)rA   rR   rp   rq   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 )Nri   z__FILE__ "%s"TFr    r   r   r   rM   ÚincludeZ__FILE__ÚundefZifdefZifndefÚifÚelifzMisplaced #elifÚelsezMisplaced #elseZendifzMisplaced #endifr2   r2   )r:   rr   rM   r@   r�   r   ra   r   rP   rs   r‡   rH   r•   r–   r”   rY   r   ÚpopÚextend)rA   r9   r@   r   ro   ÚchunkÚenableZ	iftriggerZifstackrg   rp   rS   Z	dirtokensr<   rt   Zoldfiler’   r   r   r   Úparsegend  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   r0   zMalformed #include <...>ri   c             S   s   g | ]
}|j ‘qS r   )r   )rf   rg   r   r   r   rh   ù  s    z(Preprocessor.include.<locals>.<listcomp>zMalformed #include statementr�   zCouldn't find '%s'r2   )r   r   r`   r‡   rl   rU   rn   rI   rJ   ÚosÚopenÚreadÚdirnameÚinsertrž   ÚIOError)
rA   rR   rp   ÚfilenamerI   ÚpZinameÚdataZdnamerS   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   rx   r,   Fz0No more arguments may follow a variadic argumentri   c             S   s   g | ]}t |jƒ‘qS r   )rŽ   r   )rf   r…   r   r   r   rh   2  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   )rf   rg   r   r   r   rh   P  s    zBad macro definitionéýÿÿÿr¨   r¨   )Ú
isinstanceÚSTRING_TYPESrT   rl   r;   r   rH   r   ra   rs   rv   rU   rn   r\   rƒ   ÚLookupError)rA   rR   Zlinetokr<   Zmtyper‹   rŒ   rt   ru   r>   ÚaZastrZmvaluerp   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   rH   r«   )rA   rR   Úidr   r   r   r–   ^  s
    
zPreprocessor.undefc             C   s   || _ | j||ƒ| _d S )N)Úignorerž   rN   )rA   r9   r@   r®   r   r   r   Úparsej  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)ÚnextrN   r   r®   ÚStopIteration)rA   rS   r   r   r   rO   s  s    
 zPreprocessor.token)N)N)N)rC   rD   rE   rB   rT   rY   rK   rd   rr   rs   rv   rƒ   rŠ   r‡   r”   rž   r•   rM   r–   r¯   rO   r   r   r   r   rF   ž   s&   
<!5+2
B;
 1F	rF   Ú__main__r   )
r   r   r   r   r   r	   r
   r   r   r   )3Z
__future__r   ÚsysÚversion_infoÚmajorrŽ   Zunicoderª   Úrangerk   rR   Úliteralsr   Zt_CPP_POUNDZt_CPP_DPOUNDZt_CPP_IDr   Zt_CPP_INTEGERZt_CPP_FLOATr   r   r   r   r   Úrer   rL   Zos.pathrŸ   Úcompiler7   r3   r:   Úobjectr;   rF   rC   Zply.lexrG   r   r    ÚargvÚfr¡   r9   r¦   r¯   rO   rS   rU   r@   r   r   r   r   Ú<module>
   sl   
	
     c

 