a
    còf‚  ã                
   @   s`  d dl Z e jjdk reefZneZeZdZ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 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"d(k�r\d dl#m$Z$ e$ $¡ Z%d dl Z e&e j'd) ƒZ(e( )¡ Z*e!e%ƒZ+e+ ,e*e j'd) ¡ e+ -¡ Z.e.�sL�q\e/e+j0e.ƒ �q:dS )*é    Né   )
ZCPP_IDÚCPP_INTEGERZ	CPP_FLOATZ
CPP_STRINGZCPP_CHARÚCPP_WSZCPP_COMMENT1ZCPP_COMMENT2Z	CPP_POUNDZ
CPP_DPOUNDz+-*/%|&~^<>=!?()[]{}.,;:\'"c                 C   s   | j  j| j d¡7  _| S )z\s+Ú
©ÚlexerÚlinenoÚvalueÚcount©Út© r   úN/home/httpd/docs/test/DocsMgr/lib/python3.9/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    r   z?((\d+)(\.\d+)(e(\+|-)?(\d+))? | (\d+)e(\+|-)?(\d+))([lL]|[fF])?c                 C   s   | j  j| j d¡7  _| S )z\"([^\\\n]|(\\(.|\n)))*?\"r   r   r   r   r   r   Út_CPP_STRING5   s    r   c                 C   s   | j  j| j d¡7  _| S )z(L)?\'([^\\\n]|(\\(.|\n)))*?\'r   r   r   r   r   r   Ú
t_CPP_CHAR;   s    r   c                 C   s8   | 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 d¡ | S ©Nr   é   )r	   r   r   Úskipr   r   r   r   Út_errorP   s    r   z\?\?[=/\'\(\)\!<>\-]ú#ú\ú^ú[ú]ú|Ú{Ú}ú~)	ú=ú/ú'ú(ú)ú!ú<ú>ú-c                 C   s   t  dd„ | ¡S )Nc                 S   s   t |  ¡ d  S ©Néÿÿÿÿ)Ú_trigraph_repÚgroup)Úgr   r   r   Ú<lambda>z   ó    ztrigraph.<locals>.<lambda>)Ú_trigraph_patÚsub)Úinputr   r   r   Útrigraphy   s    r6   c                   @   s   e Zd Zddd„ZdS )ÚMacroNFc                 C   s0   || _ || _|| _|| _|r&|d | _d | _d S r,   )Únamer	   ÚarglistÚvariadicÚvarargÚsource)Úselfr8   r	   r9   r:   r   r   r   Ú__init__�   s    
zMacro.__init__)NF)Ú__name__Ú
__module__Ú__qualname__r>   r   r   r   r   r7   Œ   s   r7   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 u rt j}|| _i | _g | _g | _|  ¡  t ¡ }|  dt 	d|¡ ¡ |  dt 	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   r>   ž   s    zPreprocessor.__init__c                 C   s0   g }| j  |¡ | j  ¡ }|s q,| |¡ q|S ©N)r   r5   Ú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  d¡ | j  ¡ }|r$|jdkr.tdƒ n|j| _| j  d¡ | j  ¡ }|r^t|jƒdkrhtdƒ n|j| _t|jƒ| _	| j  d¡ | j  ¡ }|r |jdkrªtdƒ n|j| _
| j  d¡ | j  ¡ }|rÖ|jdkrÞd | _n|j| _| j  d	¡ | j  ¡ }|�r|jd	k�rd | _td
ƒ n|j| _| j| jf| _g d¢}|D ]:}| j  |¡ | j  ¡ }|�rl|j|k�r@td| ƒ �q@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 newlines)	r)   r*   r   ú##r   r&   r'   ú,Ú.z,Unable to lex '%s' required for preprocessor)r   r5   rO   r	   rU   r   Út_IDÚintÚ	t_INTEGERÚt_INTEGER_TYPEÚt_STRINGZt_SPACEZ	t_NEWLINEÚt_WS)r=   rS   ÚcharsÚcr   r   r   rG   Ï   sD    









zPreprocessor.lexprobec                 C   s   | j  |¡ d S rN   )rE   rP   )r=   rE   r   r   r   Úadd_path  s    zPreprocessor.add_pathc                 c   sä   | j  ¡ }dd„ | ¡ D ƒ}tt|ƒƒD ]T}|d }||  d¡r(|t|ƒk r(|| d d… ||  ||< d||< |d7 }q4q(d |¡}| |¡ d|_g }| 	¡ }|sªqÖ| 
|¡ |j| jv rœd|jv rœ|V  g }qœ|rà|V  d S )Nc                 S   s   g | ]}|  ¡ ‘qS r   )Úrstrip©Ú.0Úxr   r   r   Ú
<listcomp>  r2   z,Preprocessor.group_lines.<locals>.<listcomp>r   r   r-   Ú r   )r   ÚcloneÚ
splitlinesÚxrangeÚlenÚendswithÚjoinr5   r   rO   rP   r   rc   r	   )r=   r5   rC   ÚlinesÚiÚjÚcurrent_linerS   r   r   r   Úgroup_lines  s*    



zPreprocessor.group_linesc                 C   st   d}|t |ƒk r*|| j| jv r*|d7 }q|d |…= t |ƒd }|dkrb|| j| jv rb|d8 }q@||d d …= |S r   )rp   r   rc   )r=   rR   rt   r   r   r   Ú
tokenstrip8  s    


zPreprocessor.tokenstripc           	      C   s€  g }g }g }d}t |ƒ}d}||k r>|| j| jv r>|d7 }q||k rd|| jdkrd| |d ¡ n |  | j|d jd¡ dg g fS |d7 }||k �r`|| }|jdkr¼| |¡ |d7 }nš|jdk�r|d8 }|dk�r|rø| |  |¡¡ | |¡ |d ||fS | |¡ nD|jdk�rL|dk�rL| |  |¡¡ | |d ¡ g }n
| |¡ |d7 }qŒ|  | j|d jd¡ dg g fS )	Nr   r   r&   zMissing '(' in macro argumentsr'   r\   r-   zMissing ')' in macro arguments)	rp   r   rc   r	   rP   rY   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}|t|jƒk �r |j| j| jk�rh|j| j|jv �rh|j |j| j¡}|dkrÆ|j|d  jdkrÆt	 	|j| ¡|j|< | j
|j| _|j|d = |j ||d f¡ qn |dk�r|j|d  jdk�r|j  d||d f¡ |j|d = qnZ|d t|jƒk �rT|j|d  jdk�rT|j  d||f¡ |d7 }qn|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 |d ¡ |d7 }q|j jdd	„ d
d� d S )Nr   r   r   r[   re   Úer\   c                 S   s   | d S )Né   r   )rj   r   r   r   r1   ª  r2   z,Preprocessor.macro_prescan.<locals>.<lambda>T)ÚkeyÚreverse)ÚpatchÚ	str_patchÚvar_comma_patchrp   r	   r   r^   r9   ÚindexÚcopyrb   rP   r:   r;   Úsort)r=   Úmacrort   Úargnumr   r   r   Úmacro_prescan‰  sB    ( *(ÿÿþ
zPreprocessor.macro_prescanc           
      C   s   dd„ |j D ƒ}i }|jD ]X\}}||vrRdd dd„ || D ƒ¡  dd¡||< t || ¡||< || || _ qd}|jrž|d	 sž|jD ]}d ||< d
}qŒi }|jD ]^\}	}}|	dkrÐ|| |||d …< q¨|	dkr¨||vrò|  || ¡||< || |||d …< q¨|�rdd„ |D ƒ}|S )Nc                 S   s   g | ]}t   |¡‘qS r   ©r…   ©ri   Ú_xr   r   r   rk   ¶  r2   z2Preprocessor.macro_expand_args.<locals>.<listcomp>z"%s"rl   c                 S   s   g | ]
}|j ‘qS r   ©r	   rh   r   r   r   rk   ½  r2   r   z\\Fr-   Tre   r   r}   c                 S   s   g | ]}|r|‘qS r   r   ©ri   Z_ir   r   r   rk   Ù  r2   )	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 u ri }d}|t |ƒk �rÌ|| }|j| jk�rÂ|j| jv �r |j|v�r d||j< | j|j }|js´|  dd„ |jD ƒ|¡}|D ]}|j|_q†||||d …< |t |ƒ7 }�nà|d }|t |ƒk râ|| j| jv râ|d7 }q¼|| jdk�r”|  	||d … ¡\}	}
}|j
�sTt |
ƒt |jƒk�rT|  | j|jd|jt |jƒf ¡ ||	 }�n@|j
�rÜt |
ƒt |jƒd k �rÜt |jƒdk�r¬|  | j|jd	|jt |jƒd f ¡ n&|  | j|jd
|jt |jƒd f ¡ ||	 }n¸|j
�rLt |
ƒt |jƒd k�r|
 g ¡ nD|||t |jƒd   ||	 d … |
