
    -Ph\                     v    d Z ddlZddlmZ dZe Z G d d          Z G d d	          Z G d
 d          ZdS )z=
Python Lexical Analyser

Classes for building NFAs and DFAs
    N   )TransitionMapic                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
Machinez1A collection of Nodes representing an NFA or DFA.c                 0    g | _         i | _        d| _        d S )Nr   )statesinitial_statesnext_state_numberselfs    T/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/Cython/Plex/Machines.py__init__zMachine.__init__   s     !"    c                 B    | j         D ]}|                                 d S N)r   destroyr   states     r   __del__zMachine.__del__   s,    [ 	 	EMMOOOO	 	r   c                     t                      }| j        }|dz   | _        ||_        | j                            |           |S )z-Add a new state to the machine and return it.r   )Noder
   numberr   append)r   sns      r   	new_statezMachine.new_state   sA    FF#5!"Q1r   c                 Z    |                                  }|                     ||           |S r   )r   make_initial_stater   namer   s      r   new_initial_statezMachine.new_initial_state#   s,      e,,,r   c                     || j         |<   d S r   r	   r   s      r   r   zMachine.make_initial_state(       $)D!!!r   c                     | j         |         S r   r#   r   r    s     r   get_initial_statezMachine.get_initial_state+       "4((r   c                 <   |                     d           | j        `|                     d           t          | j                                                  D ]$\  }}|                     d||j        fz             %| j        D ]}|                    |           d S )NzPlex.Machine:
   Initial states:
z      '%s': %d
)writer	   sorteditemsr   r   dump)r   filer    r   r   s        r   r.   zMachine.dump.   s    

$%%%*JJ-...!'(;(A(A(C(C!D!D F Fu

-u|0DDEEEE 	 	AFF4LLLL	 	r   N)__name__
__module____qualname____doc__r   r   r   r!   r   r'   r.    r   r   r   r      s        ;;# # #
      
* * *) ) )    r   r   c                   Z    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd ZdS )r   zA state of an NFA or DFA.c                 n    t                      | _        t          | _        d | _        d| _        d | _        d S )Nr   )r   transitionsLOWEST_PRIORITYaction_priorityactionr   epsilon_closurer   s    r   r   zNode.__init__;   s4     )??.#r   c                 0    d | _         d | _        d | _        d S r   )r7   r:   r;   r   s    r   r   zNode.destroyD   s    #r   c                 <    | j                             ||           d S r   )r7   add)r   eventr   s      r   add_transitionzNode.add_transitionI   s!    UI.....r   c                 2    |                      d|           dS )z5Add an epsilon-move from this state to another state. N)r@   r   s     r   link_tozNode.link_toL   s    B&&&&&r   c                 <    || j         k    r|| _        || _         dS dS )zMake this an accepting state with the given action. If
        there is already an action, choose the action with highest
        priority.N)r9   r:   )r   r:   prioritys      r   
set_actionzNode.set_actionP   s/     d*** DK#+D    +*r   c                     | j         S r   r:   r   s    r   
get_actionzNode.get_actionX   s
    {r   c                     | j         S r   )r9   r   s    r   get_action_priorityzNode.get_action_priority[   s    ##r   c                     | j         d uS r   rH   r   s    r   is_acceptingzNode.is_accepting^   s    {$&&r   c                     d| j         z  S )NzState %dr   r   s    r   __str__zNode.__str__a   s    DK''r   c                     |                     d| j        z             | j                            |           | j        }| j        }||                     d||fz             d S d S )N   State %d:
z      %s [priority %d]
)r+   r   r7   r.   r:   r9   )r   r/   r:   rE   s       r   r.   z	Node.dumpd   su    

#dk1222 	d###'JJ1VX4FFGGGGG r   c                 "    | j         |j         k     S r   rO   )r   others     r   __lt__zNode.__lt__p   s    {U\))r   c                 0    t          |           t          z  S r   )idmaxintr   s    r   __hash__zNode.__hash__s   s    $xx&  r   N)r0   r1   r2   r3   r   r   r@   rC   rF   rI   rK   rM   rP   r.   rU   rY   r4   r   r   r   r   8   s        ##$ $ $$ $ $
/ / /' ' ', , ,  $ $ $' ' '( ( (
H 
H 
H* * *! ! ! ! !r   r   c                       e Zd ZdZd Zd ZddZd Zefde	de
j        fd	Zd
 Zd Zd Zd ZdedefdZdefdZdefdZdS )FastMachinezd
    FastMachine is a deterministic machine represented in a way that
    allows fast scanning.
    c                 J    i | _         g | _        d| _        d d d d d d| _        d S )Nr   )rB   boleoleofelse)r	   r   next_numbernew_state_templater   s    r   r   zFastMachine.__init__}   s9     T$tT#
 #
