
    z%i                         	 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e      Zd	 Z G d
 de      Zej"                  ej$                  ej&                  ddZd Zd Zd Zy)z#Guido van Rossum <guido@python.org>    N   )driverliteralstokentokenizeparsegrammar)pytree)pygramc                       e Zd Zy)PatternSyntaxErrorN)__name__
__module____qualname__     C/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/lib2to3/patcomp.pyr   r      s    r   r   c              #      K   	 t         j                  t         j                  t         j                  h}t	        j
                  t        j                  |       j                        }|D ]  }|\  }}}}}||vs|  y wN)	r   NEWLINEINDENTDEDENTr   generate_tokensioStringIOreadline)	inputskiptokens	quintupletypevaluestartend	line_texts	            r   tokenize_wrapperr&      sl     @MM5<<6D%%bkk%&8&A&ABF 	-6*eUCtOs   A4A>7A>c                   0    e Zd ZddZddZd ZddZd Zy)	PatternCompilerNc                    	 |+t         j                  | _        t         j                  | _        n>t        j                  |      | _        t        j                  | j                        | _        t         j                  | _	        t         j                  | _        t        j                  | j                  t              | _        y )N)convert)r   pattern_grammarr	   pattern_symbolssymsr   load_grammarSymbolspython_grammar	pygrammarpython_symbolspysymsDriverpattern_convert)selfgrammar_files     r   __init__zPatternCompiler.__init__(   s    	 !11DL..DI!..|<DLt||4DI..++mmDLL/Jr   c                    	 t        |      }	 | j                  j                  ||      }|r| j                  |      |fS | j                  |      S # t        j                  $ r}t        t        |            d d }~ww xY w)N)debug)r&   r   parse_tokensr   
ParseErrorr   strcompile_node)r6   r   r:   	with_treer   rootes          r   compile_patternzPatternCompiler.compile_pattern7   s    K!%(	7;;++F%+@D $$T*D00$$T**  	7$SV,$6	7s   A A>$A99A>c                    	 |j                   | j                  j                  k(  r|j                  d   }|j                   | j                  j                  k(  rx|j                  d d d   D cg c]  }| j                  |       }}t        |      dk(  r|d   S t        j                  |D cg c]  }|g c}dd      }|j                         S |j                   | j                  j                  k(  rd|j                  D cg c]  }| j                  |       }}t        |      dk(  r|d   S t        j                  |gdd      }|j                         S |j                   | j                  j                  k(  rC| j                  |j                  dd        }t        j                  |      }|j                         S d }|j                  }	t        |	      dk\  r4|	d   j                   t        j                  k(  r|	d   j                   }|	dd  }	d }
t        |	      dk\  r0|	d   j                   | j                  j"                  k(  r
|	d   }
|	d d }	| j                  |	|
      }|
|
j                  }|d   }|j                   t        j$                  k(  rd}t        j&                  }n|j                   t        j(                  k(  rd}t        j&                  }nV|j                   t        j*                  k(  r9| j-                  |d         x}}t        |      dk(  r| j-                  |d         }	 dk7  sdk7  r*|j                         }t        j                  |gg|      }|||_        |j                         S c c}w c c}w c c}w )Nr      r   minmax      )r!   r-   MatcherchildrenAlternativesr>   lenr
   WildcardPatternoptimizeAlternativeNegatedUnitcompile_basicNegatedPatternr   EQUALr"   RepeaterSTARHUGEPLUSLBRACEget_intname)r6   nodechaltsapunitspatternr\   nodesrepeatrL   childrF   rG   s                  r   r>   zPatternCompiler.compile_nodeC   s   	 99		)))==#D99		...48MM#A#4FGbD%%b)GDG4yA~Aw&&T':':qIA::<99		---59]]CrT&&r*CEC5zQQx&&wA1=A::<99		---((qr):;G%%g.A::< u:?uQx}};8>>D!"IEu:?uRy~~1C1CC2YF#2JE $$UF3HQKEzzUZZ'kkuzz)kku||+ !LL!55cx=A%,,x{3C ax3!8!**, 007)#3OGL!!s H (; Ds   +M4+
M9 M>c                    |d   }|j                   t        j                  k(  rGt        t	        j
                  |j                              }t        j                  t        |      |      S |j                   t        j                  k(  r|j                  }|j                         rB|t        vrt        d|z        |dd  rt        d      t        j                  t        |         S |dk(  rd }n8|j                  d      s't        | j                   |d       }|t        d|z        |dd  r#| j#                  |d   j$                  d         g}nd }t        j&                  |      S |j                  dk(  r| j#                  |d         S |j                  d	k(  r.| j#                  |d         }t        j(                  |ggdd
      S y )Nr   zInvalid token: %rr   zCan't have details for tokenany_zInvalid symbol: %r([rE   )r!   r   STRINGr=   r   
evalStringr"   r
   LeafPattern_type_of_literalNAMEisupper	TOKEN_MAPr   
startswithgetattrr3   r>   rL   NodePatternrO   )r6   rd   re   r]   r"   r!   content
subpatterns           r   rS   zPatternCompiler.compile_basic   s    Qx99$++DJJ78E%%&6u&=uEEYY%**$JJE}}	),-@5-HII9,-KLL)))E*:;;E>D))#."4;;t<D|01E1MNN9#00q1B1B11EFGG"G))$88ZZ3$$U1X..ZZ3**584J))J<.aQGG r   c                 ,    t        |j                        S r   )intr"   )r6   r]   s     r   r[   zPatternCompiler.get_int   s    4::r   r   )FF)r   r   r   r8   rB   r>   rS   r[   r   r   r   r(   r(   &   s    K
+E"N!Fr   r(   )rp   rl   NUMBERTOKENc                     | d   j                         rt        j                  S | t        j                  v rt        j                  |    S y )Nr   )isalphar   rp   r	   opmap)r"   s    r   ro   ro      s:    Qxzz	'--	}}U##r   c                     	 |\  }}}}|s|| j                   v rt        j                  |||      S t        j                  |||      S )N)context)number2symbolr
   NodeLeaf)r	   raw_node_infor!   r"   r   rL   s         r   r5   r5      sI    C%2"D%(47000{{47;;{{488r   c                 4    t               j                  |       S r   )r(   rB   )rc   s    r   rB   rB      s    ,,W55r   )
__author__r   pgen2r   r   r   r   r   r	    r
   r   	Exceptionr   r&   objectr(   rp   rl   rz   rr   ro   r5   rB   r   r   r   <module>r      sw    3
 
 E D  	 	If IZ ZZ||||	96r   