;
Ðâ"Ic               @   sö   d  Z  d Z d d l Z d d l m Z d d l m Z d d l m Z d d l m Z d d	 l m	 Z	 d d
 l m
 Z
 e j j e j j e ƒ d ƒ Z d „  Z Gd „  d e ƒ Z i e j d 6e j d 6e j d 6d d 6Z d „  Z d „  Z d S(   u   Pattern compiler.

The grammer is taken from PatternGrammar.txt.

The compiler compiles a pattern to a pytree.*Pattern instance.
u#   Guido van Rossum <guido@python.org>i    Ni   (   u   driver(   u   literals(   u   token(   u   tokenize(   u   pytree(   u   pygramu   PatternGrammar.txtc       	      c   ss   t  j t  j t  j f } t j t j |  ƒ j ƒ } x9 | D]1 } | \ } } } } } | | k o	 | Vq: q: Wd S(   u6   Tokenizes a string suppressing significant whitespace.N(	   u   tokenu   NEWLINEu   INDENTu   DEDENTu   tokenizeu   generate_tokensu   driveru   generate_linesu   __next__(	   u   inputu   skipu   tokensu	   quintupleu   typeu   valueu   startu   endu	   line_text(    (    u,   /mit/python/lib/python3.0/lib2to3/patcomp.pyu   tokenize_wrapper   s     c             B   sD   |  Ee  Z e d  „ Z d d „ Z d „  Z d d „ Z d „  Z	 d S(   c             C   s^   t  j | ƒ |  _ t j |  j ƒ |  _ t j |  _ t j |  _	 t  j
 |  j d t ƒ|  _  d S(   u^   Initializer.

        Takes an optional alternative filename for the pattern grammar.
        u   convertN(   u   driveru   load_grammaru   grammaru   pygramu   Symbolsu   symsu   python_grammaru	   pygrammaru   python_symbolsu   pysymsu   Driveru   pattern_convert(   u   selfu   grammar_file(    (    u,   /mit/python/lib/python3.0/lib2to3/patcomp.pyu   __init__+   s
    c             C   s1   t  | ƒ } |  j j | d | ƒ} |  j | ƒ S(   u=   Compiles a pattern string to a nested pytree.*Pattern object.u   debug(   u   tokenize_wrapperu   driveru   parse_tokensu   compile_node(   u   selfu   inputu   debugu   tokensu   root(    (    u,   /mit/python/lib/python3.0/lib2to3/patcomp.pyu   compile_pattern6   s    c                sc  | j  ˆ  j j k o | j d } n | j  ˆ  j j k or ‡  f d †  | j d d d … Dƒ } t | ƒ d k o	 | d St j d „  | Dƒ d d d d ƒ} | j ƒ  S| j  ˆ  j j	 k o^ ‡  f d	 †  | j Dƒ } t | ƒ d k o	 | d St j | g d d d d ƒ} | j ƒ  S| j  ˆ  j j
 k o6 ˆ  j | j d d … ƒ } t j | ƒ } | j ƒ  Sd } | j } t | ƒ d
 k o8 | d j  t j k o! | d j } | d d … } n d } t | ƒ d k o8 | d j  ˆ  j j k o | d } | d d … } n ˆ  j | | ƒ } | d k	 o| j }	 |	 d }
 |
 j  t j k o d } t j } n |
 j  t j k o d } t j } nY |
 j  t j k oE ˆ  j |	 d ƒ } } t |	 ƒ d k o ˆ  j |	 d
 ƒ } qðn | d k p | d k o1 | j ƒ  } t j | g g d | d | ƒ} q?n | d k	 o | | _ n | j ƒ  S(   uX   Compiles a node, recursively.

        This is one big switch on the node type.
        i    c                s$   g  } |  ] } | ˆ  j  | ƒ q
 S(    (   u   compile_node(   u   .0u   _[1]u   ch(   u   self(    u,   /mit/python/lib/python3.0/lib2to3/patcomp.pyu
   <listcomp>H   s    Ni   i   c             S   s   g  } |  ] } | | g q
 S(    (    (   u   .0u   _[1]u   a(    (    u,   /mit/python/lib/python3.0/lib2to3/patcomp.pyu
   <listcomp>K   s    u   minu   maxc                s$   g  } |  ] } | ˆ  j  | ƒ q
 S(    (   u   compile_node(   u   .0u   _[1]u   ch(   u   self(    u,   /mit/python/lib/python3.0/lib2to3/patcomp.pyu
   <listcomp>O   s    i   iÿÿÿÿi   (   u   typeu   symsu   Matcheru   childrenu   Alternativesu   lenu   pytreeu   WildcardPatternu   optimizeu   Alternativeu   NegatedUnitu   compile_basicu   NegatedPatternu   Noneu   tokenu   EQUALu   valueu   Repeateru   STARu   HUGEu   PLUSu   LBRACEu   get_intu   name(   u   selfu   nodeu   altsu   pu   unitsu   patternu   nameu   nodesu   repeatu   childrenu   childu   minu   max(    (   u   selfu,   /mit/python/lib/python3.0/lib2to3/patcomp.pyu   compile_node<   s^    &	%		*-
	
)c             C   s²  | d } | j  t j k o# t j | j ƒ } t j d | ƒ S| j  t j k oö | j } | j	 ƒ  o3 | t
 k o t d | ƒ ‚ n t j t
 | ƒ S| d k o
 d  } nK | j d ƒ p: t |  j | d  ƒ } | d  k o t d | ƒ ‚ qý n | d d  … o! |  j | d j d ƒ g } n d  } t j | | ƒ Snf | j d k o |  j | d ƒ S| j d	 k o3 |  j | d ƒ } t j | g g d
 d d d ƒSd  S(   Ni    u   contentu   Invalid token: %ru   anyu   _u   Invalid symbol: %ri   u   (u   [u   minu   max(   u   typeu   tokenu   STRINGu   literalsu
   evalStringu   valueu   pytreeu   LeafPatternu   NAMEu   isupperu	   TOKEN_MAPu   SyntaxErroru   Noneu
   startswithu   getattru   pysymsu   compile_nodeu   childrenu   NodePatternu   WildcardPattern(   u   selfu   nodesu   repeatu   nodeu   valueu   typeu   contentu
   subpattern(    (    u,   /mit/python/lib/python3.0/lib2to3/patcomp.pyu   compile_basicƒ   s4    
	
! c             C   s   t  | j ƒ S(   N(   u   intu   value(   u   selfu   node(    (    u,   /mit/python/lib/python3.0/lib2to3/patcomp.pyu   get_int¤   s    NF(
   u   __name__u
   __module__u   _PATTERN_GRAMMAR_FILEu   __init__u   Falseu   compile_patternu   compile_nodeu   Noneu   compile_basicu   get_int(   u
   __locals__(    (    u,   /mit/python/lib/python3.0/lib2to3/patcomp.pyu   PatternCompiler)   s
   
	G!u   PatternCompileru   NAMEu   STRINGu   NUMBERu   TOKENc             C   sZ   | \ } } } } | p | |  j  k o t j | | d | ƒSt j | | d | ƒSd S(   u9   Converts raw node information to a Node or Leaf instance.u   contextN(   u   number2symbolu   pytreeu   Nodeu   Leaf(   u   grammaru   raw_node_infou   typeu   valueu   contextu   children(    (    u,   /mit/python/lib/python3.0/lib2to3/patcomp.pyu   pattern_convert°   s    c             C   s   t  ƒ  j |  ƒ S(   N(   u   PatternCompileru   compile_pattern(   u   pattern(    (    u,   /mit/python/lib/python3.0/lib2to3/patcomp.pyu   compile_pattern¹   s    (   u   __doc__u
   __author__u   osu   pgen2u   driveru   literalsu   tokenu   tokenizeu    u   pytreeu   pygramu   pathu   joinu   dirnameu   __file__u   _PATTERN_GRAMMAR_FILEu   tokenize_wrapperu   objectu   PatternCompileru   NAMEu   STRINGu   NUMBERu   Noneu	   TOKEN_MAPu   pattern_convertu   compile_pattern(    (    (    u,   /mit/python/lib/python3.0/lib2to3/patcomp.pyu   <module>	   s$   		



		