Ñò
$8Zc           @   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 <guido@python.org>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/lib/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	 | Vq@ 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/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_grammarR   R   t   Symbolst   symst   python_grammart	   pygrammart   python_symbolst   pysymst   Drivert   pattern_convert(   t   selft   grammar_file(    (    s%   /usr/lib/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/lib/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 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| i  |  i i j p t ‚ 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	 oi| i  |  i i j p t ‚ | i } | d } | i  t i j o d } t i } nÅ | i  t i j o d } t i } nŸ | i  t i j o} | d i  t i j p t ‚ t | ƒ d
 j p t ‚ |  i | d ƒ } } t | ƒ d	 j o |  i | d ƒ } qšn t p t ‚ | d j p | d j o1 |
 i	 ƒ  }
 t i |
 g g d | d | ƒ}
 qé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   (   i   i   (   R   R    t   Matchert   childrent   AlternativesR.   t   lenR   t   WildcardPatternt   optimizet   Alternativet   NegatedUnitt   compile_basict   NegatedPatternt   Unitt   AssertionErrort   NoneR   t   EQUALR   t   Repeatert   STARt   HUGEt   PLUSt   LBRACEt   RBRACEt   get_intt   Falset   name(   R'   t   nodet   _[1]t   cht   altst   _[2]t   at   pt   _[3]t   unitst   patternRJ   t   nodest   repeatR5   t   childR2   R3   (    (    s%   /usr/lib/python2.6/lib2to3/patcomp.pyR.   @   sh    :	9-		*-
	
)c         C   s  t  | ƒ d j p t ‚ | 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 | | ƒ Snz | i d j o |  i | d ƒ S| i d	 j oG | d  j p t ‚ |  i | d ƒ } t	 i | g g d
 d d d ƒSt p
 t | ‚ d  S(   Ni   i    s   Invalid token: %rs   Can't have details for tokent   anyt   _s   Invalid symbol: %rt   (t   [R2   R3   (   R7   R?   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   RI   (   R'   RU   RV   RK   R   R   t   contentt
   subpattern(    (    s%   /usr/lib/python2.6/lib2to3/patcomp.pyR<   ‡   s<    
	
! c         C   s'   | i  t i j p t ‚ t | i ƒ S(   N(   R   R   t   NUMBERR?   t   intR   (   R'   RK   (    (    s%   /usr/lib/python2.6/lib2to3/patcomp.pyRH   ª   s    N(
   R	   R
   t   _PATTERN_GRAMMAR_FILER)   RI   R1   R.   R@   R<   RH   (    (    (    s%   /usr/lib/python2.6/lib2to3/patcomp.pyR   *   s
   		G#Ra   R\   Ri   t   TOKENc         C   s=   |  d i  ƒ  o t i S|  t i j o t i |  Sd  Sd  S(   Ni    (   t   isalphaR   Ra   R   t   opmapR@   (   R   (    (    s%   /usr/lib/python2.6/lib2to3/patcomp.pyR`   ¶   s
    c         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   Ro   R5   (    (    s%   /usr/lib/python2.6/lib2to3/patcomp.pyR&   ¿   s    c         C   s   t  ƒ  i |  ƒ S(   N(   R   R1   (   RT   (    (    s%   /usr/lib/python2.6/lib2to3/patcomp.pyR1   È   s    (   t   __doc__t
   __author__t   ost   pgen2R    R   R   R   R   R   t    R   R   t   patht   joint   dirnamet   __file__Rk   t	   ExceptionR   R   t   objectR   Ra   R\   Ri   R@   Rc   R`   R&   R1   (    (    (    s%   /usr/lib/python2.6/lib2to3/patcomp.pyt   <module>	   s"   .		
†


				