t |jƒd < |
t |jƒd …= |  ||
¡}|  ||¡}|D ]}|j|_�qh|||||	 …< |t |ƒ7 }||j= qn"|jdk�rÂ| j|_|  |j¡|_|d7 }q|S )Nr   Tc                 S   s   g | ]}t   |¡‘qS r   rŠ   r‹   r   r   r   rk   ô  r2   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	   rD   r9   r�   r   rc   r|   r:   rY   r<   rP   r”   r`   ra   )r=   rR   r’   rt   r   ÚmÚexr}   ru   Útokcountrz   r{   r‘   Úrr   r   r   r�   æ  s\    


" (&
4
zPreprocessor.expand_macrosc                 C   sL  d}|t |ƒk �r|| j| jk�r|| jdk�r|d }d}d}|t |ƒk rä|| j| jv rl|d7 }qDnn|| j| jkrž|| j| jv r’d}nd}|sÚqän<|| jdkr²d}n(|| jd	krÄqän|  | j|| jd
¡ |d7 }qD| j	|| _|  
|¡|| _||d |d …= |d7 }q|  |¡}t|ƒD ]¤\}}|j| jk�rpt |¡||< | j	|| _|  
d¡|| _n`|j| j	k�r.t |¡||< t|| jƒ|| _|| jd dv�r.|| jd d… || _�q �q.d dd„ |D ƒ¡}| dd¡}| dd¡}| dd¡}zt|ƒ}W n. t�yF   |  | j|d jd¡ d}Y n0 |S )Nr   Zdefinedr   FZ0LZ1Lr&   Tr'   zMalformed defined()r-   Z0123456789abcdefABCDEFrl   c                 S   s   g | ]}t |jƒ‘qS r   ©Ústrr	   rh   r   r   r   rk   S  r2   z)Preprocessor.evalexpr.<locals>.<listcomp>z&&z and z||z or r(   z not zCouldn't evaluate expression)rp   r   r^   r	   rc   rD   rY   r<   r   r`   ra   r�   Ú	enumerater…   rš   rr   r�   ÚevalÚ	Exception)r=   rR   rt   ru   Z	needparenÚresultr   Úexprr   r   r   Úevalexpr(  s\    "


 
zPreprocessor.evalexprc                 c   s’  t |ƒ}|  |¡}|sd}|  d| ¡ || _g }d}d}g }|D �],}	t|	ƒD ]\}
}|j| jvrP qjqP|jdk�rb|	D ]$}|j| jv rzd|jv rz| |¡ qz|  	|	|
d d … ¡}|rØ|d j}|  	|dd … ¡}nd}g }|d	k�r|�r`|  
|¡D ]
}|V  qúg }|  |¡ �qp|d
k�rz|�r`|  
|¡D ]}|V  �q2g }| jd }|  |¡D ]}|V  �qX|| jd< || _�qp|dk�r´|�r`|  
|¡D ]}|V  �q”g }|  |¡ �qp|dk�rö| ||f¡ |�r`|d j| jv�rîd}d}nd}�qp|dk�r8| ||f¡ |�r`|d j| jv �r0d}d}nd}�qp|dk�rv| ||f¡ |�r`|  |¡}|�spd}d}nd}nê|dk�rØ|�rÀ|d d �rÖ|�r d}n|�sÖ|  |¡}|�rÖd}d}n|  | j|d jd¡ nˆ|dk�r*|�r|d d �r(|�rd}n|�s(d}d}n|  | j|d jd¡ n6|dk�rp|�rH| ¡ \}}n|  | j|d jd¡ n qB|rB| |	¡ qB|  
|¡D ]}|V  �q|g }d S )Nrl   z__FILE__ "%s"TFr   r   r   r   rJ   ÚincludeZ__FILE__ÚundefZifdefZifndefÚifÚelifr-   zMisplaced #elifÚelsezMisplaced #elseÚendifzMisplaced #endif)r6   rw   rJ   r<   r›   r   rc   r	   rP   rx   r�   rD   r¡   r¢   r    rY   r   ÚpopÚextend)r=   r5   r<   r   rs   ÚchunkÚenableZ	iftriggerZifstackrj   rt   rS   Z	dirtokensr8   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|  |¡}|d j dkr¨d}|t|ƒk rl|| j dkrbqx|d7 }qFtdƒ d S d 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 |D ]Š}t	j ||¡}zbt
|dƒ ¡ }t	j |¡}|�r0| j d|¡ |  ||¡D ]}	|	V  �q<|�rX| jd= W  �q†W qî t�yv   Y qî0 qîtd| ƒ d S )Nr   r)   r   r*   zMalformed #include <...>rl   c                 S   s   g | ]
}|j ‘qS r   r�   rh   r   r   r   rk   ø  r2   z(Preprocessor.include.<locals>.<listcomp>r-   zMalformed #include statementr˜   zCouldn't find '%s')r	   r   rb   r�   rp   rU   rr   rE   rF   ÚosÚopenÚreadÚdirnameÚinsertr«   ÚIOError)
r=   rR   rt   ÚfilenamerE   ÚpZinameÚdataÚdnamerS   r   r   r   r¡   æ  sF    


zPreprocessor.includec                 C   s¶  t |tƒr|  |¡}|}�zz|d }t|ƒdkr:|d }nd }|s^t|jg ƒ}|| j|j< �n4|j| jv r”t|j|  	|dd … ¡ƒ}|| j|j< �nþ|jdk�rŠ|  
|dd … ¡\}}}d}	|D ]î}
|	rÖtdƒ  �q’d 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ƒ  �q’qÀ|  	|d| d … ¡}d}|t|ƒk �rX|d t|ƒk �rL|| j| jv �r||d  jdk�r||= �qÊn0|| jdk�rL||d  j| jv �rL||d = |d7 }�qÊt|j|dd	„ |D ƒ|	ƒ}|  |¡ || j|j< ntdƒ W n t�y°   tdƒ Y n0 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Ž   r   r   r   rk   1  r2   z'Preprocessor.define.<locals>.<listcomp>z...TZ__VA_ARGS__éýÿÿÿzInvalid macro argumentr[   c                 S   s   g | ]}|d  j ‘qS )r   r�   rh   r   r   r   rk   O  r2   zBad macro definition)Ú
isinstanceÚSTRING_TYPESrT   rp   r7   r	   rD   r   rc   rx   r|   rU   rr   r^   r‰   ÚLookupError)r=   rR   Zlinetokr8   Úmtyper•   r—   rz   r{   r:   ÚaZastrZmvaluert   r   r   r   rJ     sl    





$
&&

zPreprocessor.definec                 C   s.   |d j }z| j|= W n ty(   Y n0 d S )Nr   )r	   rD   r¹   )r=   rR   Úidr   r   r   r¢   ]  s
    
