//usr/lib64/lib64//lib64/lib64//ó
ÛœSec @ s§ d Z d d l m Z d d l m Z m Z d d l m Z m Z e Z e Z
e j Z e Z
d Z d Z d Z d e f d „ ƒ YZ d
d
„ Z d „ Z d „ Z d
S( s0 Utility functions used by the btm_matcher modulei ( t pytree( t grammart token( t pattern_symbolst python_symbolsiÿÿÿÿiþÿÿÿiýÿÿÿt MinNodec B sA e Z d Z d d d „ Z d „ Z d „ Z d „ Z d „ Z RS( s‰ This class serves as an intermediate representation of the
pattern tree during the conversion to sets of leaf-to-root
subpatternsc C sC | | _ | | _ g | _ t | _ d | _ g | _ g | _ d S( N( t typet namet childrent Falset leaft Nonet parentt alternativest group( t selfR R ( ( s) /usr/lib64/python2.7/lib2to3/btm_utils.pyt __init__ s c C s t | j ƒ d t | j ƒ S( Nt ( t strR R ( R ( ( s) /usr/lib64/python2.7/lib2to3/btm_utils.pyt __repr__ s c C sU | } g } xB| rP| j t k r | j j | ƒ t | j ƒ t | j ƒ k r| t | j ƒ g } g | _ | j } q q | j } d } Pn | j t k r| j
j | ƒ t | j
ƒ t | j ƒ k ró t | j
ƒ } g | _
| j } q q| j } d } Pn | j t j
k r4| j r4| j | j ƒ n | j | j ƒ | j } q W| S( s° Internal method. Returns a characteristic path of the
pattern tree. This method must be run for all leaves until the
linear subpatterns are merged into a singleN( R t TYPE_ALTERNATIVESR
t appendt lenR t tupleR R t
TYPE_GROUPR t get_characteristic_subpatternt token_labelst NAMER ( R t nodet subp( ( s) /usr/lib64/python2.7/lib2to3/btm_utils.pyt leaf_to_root! s8
c C s1 x* | j ƒ D] } | j ƒ } | r
| Sq
Wd S( s‹ Drives the leaf_to_root method. The reason that
leaf_to_root must be run multiple times is because we need to
reject 'group' matches; for example the alternative form
(a | b c) creates a group [b c] that needs to be matched. Since
matching multiple linear patterns overcomes the automaton's
capabilities, leaf_to_root merges each group into a single
choice based on 'characteristic'ity,
i.e. (a|b c) -> (a|b) if b more characteristic than c
Returns: The most 'characteristic'(as defined by
get_characteristic_subpattern) path for the compiled pattern
tree.
N( t leavesR ( R t lR ( ( s) /usr/lib64/python2.7/lib2to3/btm_utils.pyt get_linear_subpatternK s c c sE x- | j D]" } x | j ƒ D] } | Vq Wq
W| j sA | Vn d S( s- Generator that returns the leaves of the treeN( R R ( R t childt x( ( s) /usr/lib64/python2.7/lib2to3/btm_utils.pyR ` s
N( t __name__t
__module__t __doc__R R R R R! R ( ( ( s) /usr/lib64/python2.7/lib2to3/btm_utils.pyR s * c
C s d } | j t j k r( | j d } n | j t j k rØ t | j ƒ d k rh t | j d | ƒ } qüt d t ƒ } x‚| j D]P } | j j
| ƒ d r£ q n t | | ƒ } | d k r | j j | ƒ q q Wn$| j t j k rxt | j ƒ d k r_t d t
ƒ } x9 | j D]. } t | | ƒ } | r| j j | ƒ qqW| j sud } quqüt | j d | ƒ } n„| j t j k rüt | j d t j ƒ rÍ| j d j d k rÍt | j d | ƒ St | j d t j ƒ rü| j d j d k s=t | j ƒ d k rAt | j d d ƒ rA| j d j d k rAd St } d } d } t } d } t }
x• | j D]Š } | j t j k r–t } | } n<