
    h\                     b    S r SSKrSSKJr  Sr\* r " S S5      r " S S	5      r " S
 S5      rg)z=
Python Lexical Analyser

Classes for building NFAs and DFAs
    N   )TransitionMapic                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)Machine   z1A collection of Nodes representing an NFA or DFA.c                 .    / U l         0 U l        SU l        g )Nr   )statesinitial_statesnext_state_numberselfs    N/var/www/fran/franai/venv/lib/python3.13/site-packages/Cython/Plex/Machines.py__init__Machine.__init__   s     !"    c                 J    U R                    H  nUR                  5         M     g N)r	   destroyr   states     r   __del__Machine.__del__   s    [[EMMO !r   c                     [        5       nU R                  nUS-   U l        X!l        U R                  R	                  U5        U$ )z-Add a new state to the machine and return it.r   )Noder   numberr	   append)r   sns      r   	new_stateMachine.new_state   s<    F#55!"Q1r   c                 H    U R                  5       nU R                  X5        U$ r   )r   make_initial_stater   namer   s      r   new_initial_stateMachine.new_initial_state#   s!     ,r   c                      X R                   U'   g r   r
   r#   s      r   r"   Machine.make_initial_state(       $)D!r   c                      U R                   U   $ r   r(   r   r$   s     r   get_initial_stateMachine.get_initial_state+       ""4((r   c                 @   UR                  S5        U R                  b\  UR                  S5        [        U R                  R                  5       5       H$  u  p#UR                  SX#R                  4-  5        M&     U R
                   H  nUR                  U5        M     g )NzPlex.Machine:
   Initial states:
z      '%s': %d
)writer
   sorteditemsr   r	   dump)r   filer$   r   r   s        r   r5   Machine.dump.   s{    

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

-||0DDE "EAFF4L r   )r
   r   r	   N)__name__
__module____qualname____firstlineno____doc__r   r   r   r%   r"   r-   r5   __static_attributes__ r   r   r   r      s(    ;#

