ž
¬ÿf£ 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 Gd d
„ d
e ƒ Z d d „ Z Gd
d „ d e ƒ Z i e j d 6e j d 6e j d 6d d 6Z d d „ Z d d „ Z d 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 i Ni ( u driveru literalsu tokenu tokenizeu parseu grammar( u pytree( u pygramu PatternGrammar.txtc B s | Ee Z d Z d S( u PatternSyntaxErrorN( u __name__u
__module__u __qualname__( u
__locals__( ( u4 /opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyu PatternSyntaxError s u PatternSyntaxErrorc c sw t t j t j t j f ƒ } t j t j | ƒ j ƒ } x7 | D]/ } | \ } } } } } | | k r@ | Vq@ q@ Wd S( u6 Tokenizes a string suppressing significant whitespace.N(
u setu tokenu NEWLINEu INDENTu DEDENTu tokenizeu generate_tokensu iou StringIOu readline( u inputu skipu tokensu quintupleu typeu valueu startu endu line_text( ( u4 /opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyu tokenize_wrapper! s
u tokenize_wrapperc B s\ | Ee Z d Z e d d „ Z d d d d „ Z d d „ Z d d d „ Z d d
„ Z
d S(
u PatternCompilerc 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( ( u4 /opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyu __init__- s
u PatternCompiler.__init__c C s t | ƒ } y | j j | d | ƒ} Wn: t j k
rd } z t t | ƒ ƒ ‚ WYd d } ~ Xn X| r~ | j | ƒ | f S| j | ƒ Sd S( u= Compiles a pattern string to a nested pytree.*Pattern object.u debugN( u tokenize_wrapperu driveru parse_tokensu parseu
ParseErroru PatternSyntaxErroru stru compile_node( u selfu inputu debugu with_treeu tokensu rootu e( ( u4 /opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyu compile_pattern8 s %u PatternCompiler.compile_patternc
sÁ | j ˆ j j k r% | j d } n | j ˆ j j k r¯ ‡ f d d † | j d d d … Dƒ } t | ƒ d k r} | d St j d d „ | Dƒ d d d d ƒ} | j ƒ S| j ˆ j j k r"‡ f d
d † | j Dƒ } t | ƒ d k rú | d St j | g d d d d ƒ} | j ƒ S| j ˆ j j
k rlˆ j | j d 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 d … } n d } t | ƒ d k r,| d
j ˆ j j k r,| d } | d d … } n ˆ j | | ƒ } | d k rŸ| j ˆ j j k set ‚ | j } | d }
|
j t j k rœd } t j } n¸ |
j t j k rÀd } t j } n” |
j t j k rH| d j t j k sît ‚ t | ƒ d k st ‚ ˆ j | d ƒ } } t | ƒ d k rTˆ j | d ƒ } qTn d sTt ‚ | d k sl| d k rŸ| j ƒ } t j | g g d | d | ƒ} qŸn | d k r·| | _ 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 ch( u self( u4 /opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyu
P s u0 PatternCompiler.compile_node..Ni i c S s g | ] } | g ‘ q S( ( ( u .0u a( ( u4 /opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyu
S s u minu maxc s g | ] } ˆ j | ƒ ‘ q S( ( u compile_node( u .0u ch( u self( u4 /opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyu
W s i i iÿÿÿÿiÿÿÿÿiÿÿÿÿiÿÿÿÿ( i i F( u typeu symsu Matcheru childrenu Alternativesu lenu pytreeu WildcardPatternu optimizeu Alternativeu NegatedUnitu
compile_basicu NegatedPatternu Unitu AssertionErroru Noneu tokenu EQUALu valueu Repeateru STARu HUGEu PLUSu LBRACEu RBRACEu get_intu Falseu name(
u selfu nodeu altsu pu unitsu patternu nameu nodesu repeatu childrenu childu minu max( ( u selfu4 /opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyu compile_nodeD sh )(
(
+
'u PatternCompiler.compile_nodec 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 r|| j } | j
ƒ rØ | t k r¨ t d | ƒ ‚ n | d d … rÇ t d ƒ ‚ n t j
t | ƒ S| d k rí d } nF | j d ƒ s3t | j | d ƒ } | d k r3t d | ƒ ‚ q3n | d d … rc| 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 ƒSd st | ƒ ‚ d S(
Ni i u Invalid token: %ru Can't have details for tokenu anyu _u Invalid symbol: %ru (u [u minu maxF( u lenu AssertionErroru typeu tokenu STRINGu stru literalsu
evalStringu valueu pytreeu LeafPatternu _type_of_literalu NAMEu isupperu TOKEN_MAPu PatternSyntaxErroru Noneu
startswithu getattru pysymsu compile_nodeu childrenu NodePatternu WildcardPatternu False( u selfu nodesu repeatu nodeu valueu typeu contentu
subpattern( ( u4 /opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyu
compile_basic‹ s<