r   c                 B    | j         D ]}|                                 d S r   )r   clearr   s     r   r   zFastMachine.__del__   s,    [ 	 	EKKMMMM	 	r   Nc                     | j         }|dz   | _         | j                                        }||d<   ||d<   | j                            |           |S )Nr   r   r:   )ra   rb   copyr   r   )r   r:   r   results       r   r   zFastMachine.new_state   sY    $($4!A:(--//!x!x6"""r   c                     || j         |<   d S r   r#   r   s      r   r   zFastMachine.make_initial_state   r$   r   r   rX   c                     t          |          t          u rB|\  }}|| k    r||d<   d S ||k    r%t          ||          D ]}||t          |          <   d S d S |||<   d S )Nr`   )typetuplerangechr)r   r   r?   r   rX   code0code1codes           r   add_transitionszFastMachine.add_transitions   s    
 ;;% LE5 )f&!%// 1 1D'0E#d))$$ !1 1 %E%LLLr   c                     | j         |         S r   r#   r&   s     r   r'   zFastMachine.get_initial_state   r(   r   c                 P   |                     d           |                     d           t          | j                                                  D ]4\  }}|                     dt	          |          d|d         d           5| j        D ]}|                     ||           d S )NzPlex.FastMachine:
r*   z      z: r   
)r+   r,   r	   r-   reprr   
dump_state)r   r/   r    r   s       r   r.   zFastMachine.dump   s    

()))

)***!$"5";";"="=>> 	I 	IKD%JJJ4::::uXGHHHH[ 	) 	)EOOE4((((	) 	)r   c                     |                     d|d         z             |                     ||           |d         }||                     d|z             d S d S )NrR   r   r:   z	      %s
)r+   dump_transitions)r   r   r/   r:   s       r   rv   zFastMachine.dump_state   sh    

#eHo5666eT***xJJ|f,----- r   c                    i }i }|                                 D ]~\  }}t          |          dk    rN|                    t          |                    }|g }||t          |          <   |                    |           ft          |          dk    r|||<   i }| j        D ]@}|                    t          |                    }	|	r|                     |	          }
|||
<   At          |          D ]?}
|                     |
          }||
         }|	                    d||d         fz             @dD ]9}|                    |          }|r |	                    d||d         fz             :d S )Nr      z      %s --> State %d
r   )r]   r^   r_   r`   )
r-   lengetrW   r   r   chars_to_rangesr,   ranges_to_stringr+   )r   r   r/   chars_leading_to_statespecial_to_statecr   charsranges_to_state	char_listrangeskeys               r   rx   zFastMachine.dump_transitions   s   !#kkmm 	( 	(FQ1vv{{.222a5599=E49*2a551QQ1&' #[ 	0 	0E.222e99==I 0--i88*/'_-- 	K 	KF''//C#F+EJJ0Cx3IIJJJJ0 	O 	OC$((--E O

4U8_7MMNNN	O 	Or   r   returnc                    |                                  d}t          |          }g }||k     rt          ||                   }|}|dz  }||k     rHt          ||                   |dz   k    r,|dz  }|dz  }||k     rt          ||                   |dz   k    ,|                    t	          |          t	          |          f           ||k     t          |          S )Nr   r   )sortr{   ordr   rm   rk   )r   r   ir   rg   c1c2s          r   r}   zFastMachine.chars_to_ranges   s      !"9~~!eeYq\""BBFAa%%C	!--a77Qa a%%C	!--a77 MM3r77CGG,--- !ee V}}r   c                 R    d                     t          | j        |                    S )N,)joinmaprange_to_string)r   
range_lists     r   r~   zFastMachine.ranges_to_string   s!    xxD0*==>>>r   range_tuplec                 D    |\  }}||k    rt          |          S |d|S )Nz..)ru   )r   r   r   r   s       r   r   zFastMachine.range_to_string   s3    R8888O$$b$$$r   r   )r0   r1   r2   r3   r   r   r   r   rX   dictcythonintrq   r'   r.   rv   rx   listrk   r}   strr~   r   r4   r   r   r[   r[   x   s&        
 
 
     * * * SY % %T %VZ % % % %) ) )) ) ). . .O O O6 %    $?c ? ? ? ?%5 % % % % % %r   r[   )	r3   r   Transitionsr   rX   r8   r   r   r[   r4   r   r   <module>r      s      & & & & & &	'& & & & & & & &R=! =! =! =! =! =! =! =!@v% v% v% v% v% v% v% v% v% v%r   