o
     JAf                     @   s   	 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#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/lib/python3.10/lib2to3/patcomp.pyr      s    r   c           	      c   sP    	 t jt jt jh}tt| j}|D ]}|\}}}}}||vr%|V  qd S 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   s\   	 |d u rt j| _t j| _nt|| _t | j| _t j| _	t j
| _tj| jtd| _d S )N)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   sd   	 t |}z
| jj||d}W n tjy# } ztt|d d }~ww |r-| ||fS | |S )N)debug)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                    sF  	 |j  jjkr|jd }|j  jjkr> fdd|jd d d D }t|dkr-|d S tjdd |D ddd}| S |j  jj	krf fdd|jD }t|dkrY|d S tj|gddd}| S |j  jj
kr |jdd  }t|}| S d }|j}t|d	kr|d j tjkr|d j}|dd  }d }t|dkr|d
 j  jjkr|d
 }|d d
 } ||}|d ur|j}	|	d }
|
j tjkrd}tj}n(|
j tjkrd}tj}n|
j tjkr |	d  }}t|	dkr |	d	 }|dks	|dkr| }tj|gg||d}|d ur||_| S )Nr   c                       g | ]}  |qS r   r*   .0Zchr&   r   r   
<listcomp>O       z0PatternCompiler.compile_node.<locals>.<listcomp>   r   c                 S   s   g | ]}|gqS r   r   )r1   ar   r   r   r3   R   s    minmaxc                    r.   r   r/   r0   r2   r   r   r3   V   r4         )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patternrG   nodesrepeatr=   childr8   r9   r   r2   r   r*   C   s`   




zPatternCompiler.compile_nodec                 C   s:  |d }|j tjkrtt|j}tt	||S |j tj
kry|j}| rB|tvr1td| |dd  r;tdtt| S |dkrId }n|ds_t| j|d }|d u r_td| |dd  rq| |d jd g}nd }t||S |jdkr| |d S |jd	kr| |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([r7   )r   r   STRINGr)   r   Z
evalStringr   r	   ZLeafPattern_type_of_literalNAMEisupper	TOKEN_MAPr   
startswithgetattrr$   r*   r=   ZNodePatternr?   )r&   rK   rL   rH   r   r   Zcontent
subpatternr   r   r   rA      s8   


zPatternCompiler.compile_basicc                 C   s
   t |jS r   )intr   )r&   rH   r   r   r   rF      s   
zPatternCompiler.get_intr   )FF)r   r   r   r'   r-   r*   rA   rF   r   r   r   r   r!   &   s    


G#r!   )rT   rR   NUMBERZTOKENc                 C   s*   | d   r	tjS | tjv rtj|  S d S )Nr   )isalphar   rT   r   Zopmap)r   r   r   r   rS      s
   

rS   c                 C   s<   	 |\}}}}|s|| j v rtj|||dS tj|||dS )N)context)Znumber2symbolr	   ZNodeZLeaf)r   Zraw_node_infor   r   r]   r=   r   r   r   r%      s
   r%   c                 C   s   t  | S r   )r!   r-   )rJ   r   r   r   r-      s   r-   )
__author__r   Zpgen2r   r   r   r   r   r    r	   r
   	Exceptionr   r    objectr!   rT   rR   r[   rV   rS   r%   r-   r   r   r   r   <module>   s$    
 		