Ë
    È[;jD  ã                   ób   — 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y)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
y	)
ÚMachinez1A collection of Nodes representing an NFA or DFA.c                 ó.   — g | _         i | _        d| _        y )Nr   )ÚstatesÚinitial_statesÚnext_state_number©Úselfs    ú]G:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\Cython/Plex/Machines.pyÚ__init__zMachine.__init__   s   € ØˆŒØ ˆÔØ!"ˆÕó    c                 óF   — | j                   D ]  }|j                  «        Œ y ©N)r   Údestroy©r   Ústates     r   Ú__del__zMachine.__del__   s   € Ø—[”[ˆEØ�M‰M�Oñ !r   c                 óŠ   — t        «       }| j                  }|dz   | _        ||_        | j                  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   s>   € ä‹FˆØ#×5Ñ5ˆØ!" Q¡ˆÔØˆŒØ�‰×Ñ˜1ÔØˆr   c                 óJ   — | j                  «       }| j                  ||«       |S r   )r   Úmake_initial_state©r   Únamer   s      r   Únew_initial_statezMachine.new_initial_state#   s#   € Ø—‘Ó ˆØ×Ñ  eÔ,Øˆr   c                 ó"   — || j                   |<   y 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                 ó:  — |j                  d«       | j                  �\|j                  d«       t        | j                  j                  «       «      D ]%  \  }}|j                  d||j                  fz  «       Œ' | j
                  D ]  }|j                  |«       Œ y )NzPlex.Machine:
ú   Initial states:
z      '%s': %d
)Úwriter	   ÚsortedÚitemsr   r   Údump)r   Úfiler    r   r   s        r   r.   zMachine.dump.   s   € Ø�
‰
Ð$Ô%Ø×ÑÐ*Ø�J‰JÐ-Ô.Ü!'¨×(;Ñ(;×(AÑ(AÓ(CÖ!D‘��uØ—
‘
Ð-°°u·|±|Ð0DÑDÕEð "Eà—”ˆAØ�F‰F�4�Lñ r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r!   r   r'   r.   © r   r   r   r      s(   „ Ù;ò#ò
òòò
*ò)ór   r   c                   óX   — 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y)r   zA state of an NFA or DFA.c                 ób   — t        «       | _        t        | _        d | _        d| _        d | _        y )Nr   )r   ÚtransitionsÚLOWEST_PRIORITYÚaction_priorityÚactionr   Úepsilon_closurer   s    r   r   zNode.__init__;   s,   € ô )›?ˆÔÜ.ˆÔØˆŒØˆŒØ#ˆÕr   c                 ó.   — d | _         d | _        d | _        y r   )r7   r:   r;   r   s    r   r   zNode.destroyD   s   € ØˆÔØˆŒØ#ˆÕr   c                 ó<   — | j                   j                  ||«       y r   )r7   Úadd)r   Úeventr   s      r   Úadd_transitionzNode.add_transitionI   s   € Ø×Ñ×Ñ˜U IÕ.r   c                 ó(   — | j                  d|«       y)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                   kD  r|| _        || _         yy)z‹Make 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×*Ñ*Ò*Ø ˆDŒKØ#+ˆ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   € Ø˜DŸK™KÑ'Ð'r   c                 óØ   — |j                  d| j                  z  «       | j                  j                  |«       | j                  }| j
                  }|�|j                  d||fz  «       y y )Nú   State %d:
z      %s [priority %d]
)r+   r   r7   r.   r:   r9   )r   r/   r:   rE   s       r   r.   z	Node.dumpd   sd   € à�
‰
Ð# d§k¡kÑ1Ô2ð 	×Ñ×Ñ˜dÔ#à—‘ˆØ×'Ñ'ˆØÐØ�J‰JÐ1°V¸XÐ4FÑFÕGð r   c                 ó4   — | j                   |j                   k  S r   rO   )r   Úothers     r   Ú__lt__zNode.__lt__p   s   € Ø�{‰{˜UŸ\™\Ñ)Ð)r   c                 ó&   — t        | «      t        z  S r   )ÚidÚmaxintr   s    r   Ú__hash__zNode.__hash__s   s   € ä�$‹xœ&Ñ Ð r   N)r0   r1   r2   r3   r   r   r@   rC   rF   rI   rK   rM   rP   r.   rU   rY   r4   r   r   r   r   8   sB   „ Ù#ò$ò$ò
/ò'ò,òò$ò'ò(ò
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y)ÚFastMachinezd
    FastMachine is a deterministic machine represented in a way that
    allows fast scanning.
    c                 óH   — i | _         g | _        d| _        d d d d d dœ| _        y )Nr   )rB   ÚbolÚeolÚeofÚelse)r	   r   Únext_numberÚnew_state_templater   s    r   r   zFastMachine.__init__}   s.   € Ø ˆÔØˆŒØˆÔà˜T¨$°tÀTñ#
