Ñò §ÚêLc@sdZdZddkZddklZlZlZlZlZl Z ddk l Z ddk l Z ei iei ieƒdƒZd efd „ƒYZd „Zd efd „ƒYZheid6eid6eid6dd6Zd„Zd„Zd„ZdS(sPattern compiler. The grammer is taken from PatternGrammar.txt. The compiler compiles a pattern to a pytree.*Pattern instance. s#Guido van Rossum iÿÿÿÿNi(tdrivertliteralsttokenttokenizetparsetgrammar(tpytree(tpygramsPatternGrammar.txttPatternSyntaxErrorcBseZRS((t__name__t __module__(((s'/usr/lib64/python2.6/lib2to3/patcomp.pyRsc csyttititifƒ}titi|ƒi ƒ}x9|D]1}|\}}}}}||jo |Vq@q@WdS(s6Tokenizes a string suppressing significant whitespace.N( tsetRtNEWLINEtINDENTtDEDENTRtgenerate_tokensRtgenerate_linestnext( tinputtskipttokenst quintuplettypetvaluetstarttendt line_text((s'/usr/lib64/python2.6/lib2to3/patcomp.pyttokenize_wrapper s tPatternCompilercBs>eZed„Zed„Zd„Zdd„Zd„Z RS(cCs^ti|ƒ|_ti|iƒ|_ti|_ti|_ ti |idt ƒ|_dS(s^Initializer. Takes an optional alternative filename for the pattern grammar. tconvertN( Rt load_grammarRRtSymbolstsymstpython_grammart pygrammartpython_symbolstpysymstDrivertpattern_convert(tselft grammar_file((s'/usr/lib64/python2.6/lib2to3/patcomp.pyt__init__,s   cCsbt|ƒ}y|ii|d|ƒ}Wn*tij o}tt|ƒƒ‚nX|i|ƒS(s=Compiles a pattern string to a nested pytree.*Pattern object.tdebug(RRt parse_tokensRt ParseErrorRtstrt compile_node(R'RR*Rtrootte((s'/usr/lib64/python2.6/lib2to3/patcomp.pytcompile_pattern7s  cCs|i|iijo|id}n|i|iijošg}|iddd…D]}||i|ƒqX~}t|ƒdjo |dStig}|D]}||gq¤~ddddƒ}|i ƒS|i|ii jorg}|iD]}||i|ƒqû~} t| ƒdjo | dSti| gddddƒ}|i ƒS|i|ii jo0|i |idƒ} ti | ƒ}|i ƒSd} |i} t| ƒdjo2| ditijo| di} | d} nd} t| ƒdjo2| di|iijo| d} | d } n|i | | ƒ} | dj o| i}|d}|itijod}ti}n|itijod}ti}nY|itijoE|i|dƒ}}t|ƒd jo|i|dƒ}qn|djp |djo1| i ƒ} ti| ggd|d|ƒ} qin| dj o | | _n| i ƒS( sXCompiles a node, recursively. This is one big switch on the node type. iNiitmintmaxiiÿÿÿÿi(RR tMatchertchildrent AlternativesR.tlenRtWildcardPatterntoptimizet Alternativet NegatedUnitt compile_basictNegatedPatterntNoneRtEQUALRtRepeatertSTARtHUGEtPLUStLBRACEtget_inttname(R'tnodet_[1]tchtaltst_[2]tatpt_[3]tunitstpatternRFtnodestrepeatR5tchildR2R3((s'/usr/lib64/python2.6/lib2to3/patcomp.pyR.@s^: 9 -    * -       )  cCsÓ|d}|itijo/tti|iƒƒ}tit |ƒ|ƒS|iti jo |i}|i ƒoN|t jot d|ƒ‚n|dot dƒ‚ntit |ƒS|djo d}nK|idƒp:t|i|dƒ}|djot d|ƒ‚q$n|do!|i|didƒg}nd}ti||ƒSnf|idjo|i|dƒS|id jo3|i|dƒ}ti|ggd dd dƒSdS( NisInvalid token: %risCan't have details for tokentanyt_sInvalid symbol: %rt(t[R2R3(RRtSTRINGtunicodeRt evalStringRRt LeafPatternt_type_of_literaltNAMEtisuppert TOKEN_MAPRR>t startswithtgetattrR$R.R5t NodePatternR8(R'RQRRRGRRtcontentt subpattern((s'/usr/lib64/python2.6/lib2to3/patcomp.pyR<‡s8         ! cCs t|iƒS(N(tintR(R'RG((s'/usr/lib64/python2.6/lib2to3/patcomp.pyREªsN( R R t_PATTERN_GRAMMAR_FILER)tFalseR1R.R>R<RE(((s'/usr/lib64/python2.6/lib2to3/patcomp.pyR*s  G #R]RXtNUMBERtTOKENcCs=|diƒotiS|tijo ti|SdSdS(Ni(tisalphaRR]RtopmapR>(R((s'/usr/lib64/python2.6/lib2to3/patcomp.pyR\¶s  cCsZ|\}}}}|p||ijoti||d|ƒSti||d|ƒSdS(s9Converts raw node information to a Node or Leaf instance.tcontextN(t number2symbolRtNodetLeaf(Rt raw_node_infoRRRlR5((s'/usr/lib64/python2.6/lib2to3/patcomp.pyR&¿scCstƒi|ƒS(N(RR1(RP((s'/usr/lib64/python2.6/lib2to3/patcomp.pyR1Ès(t__doc__t __author__tostpgen2RRRRRRtRRtpathtjointdirnamet__file__Rft ExceptionRRtobjectRR]RXRhR>R_R\R&R1(((s'/usr/lib64/python2.6/lib2to3/patcomp.pyt s" .  †