§
    ZQdŽ  ã                   óÊ   — 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dS )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dS )ÚPatternSyntaxErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    ú&/usr/lib/python3.11/lib2to3/patcomp.pyr   r      s   € € € € € Ø€Dr   r   c              #   óÐ   K  — t           j        t           j        t           j        h}t	          j        t          j        | ¦  «        j        ¦  «        }|D ]}|\  }}}}}||vr|V — ŒdS )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%      ss   è è € åŒM�5œ<­¬Ð6€DÝÔ%¥b¤k°%Ñ&8Ô&8Ô&AÑBÔB€FØð ð ˆ	Ø-6Ñ*ˆˆe�U˜C Ø�tÐÐØˆOˆOˆOøðð r   c                   ó2   — e Zd Zdd„Zd	d„Zd„ Zdd„Zd„ ZdS )
ÚPatternCompilerNc                 óL  — |€#t           j        | _        t           j        | _        n7t          j        |¦  «        | _        t          j        | j        ¦  «        | _        t           j        | _	        t           j
        | _        t          j        | j        t          ¬¦  «        | _        dS )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__(   su   € ð
 ÐÝ!Ô1ˆDŒLÝÔ.ˆDŒIˆIå!Ô.¨|Ñ<Ô<ˆDŒLÝœ t¤|Ñ4Ô4ˆDŒIÝÔ.ˆŒÝÔ+ˆŒÝ”m D¤L½/ÐJÑJÔJˆŒˆˆr   Fc                 ó   — t          |¦  «        }	 | j                             ||¬¦  «        }n4# t          j        $ r"}t          t          |¦  «        ¦  «        d‚d}~ww xY w|r|                      |¦  «        |fS |                      |¦  «        S )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ˆDøÝÔð 	7ð 	7ð 	7Ý$¥S¨¡V¤VÑ,Ô,°$Ð6øøøøð	7øøøàð 	+Ø×$Ò$ TÑ*Ô*¨DÐ0Ð0à×$Ò$ TÑ*Ô*Ð*s   ‘. ®A½AÁAc                 ó  ‡ — |j         ‰ j        j        k    r|j        d         }|j         ‰ j        j        k    rlˆ fd„|j        ddd…         D ¦   «         }t          |¦  «        dk    r|d         S t          j        d„ |D ¦   «         dd¬¦  «        }|                     ¦   «         S |j         ‰ j        j	        k    rZˆ fd„|j        D ¦   «         }t          |¦  «        dk    r|d         S t          j        |gdd¬¦  «        }|                     ¦   «         S |j         ‰ j        j
        k    rJ‰                      |j        dd…         ¦  «        }t          j        |¦  «        }|                     ¦   «         S |j         ‰ j        j        k    sJ ‚d}|j        }t          |¦  «        d	k    r2|d         j         t          j        k    r|d         j        }|dd…         }d}t          |¦  «        dk    r-|d
         j         ‰ j        j        k    r|d
         }|dd
…         }‰                      ||¦  «        }|��:|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    r||	d
         j         t          j        k    sJ ‚t          |	¦  «        dv sJ ‚‰                      |	d         ¦  «        x}}t          |	¦  «        dk    r‰                      |	d	         ¦  «        }nJ ‚|dk    s|dk    r-|                     ¦   «         }t          j        |gg||¬¦  «        }|�||_        |                     ¦   «         S )zXCompiles a node, recursively.

        This is one big switch on the node type.
        r   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   ©r=   ©Ú.0Úchr5   s     €r   ú
