*ë
€'á:c       sp     d  Z  	  d k Z  d „  Z  d „  Z $ d „  Z - d „  Z 2 d „  Z = d „  Z d d „  Z d S(	   s   Optimize an expression tree

  - remove Group nodes with no name
  - merge successive Str, single character positive Any nodes and positive
        Literals
Nc    sK     x7  t  |  t i ƒ o |  i t j o  |  i }  q	 W |  Sd  S(   N(   s
   isinstances   exps
   Expressions   Groups   names   Nones
   expression(   s   exp(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/optimize.pys   skip_empty_group s    &c    s    t  |  t i ƒ p t  |  t i ƒ o  t |  i ƒ |  _ nk  t  |  t i ƒ oT  g  }  x5 |  i	 d  r% }  t | ƒ }  | i | ƒ qs W | |  _	 n  t |  d ƒ o  t |  i ƒ nA   t |  d ƒ o- ! x# |  i	 d ! r }  " t |  ƒ qø Wn d  S(   Ni    s
   expressions   expressions(   s
   isinstances   exps
   Expressions	   MaxRepeats   Groups   skip_empty_groups
   expressions   ExpressionLists   subexpss   expressionss   subexps   appends   hasattrs!   optimize_unnamed_groups_recursive(   s   exps   subexps   subexps(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/optimize.pys!   optimize_unnamed_groups_recursive s   )	 	 	c    s$   $ ( * t  |  ƒ + t |  ƒ Sd S(   sb   return an equivalent expression tree but without unnamed groups

    WARNING: has side-effect
    N(   s!   optimize_unnamed_groups_recursives   exps   skip_empty_group(   s   exp(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/optimize.pys   optimize_unnamed_groups$ s   c    sv   - . t  |  t i ƒ pY t  |  t i ƒ o |  i d j p6 t  |  t i ƒ o# t |  i ƒ d j o |  i d j Sd  S(   Ni    i   (	   s
   isinstances   exps
   Expressions   Strs   Literals   inverts   Anys   lens   chars(   s   exp(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/optimize.pys   is_mergeable- s   c    sá   2 3 t  |  t i ƒ o 4 |  i Sn¡ 5 t  |  t i ƒ o/ 6 t o |  i d j p t ‚ 7 |  i	 Sn\ 8 t  |  t i
 ƒ oE 9 t o- t |  i ƒ d j o |  i d j p t ‚ : |  i Sn ; t d t |  ƒ ‚ d  S(   Ni    i   s   unknown exp: %s(   s
   isinstances   exps
   Expressions   Strs   strings   Literals	   __debug__s   inverts   AssertionErrors   chars   Anys   lens   charss   repr(   s   exp(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/optimize.pys   get_merge_text2 s   !7c    sÓ  = A F t  |  d ƒ o G t |  i ƒ |  _ n_ H t  |  d ƒ oK I g  } J x, |  i d J r } K | i t | ƒ ƒ q] WL | |  _ n N t |  t	 i
 ƒ o"O d } P g  } Q xÂ |  i d Q r² } R | o S | i | ƒ nŽ T t | d ƒ o U d } V | i | ƒ n[ W t | ƒ o X d } Y | i | ƒ n- \ t	 i t | d ƒ t | ƒ ƒ | d <qÇ W^ | o | o3 _ t o t | ƒ d j p t ‚ ` | d Sn n b |  Sd S(   sd   merge successive strings and string-like terms into a single Str

    WARNING: has side-effects
    s
   expressions   expressionsi    i   N(   s   hasattrs   exps   merge_stringss
   expressions   subexpss   expressionss   subexps   appends
   isinstances
   Expressions   Seqs   all_stringss   is_mergeables   Strs   get_merge_texts	   __debug__s   lens   AssertionError(   s   exps   subexpss   all_stringss   subexp(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/optimize.pys   merge_strings= s6   	 			 			0$c    s>   d h j |  i ƒ  }  k t |  ƒ }  l t |  ƒ }  m |  Sd S(   sj   expression tree -> optimized expression tree

    Apply various optimizations to the expression tree.
    N(   s   exps   copys   optimize_unnamed_groupss   merge_strings(   s   exp(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/optimize.pys   optimized s
   (	   s   __doc__s
   Expressions   skip_empty_groups!   optimize_unnamed_groups_recursives   optimize_unnamed_groupss   is_mergeables   get_merge_texts   merge_stringss   optimize(   s   get_merge_texts   is_mergeables
   Expressions!   optimize_unnamed_groups_recursives   optimize_unnamed_groupss   skip_empty_groups   optimizes   merge_strings(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/optimize.pys   ?	 s   	'