a XC?h��@s�dZdZddlZddlmZmZmZmZmZm Z ddl m Z ddl m Z Gdd �d e �Zd d �ZGd d �d e�Zejejejdd�Zdd�Zdd�Zdd�ZdS)z�Pattern compiler. The grammar is taken from PatternGrammar.txt. The compiler compiles a pattern to a pytree.*Pattern instance. z#Guido van Rossum �N�)�driver�literals�token�tokenize�parse�grammar)�pytree)�pygramc@s eZdZdS)�PatternSyntaxErrorN)�__name__� __module__� __qualname__�rr�4/opt/alt/python39/lib64/python3.9/lib2to3/patcomp.pyr sr c csLtjtjtjh}t�t�|�j�}|D] }|\}}}}}||vr&|Vq&dS)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_textrrr�tokenize_wrappers rc@s:eZdZd dd�Zddd�Zdd�Zdd d �Zd d �ZdS)�PatternCompilerNcCsZ|durtj|_tj|_nt�|�|_t�|j�|_tj|_ tj |_ tj |jt d�|_dS)z^Initializer. Takes an optional alternative filename for the pattern grammar. N)Zconvert)r Zpattern_grammarrZpattern_symbols�symsrZ load_grammarZSymbolsZpython_grammarZ pygrammarZpython_symbols�pysymsZDriver�pattern_convert)�selfZ grammar_filerrr�__init__(s  zPatternCompiler.__init__Fc Csrt|�}z|jj||d�}Wn4tjyP}ztt|��d�WYd}~n d}~00|rd|�|�|fS|�|�SdS)z=Compiles a pattern string to a nested pytree.*Pattern object.)�debugN)rrZ parse_tokensrZ ParseErrorr �str� compile_node)r$rr&Z with_treer�root�errr�compile_pattern7s$zPatternCompiler.compile_patternc s�|j�jjkr|jd}|j�jjkrz�fdd�|jddd�D�}t|�dkrX|dStjdd�|D�ddd�}|��S|j�jj krʇfd d�|jD�}t|�dkr�|dStj|gddd�}|��S|j�jj kr��� |jdd��}t� |�}|��S|j�jj k�sJ�d}|j}t|�d k�rR|djtjk�rR|dj}|dd�}d}t|�dk�r�|d j�jjk�r�|d }|dd �}�� ||�}|du�r�|j�jjk�s�J�|j} | d} | jtjk�r�d} tj} n�| jtjk�r�d} tj} np| jtjk�r^| d jtjk�sJ�t| �d v�s.J���| d�} } t| �d k�rh��| d �} n d�shJ�| dk�s|| dk�r�|��}tj|gg| | d�}|du�r�||_|��S)zXCompiles a node, recursively. This is one big switch on the node type. rcsg|]}��|��qSr�r(��.0Zch�r$rr� O�z0PatternCompiler.compile_node..N�rcSsg|] }|g�qSrr)r.�arrrr0Rr1��min�maxcsg|]}��|��qSrr,r-r/rrr0Vr1������)r7�r9F)rr!ZMatcher�childrenZ Alternatives�lenr �WildcardPattern�optimizeZ AlternativeZ NegatedUnit� compile_basicZNegatedPatternZUnitr�EQUALrZRepeater�STARZHUGE�PLUS�LBRACE�RBRACE�get_int�name) r$�nodeZalts�pZunits�patternrE�nodes�repeatr:�childr5r6rr/rr(Csh       "     zPatternCompiler.compile_nodecCsnt|�dksJ�|d}|jtjkrDtt�|j��}t� t |�|�S|jtj k�r|j}|� �r�|t vrttd|��|dd�r�td��t� t |�S|dkr�d}n,|�d�s�t|j|d�}|dur�td|��|dd�r�|�|djd�g}nd}t�||�SnV|jdk�r |�|d�S|jd k�r\|du�s:J�|�|d�}tj|ggddd �Sd �sjJ|��dS) NrrzInvalid token: %rzCan't have details for token�any�_zInvalid symbol: %r�(�[r4F)r;rr�STRINGr'rZ evalStringrr Z LeafPattern�_type_of_literal�NAME�isupper� TOKEN_MAPr � startswith�getattrr"r(r:Z NodePatternr<)r$rIrJrFrrZcontent� subpatternrrrr>�s<        zPatternCompiler.compile_basiccCs|jtjksJ�t|j�S�N)rr�NUMBER�intr)r$rFrrrrD�szPatternCompiler.get_int)N)FF)N)r r rr%r+r(r>rDrrrrr &s   G #r )rRrPrYZTOKENcCs.|d��rtjS|tjvr&tj|SdSdS)Nr)�isalpharrRrZopmap)rrrrrQ�s    rQcCs>|\}}}}|s||jvr*tj|||d�Stj|||d�SdS)z9Converts raw node information to a Node or Leaf instance.)�contextN)Z number2symbolr ZNodeZLeaf)rZ raw_node_inforrr\r:rrrr#�s r#cCs t��|�SrX)r r+)rHrrrr+�sr+)�__doc__� __author__rZpgen2rrrrrr�r r � Exceptionr r�objectr rRrPrYrTrQr#r+rrrr�s"    