/
/
usr/
lib64/
lib64/
/
lib64/
lib64/
/ó
ÛœSec @ 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 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.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@ | Vq@ 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/lib64/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/lib64/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/lib64/python2.7/lib2to3/patcomp.pyt compile_pattern8 s c C sT | 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 ƒ Sd } | j } t | ƒ d k rÒ| d j t j k rÒ| d j } | d } n d }
t | ƒ d k r| d j | j j k r| d }
| d } n | j | |
ƒ } |
d k r2|
j } | d } | j t j k rod }
t j } nx | j t j k r“d }
t j } nT | j t j k rç| j | d ƒ }
} t | ƒ d k rç| j | d ƒ } qçn |
d k sÿ| d k r2| j ƒ } t j | g g d |
d | ƒ} q2n | d k rJ| | _ 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 ( 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 cht altst at pt unitst patternRG t nodest repeatR6 t childR3 R4 ( ( s' /usr/lib64/python2.7/lib2to3/patcomp.pyR. D s^ 21
%
(
+
'c C s½ | d } | j t j k rJ t t j | j ƒ ƒ } t j t | ƒ | ƒ S| j t j
k rX| 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 ƒ st | j | d ƒ } | d k rt
d | ƒ ‚ qn | d r?| j | d j d ƒ g } n d } t j | | ƒ Sna | j d k rx| j | d ƒ S| j d k r¹| j | d ƒ } t j | 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 [R3 R4 ( R R t STRINGt unicodeR t
evalStringR R t LeafPatternt _type_of_literalt NAMEt isuppert TOKEN_MAPR R? t
startswitht getattrR$ R. R6 t NodePatternR9 ( R' RO RP RH R R t contentt
subpattern( ( s' /usr/lib64/python2.7/lib2to3/patcomp.pyR= ‹ s8
c C s
t | j ƒ S( N( t intR ( R' RH ( ( s' /usr/lib64/python2.7/lib2to3/patcomp.pyRF ® s N(
R R
t _PATTERN_GRAMMAR_FILER) t FalseR2 R. R? R= RF ( ( ( s' /usr/lib64/python2.7/lib2to3/patcomp.pyR + s
G#R[ RV t NUMBERt TOKENc C s9 | d j ƒ r t j S| t j k r1 t j | Sd Sd S( Ni ( t isalphaR R[ R t opmapR? ( R ( ( s' /usr/lib64/python2.7/lib2to3/patcomp.pyRZ º 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 Rj R6 ( ( s' /usr/lib64/python2.7/lib2to3/patcomp.pyR&