*)r   r   c                   `    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rSrg)r   8   zA state of an NFA or DFA.c                 b    [        5       U l        [        U l        S U l        SU l        S U l        g )Nr   )r   transitionsLOWEST_PRIORITYaction_priorityactionr   epsilon_closurer   s    r   r   Node.__init__;   s,     )?.#r   c                 .    S U l         S U l        S U l        g r   )rB   rE   rF   r   s    r   r   Node.destroyD   s    #r   c                 :    U R                   R                  X5        g r   )rB   add)r   eventr   s      r   add_transitionNode.add_transitionI   s    U.r   c                 (    U R                  SU5        g)z5Add an epsilon-move from this state to another state. N)rM   r   s     r   link_toNode.link_toL   s    B&r   c                 <    X R                   :  a  Xl        X l         gg)z{Make this an accepting state with the given action. If
there is already an action, choose the action with highest
priority.N)rD   rE   )r   rE   prioritys      r   
set_actionNode.set_actionP   s      *** K#+  +r   c                     U R                   $ r   rE   r   s    r   
get_actionNode.get_actionX   s    {{r   c                     U R                   $ r   )rD   r   s    r   get_action_priorityNode.get_action_priority[   s    ###r   c                     U R                   S L$ r   rX   r   s    r   is_acceptingNode.is_accepting^   s    {{$&&r   c                      SU R                   -  $ )NzState %dr   r   s    r   __str__Node.__str__a   s    DKK''r   c                     UR                  SU R                  -  5        U R                  R                  U5        U R                  nU R
                  nUb  UR                  SX#4-  5        g g )N   State %d:
z      %s [priority %d]
)r2   r   rB   r5   rE   rD   )r   r6   rE   rT   s       r   r5   	Node.dumpd   sb    

#dkk12 	d#''JJ1V4FFG r   c                 4    U R                   UR                   :  $ r   rb   )r   others     r   __lt__Node.__lt__p   s    {{U\\))r   c                 &    [        U 5      [        -  $ r   )idmaxintr   s    r   __hash__Node.__hash__s   s    $x&  r   )rE   rD   rF   r   rB   N)r8   r9   r:   r;   r<   r   r   rM   rQ   rU   rY   r\   r_   rc   r5   rj   ro   r=   r>   r   r   r   r   8   sB    #$$
/',$'(
H*!r   r   c                       \ rS rSrSrS rS rSS jrS r\	4S\
S	\R                  4S
 jjrS rS rS rS rS\S\4S jrS\4S jrS\4S jrSrg)FastMachinex   zX
FastMachine is a deterministic machine represented in a way that
allows fast scanning.
c                 H    0 U l         / U l        SU l        S S S S S S.U l        g )Nr   )rP   boleoleofelse)r
   r	   next_numbernew_state_templater   s    r   r   FastMachine.__init__}   s.     T$tT#
r   c                 J    U R                    H  nUR                  5         M     g r   )r	   clearr   s     r   r   FastMachine.__del__   s    [[EKKM !r   Nc                     U R                   nUS-   U l         U R                  R                  5       nX#S'   XS'   U R                  R	                  U5        U$ )Nr   r   rE   )ry   rz   copyr	   r   )r   rE   r   results       r   r   FastMachine.new_state   sT    $($4$4!A:((--/!x!x6"r   c                      X R                   U'   g r   r(   r#   s      r   r"   FastMachine.make_initial_state   r*   r   r   rn   c                     [        U5      [        L a5  Uu  pVXT* :X  a  X1S'   g Xd:w  a   [        XV5       H  nX1[        U5      '   M     g g X1U'   g )Nrx   )typetuplerangechr)r   r   rL   r   rn   code0code1codes           r   add_transitionsFastMachine.add_transitions   sT    
 ;% LE )f!%/D'0#d)$ 0 ! %%Lr   c                      U R                   U   $ r   r(   r,   s     r   r-   FastMachine.get_initial_state   r/   r   c                 4   UR                  S5        UR                  S5        [        U R                  R                  5       5       H+  u  p#UR                  S[	        U5      < SUS   < S35        M-     U R
                   H  nU R                  X15        M     g )NzPlex.FastMachine:
r1   z      z: r   
)r2   r3   r
   r4   reprr	   
dump_state)r   r6   r$   r   s       r   r5   FastMachine.dump   so    

()

)*!$"5"5";";"=>KDJJ4:uXGH ?[[EOOE( !r   c                     UR                  SUS   -  5        U R                  X5        US   nUb  UR                  SU-  5        g g )Nrf   r   rE   z	      %s
)r2   dump_transitions)r   r   r6   rE   s       r   r   FastMachine.dump_state   sK    

#eHo56e*xJJ|f,- r   c                    0 n0 nUR                  5        Hh  u  pV[        U5      S:X  a?  UR                  [        U5      5      nUc  / nXs[        U5      '   UR	                  U5        MS  [        U5      S::  d  Md  XdU'   Mj     0 nU R
                   H;  nUR                  [        U5      5      n	U	(       d  M&  U R                  U	5      n
XU
'   M=     [        U5       H0  n
U R                  U
5      nX   nUR                  SXS   4-  5        M2     S H5  nUR                  U5      nU(       d  M  UR                  SXS   4-  5        M7     g )Nr      z      %s --> State %d
r   )ru   rv   rw   rx   )
r4   lengetrm   r   r	   chars_to_rangesr3   ranges_to_stringr2   )r   r   r6   chars_leading_to_statespecial_to_statecr   charsranges_to_state	char_listrangeskeys               r   r   FastMachine.dump_transitions   s5   !#kkmFQ1v{.222a59=E492a51QQ1&'# $ [[E.222e9=Iy--i8*/'	 !
 _-F''/C#+EJJ0Cx3IIJ . 1C$((-Eu

48_7MMN 1r   r   returnc                 \   UR                  5         Sn[        U5      n/ nX#:  a~  [        X   5      nUnUS-  nX#:  a9  [        X   5      US-   :X  a%  US-  nUS-  nX#:  a  [        X   5      US-   :X  a  M%  UR                  [	        U5      [	        U5      45        X#:  a  M~  [        U5      $ )Nr   r   )sortr   ordr   r   r   )r   r   ir   r   c1c2s          r   r   FastMachine.chars_to_ranges   s      !"9~eY\"BBFA%C	-a7Qa %C	-a7 MM3r7CG,- e V}r   c                 L    SR                  [        U R                  U5      5      $ )N,)joinmaprange_to_string)r   
range_lists     r   r   FastMachine.ranges_to_string   s    xxD00*=>>r   range_tuplec                 <    Uu  p#X#:X  a  [        U5      $ U< SU< 3$ )Nz..)r   )r   r   r   r   s       r   r   FastMachine.range_to_string   s(    88OV2bV$$r   )r
   rz   ry   r	   r   )r8   r9   r:   r;   r<   r   r   r   r"   rn   dictcythonintr   r-   r5   r   r   listr   r   strr   r   r=   r>   r   r   rr   rr   x   sy    
* SY %T %VZZ %)).O6 % $?c ?%5 %r   rr   )	r<   r   Transitionsr   rn   rC   r   r   rr   r>   r   r   <module>r      s@     &	'& &R=! =!@v% v%r   