ˆÕr   c                 óF   — | j                   D ]  }|j                  «        Œ y r   )r   Úclearr   s     r   r   zFastMachine.__del__…   s   € Ø—[”[ˆEØ�K‰K�Mñ !r   Nc                 ó°   — | j                   }|dz   | _         | j                  j                  «       }||d<   ||d<   | j                  j	                  |«       |S )Nr   r   r:   )ra   rb   Úcopyr   r   )r   r:   r   Úresults       r   r   zFastMachine.new_state‰   sX   € Ø$(×$4Ñ$4ˆØ! A™:ˆÔØ×(Ñ(×-Ñ-Ó/ˆØ!ˆˆxÑØ!ˆˆxÑØ�‰×Ñ˜6Ô"Øˆr   c                 ó"   — || j                   |<   y r   r#   r   s      r   r   zFastMachine.make_initial_state’   r$   r   r   rX   c                 óž   — t        |«      t        u r7|\  }}|| k(  r||d<   y ||k7  r t        ||«      D ]  }||t        |«      <   Œ y y |||<   y )Nr`   )ÚtypeÚtupleÚrangeÚchr)r   r   r?   r   rX   Úcode0Úcode1Úcodes           r   Úadd_transitionszFastMachine.add_transitions•   sb   € ô
 �‹;œ%ÑØ ‰LˆE�5Ø˜˜ÒØ )��f’Ø˜&’Ü! %¨Ö/�DØ'0�Eœ#˜d›)Ò$ñ 0ð !ð %ˆE�%ŠLr   c                 ó    — | j                   |   S r   r#   r&   s     r   r'   zFastMachine.get_initial_state¤   r(   r   c                 ó,  — |j                  d«       |j                  d«       t        | j                  j                  «       «      D ])  \  }}|j                  dt	        |«      ›d|d   ›d�«       Œ+ | j
                  D ]  }| j                  ||«       Œ y )NzPlex.FastMachine:
r*   z      z: r   Ú
)r+   r,   r	   r-   Úreprr   Ú
dump_state)r   r/   r    r   s       r   r.   zFastMachine.dump§   ss   € Ø�
‰
Ð(Ô)Ø�
‰
Ð)Ô*Ü! $×"5Ñ"5×";Ñ";Ó"=Ö>‰KˆD�%Ø�JŠJ¬4°­:°u¸X³ÐGÕHð ?à—[”[ˆEØ�O‰O˜E 4Õ(ñ !r   c                 óŽ   — |j                  d|d   z  «       | j                  ||«       |d   }|�|j                  d|z  «       y y )NrR   r   r:   z	      %s
)r+   Údump_transitions)r   r   r/   r:   s       r   rv   zFastMachine.dump_state¯   sM   € à�
‰
Ð# e¨H¡oÑ5Ô6à×Ñ˜e TÔ*à�x‘ˆØÐØ�J‰J�| fÑ,Õ-ð r   c                 ón  — i }i }|j                  «       D ]e  \  }}t        |«      dk(  r>|j                  t        |«      «      }|€g }||t        |«      <   |j	                  |«       ŒRt        |«      dk  sŒa|||<   Œg i }| j
                  D ]5  }|j                  t        |«      «      }	|	sŒ | j                  |	«      }
|||
<   Œ7 t        |«      D ]1  }
| j                  |
«      }||
   }|j                  d||d   fz  «       Œ3 dD ]/  }|j                  |«      }|sŒ|j                  d||d   fz  «       Œ1 y )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¹   sA  € Ø!#ÐØÐØ—k‘k–m‰FˆQ�Ü�1‹v˜Š{Ø.×2Ñ2´2°a³5Ó9�Ø�=Ø�EØ49Ð*¬2¨a«5Ñ1Ø—‘˜Q•Ü�Q“˜1“Ø&'Ð  Ò#ð $ð ˆØ—[”[ˆEØ.×2Ñ2´2°e³9Ó=ˆIÚØ×-Ñ-¨iÓ8�Ø*/� Ò'ð	 !ô
 ˜_Ö-ˆFØ×'Ñ'¨Ó/ˆCØ# FÑ+ˆEØ�J‰JÐ0°C¸¸x¹Ð3IÑIÕJð .ó 1ˆCØ$×(Ñ(¨Ó-ˆEÚØ—
‘
Ð4¸¸UÀ8¹_Ð7MÑMÕNñ 1r   r„   Úreturnc                 óZ  — |j                  «        d}t        |«      }g }||k  r}t        ||   «      }|}|dz  }||k  r8t        ||   «      |dz   k(  r$|dz  }|dz  }||k  rt        ||   «      |dz   k(  rŒ$|j                  t	        |«      t	        |«      f«       ||k  rŒ}t        |«      S )Nr   r   )Úsortr{   Úordr   rm   rk   )r   r„   Úir   rg   Úc1Úc2s          r   r}   zFastMachine.chars_to_rangesÔ   s¾   € Ø�‰Ôð  !ˆÜ" 9›~ˆØˆØ�!ŠeÜ�Y˜q‘\Ó"ˆBØˆBØ�‰FˆAØ�a’%œC 	¨!¡Ó-°°a±Ò7Ø�Q‘�Ø�a‘�ð �a’%œC 	¨!¡Ó-°°a±Ó7ð �M‰Mœ3˜r›7¤C¨£GÐ,Ô-ð �!‹eô �V‹}Ðr   c                 óL   — dj                  t        | j                  |«      «      S )NÚ,)ÚjoinÚmapÚrange_to_string)r   Ú
range_lists     r   r~   zFastMachine.ranges_to_stringæ   s   € Ø�x‰xœ˜D×0Ñ0°*Ó=Ó>Ð>r   Úrange_tuplec                 ó:   — |\  }}||k(  rt        |«      S |›d|›�S )Nz..)ru   )r   r”   rŒ   r�   s       r   r’   zFastMachine.range_to_stringé   s,   € Ø‰ˆˆRØ�Š8Ü˜“8ˆOà�V˜2˜b˜VÐ$Ð$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   sy   „ ñò
òóò*ð SYñ % Tð %ÀVÇZÁZó %ò)ò)ò.òOð6¨ð °%ó ð$?¨có ?ð%¨5ô %r   r[   )	r3   r—   ÚTransitionsr   rX   r8   r   r   r[   r4   r   r   Ú<module>rœ      s@   ðñó Ý &à	€à�'€÷&ñ &÷R=!ñ =!÷@v%ò v%r   