PNG  IHDR* pHYs+ IDATx]n#; cdLb Ǚ[at¤_:uP}>!Usă cag޿ ֵNu`ݼTâabO7uL&y^wFٝA"l[|ŲHLN밪4*sG3|Dv}?+y߉{OuOAt4Jj.u]Gz*҉sP'VQKbA1u\`& Af;HWj hsO;ogTu uj7S3/QzUr&wS`M$X_L7r2;aE+ώ%vikDA:dR+%KzƉo>eOth$z%: :{WwaQ:wz%4foɹE[9<]#ERINƻv溂E%P1i01 |Jvҗ&{b?9g=^wζXn/lK::90KwrюO\!ջ3uzuGv^;騢wq<Iatv09:tt~hEG`v;3@MNZD.1]L:{ծI3`L(÷ba")Y.iljCɄae#I"1 `3*Bdz>j<fU40⨬%O$3cGt]j%Fߠ_twJ;ABU8vP3uEԑwQ V:h%))LfraqX-ۿX]v-\9I gl8tzX ]ecm)-cgʒ#Uw=Wlێn(0hPP/ӨtQ“&J35 $=]r1{tLuǮ*i0_;NƝ8;-vݏr8+U-kruȕYr0RnC]*ެ(M:]gE;{]tg(#ZJ9y>utRDRMdr9㪩̞zֹb<ģ&wzJM"iI( .ꮅX)Qw:9,i좜\Ԛi7&N0:asϓc];=ΗOӣ APqz93 y $)A*kVHZwBƺnWNaby>XMN*45~ղM6Nvm;A=jֲ.~1}(9`KJ/V F9[=`~[;sRuk]rєT!)iQO)Y$V ی ۤmzWz5IM Zb )ˆC`6 rRa}qNmUfDsWuˤV{ Pݝ'=Kֳbg,UҘVz2ﴻnjNgBb{? ߮tcsͻQuxVCIY۠:(V뺕 ٥2;t`@Fo{Z9`;]wMzU~%UA蛚dI vGq\r82iu +St`cR.6U/M9IENDB`3 \@sdZdZddlZddlmZmZmZmZmZm Z ddl m Z ddl m Z Gdd d e Zd d ZGd d d eZejejejddZddZddZddZdS)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@s eZdZdS)PatternSyntaxErrorN)__name__ __module__ __qualname__rr'/usr/lib64/python3.6/lib2to3/patcomp.pyr sr c csPtjtjtjh}tjtj|j}x(|D] }|\}}}}}||kr(|Vq(WdS)z6Tokenizes a string suppressing significant whitespace.N) rNEWLINEINDENTDEDENTrgenerate_tokensioStringIOreadline) inputskiptokensZ quintupletypevaluestartendZ line_textrrrtokenize_wrappers  rc@s:eZdZd ddZdddZddZdd d Zd d ZdS)PatternCompilerNcCsZ|dkrtj|_tj|_ntj||_tj|j|_tj|_ tj |_ tj |jt d|_dS)z^Initializer. Takes an optional alternative filename for the pattern grammar. N)Zconvert)r Zpattern_grammarrZpattern_symbolssymsrZ load_grammarZSymbolsZpython_grammarZ pygrammarZpython_symbolspysymsZDriverpattern_convert)selfZ grammar_filerrr__init__(s  zPatternCompiler.__init__FcCsnt|}y|jj||d}Wn0tjk rL}ztt|WYdd}~XnX|r`|j||fS|j|SdS)z=Compiles a pattern string to a nested pytree.*Pattern object.)debugN)rrZ parse_tokensrZ ParseErrorr str compile_node)r$rr&Z with_treerrooterrrcompile_pattern7szPatternCompiler.compile_patternc s|jjjkr|jd}|jjjkrzfdd|jdddD}t|dkrX|dStjdd|Dddd}|jS|jjj krʇfd d|jD}t|dkr|dStj|gddd}|jS|jjj krj |jdd}tj |}|jS|jjj kstd}|j}t|d krR|djtjkrR|dj}|dd}d}t|dkr|d jjjkr|d}|dd}j ||}|dk r|jjjkst|j} | d} | jtjkrd} tj} n| jtjkrd} tj} np| jtjkr^| djtjkstt| dks.tj| d} } t| d krhj| d } n d sht| dks|| dkr|j}tj|gg| | d}|dk r||_|jS)zXCompiles a node, recursively. This is one big switch on the node type. rcsg|]}j|qSr)r().0ch)r$rr Osz0PatternCompiler.compile_node..NrcSsg|] }|gqSrr)r,arrrr.Rs)minmaxcsg|]}j|qSr)r()r,r-)r$rrr.VsFr5r5r5)r3r4)rr!ZMatcherchildrenZ Alternativeslenr WildcardPatternoptimizeZ AlternativeZ NegatedUnit compile_basicZNegatedPatternZUnitAssertionErrorrEQUALrZRepeaterSTARZHUGEPLUSLBRACERBRACEget_intname) r$nodeZaltspZunitspatternrBnodesrepeatr6Zchildr1r2r)r$rr(Csh       "     zPatternCompiler.compile_nodecCsnt|dkst|d}|jtjkrDttj|j}t j t ||S|jtj kr|j}|j r|tkrttd||ddrtdt j t|S|dkrd}n,|jdst|j|d}|dkrtd||ddr|j|djdg}nd}t j||SnV|jdkr |j|dS|jd kr\|dks:t|j|d}t j|ggddd Sd sjt|dS) NrrzInvalid token: %rzCan't have details for tokenany_zInvalid symbol: %r([)r1r2F)r7r;rrSTRINGr'rZ evalStringrr Z LeafPattern_type_of_literalNAMEisupper TOKEN_MAPr startswithgetattrr"r(r6Z NodePatternr8)r$rFrGrCrrZcontent subpatternrrrr:s<        zPatternCompiler.compile_basiccCs|jtjkstt|jS)N)rrNUMBERr;intr)r$rCrrrrAszPatternCompiler.get_int)N)FF)N)r r rr%r+r(r:rArrrrr &s   G #r )rNrLrTZTOKENcCs.|djrtjS|tjkr&tj|SdSdS)Nr)isalpharrNrZopmap)rrrrrMs    rMcCs>|\}}}}|s||jkr*tj|||dStj|||dSdS)z9Converts raw node information to a Node or Leaf instance.)contextN)Z number2symbolr ZNodeZLeaf)rZ raw_node_inforrrWr6rrrr#s r#cCs tj|S)N)r r+)rErrrr+sr+)__doc__ __author__rZpgen2rrrrrrr r Exceptionr robjectr rNrLrTrPrMr#r+rrrr s