<listcomp>z0PatternCompiler.compile_node.<locals>.<listcomp>O   s'   ø€ ÐGÐGÐG¨b�D×%Ò% bÑ)Ô)ÐGÐGÐGr   Né   r   c                 ó   — g | ]}|g‘ŒS r   r   )rF   Úas     r   rH   z0PatternCompiler.compile_node.<locals>.<listcomp>R   s   € Ð':Ð':Ð':°¨¨Ð':Ð':Ð':r   ©ÚminÚmaxc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   rD   rE   s     €r   rH   z0PatternCompiler.compile_node.<locals>.<listcomp>V   s'   ø€ ÐCÐCÐC¨r�T×&Ò& rÑ*Ô*ÐCÐCÐCr   é   éÿÿÿÿ)rP   é   rR   )r    r,   ÚMatcherÚchildrenÚAlternativesÚlenr
   ÚWildcardPatternÚoptimizeÚAlternativeÚNegatedUnitÚcompile_basicÚNegatedPatternÚUnitr   ÚEQUALr!   ÚRepeaterÚSTARÚHUGEÚPLUSÚLBRACEÚRBRACEÚget_intÚname)r5   ÚnodeÚaltsÚpÚunitsÚpatternrf   ÚnodesÚrepeatrT   ÚchildrM   rN   s   `            r   r=   zPatternCompiler.compile_nodeC   s]  ø€ ð Œ9˜œ	Ô)Ò)Ð)Ø”= Ô#ˆDàŒ9˜œ	Ô.Ò.Ð.àGÐGÐGÐG°D´MÀ#À#ÀAÀ#Ô4FÐGÑGÔGˆDÝ�4‰yŒy˜AŠ~ˆ~Ø˜A”w�ÝÔ&Ð':Ð':°TÐ':Ñ':Ô':ÀÀqÐIÑIÔIˆAØ—:’:‘<”<ÐàŒ9˜œ	Ô-Ò-Ð-ØCÐCÐCÐC°T´]ÐCÑCÔCˆEÝ�5‰zŒz˜QŠˆØ˜Q”x�ÝÔ&¨ w°A¸1Ð=Ñ=Ô=ˆAØ—:’:‘<”<ÐàŒ9˜œ	Ô-Ò-Ð-Ø×(Ò(¨¬°q°r°rÔ):Ñ;Ô;ˆGÝÔ% gÑ.Ô.ˆAØ—:’:‘<”<ÐàŒy˜DœIœNÒ*Ð*Ð*Ð*àˆØ”ˆÝˆu‰:Œ:˜Š?ˆ?˜u Qœxœ}µ´Ò;Ð;Ø˜”8”>ˆDØ˜!˜"˜"”IˆEØˆÝˆu‰:Œ:˜Š?ˆ?˜u Rœyœ~°´Ô1CÒCÐCØ˜2”YˆFØ˜#˜2˜#”JˆEð ×$Ò$ U¨FÑ3Ô3ˆàÑØ”; $¤)Ô"4Ò4Ð4Ð4Ð4Ø”ˆHØ˜Q”KˆEØŒz�UœZÒ'Ð'Ø�Ý”k��Ø”�uœzÒ)Ð)Ø�Ý”k��Ø”�uœ|Ò+Ð+Ø ”|Ô(­E¬LÒ8Ð8Ð8Ð8Ý˜H™œ¨Ð/Ð/Ð/Ð/Ø ŸLšL¨°!¬Ñ5Ô5Ð5��cÝ�x‘=”= AÒ%Ð%ØŸ,š, x°¤{Ñ3Ô3�Cøà�Ø�aŠxˆx˜3 !š8˜8Ø!×*Ò*Ñ,Ô,�Ý Ô0°7°)°À#È3ÐOÑOÔO�àÐØˆGŒLØ×ÒÑ!Ô!Ð!r   c                 ó  — t          |¦  «        dk    sJ ‚|d         }|j        t          j        k    rHt	          t          j        |j        ¦  «        ¦  «        }t          j	        t          |¦  «        |¦  «        S |j        t          j        k    rÿ|j        }|                     ¦   «         rS|t          vrt          d|z  ¦  «        ‚|dd …         rt          d¦  «        ‚t          j	        t          |         ¦  «        S |dk    rd }n?|                     d¦  «        s*t!          | j        |d ¦  «        }|€t          d|z  ¦  «        ‚|dd …         r(|                      |d         j        d         ¦  «        g}nd }t          j        ||¦  «        S |j        dk    r|                      |d         ¦  «        S |j        d	k    r8|�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ú(ú[rL   )rV   r    r   ÚSTRINGr<   r   Ú
evalStringr!   r
   ÚLeafPatternÚ_type_of_literalÚNAMEÚisupperÚ	TOKEN_MAPr   Ú
startswithÚgetattrr2   r=   rT   ÚNodePatternrW   )r5   rl   rm   rg   r!   r    ÚcontentÚ
subpatterns           r   r[   zPatternCompiler.compile_basicŠ   sù  € å�5‰zŒz˜QŠˆˆˆØ�QŒxˆØŒ9�œÒ$Ð$Ý�Ô+¨D¬JÑ7Ô7Ñ8Ô8ˆEÝÔ%Õ&6°uÑ&=Ô&=¸uÑEÔEÐEØŒY�%œ*Ò$Ð$Ø”JˆEØ�}Š}‰Œð 9Ø¥	Ð)Ð)Ý,Ð-@À5Ñ-HÑIÔIÐIØ˜˜˜”9ð MÝ,Ð-KÑLÔLÐLÝÔ)­)°EÔ*:Ñ;Ô;Ð;à˜E’>�>Ø�D�DØ×)Ò)¨#Ñ.Ô.ð OÝ" 4¤;°°tÑ<Ô<�DØ�|Ý0Ð1EÈÑ1MÑNÔNÐNØ˜˜˜”9ð #Ø#×0Ò0°°q´Ô1BÀ1Ô1EÑFÔFÐG�G�Gà"�GÝÔ)¨$°Ñ8Ô8Ð8ØŒZ˜3ÒÐØ×$Ò$ U¨1¤XÑ.Ô.Ð.ØŒZ˜3ÒÐØ�>�>�>Ø×*Ò*¨5°¬8Ñ4Ô4ˆJÝÔ)¨J¨<¨.¸aÀQÐGÑGÔGÐGØ�dÑÔÐr   c                 óX   — |j         t          j        k    sJ ‚t          |j        ¦  «        S ©N)r    r   ÚNUMBERÚintr!   )r5   rg   s     r   re   zPatternCompiler.get_int­   s%   € ØŒy�EœLÒ(Ð(Ð(Ð(Ý�4”:‰ŒÐr   r�   )FF)r   r   r   r7   rA   r=   r[   re   r   r   r   r'   r'   &   sw   € € € € € ðKð Kð Kð Kð
+ð 
+ð 
+ð 
+ðE"ð E"ð E"ðN!ð !ð !ð !ðFð ð ð ð r   r'   )rx   rt   r‚   ÚTOKENc                 ó’   — | d                               ¦   «         rt          j        S | t          j        v rt          j        |          S d S )Nr   )Úisalphar   rx   r	   Úopmap)r!   s    r   rw   rw   ¹   sA   € ØˆQ„x×ÒÑÔð ÝŒzÐØ	•'”-Ð	Ð	ÝŒ}˜UÔ#Ð#àˆtr   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‰   rT   s         r   r4   r4   Â   sS   € à%2Ñ"€Dˆ%�˜(Øð 9�4˜7Ô0Ð0Ð0ÝŒ{˜4 °7Ð;Ñ;Ô;Ð;åŒ{˜4 °Ð8Ñ8Ô8Ð8r   c                 óD   — t          ¦   «                              | ¦  «        S r�   )r'   rA   )rk   s    r   rA   rA   Ë   s   € ÝÑÔ×,Ò,¨WÑ5Ô5Ð5r   )Ú__doc__Ú
__author__r   Úpgen2r   r   r   r   r   r	   Ú r
   r   Ú	Exceptionr   r%   Úobjectr'   rx   rt   r‚   rz   rw   r4   rA   r   r   r   ú<module>r•      s=  ððð ð 3€
ð 
€	€	€	ð EÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ Dð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð	ð 	ð 	ð 	ð 	˜ñ 	ô 	ð 	ðð ð ðIð Ið Ið Ið I�fñ Iô Ið IðZ ”ZØ”|Ø”|Øðð €	ðð ð ð9ð 9ð 9ð6ð 6ð 6ð 6ð 6r   