
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,aŽ  ã                   @   sœ   d Z ddlZddlmZmZmZmZmZmZ ddl	m
Z
 ddl	mZ G dd„ deƒZd	d
„ ZG dd„ deƒZejejejddœZdd„ Zdd„ Zdd„ ZdS )z#Guido van Rossum <guido@python.org>é    Né   )ÚdriverÚliteralsÚtokenÚtokenizeÚparseÚgrammar)Úpytree)Úpygramc                   @   s   e Zd ZdS )ÚPatternSyntaxErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú4/opt/alt/python38/lib64/python3.8/lib2to3/patcomp.pyr      s   r   c           	      c   sL   t jt jt jh}t t | ¡j¡}|D ] }|\}}}}}||kr&|V  q&d S ©N)	r   ÚNEWLINEÚINDENTÚDEDENTr   Úgenerate_tokensÚioÚStringIOÚreadline)	ÚinputÚskipÚtokensZ	quintupleÚtypeÚvalueÚstartÚendZ	line_textr   r   r   Útokenize_wrapper   s    r    c                   @   s:   e Zd Zddd„Zddd„Zdd„ Zdd	d
„Zdd„ ZdS )ÚPatternCompilerNc                 C   sZ   |d krt j| _t j| _nt |¡| _t  | j¡| _t j| _	t j
| _tj| jtd�| _d S )N)Zconvert)r
   Zpattern_grammarr   Zpattern_symbolsÚsymsr   Zload_grammarZSymbolsZpython_grammarZ	pygrammarZpython_symbolsÚpysymsZDriverÚpattern_convert)ÚselfZgrammar_filer   r   r   Ú__init__(   s    
zPatternCompiler.__init__Fc              
   C   sp   t |ƒ}z| jj||d�}W n2 tjk
rN } ztt|ƒƒd ‚W 5 d }~X Y nX |rb|  |¡|fS |  |¡S d S )N)Údebug)r    r   Zparse_tokensr   Z
ParseErrorr   ÚstrÚcompile_node)r%   r   r'   Z	with_treer   ÚrootÚer   r   r   Úcompile_pattern7   s     zPatternCompiler.compile_patternc                    sV  |j ˆ jjkr|jd }|j ˆ jjkrz‡ fdd„|jd d d… D ƒ}t|ƒdkrX|d S tjdd„ |D ƒddd�}| ¡ S |j ˆ jj	krÊ‡ fdd„|jD ƒ}t|ƒdkr°|d S tj|gddd�}| ¡ S |j ˆ jj
krþˆ  |jdd … ¡}t |¡}| ¡ S d }|j}t|ƒd	k�r>|d j tjk�r>|d j}|dd … }d }t|ƒdk�rx|d
 j ˆ jjk�rx|d
 }|d d
… }ˆ  ||¡}|d k	�r>|j}	|	d }
|
j tjk�r¶d}tj}nX|
j tjk�rÐd}tj}n>|
j tjk�rˆ  |	d ¡ }}t|	ƒdk�rˆ  |	d	 ¡}n |dk�s"|dk�r>| ¡ }tj|gg||d�}|d k	�rN||_| ¡ S )Nr   c                    s   g | ]}ˆ   |¡‘qS r   ©r)   ©Ú.0Zch©r%   r   r   Ú
<listcomp>O   s     z0PatternCompiler.compile_node.<locals>.<listcomp>é   r   c                 S   s   g | ]
}|g‘qS r   r   )r/   Úar   r   r   r1   R   s     ©ÚminÚmaxc                    s   g | ]}ˆ   |¡‘qS r   r-   r.   r0   r   r   r1   V   s     é   éÿÿÿÿé   )r   r"   ZMatcherÚchildrenZAlternativesÚlenr	   ÚWildcardPatternÚoptimizeZAlternativeZNegatedUnitÚcompile_basicZNegatedPatternr   ÚEQUALr   ZRepeaterÚSTARZHUGEÚPLUSÚLBRACEÚget_intÚname)r%   ÚnodeZaltsÚpZunitsÚpatternrD   ÚnodesÚrepeatr:   Zchildr5   r6   r   r0   r   r)   C   s^    

 
"

zPatternCompiler.compile_nodec                 C   s@  |d }|j tjkr4tt |j¡ƒ}t t	|ƒ|¡S |j tj
krô|j}| ¡ r„|tkrbtd| ƒ‚|dd … rvtdƒ‚t t| ¡S |dkr’d }n,| d¡s¾t| j|d ƒ}|d kr¾td| ƒ‚|dd … râ|  |d jd ¡g}nd }t ||¡S nH|jdk�r|  |d ¡S |jd	k�r<|  |d ¡}tj|ggddd
�S d S )Nr   zInvalid token: %rr   zCan't have details for tokenÚanyÚ_zInvalid symbol: %rú(ú[r4   )r   r   ÚSTRINGr(   r   Z
evalStringr   r	   ZLeafPatternÚ_type_of_literalÚNAMEÚisupperÚ	TOKEN_MAPr   Ú
startswithÚgetattrr#   r)   r:   ZNodePatternr<   )r%   rH   rI   rE   r   r   ZcontentÚ
subpatternr   r   r   r>   Š   s8    
zPatternCompiler.compile_basicc                 C   s
   t |jƒS r   )Úintr   )r%   rE   r   r   r   rC   ­   s    zPatternCompiler.get_int)N)FF)N)r   r   r   r&   r,   r)   r>   rC   r   r   r   r   r!   &   s
   

G
#r!   )rP   rN   ÚNUMBERZTOKENc                 C   s.   | d   ¡ rtjS | tjkr&tj|  S d S d S )Nr   )Úisalphar   rP   r   Zopmap)r   r   r   r   rO   ¹   s
    

rO   c                 C   s>   |\}}}}|s|| j kr*tj|||d�S tj|||d�S d S )N)Úcontext)Znumber2symbolr	   ZNodeZLeaf)r   Zraw_node_infor   r   rY   r:   r   r   r   r$   Â   s    r$   c                 C   s   t ƒ  | ¡S r   )r!   r,   )rG   r   r   r   r,   Ë   s    r,   )Ú
__author__r   Zpgen2r   r   r   r   r   r   Ú r	   r
   Ú	Exceptionr   r    Úobjectr!   rP   rN   rW   rR   rO   r$   r,   r   r   r   r   Ú<module>   s     
 ý		