Ë á•\V„Ž]ãóÚ—dZdZddlZddlmZmZmZmZmZm Z ddl m Z ddl m Z Gd„d e «Zd „ZGd „d e«Zej$ej&ej(dd œZd„Zd„Zd„Zy)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ó —eZdZy)ÚPatternSyntaxErrorN)Ú__name__Ú __module__Ú __qualname__©óú&/usr/lib/python3.12/lib2to3/patcomp.pyr r s„Ørr c#óþK—tjtjtjh}t j t j|«j«}|D]}|\}}}}}||vsŒ|–—Œ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=Á6A=có0—eZdZdd„Zdd„Zd„Zdd„Zd„Zy) ÚPatternCompilerNcó‚—|€+tj|_tj|_n>t j |«|_tj|j«|_tj|_ tj|_ t j|jt¬«|_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__zPatternCompiler.__init__(sz€ð Ð Ü!×1Ñ1ˆDŒLÜ×.Ñ.ˆD�Iä!×.Ñ.¨|Ó<ˆDŒLÜŸ™ t§|¡|Ó4ˆDŒIÜ×.Ñ.ˆŒÜ×+Ñ+ˆŒ Ü—m‘m D§L¡L¼/ÔJˆ� rcó—t|«} |jj||¬«}|r|j|«|fS|j|«S#tj$r}t t |««d‚d}~wwxYw)z=Compiles a pattern string to a nested pytree.*Pattern object.)ÚdebugN)r%rÚ parse_tokensrÚ ParseErrorr ÚstrÚ compile_node)r5rr9Ú with_treerÚrootÚes rÚcompile_patternzPatternCompiler.compile_pattern7s€ä! %Ó(ˆð 7Ø—;‘;×+Ñ+¨F¸%Ð+Ó@ˆDñ Ø×$Ñ$ TÓ*¨DÐ0Ð 0à×$Ñ$ TÓ*Ð *øô ×Ñò 7Ü$¤S¨£VÓ,°$Ð 6ûð 7ús�AÁA=Á#A8Á8A=có—|j|jjk(r|jd}|j|jjk(rx|jddd…D�cgc]}|j |«‘Œ}}t |«dk(r|dStj|D�cgc]}|g‘Œc}dd¬«}|j«S|j|jjk(rd|jD�cgc]}|j |«‘Œ}}t |«dk(r|dStj|gdd¬«}|j«S|j|jjk(rC|j|jdd«}tj|«}|j«S|j|jjk(sJ‚d}|j} t | «dk\r4| djtj k(r| dj"}| dd} d} t | «dk\r0| dj|jj$k(r | d} | dd} |j| | «}| ��S| j|jj$k(sJ‚| j} | d} | jtj&k(rd} tj(}n¹| jtj*k(rd} tj(}n‰| jtj,k(rj| djtj.k(sJ‚t | «dvsJ‚|j1| d«x} }t | «d k(r|j1| d«}nJ‚| dk7s|dk7r*|j«}tj|gg| |¬«}|�||_|j«Scc}wcc}wcc}w) zXCompiles a node, recursively. This is one big switch on the node type. rNé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ÚchildrErFs rr=zPatternCompiler.compile_nodeCse€ð �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Ø×ÑÓ!Ð!ùòsHùò(;ùòDsÁ*O1Â* O6Ã?O;cóÀ—t|«dk\sJ‚|d}|jtjk(rGt t j |j««}tjt|«|«S|jtjk(rÞ|j}|j«rB|tvrtd|z«‚|ddr td«‚tjt|«S|dk(rd}n8|jd«s't!|j"|d«}|€td|z«‚|ddr#|j%|dj&d«g}nd}tj(|«S|jdk(r|j%|d«S|jd k(r2|�J‚|j%|d«}tj*|ggdd¬ «SJ|«‚) NrrzInvalid token: %rzCan't have details for tokenÚanyÚ_zInvalid symbol: %rÚ(Ú[rD)rMr rÚSTRINGr<rÚ evalStringr!r Ú LeafPatternÚ_type_of_literalÚNAMEÚisupperÚ TOKEN_MAPr Ú startswithÚgetattrr2r=rKÚ NodePatternrN)r5rerfr^r!r ÚcontentÚ subpatterns rrRzPatternCompiler.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Óˆurcój—|jtjk(sJ‚t|j«S©N)r rÚNUMBERÚintr!)r5r^s rr\zPatternCompiler.get_int­s&€Ø�y‰yœEŸL™LÒ(Ð(Ð(Ü�4—:‘:‹Ðrrz)FF)rrrr7rAr=rRr\rrrr'r'&s„ó Kó +òE"óN!óFrr')rqrmr{ÚTOKENcó”—|dj«rtjS|tjvrtj|Sy)Nr)Úisalpharrqr Úopmap)r!s rrprp¹s:€Ø ˆQ�x×ÑÔÜ�z‰zÐØ ”'—-‘-Ñ Ü�}‰}˜UÑ#Ð#àrcó�—|\}}}}|s||jvrtj|||¬«Stj|||¬«S)z9Converts raw node information to a Node or Leaf instance.)Úcontext)Ú number2symbolr ÚNodeÚLeaf)r Ú raw_node_infor r!r‚rKs rr4r4ÂsF€à%2Ñ"€Dˆ%�˜(Ù�4˜7×0Ñ0Ñ0Ü�{‰{˜4 °7Ô;Ð;ä�{‰{˜4 °Ô8Ð8rcó4—t«j|«Srz)r'rA)rds rrArAËs€Ü Ó × ,Ñ ,¨WÓ 5Ð5r)Ú__doc__Ú __author__rÚpgen2rrrrrr Úr r Ú Exceptionr r%Úobjectr'rqrmr{rsrpr4rArrrÚrŽswðñð3€ ó ÷E×DõÝô ˜ô òôI�fôIðZ—Z‘ZØ—|‘|Ø—|‘|Øñ € ò ò9ó6r