509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \„  ã               @   s    d Z 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�Pattern compiler.

The grammar is taken from PatternGrammar.txt.

The compiler compiles a pattern to a pytree.*Pattern instance.
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   ú'/usr/lib64/python3.6/lib2to3/patcomp.pyr      s   r   c       	      c   sP   t jt jt jh}tjtj| ƒjƒ}x(|D ] }|\}}}}}||kr(|V  q(W dS )z6Tokenizes a string suppressing significant whitespace.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j|ƒ| _t j| jƒ| _t j| _	t j
| _tj| jtd�| _dS )z^Initializer.

        Takes an optional alternative filename for the pattern grammar.
        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   sn   t |ƒ}y| jj||d�}W n0 tjk
rL } ztt|ƒƒ‚W Y dd}~X nX |r`| j|ƒ|fS | j|ƒS dS )z=Compiles a pattern string to a nested pytree.*Pattern object.)ÚdebugN)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�}|jƒ S |j ˆ jj	krÊ‡ fd	d„|jD ƒ}t|ƒdkr°|d S tj|gddd�}|jƒ S |j ˆ jj
krþˆ j|jdd… ƒ}tj|ƒ}|jƒ 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… }ˆ j||ƒ}|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ˆ j|	d ƒ }}t|	ƒdk�rˆ j|	d
 ƒ}n |dk�s"|dk�r>|jƒ }tj|gg||d�}|dk	�rN||_|jƒ S )zXCompiles a node, recursively.

        This is one big switch on the node type.
        r   c                s   g | ]}ˆ j |ƒ‘qS r   )r(   )Ú.0Úch)r$   r   r   ú
<listcomp>O   s    z0PatternCompiler.compile_node.<locals>.<listcomp>Né   r   c             S   s   g | ]
}|g‘qS r   r   )r,   Úar   r   r   r.   R   s    )ÚminÚmaxc                s   g | ]}ˆ j |ƒ‘qS r   )r(   )r,   r-   )r$   r   r   r.   V   s    é   é   éÿÿÿÿr5   r5   )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Úpatternr@   ÚnodesÚrepeatr6   Zchildr1   r2   r   )r$   r   r(   C   s^    

 
"

zPatternCompiler.compile_nodec             C   s@  |d }|j tjkr4ttj|jƒƒ}tjt	|ƒ|ƒS |j tj
krô|j}|jƒ r„|tkrbtd| ƒ‚|dd … rvtdƒ‚tjt| ƒS |dkr’d }n,|jdƒs¾t| j|d ƒ}|d kr¾td| ƒ‚|dd … râ| j|d jd ƒg}nd }tj||ƒS nH|jdk�r| j|d ƒS |jd	k�r<| j|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ú(ú[)r1   r2   )r   r   ÚSTRINGr'   r   Z
evalStringr   r	   ZLeafPatternÚ_type_of_literalÚNAMEÚisupperÚ	TOKEN_MAPr   Ú
startswithÚgetattrr"   r(   r6   ZNodePatternr8   )r$   rD   rE   rA   r   r   ZcontentÚ
subpatternr   r   r   r:   Š   s8    
zPatternCompiler.compile_basicc             C   s
   t |jƒS )N)Úintr   )r$   rA   r   r   r   r?   ­   s    zPatternCompiler.get_int)N)FF)N)r   r   r   r%   r+   r(   r:   r?   r   r   r   r   r    &   s
   

G
#r    )rL   rJ   ÚNUMBERZTOKENc             C   s.   | d j ƒ rtjS | tjkr&tj|  S d S d S )Nr   )Úisalphar   rL   r   Zopmap)r   r   r   r   rK   ¹   s
    

rK   c             C   s>   |\}}}}|s|| j kr*tj|||d�S tj|||d�S dS )z9Converts raw node information to a Node or Leaf instance.)ÚcontextN)Znumber2symbolr	   ZNodeZLeaf)r   Zraw_node_infor   r   rU   r6   r   r   r   r#   Â   s    r#   c             C   s   t ƒ j| ƒS )N)r    r+   )rC   r   r   r   r+   Ë   s    r+   )Ú__doc__Ú
__author__r   Zpgen2r   r   r   r   r   r   Ú r	   r
   Ú	Exceptionr   r   Úobjectr    rL   rJ   rS   rN   rK   r#   r+   r   r   r   r   Ú<module>	   s     
 		