gdZdZddlZddlmZmZmZmZmZm Z ddl m Z ddl m Z Gdd e Zd ZGd d eZej$ej&ej(dd ZdZdZdZy)zPattern compiler. The grammar is taken from PatternGrammar.txt. The compiler compiles a pattern to a pytree.*Pattern instance. z#Guido van Rossum N)driverliteralstokentokenizeparsegrammar)pytree)pygramc eZdZy)PatternSyntaxErrorN)__name__ __module__ __qualname__6/opt/alt/python312/lib64/python3.12/lib2to3/patcomp.pyr r srr c#Ktjtjtjh}t j t j|j}|D]}|\}}}}}||vs|yw)z6Tokenizes a string suppressing significant whitespace.N) rNEWLINEINDENTDEDENTrgenerate_tokensioStringIOreadline) inputskiptokens quintupletypevaluestartend line_texts rtokenize_wrapperr%sd MM5<< 6D  % %bkk%&8&A&A BF -6*eUC t Os A3A=6A=c0eZdZddZddZdZddZdZy) 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_symbolssymsr load_grammarSymbolspython_grammar pygrammarpython_symbolspysymsDriverpattern_convert)self grammar_files r__init__zPatternCompiler.__init__(sz  !11DL..DI!..|>D!"IE u:?uRy~~1C1CC2YF#2JE$$UF3  HQKEzzUZZ'kkuzz)kku||+!LL!55cx=A%,,x{3Cax3!8!**, 007)#3O  GL!!sH(;Ds*M3* M8?M=c|d}|jtjk(rGtt j |j }tjt||S|jtjk(r|j }|jrB|tvrtd|z|ddr tdtjt|S|dk(rd}n8|jds't|j |d}|td|z|ddr#|j#|dj$dg}nd}tj&|S|j dk(r|j#|dS|j d k(r.|j#|d}tj(|ggdd Sy) NrzInvalid token: %rrzCan't have details for tokenany_zInvalid symbol: %r([rD)r rSTRINGr<r evalStringr!r LeafPattern_type_of_literalNAMEisupper TOKEN_MAPr startswithgetattrr2r=rK NodePatternrN)r5rcrdr\r!r content subpatterns rrRzPatternCompiler.compile_basicsQx 99 $++DJJ78E%%&6u&=uE E YY%** $JJE}} ),-@5-HII9,-KLL)))E*:;;E>D))#."4;;trsw3  ED  IfIZZZ||||  96r