zPreprocessor.undefc                 C   s   || _ |  ||¡| _d S rN   )Úignorer«   rL   )r=   r5   r<   r½   r   r   r   Úparsei  s    zPreprocessor.parsec                 C   sB   z"t | jƒ}|j| jvr|W S qW n ty<   d | _Y d S 0 d S rN   )ÚnextrL   r   r½   ÚStopIteration)r=   rS   r   r   r   rO   r  s    
zPreprocessor.token)N)N)N)r?   r@   rA   r>   rT   rY   rG   rf   rw   rx   r|   r‰   r”   r�   r    r«   r¡   rJ   r¢   r¾   rO   r   r   r   r   rB   �   s&   
<!5+2
B;
 1F	rB   Ú__main__r   )1ÚsysÚversion_infoÚmajorrš   Úunicoder¸   Úrangero   rR   Úliteralsr   Zt_CPP_POUNDZt_CPP_DPOUNDZt_CPP_IDr   Zt_CPP_INTEGERZt_CPP_FLOATr   r   r   r   r   Úrer…   rH   Úos.pathr¬   Úcompiler3   r.   r6   Úobjectr7   rB   r?   Zply.lexrC   r   r­   ÚargvÚfr®   r5   r³   r¾   rO   rS   rU   r<   r   r   r   r   Ú<module>
   sh   
	
÷     c

