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 cCsT|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 Sd}|j} t| dkr| djtjkr| dj}| d} nd} t| dkr| dj|jjkr| d} | d } n|j | | }| dk r2| j} | d} | jtjkrod} tj}nx| jtjkrd} tj}nT| jtjkr|j| d} }t| d kr|j| d}qn| dks|dkr2|j }tj|ggd| d|}q2n|dk rJ||_n|j S( sXCompiles a node, recursively. This is one big switch on the node type. iNiitmintmaxiii(RR!tMatchertchildrent AlternativesR1tlenRtWildcardPatterntoptimizet Alternativet NegatedUnitt compile_basictNegatedPatternRRtEQUALRtRepeatertSTARtHUGEtPLUStLBRACEtget_inttname(R*tnodetchtaltstatptunitstpatternRItnodestrepeatR9tchildR6R7((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pyR1Cs^21 %   (  +        '  cCs|d}|jtjkrJttj|j}tjt ||S|jtj krX|j}|j r|t krt d|n|drt dntjt |S|dkrd}nF|jdst|j|d}|dkrt d|qn|dr?|j|djdg}nd}tj||Sna|jdkrx|j|dS|jd kr|j|d}tj|ggd dd dSdS( NisInvalid token: %risCan't have details for tokentanyt_sInvalid symbol: %rt(t[R6R7(RRtSTRINGtunicodeRt evalStringRRt LeafPatternt_type_of_literaltNAMEtisuppert TOKEN_MAPRRt startswithtgetattrR'R1R9t NodePatternR<(R*RQRRRJRRtcontentt subpattern((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pyR@s8          cCs t|jS(N(tintR(R*RJ((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pyRHsN( R R RR,tFalseR5R1R@RH(((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pyR&s   G #R]RXtNUMBERtTOKENcCs9|djrtjS|tjkr1tj|SdSdS(Ni(tisalphaRR]RtopmapR(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_infoRRRkR9((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pyR)scCstj|S(N(RR5(RP((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pyR5s(t__doc__t __author__Rtpgen2RRRRRRtRRt ExceptionRRtobjectRR]RXRgRR_R\R)R5(((s4/opt/alt/python27/lib64/python2.7/lib2to3/patcomp.pyt s .