Ñò
•à"Ic        
   @   sù   d  Z  d Z d d k Z d d k l Z d d k l Z d d k l Z d d k l Z d d	 k l	 Z	 d d
 k l
 Z
 e i i e i i e ƒ d ƒ Z 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 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 <guido@python.org>iÿÿÿÿNi   (   t   driver(   t   literals(   t   token(   t   tokenize(   t   pytree(   t   pygrams   PatternGrammar.txtc   	      c   ss   t  i t  i t  i f } t i t i |  ƒ i ƒ } x9 | D]1 } | \ } } } } } | | j o	 | Vq: q: Wd S(   s6   Tokenizes a string suppressing significant whitespace.N(	   R   t   NEWLINEt   INDENTt   DEDENTR   t   generate_tokensR    t   generate_linest   next(	   t   inputt   skipt   tokenst	   quintuplet   typet   valuet   startt   endt	   line_text(    (    s,   /mit/python/lib/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_grammart   grammarR   t   Symbolst   symst   python_grammart	   pygrammart   python_symbolst   pysymst   Drivert   pattern_convert(   t   selft   grammar_file(    (    s,   /mit/python/lib/python2.6/lib2to3/patcomp.pyt   __init__+   s
    c         C   s1   t  | ƒ } |  i i | d | ƒ} |  i | ƒ S(   s=   Compiles a pattern string to a nested pytree.*Pattern object.t   debug(   R   R    t   parse_tokenst   compile_node(   R"   R   R%   R   t   root(    (    s,   /mit/python/lib/python2.6/lib2to3/patcomp.pyt   compile_pattern6   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 St 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 St i |	 g d d d d ƒ} | i	 ƒ  S| i  |  i i j o0 |  i | i d ƒ }
 t i |
 ƒ } | i	 ƒ  Sd } | 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 ƒ } qn | d j p | d j o1 |
 i	 ƒ  }
 t i |
 g g d | d | ƒ}
 qin | 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   patternR>   t   nodest   repeatR-   t   childR*   R+   (    (    s,   /mit/python/lib/python2.6/lib2to3/patcomp.pyR'   <   s^    :	9-		*-
	
)c         C   s¬  | d } | i  t i j o# t i | i ƒ } t i d | ƒ S| i  t i j oð | i } | i	 ƒ  o3 | t
 j 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 ƒSd  S(   Ni    t   contents   Invalid token: %rt   anyt   _s   Invalid symbol: %ri   t   (t   [R*   R+   (   R   R   t   STRINGR   t
   evalStringR   R   t   LeafPatternt   NAMEt   isuppert	   TOKEN_MAPt   SyntaxErrorR6   t
   startswitht   getattrR   R'   R-   t   NodePatternR0   (   R"   RI   RJ   R?   R   R   RL   t
   subpattern(    (    s,   /mit/python/lib/python2.6/lib2to3/patcomp.pyR4   ƒ   s4    
	
! c         C   s   t  | i ƒ S(   N(   t   intR   (   R"   R?   (    (    s,   /mit/python/lib/python2.6/lib2to3/patcomp.pyR=   ¤   s    N(
   t   __name__t
   __module__t   _PATTERN_GRAMMAR_FILER$   t   FalseR)   R'   R6   R4   R=   (    (    (    s,   /mit/python/lib/python2.6/lib2to3/patcomp.pyR   )   s
   	G!RT   RQ   t   NUMBERt   TOKENc         C   sZ   | \ } } } } | p | |  i  j o t i | | d | ƒSt i | | d | ƒSd S(   s9   Converts raw node information to a Node or Leaf instance.t   contextN(   t   number2symbolR   t   Nodet   Leaf(   R   t   raw_node_infoR   R   Rc   R-   (    (    s,   /mit/python/lib/python2.6/lib2to3/patcomp.pyR!   °   s    c         C   s   t  ƒ  i |  ƒ S(   N(   R   R)   (   RH   (    (    s,   /mit/python/lib/python2.6/lib2to3/patcomp.pyR)   ¹   s    (   t   __doc__t
   __author__t   ost   pgen2R    R   R   R   t    R   R   t   patht   joint   dirnamet   __file__R_   R   t   objectR   RT   RQ   Ra   R6   RV   R!   R)   (    (    (    s,   /mit/python/lib/python2.6/lib2to3/patcomp.pyt   <module>	   s$   		



		