\ddZdZddlZddlmZmZmZmZmZm Z ddl m Z ddl m Z Gdd e Zd ZGd d eZejejejdd ZdZdZdZdS)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)pygramceZdZdS)PatternSyntaxErrorN)__name__ __module__ __qualname__ ..\python\lib\lib2to3\patcomp.pyr r sDrr c#Ktjtjtjh}t jt j|j}|D]}|\}}}}}||vr|VdS)z6Tokenizes a string suppressing significant whitespace.N) rNEWLINEINDENTDEDENTrgenerate_tokensioStringIOreadline) inputskiptokens quintupletypevaluestartend line_texts rtokenize_wrapperr%ss M5< 6D  %bk%&8&8&A B BF -6*eUC t  OOOrc2eZdZddZd dZdZddZdZdS) PatternCompilerNcL|#tj|_tj|_n7t j||_tj|j|_tj|_ tj |_ t j |jt|_dS)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__(su  !1DL.DII!.|<z0PatternCompiler.compile_node..Os'GGGbD%%b))GGGrNrcg|]}|gSrr)rFas rrHz0PatternCompiler.compile_node..Rs':':':':':':rminmaxc:g|]}|SrrDrEs rrHz0PatternCompiler.compile_node..Vs'CCCrT&&r**CCCr)rPrR)r r,Matcherchildren Alternativeslenr WildcardPatternoptimize Alternative NegatedUnit compile_basicNegatedPatternUnitrEQUALr!RepeaterSTARHUGEPLUSLBRACERBRACEget_intname) r5nodealtspunitspatternrfnodesrepeatrTchildrMrNs ` rr=zPatternCompiler.compile_nodeCs] 9 ) ) )=#D 9 . . .GGGGDM##A#4FGGGD4yyA~~Aw&':':T':':':qIIIA::<<  9 - - -CCCCT]CCCE5zzQQx&wA1===A::<<  9 - - -((qrr):;;G%g..A::<< yDIN****  u::??uQx} ;;8>D!""IE u::??uRy~1CCC2YF#2#JE$$UF33  ;$)"44444HQKEzUZ''kuz))ku|++|(EL8888H //// LL!555cx==A%%,,x{33C axx3!88!**,, 07)#3OOO  GL!!!rct|dksJ|d}|jtjkrHt t j|j}tj t||S|jtj kr|j}| rS|tvrtd|z|ddrtdtj t|S|dkrd}n?|ds*t!|j|d}|td|z|ddr(||djdg}nd}tj||S|jdkr||dS|jd kr8|J||d}tj|ggdd SJ|) NrrzInvalid token: %rzCan't have details for tokenany_zInvalid symbol: %r([rL)rVr rSTRINGr<r evalStringr!r LeafPattern_type_of_literalNAMEisupper TOKEN_MAPr startswithgetattrr2r=rT NodePatternrW)r5rlrmrgr!r content subpatterns rr[zPatternCompiler.compile_basics5zzQQx 9 $ $+DJ7788E%&6u&=&=uEE E Y%* $ $JE}} 9 )),-@5-HIII9M,-KLLL))E*:;;;E>>DD))#..O"4;t<>>**5844J)J<.aQGGG GdrcX|jtjksJt|jSN)r rNUMBERintr!)r5rgs rrezPatternCompiler.get_ints%yEL((((4:rr)FF)rrrr7rAr=r[rerrrr'r'&sw K K K K + + + +E"E"E"N!!!!Frr')rxrtrTOKENc|dr tjS|tjvrtj|SdS)Nr)isalpharrxr opmap)r!s rrwrwsA Qxz '-  }U##trc|\}}}}|s ||jvrtj|||Stj|||S)z9Converts raw node information to a Node or Leaf instance.)context) number2symbolr NodeLeaf)r raw_node_infor r!rrTs rr4r4sS%2"D%(947000{47;;;;{48888rcDt|Sr)r'rA)rks rrArAs    , ,W 5 55r)__doc__ __author__rpgen2rrrrrr r r Exceptionr r%objectr'rxrtrrzrwr4rArrrrs=3  EDDDDDDDDDDDDDDD        IIIIIfIIIZZ||   99966666r