U e5d��@s�dZddlZddlmZmZmZmZmZmZddl m Z ddl m Z Gdd�de �Z d d �ZGd d �d e�Zejejejdd �Zdd�Zdd�Zdd�ZdS)z#Guido van Rossum �N�)�driver�literals�token�tokenize�parse�grammar)�pytree)�pygramc@s eZdZdS)�PatternSyntaxErrorN)�__name__� __module__� __qualname__�rr�'/usr/lib64/python3.8/lib2to3/patcomp.pyr sr c 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_wrappers r c@s:eZdZd dd�Zddd�Zdd�Zdd d �Zd d �ZdS)�PatternCompilerNcCsZ|dkrtj|_tj|_nt�|�|_t�|j�|_tj|_ tj |_ tj |jt d�|_dS)N)Zconvert)r Zpattern_grammarrZpattern_symbols�symsrZ load_grammarZSymbolsZpython_grammarZ pygrammarZpython_symbols�pysymsZDriver�pattern_convert)�selfZ grammar_filerrr�__init__(s  zPatternCompiler.__init__Fc Cspt|�}z|jj||d�}Wn2tjk rN}ztt|��d�W5d}~XYnX|rb|�|�|fS|�|�SdS)N)�debug)r rZ parse_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| �d k�r��| d �} n| dk�s"| dk�r>|��}tj|gg| | d�}|dk �rN||_|��S) Nrcsg|]}��|��qSr�r)��.0Zch�r%rr� Osz0PatternCompiler.compile_node..�rcSsg|] }|g�qSrr)r/�arrrr1Rs��min�maxcsg|]}��|��qSrr-r.r0rrr1Vs�������)rr"ZMatcher�childrenZ Alternatives�lenr �WildcardPattern�optimizeZ AlternativeZ NegatedUnit� 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�|t krbt 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 Z LeafPattern�_type_of_literal�NAME�isupper� TOKEN_MAPr � startswith�getattrr#r)r:Z NodePatternr<)r%rHrIrErrZcontent� subpatternrrrr>�s8         zPatternCompiler.compile_basiccCs t|j�Sr)�intr)r%rErrrrC�szPatternCompiler.get_int)N)FF)N)r r 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$�s r$cCs t��|�Sr)r!r,)rGrrrr,�sr,)� __author__rZpgen2rrrrrr�r r � Exceptionr r �objectr!rPrNrWrRrOr$r,rrrr� s     