Ë
    #´˜jŽ  ã                   óÚ   — d Z 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�Pattern compiler.

The grammar is taken from PatternGrammar.txt.

The compiler compiles a pattern to a pytree.*Pattern instance.
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__© ó    ú!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)z6Tokenizes a string suppressing significant whitespace.N)	r   ÚNEWLINEÚINDENTÚDEDENTr   Úgenerate_tokensÚioÚStringIOÚreadline)	ÚinputÚskipÚtokensÚ	quintupleÚtypeÚvalueÚstartÚendÚ	line_texts	            r   Útokenize_wrapperr%      sd   è ø€ ä�M‰Mœ5Ÿ<™<¬¯©Ð6€DÜ×%Ñ%¤b§k¡k°%Ó&8×&AÑ&AÓB€FÛˆ	Ø-6Ñ*ˆˆe�U˜C Ø�tÒØ‹Oñ ùs   ‚A3A=Á6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)z^Initializer.

        Takes an optional alternative filename for the pattern grammar.
        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__(   sz   € ð
 ÐÜ!×1Ñ1ˆDŒLÜ×.Ñ.ˆD�Iä!×.Ñ.¨|Ó<ˆDŒLÜŸ™ t§|¡|Ó4ˆDŒIÜ×.Ñ.ˆŒÜ×+Ñ+ˆŒÜ—m‘m D§L¡L¼/ÔJˆ�r   c                 ó   — t        |«      }	 | j                  j                  ||¬«      }|r| j                  |«      |fS | j                  |«      S # t        j                  $ r}t        t        |«      «      d‚d}~ww xY w)z=Compiles a pattern string to a nested pytree.*Pattern object.)ÚdebugN)r%   r   Úparse_tokensr   Ú
ParseErrorr   ÚstrÚcompile_node)r5   r   r9   Ú	with_treer   ÚrootÚes          r   Úcompile_patternzPatternCompiler.compile_pattern7   s   € ä! %Ó(ˆð	7Ø—;‘;×+Ñ+¨F¸%Ð+Ó@ˆDñ Ø×$Ñ$ TÓ*¨DÐ0Ð0à×$Ñ$ TÓ*Ð*øô ×Ñò 	7Ü$¤S¨£VÓ,°$Ð6ûð	7ús   �A ÁA=Á#A8Á8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 |j                   | j                  j                  k(  sJ ‚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                  |	|
«      }|
��S|
j                   | j                  j$                  k(  sJ ‚|
j                  }|d   }|j                   t        j&                  k(  rd}t        j(                  }n¹|j                   t        j*                  k(  rd}t        j(                  }n‰|j                   t        j,                  k(  rj|d   j                   t        j.                  k(  sJ ‚t        |«      dv sJ ‚| j1                  |d   «      x}}t        |«      d	k(  r| j1                  |d   «      }nJ ‚|dk7  s|dk7  r*|j                  «       }t        j                  |gg||¬«      }|�||_        |j                  «       S c c}w c c}w c c}w )
zXCompiles a node, recursively.

        This is one big switch on the node type.
        r   Né   r   ©ÚminÚmaxé   éÿÿÿÿ)rG   é   rI   )r    r,   ÚMatcherÚchildrenÚAlternativesr=   Úlenr
   ÚWildcardPatternÚoptimizeÚAlternativeÚNegatedUnitÚcompile_basicÚNegatedPatternÚUnitr   ÚEQUALr!   ÚRepeaterÚSTARÚHUGEÚPLUSÚLBRACEÚRBRACEÚget_intÚname)r5   ÚnodeÚchÚaltsÚaÚpÚunitsÚpatternr]   ÚnodesÚrepeatrK   ÚchildrE   rF   s                  r   r=   zPatternCompiler.compile_nodeC   se  € ð �9‰9˜Ÿ	™	×)Ñ)Ò)Ø—=‘= Ñ#ˆDà�9‰9˜Ÿ	™	×.Ñ.Ò.à48·M±MÁ#ÀAÀ#Ò4FÓGÑ4F¨b�D×%Ñ% bÕ)Ð4FˆDÐGÜ�4‹y˜AŠ~Ø˜A‘w�Ü×&Ñ&±TÓ':±T°¨ª°TÑ':ÀÀqÔIˆAØ—:‘:“<Ðà�9‰9˜Ÿ	™	×-Ñ-Ò-Ø59·]²]ÓC±]¨r�T×&Ñ& rÕ*°]ˆEÐCÜ�5‹z˜QŠØ˜Q‘x�Ü×&Ñ&¨ w°A¸1Ô=ˆAØ—:‘:“<Ðà�9‰9˜Ÿ	™	×-Ñ-Ò-Ø×(Ñ(¨¯©°q°rÐ):Ó;ˆGÜ×%Ñ% gÓ.ˆAØ—:‘:“<Ðà�y‰y˜DŸI™IŸN™NÒ*Ð*Ð*àˆØ—‘ˆÜˆu‹:˜Š?˜u Q™xŸ}™}´·±Ò;Ø˜‘8—>‘>ˆDØ˜!˜"�IˆEØˆÜˆu‹:˜Š?˜u R™yŸ~™~°·±×1CÑ1CÒCØ˜2‘YˆFØ˜#˜2�JˆEð ×$Ñ$ U¨FÓ3ˆàÑØ—;‘; $§)¡)×"4Ñ"4Ò4Ð4Ð4Ø—‘ˆHØ˜Q‘KˆEØ�z‰zœUŸZ™ZÒ'Ø�Ü—k‘k‘Ø—‘œuŸz™zÒ)Ø�Ü—k‘k‘Ø—‘œuŸ|™|Ò+Ø ‘|×(Ñ(¬E¯L©LÒ8Ð8Ð8Ü˜H›¨Ñ/Ð/Ð/Ø ŸL™L¨°!©Ó5Ð5��cÜ�x“= AÒ%ØŸ,™, x°¡{Ó3‘Cà�uØ�aŠx˜3 !š8Ø!×*Ñ*Ó,�Ü ×0Ñ0°7°)°À#È3ÔO�àÐØˆGŒLØ×ÑÓ!Ð!ùòs Hùò (;ùò Ds   Á*O1Â*
