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                s°  |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 |j ˆ jjk�st‚d}|j}t|ƒd
k�rR|d j tjk�rR|d j}|dd… }d}t|ƒdk�rŒ|d j ˆ jjk�rŒ|d }|dd… }ˆ j||ƒ}|dk	�r˜|j ˆ jjk�s¶t‚|j}	|	d }
|
j tjk�rÞd}tj}nŠ|
j tjk�rød}tj}np|
j tjk�r^|	d j tjk�st‚t|	ƒdk�s.t‚ˆ j|	d ƒ }}t|	ƒdk�rhˆ j|	d
 ƒ}n
d�sht‚|dk�s||dk�r˜|jƒ }tj|gg||d�}|dk	�r¨||_|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    é   é   Féÿÿÿÿr5   r5   r5   )r3   r4   )r   r!   ZMatcherÚchildrenZAlternativesÚlenr	   ÚWildcardPatternÚoptimizeZAlternativeZNegatedUnitÚcompile_basicZNegatedPatternZUnitÚAssertionErrorr   ÚEQUALr   ZRepeaterÚSTARZHUGEÚPLUSÚLBRACEÚRBRACEÚget_intÚname)r$   ÚnodeZaltsÚpZunitsÚpatternrB   ÚnodesÚrepeatr6   Zchildr1   r2   r   )r$   r   r(   C   sh    

 
"


zPatternCompiler.compile_nodec             C   sn  t |ƒdkst‚|d }|jtjkrDttj|jƒƒ}t	j
t|ƒ|ƒS |jtjk�r|j}|jƒ r–|tkrttd| ƒ‚|dd … rˆt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 nV|jdk�r | j|d ƒS |jd	k�r\|d k�s:t‚| j|d ƒ}t	j|ggddd
�S d�sjt|ƒ‚d S )Nr   r   zInvalid token: %rzCan't have details for tokenÚanyÚ_zInvalid symbol: %rú(ú[)r1   r2   F)r7   r;   r   r   ÚSTRINGr'   r   Z
evalStringr   r	   ZLeafPatternÚ_type_of_literalÚNAMEÚisupperÚ	TOKEN_MAPr   Ú
startswithÚgetattrr"   r(   r6   ZNodePatternr8   )r$   rF   rG   rC   r   r   ZcontentÚ
subpatternr   r   r   r:   Š   s<    
zPatternCompiler.compile_basicc             C   s   |j tjkst‚t|jƒS )N)r   r   ÚNUMBERr;   Úintr   )r$   rC   r   r   r   rA   ­   s    zPatternCompiler.get_int)N)FF)N)r   r   r   r%   r+   r(   r:   rA   r   r   r   r   r    &   s
   

G
#r    )rN   rL   rT   ZTOKENc             C   s.   | d j ƒ rtjS | tjkr&tj|  S d S d S )Nr   )Úisalphar   rN   r   Zopmap)r   r   r   r   rM   ¹   s
    

rM   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   rW   r6   r   r   r   r#   Â   s    r#   c             C   s   t ƒ j| ƒS )N)r    r+   )rE   r   r   r   r+   Ë   s    r+   )Ú__doc__Ú
__author__r   Zpgen2r   r   r   r   r   r   Ú r	   r
   Ú	Exceptionr   r   Úobjectr    rN   rL   rT   rP   rM   r#   r+   r   r   r   r   Ú<module>	   s     
 		