eaiovnaovbqoebvqoeavibavo  V~gc@sdZdZddlZddlmZmZmZmZmZm Z ddl m Z ddl m Z de fd YZd Zd efd YZiejd 6ejd6ejd6dd6ZdZdZdZdS(sPattern compiler. The grammar is taken from PatternGrammar.txt. The compiler compiles a pattern to a pytree.*Pattern instance. s#Guido van Rossum iNi(tdrivertliteralsttokenttokenizetparsetgrammar(tpytree(tpygramtPatternSyntaxErrorcBseZRS((t__name__t __module__(((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pyRsc cswttjtjtjf}tjtj|j}x7|D]/}|\}}}}}||kr@|Vq@q@WdS(s6Tokenizes a string suppressing significant whitespace.N( tsetRtNEWLINEtINDENTtDEDENTRtgenerate_tokenstStringIOtreadline( tinputtskipttokenst quintuplettypetvaluetstarttendt line_text((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pyttokenize_wrappers   tPatternCompilercBsAeZddZeedZdZddZdZRS(cCs|dkr'tj|_tj|_n'tj||_tj|j|_tj |_ tj |_ tj |jdt|_dS(s^Initializer. Takes an optional alternative filename for the pattern grammar. tconvertN(tNoneRtpattern_grammarRtpattern_symbolstsymsRt load_grammartSymbolstpython_grammart pygrammartpython_symbolstpysymstDrivertpattern_convert(tselft grammar_file((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pyt__init__(s    cCs}t|}y|jj|d|}Wn(tjk rR}tt|nX|rl|j||fS|j|SdS(s=Compiles a pattern string to a nested pytree.*Pattern object.tdebugN(RRt parse_tokensRt ParseErrorRtstrt compile_node(R*RR-t with_treeRtrootte((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pytcompile_pattern7s cCs|j|jjkr%|jd}n|j|jjkrg|jdddD]}|j|^qQ}t|dkr|dStjg|D]}|g^qdddd}|j S|j|jj kr=g|jD]}|j|^q}t|dkr|dStj|gdddd}|j S|j|jj kr|j |jd}tj |}|j S|j|jjkstd}|j} t| dkr| djtjkr| dj}| d} nd} t| dkr5| dj|jjkr5| d} | d } n|j | | }| dk r| j|jjksnt| j} | d} | jtjkrd} tj}n| jtjkrd} tj}n| jtjkrQ| djtjkstt| d kst|j| d} }t| d kr]|j| d}q]n ts]t| dksu|dkr|j }tj|ggd| d|}qn|dk r||_n|j S( sXCompiles a node, recursively. This is one big switch on the node type. iNiitmintmaxiii(ii(RR!tMatchertchildrent AlternativesR1tlenRtWildcardPatterntoptimizet Alternativet NegatedUnitt compile_basictNegatedPatterntUnittAssertionErrorRRtEQUALRtRepeatertSTARtHUGEtPLUStLBRACEtRBRACEtget_inttFalsetname(R*tnodetchtaltstatptunitstpatternRMtnodestrepeatR9tchildR6R7((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pyR1Csh21 %   (  +         '  cCst|dkst|d}|jtjkrbttj|j}t j t ||S|jtj krp|j}|j r|tkrtd|n|drtdnt j t|S|dkrd}nF|jds-t|j|d}|dkr-td|q-n|drW|j|djdg}nd}t j||Sns|jdkr|j|dS|jd kr|dkst|j|d}t j|ggd dd dStst|dS( NiisInvalid token: %rsCan't have details for tokentanyt_sInvalid symbol: %rt(t[R6R7(R;RCRRtSTRINGtunicodeRt evalStringRRt LeafPatternt_type_of_literaltNAMEtisuppert TOKEN_MAPRRt startswithtgetattrR'R1R9t NodePatternR<RL(R*RURVRNRRtcontentt subpattern((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pyR@s<          cCs%|jtjkstt|jS(N(RRtNUMBERRCtintR(R*RN((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pyRKsN( R R RR,RLR5R1R@RK(((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pyR&s   G #RaR\RitTOKENcCs9|djrtjS|tjkr1tj|SdSdS(Ni(tisalphaRRaRtopmapR(R((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pyR`s  cCsW|\}}}}|s'||jkr=tj||d|Stj||d|SdS(s9Converts raw node information to a Node or Leaf instance.tcontextN(t number2symbolRtNodetLeaf(Rt raw_node_infoRRRnR9((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pyR)scCstj|S(N(RR5(RT((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pyR5s(t__doc__t __author__Rtpgen2RRRRRRtRRt ExceptionRRtobjectRRaR\RiRRcR`R)R5(((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pyt s .