<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

]                 @   s   d  Z  d d l Z d d l Z d d l m Z d d l m Z d d l m Z Gd d   d e	  Z
 Gd	 d
   d
 e	  Z i  a d d   Z d S)z+George Boutsioukis <gboutsioukis@gmail.com>    N)defaultdict   )pytree)reduce_treec               @   s(   e  Z d  Z e j   Z d d   Z d S)BMNodec             C   s1   i  |  _  g  |  _ t t j  |  _ d |  _ d  S)N )transition_tablefixersnextr   countidcontent)self r   0/opt/alt/python35/lib64/python3.5/btm_matcher.py__init__   s    		zBMNode.__init__N)__name__
__module____qualname__	itertoolsr   r   r   r   r   r   r      s   r   c               @   sL   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d S)BottomMatcherc             C   sF   t    |  _ t   |  _ |  j g |  _ g  |  _ t j d  |  _ d  S)NZRefactoringTool)	setmatchr   rootZnodesr	   logging	getLoggerlogger)r   r   r   r   r      s
    	zBottomMatcher.__init__c             C   sh   |  j  j |  t | j  } | j   } |  j | d |  j } x | D] } | j  j |  qJ Wd  S)Nstart)r	   appendr   Zpattern_treeZget_linear_subpatternaddr   )r   fixerZtreeZlinearmatch_nodesZ
match_noder   r   r   	add_fixer%   s    zBottomMatcher.add_fixerc             C   s  | s | g St  | d t  r g  } x[ | d D]O } |  j | d | } x1 | D]) } | j |  j | d d   |   qS Wq1 W| S| d | j k r t   } | | j | d <n | j | d } | d d   r |  j | d d   d | } n	 | g } | Sd  S)Nr   r   r   )
isinstancetupler   extendr   r   )r   patternr   r!   ZalternativeZ	end_nodesendZ	next_noder   r   r   r   1   s"    +	"	zBottomMatcher.addc       	      C   s  |  j  } t t  } xr| D]j} | } x[| rd | _ x< | j D]1 } t | t j  rD | j d k rD d | _ PqD W| j	 d k r | j } n	 | j	 } | | j
 k r | j
 | } x | j D]- } | | k r g  | | <| | j |  q Wn |  j  } | j d  k	 r| j j rP| | j
 k ry| j
 | } x> | j D]3 } | | j   k rdg  | | <| | j |  qBW| j } q+ Wq W| S)NT;Fr   )r   r   listZwas_checkedZchildrenr#   r   ZLeafvaluetyper   r	   r   parentkeys)	r   ZleavesZcurrent_ac_noderesultsZleafZcurrent_ast_nodeZchildZ
node_tokenr    r   r   r   runS   s>    			!		
	
zBottomMatcher.runc                s7   t  d    f d d       |  j  t  d  d  S)Nz
digraph g{c                s}   xv |  j  j   D]e } |  j  | } t d |  j | j t |  t | j  f  | d k rk t | j    |  q Wd  S)Nz%d -> %d [label=%s] //%sr   )r   r-   printr   	type_reprstrr	   r   )ZnodeZsubnode_keyZsubnode)
print_noder   r   r3      s    )z*BottomMatcher.print_ac.<locals>.print_node})r0   r   )r   r   )r3   r   print_ac   s    
zBottomMatcher.print_acN)r   r   r   r   r"   r   r/   r5   r   r   r   r   r      s
   "=r   c             C   sb   t  sR d d l m } x9 | j j   D]( \ } } t |  t k r& | t  | <q& Wt  j |  |   S)Nr   )python_symbols)_type_reprsZpygramr6   __dict__itemsr+   int
setdefault)Ztype_numr6   namevalr   r   r   r1      s     r1   )
__author__r   r   collectionsr   r   r   Z	btm_utilsr   objectr   r   r7   r1   r   r   r   r   <module>   s   	