U
��,a��@s�dZddlZddlmZmZmZmZmZmZddl m
Z
ddl mZGdd�de�Z
d d
�ZGdd�de�Zejejejdd
�Zdd�Zdd�Zdd�ZdS)z#Guido van Rossum <guido@python.org>�N�)�driver�literals�token�tokenize�parse�grammar)�pytree)�pygramc@seZdZdS)�PatternSyntaxErrorN)�__name__�
__module__�__qualname__�rr�4/opt/alt/python38/lib64/python3.8/lib2to3/patcomp.pyrsrc csLtjtjtjh}t�t�|�j�}|D] }|\}}}}}||kr&|Vq&dS�N) r�NEWLINE�INDENT�DEDENTr�generate_tokens�io�StringIO�readline) �input�skip�tokensZ quintuple�type�value�start�endZ line_textrrr�tokenize_wrappersr c@s:eZdZd
dd�Zddd�Zdd�Zdd d
�Zdd�ZdS)�PatternCompilerNcCsZ|dkrtj|_tj|_nt�|�|_t�|j�|_tj|_ tj
|_tj|jt
d�|_dS)N)Zconvert)r
Zpattern_grammarrZpattern_symbols�symsrZload_grammarZSymbolsZpython_grammarZ pygrammarZpython_symbols�pysymsZDriver�pattern_convert)�selfZgrammar_filerrr�__init__(s
zPatternCompiler.__init__Fc
Cspt|�}z|jj||d�}Wn2tjk
rN}ztt|��d�W5d}~XYnX|rb|�|�|fS|�|�SdS)N)�debug)r rZparse_tokensrZ
ParseErrorr�str�compile_node)r%rr'Z with_treer�root�errr�compile_pattern7s zPatternCompiler.compile_patternc
sV|j�jjkr|jd}|j�jjkrz�fdd�|jddd�D�}t|�dkrX|dStjdd�|D�ddd�}|��S|j�jj krʇfdd�|jD�}t|�dkr�|dStj|gddd�}|��S|j�jj
kr���|jdd��}t�|�}|��Sd}|j}t|�d k�r>|djt
jk�r>|dj}|dd�}d}t|�dk�rx|d
j�jjk�rx|d
}|dd
�}��||�}|dk �r>|j} | d}
|
jt
jk�r�d}tj}nX|
jt
jk�r�d}tj}n>|
jt
jk�r��| d�}}t| �dk�r��| d �}n|dk�s"|dk�r>|��}tj|gg||d�}|dk �rN||_|��S)Nrcsg|]}��|��qSr�r)��.0Zch�r%rr�
<listcomp>Osz0PatternCompiler.compile_node.<locals>.<listcomp>�rcSsg|]
}|g�qSrr)r/�arrrr1Rs��min�maxcsg|]}��|��qSrr-r.r0rrr1Vs�����)rr"ZMatcher�childrenZAlternatives�lenr �WildcardPattern�optimizeZAlternativeZNegatedUnit�
compile_basicZNegatedPatternr�EQUALrZRepeater�STARZHUGE�PLUS�LBRACE�get_int�name)
r%�nodeZalts�pZunits�patternrD�nodes�repeatr:Zchildr5r6rr0rr)Cs^
"
zPatternCompiler.compile_nodecCs@|d}|jtjkr4tt�|j��}t�t |�|�S|jtj
kr�|j}|��r�|tkrbt
d|��|dd�rvt
d��t�t|�S|dkr�d}n,|�d�s�t|j|d�}|dkr�t
d|��|dd�r�|�|djd�g}nd}t�||�SnH|jdk�r|�|d�S|jd k�r<|�|d�}tj|ggddd
�SdS)NrzInvalid token: %rrzCan't have details for token�any�_zInvalid symbol: %r�(�[r4)rr�STRINGr(rZ
evalStringrr ZLeafPattern�_type_of_literal�NAME�isupper� TOKEN_MAPr�
startswith�getattrr#r)r:ZNodePatternr<)r%rHrIrErrZcontent�
subpatternrrrr>�s8
zPatternCompiler.compile_basiccCs
t|j�Sr)�intr)r%rErrrrC�szPatternCompiler.get_int)N)FF)N)rr
rr&r,r)r>rCrrrrr!&s
G
#r!)rPrN�NUMBERZTOKENcCs.|d��rtjS|tjkr&tj|SdSdS)Nr)�isalpharrPrZopmap)rrrrrO�s
rOcCs>|\}}}}|s||jkr*tj|||d�Stj|||d�SdS)N)�context)Z
number2symbolr ZNodeZLeaf)rZ
raw_node_inforrrYr:rrrr$�sr$cCst��|�Sr)r!r,)rGrrrr,�sr,)�
__author__rZpgen2rrrrrr�r r
� Exceptionrr �objectr!rPrNrWrRrOr$r,rrrr�<module>s
� |