Ñò
§ÚêLc @ s d Z d Z d d k Z d d k l Z l Z l Z l Z l Z l Z d d k
l Z d d k
l Z e i
i e i
i e ƒ d ƒ Z d e f d
„ ƒ YZ d „ Z d e f d
„ ƒ YZ h e i d 6e i d 6e i d 6d d 6Z d „ Z d „ Z d „ Z d S( s Pattern compiler.
The grammer is taken from PatternGrammar.txt.
The compiler compiles a pattern to a pytree.*Pattern instance.
s# Guido van Rossum iÿÿÿÿNi ( t drivert literalst tokent tokenizet parset grammar( t pytree( t pygrams PatternGrammar.txtt PatternSyntaxErrorc B s e Z RS( ( t __name__t
__module__( ( ( s' /usr/lib64/python2.6/lib2to3/patcomp.pyR s c c sy t t i t i t i f ƒ } t i t i | ƒ i ƒ } x9 | D]1 } | \ } } } } } | | j o | Vq@ q@ Wd S( s6 Tokenizes a string suppressing significant whitespace.N(
t setR t NEWLINEt INDENTt DEDENTR t generate_tokensR t generate_linest next( t inputt skipt tokenst quintuplet typet valuet startt endt line_text( ( s' /usr/lib64/python2.6/lib2to3/patcomp.pyt tokenize_wrapper s
t PatternCompilerc B s> e Z e d „ Z e d „ Z d „ Z d d „ Z d „ Z RS( c C s^ t i | ƒ | _ t i | i ƒ | _ t i | _ t i | _ t i
| i d t ƒ| _ d S( s^ Initializer.
Takes an optional alternative filename for the pattern grammar.
t convertN( R t load_grammarR R t Symbolst symst python_grammart pygrammart python_symbolst pysymst Drivert pattern_convert( t selft grammar_file( ( s' /usr/lib64/python2.6/lib2to3/patcomp.pyt __init__, s
c C sb t | ƒ } y | i i | d | ƒ} Wn* t i j
o } t t | ƒ ƒ ‚ n X| i | ƒ S( s= Compiles a pattern string to a nested pytree.*Pattern object.t debug( R R t parse_tokensR t
ParseErrorR t strt compile_node( R' R R* R t roott e( ( s' /usr/lib64/python2.6/lib2to3/patcomp.pyt compile_pattern7 s c C s | i | i i j o | i d } n | i | i i j oš g } | i d d d … D] } | | i | ƒ qX ~ } t | ƒ d j o | d St i g } | D] } | | g q¤ ~ d d d d ƒ} | i ƒ S| i | i i
j or g } | i D] } | | i | ƒ qû ~ } t | ƒ d j o | d St i | g d d d d ƒ} | i ƒ S| i | i i j o0 | i | i d ƒ }
t i
|
ƒ } | i ƒ Sd } | i } t | ƒ d j o2 | d i t i j o | d i } | d } n d }
t | ƒ d j o2 | d i | i i j o | d }
| d } n | i | |
ƒ }
|
d j o|
i } | d } | i t i j o d } t i } n | i t i j o d } t i } nY | i t i j oE | i | d ƒ } } t | ƒ d j o | i | d ƒ } qn | d j p
| d j o1 |
i ƒ }
t i |
g g d | d | ƒ}
qin | d j o
| |
_ n |
i ƒ S(
sX Compiles a node, recursively.
This is one big switch on the node type.
i Ni i t mint maxi iÿÿÿÿi ( R R t Matchert childrent AlternativesR. t lenR t WildcardPatternt optimizet Alternativet NegatedUnitt
compile_basict NegatedPatternt NoneR t EQUALR t Repeatert STARt HUGEt PLUSt LBRACEt get_intt name( R' t nodet _[1]t cht altst _[2]t at pt _[3]t unitst patternRF t nodest repeatR5 t childR2 R3 ( ( s' /usr/lib64/python2.6/lib2to3/patcomp.pyR. @ s^ : 9- *
-
)
c C sÓ | d } | i t i j o/ t t i | i ƒ ƒ } t i t | ƒ | ƒ S| i t i
j o| i } | i ƒ oN | t j o t
d | ƒ ‚ n | d o t
d ƒ ‚ n t i t | ƒ S| d j o
d } nK | i d ƒ p: t | i | d ƒ } | d j o t
d | ƒ ‚ q$n | d o! | i | d i d ƒ g } n d } t i | | ƒ Snf | i d j o | i | d ƒ S| i d j o3 | i | d ƒ } t i | g g d
d d d ƒSd S( Ni s Invalid token: %ri s Can't have details for tokent anyt _s Invalid symbol: %rt (t [R2 R3 ( R R t STRINGt unicodeR t
evalStringR R t LeafPatternt _type_of_literalt NAMEt isuppert TOKEN_MAPR R> t
startswitht getattrR$ R. R5 t NodePatternR8 ( R' RQ RR RG R R t contentt
subpattern( ( s' /usr/lib64/python2.6/lib2to3/patcomp.pyR<