ó
hQ=`c           @   s  d  Z  d Z d d l Z d d l Z d d l m Z m Z m Z m Z m	 Z	 m
 Z
 d d l m Z d d l m Z e j j e j j e ƒ d ƒ Z d	 e f d
 „  ƒ  YZ d „  Z d e f d „  ƒ  YZ i e j d 6e j d 6e j d 6d d 6Z d „  Z d „  Z d „  Z d S(   s   Pattern compiler.

The grammar 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.7/lib2to3/patcomp.pyR      s   c   	      c   sw   t  t j t j t j f ƒ } t j t j |  ƒ j ƒ } x7 | D]/ } | \ } } } } } | | k r@ | Vq@ q@ Wd S(   s6   Tokenizes a string suppressing significant whitespace.N(	   t   setR   t   NEWLINEt   INDENTt   DEDENTR   t   generate_tokenst   StringIOt   readline(	   t   inputt   skipt   tokenst	   quintuplet   typet   valuet   startt   endt	   line_text(    (    s%   /usr/lib/python2.7/lib2to3/patcomp.pyt   tokenize_wrapper!   s    t   PatternCompilerc           B   sA   e  Z e d  „ Z e e d „ Z d „  Z d d „ Z d „  Z	 RS(   c         C   s^   t  j | ƒ |  _ t j |  j ƒ |  _ t j |  _ t j |  _	 t  j
 |  j 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.7/lib2to3/patcomp.pyt   __init__-   s
    c         C   s}   t  | ƒ } y |  j j | d | ƒ} Wn( t j k
 rR } t t | ƒ ƒ ‚ n X| rl |  j | ƒ | f S|  j | ƒ Sd S(   s=   Compiles a pattern string to a nested pytree.*Pattern object.t   debugN(   R   R    t   parse_tokensR   t
   ParseErrorR   t   strt   compile_node(   R'   R   R*   t	   with_treeR   t   roott   e(    (    s%   /usr/lib/python2.7/lib2to3/patcomp.pyt   compile_pattern8   s    c         C   sÊ  | j  |  j j k r% | j d } n  | j  |  j j k rÁ g  | j d d d … D] } |  j | ƒ ^ qQ } t | ƒ d k r† | d St j g  | D] } | g ^ q“ d d d d ƒ} | j	 ƒ  S| j  |  j j
 k r=g  | j D] } |  j | ƒ ^ qà } t | ƒ d k r| d St j | g d d d d ƒ} | j	 ƒ  S| j  |  j j k r|  j | j d ƒ } t j | ƒ } | j	 ƒ  S| j  |  j j k sœt ‚ d } | j }	 t |	 ƒ d k rí|	 d j  t j k rí|	 d j } |	 d }	 n  d }
 t |	 ƒ d k r5|	 d j  |  j j k r5|	 d }
 |	 d  }	 n  |  j |	 |
 ƒ } |
 d k	 r¨|
 j  |  j j k snt ‚ |
 j } | d } | j  t j k r¥d } t j } n¸ | j  t j k rÉd } t j } n” | j  t j k rQ| d j  t j k s÷t ‚ t | ƒ d
 k st ‚ |  j | d ƒ } } t | ƒ d	 k r]|  j | d ƒ } q]n t s]t ‚ | d k su| d k r¨| j	 ƒ  } t j | g g d | d | ƒ} q¨n  | d k	 rÀ| | _ n  | j	 ƒ  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   cht   altst   at   pt   unitst   patternRK   t   nodest   repeatR6   t   childR3   R4   (    (    s%   /usr/lib/python2.7/lib2to3/patcomp.pyR.   D   sh    21
%

	(+
	
'c         C   sù  t  | ƒ d k s t ‚ | d } | j t j k rb t t j | j ƒ ƒ } t	 j
 t | ƒ | ƒ S| j t j k rp| j } | j ƒ  rÒ | t k r¨ t d | ƒ ‚ n  | d rÁ t d ƒ ‚ n  t	 j
 t | ƒ S| d k rç d  } nF | j d ƒ s-t |  j | d  ƒ } | d  k r-t d | ƒ ‚ q-n  | d rW|  j | d j d ƒ g } n d  } t	 j | | ƒ Sns | j d k r|  j | d ƒ S| j d	 k rã| d  k s±t ‚ |  j | d ƒ } t	 j | g g d
 d d d ƒSt sõt | ƒ ‚ d  S(   Ni   i    s   Invalid token: %rs   Can't have details for tokent   anyt   _s   Invalid symbol: %rt   (t   [R3   R4   (   R8   R@   R   R   t   STRINGt   unicodeR   t
   evalStringR   R   t   LeafPatternt   _type_of_literalt   NAMEt   isuppert	   TOKEN_MAPR   RA   t
   startswitht   getattrR$   R.   R6   t   NodePatternR9   RJ   (   R'   RS   RT   RL   R   R   t   contentt
   subpattern(    (    s%   /usr/lib/python2.7/lib2to3/patcomp.pyR=   ‹   s<    
	
	
 c         C   s%   | j  t j k s t ‚ t | j ƒ S(   N(   R   R   t   NUMBERR@   t   intR   (   R'   RL   (    (    s%   /usr/lib/python2.7/lib2to3/patcomp.pyRI   ®   s    N(
   R	   R
   t   _PATTERN_GRAMMAR_FILER)   RJ   R2   R.   RA   R=   RI   (    (    (    s%   /usr/lib/python2.7/lib2to3/patcomp.pyR   +   s
   	G#R_   RZ   Rg   t   TOKENc         C   s9   |  d j  ƒ  r t j S|  t j k r1 t j |  Sd  Sd  S(   Ni    (   t   isalphaR   R_   R   t   opmapRA   (   R   (    (    s%   /usr/lib/python2.7/lib2to3/patcomp.pyR^   º   s
    c         C   sW   | \ } } } } | s' | |  j  k r= t j | | d | ƒSt j | | 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   Rm   R6   (    (    s%   /usr/lib/python2.7/lib2to3/patcomp.pyR&   Ã   s    c         C   s   t  ƒ  j |  ƒ S(   N(   R   R2   (   RR   (    (    s%   /usr/lib/python2.7/lib2to3/patcomp.pyR2   Ì   s    (    t   __doc__t
   __author__t   osR   t   pgen2R    R   R   R   R   R   t    R   R   t   patht   joint   dirnamet   __file__Ri   t	   ExceptionR   R   t   objectR   R_   RZ   Rg   RA   Ra   R^   R&   R2   (    (    (    s%   /usr/lib/python2.7/lib2to3/patcomp.pyt   <module>	   s$   .		
‰


				