O6Ã?O;c                 óÀ  — t        |«      dk\  sJ ‚|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(  r2|�J ‚| j%                  |d   «      }t        j*                  |ggdd¬
«      S J |«       ‚)Nr   r   zInvalid token: %rzCan't have details for tokenÚanyÚ_zInvalid symbol: %rÚ(Ú[rD   )rM   r    r   ÚSTRINGr<   r   Ú
evalStringr!   r
   ÚLeafPatternÚ_type_of_literalÚNAMEÚisupperÚ	TOKEN_MAPr   Ú
startswithÚgetattrr2   r=   rK   ÚNodePatternrN   )r5   re   rf   r^   r!   r    ÚcontentÚ
subpatterns           r   rR   zPatternCompiler.compile_basicŠ   s¶  € ä�5‹z˜QŠÐˆØ�Q‰xˆØ�9‰9œŸ™Ò$Üœ×+Ñ+¨D¯J©JÓ7Ó8ˆEÜ×%Ñ%Ô&6°uÓ&=¸uÓEÐEØ�Y‰Yœ%Ÿ*™*Ò$Ø—J‘JˆEØ�}‰}ŒØ¤	Ñ)Ü,Ð-@À5Ñ-HÓIÐIØ˜˜‘9Ü,Ð-KÓLÐLÜ×)Ñ)¬)°EÑ*:Ó;Ð;à˜E’>Ø‘DØ×)Ñ)¨#Ô.Ü" 4§;¡;°°tÓ<�DØ�|Ü0Ð1EÈÑ1MÓNÐNØ˜˜‘9Ø#×0Ñ0°°q±×1BÑ1BÀ1Ñ1EÓFÐG‘Gà"�GÜ×)Ñ)¨$°Ó8Ð8Ø�Z‰Z˜3ÒØ×$Ñ$ U¨1¡XÓ.Ð.Ø�Z‰Z˜3ÒØ�>Ð!�>Ø×*Ñ*¨5°©8Ó4ˆJÜ×)Ñ)¨J¨<¨.¸aÀQÔGÐGØ�dÓˆur   c                 ój   — |j                   t        j                  k(  sJ ‚t        |j                  «      S ©N)r    r   ÚNUMBERÚintr!   )r5   r^   s     r   r\   zPatternCompiler.get_int­   s&   € Ø�y‰yœEŸL™LÒ(Ð(Ð(Ü�4—:‘:‹Ðr   rz   )FF)r   r   r   r7   rA   r=   rR   r\   r   r   r   r'   r'   &   s   „ óKó
+òE"óN!óFr   r'   )rq   rm   r{   ÚTOKENc                 ó”   — | d   j                  «       rt        j                  S | t        j                  v rt        j                  |    S y )Nr   )Úisalphar   rq   r	   Úopmap)r!   s    r   rp   rp   ¹   s:   € ØˆQ�x×ÑÔÜ�z‰zÐØ	”'—-‘-Ñ	Ü�}‰}˜UÑ#Ð#àr   c                 ó�   — |\  }}}}|s|| j                   v rt        j                  |||¬«      S t        j                  |||¬«      S )z9Converts raw node information to a Node or Leaf instance.)Úcontext)Únumber2symbolr
   ÚNodeÚLeaf)r	   Úraw_node_infor    r!   r‚   rK   s         r   r4   r4   Â   sF   € à%2Ñ"€Dˆ%�˜(Ù�4˜7×0Ñ0Ñ0Ü�{‰{˜4 °7Ô;Ð;ä�{‰{˜4 °Ô8Ð8r   c                 ó4   — t        «       j                  | «      S rz   )r'   rA   )rd   s    r   rA   rA   Ë   s   € ÜÓ×,Ñ,¨WÓ5Ð5r   )Ú__doc__Ú
__author__r   Úpgen2r   r   r   r   r   r	   Ú r
   r   Ú	Exceptionr   r%   Úobjectr'   rq   rm   r{   rs   rp   r4   rA   r   r   r   Ú<module>rŽ      sw   ðñð 3€
ó 
÷ E× Dõ Ý ô	˜ô 	òôI�fô IðZ —Z‘ZØ—|‘|Ø—|‘|Øñ€	òò9ó6r   