Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/site-packages/Cython/Plex/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/site-packages/Cython/Plex/__pycache__/Machines.cpython-35.pyc



Z��ZP�@s�ddlmZddlZddlmZyddlmZWn"ek
rdddlmZYnXyeWne	k
r�e
ZYnXeZGdd�de�Z
Gd	d
�d
e�ZGdd�de�ZdS)
�)�absolute_importN�)�
TransitionMap)�maxsize)�maxintc@s|eZdZdZdZdZdZdd�Zdd�Zdd	�Z	d
d�Z
dd
�Zdd�Zdd�Z
dS)�Machinez1A collection of Nodes representing an NFA or DFA.NrcCsg|_i|_dS)N)�states�initial_states)�self�r�G/opt/alt/python35/lib64/python3.5/site-packages/Cython/Plex/Machines.py�__init__"s	zMachine.__init__cCs"x|jD]}|j�q
WdS)N)r�destroy)r
�staterrr�__del__&szMachine.__del__cCs<t�}|j}|d|_||_|jj|�|S)z-Add a new state to the machine and return it.r)�Node�next_state_number�numberr�append)r
�s�nrrr�	new_state+s		
	zMachine.new_statecCs |j�}|j||�|S)N)r�make_initial_state)r
�namerrrr�new_initial_state4szMachine.new_initial_statecCs||j|<dS)N)r	)r
rrrrrr9szMachine.make_initial_statecCs|j|S)N)r	)r
rrrr�get_initial_state<szMachine.get_initial_statecCs�|jd�|jdk	ri|jd�x=t|jj��D]&\}}|jd||jf�q?Wx|jD]}|j|�qsWdS)NzPlex.Machine:
z   Initial states:
z      '%s': %d
)�writer	�sorted�itemsrr�dump)r
�filerrrrrrr?s

"zMachine.dump)�__name__�
__module__�__qualname__�__doc__rrr	r
rrrrrrrrrrrs	rc@s�eZdZdZdZdZdZdZdZdd�Z	dd�Z
dd	�Zd
d�Zdd
�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�ZdS)rzA state of an NFA or DFA.NrcCst�|_t|_dS)N)r�transitions�LOWEST_PRIORITY�action_priority)r
rrrr
Qsz
Node.__init__cCsd|_d|_d|_dS)N)r%�action�epsilon_closure)r
rrrrXs		zNode.destroycCs|jj||�dS)N)r%�add)r
�eventrrrr�add_transition^szNode.add_transitioncCs|jd|�dS)z5Add an epsilon-move from this state to another state.�N)r,)r
rrrr�link_toaszNode.link_tocCs%||jkr!||_||_dS)z�Make this an accepting state with the given action. If
        there is already an action, choose the action with highest
        priority.N)r'r()r
r(�priorityrrr�
set_actiones	zNode.set_actioncCs|jS)N)r()r
rrr�
get_actionmszNode.get_actioncCs|jS)N)r')r
rrr�get_action_prioritypszNode.get_action_prioritycCs
|jdk	S)N)r()r
rrr�is_acceptingsszNode.is_acceptingcCsd|jS)NzState %d)r)r
rrr�__str__vszNode.__str__cCs]|jd|j�|jj|�|j}|j}|dk	rY|jd||f�dS)Nz
   State %d:
z      %s [priority %d]
)rrr%rr(r')r
r r(r/rrrrys		z	Node.dumpcCs|j|jkS)N)r)r
�otherrrr�__lt__�szNode.__lt__)r!r"r#r$r%r(r'rr)r
rr,r.r0r1r2r3r4rr6rrrrrIs"rc
@s�eZdZdZdZdZdZddddddddddiZd	d
�Zdd�Z	dd
d�Z
dd�Zedd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �ZdS)!�FastMachinezd
    FastMachine is a deterministic machine represented in a way that
    allows fast scanning.
    Nrr-�bol�eol�eof�elsecCsi|_g|_dS)N)r	r)r
rrrr
�s	zFastMachine.__init__cCs"x|jD]}|j�q
WdS)N)r�clear)r
rrrrr�szFastMachine.__del__cCsM|j}|d|_|jj�}||d<||d<|jj|�|S)Nrrr()�next_number�new_state_template�copyrr)r
r(r�resultrrrr�s	


zFastMachine.new_statecCs||j|<dS)N)r	)r
rrrrrr�szFastMachine.make_initial_statecCs�t|�tkrt|\}}||kr8||d<q~||kr~x7||krp||t|�<|d7}qGWn
|||<dS)Nr;r)�type�tuple�unichr)r
rr+rrZcode0�code1rrr�add_transitions�s

zFastMachine.add_transitionscCs|j|S)N)r	)r
rrrrr�szFastMachine.get_initial_statecCs�|jd�|jd�xDt|jj��D]-\}}|jdt|�|df�q0Wx!|jD]}|j||�qkWdS)NzPlex.FastMachine:
z   Initial states:
z
      %s: %s
r)rrr	r�reprr�
dump_state)r
r rrrrrr�s

"%zFastMachine.dumpcCsP|jd|d�|j||�|d}|dk	rL|jd|�dS)Nz
   State %d:
rr(z	      %s
)r�dump_transitions)r
rr r(rrrrG�s

zFastMachine.dump_statec
Cs�i}i}x�|j�D]�\}}t|�dkr�|jt|�d�}|dkrqg}||t|�<|j|�qt|�dkr|||<qWi}xH|jD]=}|jt|�d�}	|	r�|j|	�}
|||
<q�W|j�}|j�xB|D]:}
|j	|
�}||
}|j
d||df�qWxAd	D]9}|j|d�}|rT|j
d||df�qTWdS)
Nr�z      %s --> State %d
rr8r9r:r;)r8r9r:r;)r�len�get�idrr�chars_to_ranges�keys�sort�ranges_to_stringr)
r
rr Zchars_leading_to_stateZspecial_to_state�cr�charsZranges_to_state�	char_listZrangesZranges_list�keyrrrrH�s6



zFastMachine.dump_transitionscCs�|j�d}t|�}g}x�||kr�t||�}|}|d7}x>||kr�t||�|dkr�|d7}|d7}qTW|jt|�t|�f�q%Wt|�S)Nrr)rOrJ�ordr�chrrB)r
rS�irr@�c1�c2rrrrM�s

)
#zFastMachine.chars_to_rangescCsdjt|j|��S)N�,)�join�map�range_to_string)r
Z
range_listrrrrP�szFastMachine.ranges_to_stringcCs@|\}}||kr"t|�Sdt|�t|�fSdS)Nz%s..%s)rF)r
Zrange_tuplerXrYrrrr]�s
zFastMachine.range_to_string)r!r"r#r$r	rr=r>r
rrrrrErrrGrHrMrPr]rrrrr7�s"$	
r7)�
__future__r�sysZTransitionsrrr�ImportErrorrC�	NameErrorrVr&�objectrrr7rrrr�<module>	s

-@