
    NgT(                     F    d dl mZ d dlmZ d dlmZ  G d de          ZdS )    )StringIO)Token)CommonTokenStreamc                   D    e Zd ZdZdZdZdZ fdZd Zd Z	efdZ
efd	Zefd
Zd ZefdZd Zd Zd Zd ZefdZd Zd Zd Zd ZefdZd Zd Zd ZdedefdZd Z G d de          Z  G d  d!e           Z! G d" d#e!          Z" G d$ d%e           Z# xZ$S )&TokenStreamRewriter)tokensprogramslastRewriteTokenIndexesdefaultd   r   c                     t          t          |                                            || _        | j        g i| _        i | _        dS )zw
        :type  tokens: antlr4.BufferedTokenStream.BufferedTokenStream
        :param tokens:
        :return:
        N)superr   __init__r   DEFAULT_PROGRAM_NAMEr	   r
   )selfr   	__class__s     V/var/www/html/ai-engine/env/lib/python3.11/site-packages/antlr4/TokenStreamRewriter.pyr   zTokenStreamRewriter.__init__   sF     	!4((113332B7')$$$    c                     | j         S N)r   r   s    r   getTokenStreamz"TokenStreamRewriter.getTokenStream   s
    {r   c                 r    | j                             |d           }|r|| j        |         | j         |<   d S d S r   )r	   getMIN_TOKEN_INDEX)r   instruction_indexprogram_nameinss       r   rollbackzTokenStreamRewriter.rollback"   sN    md33 	W*-d.BDU.U*VDM,'''	W 	Wr   c                 <    |                      | j        |           d S r   )r   r   r   r   s     r   deleteProgramz!TokenStreamRewriter.deleteProgram'   s    d*L99999r   c                 >    |                      |j        ||           d S r   )insertAfter
tokenIndexr   tokentextr   s       r   insertAfterTokenz$TokenStreamRewriter.insertAfterToken*   s#    )4>>>>>r   c                     |                      | j        |dz   |          }|                     |          }t          |          |_        |                    |           d S N   )InsertAfterOpr   
getProgramleninstructionIndexappend)r   indexr(   r   oprewritess         r   r$   zTokenStreamRewriter.insertAfter-   sV    UQY==??<00!(mmr   c                 >    |                      | j        ||           d S r   )insertBeforer   r   r2   r(   s      r   insertBeforeIndexz%TokenStreamRewriter.insertBeforeIndex3   s#    $3UDAAAAAr   c                 >    |                      ||j        |           d S r   )r6   r%   r&   s       r   insertBeforeTokenz%TokenStreamRewriter.insertBeforeToken6   s#    ,(8$?????r   c                     |                      | j        ||          }|                     |          }t          |          |_        |                    |           d S r   )InsertBeforeOpr   r.   r/   r0   r1   )r   r   r2   r(   r3   r4   s         r   r6   z TokenStreamRewriter.insertBefore9   sR      eT::??<00!(mmr   c                 @    |                      | j        |||           d S r   replacer   r7   s      r   replaceIndexz TokenStreamRewriter.replaceIndex?   s#    T.udCCCCCr   c                 @    |                      | j        |||           d S r   r>   )r   from_idxto_idxr(   s       r   replaceRangez TokenStreamRewriter.replaceRangeB   s#    T.&$GGGGGr   c                 T    |                      | j        |j        |j        |           d S r   )r?   r   r%   )r   r'   r(   s      r   replaceSingleTokenz&TokenStreamRewriter.replaceSingleTokenE   s*    T.0@%BRTXYYYYYr   c                 J    |                      ||j        |j        |           d S r   )r?   r%   )r   
from_tokento_tokenr(   r   s        r   replaceRangeTokensz&TokenStreamRewriter.replaceRangeTokensH   s&    \:#8(:MtTTTTTr   c           	         t          ||k    |dk     |dk     |t          | j        j                  k    f          r;t          d                    ||t          | j        j                                      |                     ||| j        |          }|                     |          }t          |          |_        |                    |           d S )Nr   z'replace: range invalid: {}..{}(size={}))	anyr/   r   
ValueErrorformat	ReplaceOpr.   r0   r1   )r   r   rB   rC   r(   r3   r4   s          r   r?   zTokenStreamRewriter.replaceK   s    6!8a<!Vs4;K]G^G^=^_`` 	m9@@6SVW[WbWiSjSjkkm m m^^Hfdk4@@??<00!(mmr   c                 >    |                      | j        ||           d S r   deleter   )r   r'   s     r   deleteTokenzTokenStreamRewriter.deleteTokenT   !    D-ue<<<<<r   c                 >    |                      | j        ||           d S r   rQ   )r   r2   s     r   deleteIndexzTokenStreamRewriter.deleteIndexW   rT   r   c                     t          |t                    r$|                     ||j        |j        d           d S |                     |||d           d S )N )
isinstancer   r?   r%   )r   r   rB   rC   s       r   rR   zTokenStreamRewriter.deleteZ   sV    h&& 	=LLx':F<MrRRRRRLLx<<<<<r   c                 8    | j                             |d          S )N)r
   r   r!   s     r   lastRewriteTokenIndexz)TokenStreamRewriter.lastRewriteTokenIndex`   s    +//bAAAr   c                     || j         |<   d S r   )r
   )r   r   is      r   setLastRewriteTokenIndexz,TokenStreamRewriter.setLastRewriteTokenIndexc   s    56$\222r   c                 8    | j                             |g           S r   )r	   
setdefaultr!   s     r   r.   zTokenStreamRewriter.getProgramf   s    }''b999r   c                 n    |                      | j        dt          | j        j                  dz
            S )Nr   r,   )getTextr   r/   r   r   s    r   getDefaultTextz"TokenStreamRewriter.getDefaultTexti   s.    ||D5q#dk>P:Q:QTU:UVVVr   startstopc                    | j                             |          }|t          | j        j                  dz
  k    rt          | j        j                  dz
  }|dk     rd}|s| j                            ||          S t                      }|                     |          }|}t          ||k    |t          | j        j                  k     f          r|                    |d          }| j                            |          }	|5|	j	        t          j        k    r|                    |	j                   |dz  }n|                    |          }t          ||k    |t          | j        j                  k     f          |t          | j        j                  dz
  k    rV|                                D ]A}|j        t          | j        j                  dz
  k    r|                    |j                   B|                                S )zK
        :return: the text in tokens[start, stop](closed interval)
        r,   r   N)r	   r   r/   r   rc   r    _reduceToSingleOperationPerIndexallpoptyper   EOFwriter(   executevaluesr2   getvalue)
r   r   re   rf   r4   buf	indexToOpr^   r3   r'   s
             r   rc   zTokenStreamRewriter.getTextl   s    =$$\22 #dk())A---t{)**Q.D199E @ 3 3E4 @ @@jj99(CC	19a#dk&8"9"99:;; 	$q$''BKOOA&&Ez:**CIIej,A,A,AQJJsOO 19a#dk&8"9"99:;; 	$ 3t{)**1,,,&&(( M M8s4;#566q888#))BG:L:L:L||~~r   c                    t          |          D ]\  }}t          |d u t          |t          j                   f          r3d |d |         D             }|D ]y}|j        |j        k    r0d ||j        <   d                    |j        |j                  |_        Bt          |j        |j        k    |j        |j
        k    f          r
d ||j        <   zd |d |         D             }|D ]}t          |j        |j        k    |j
        |j
        k    f          rd ||j        <   ;t          |j
        |j        k     |j        |j
        k    f          }t          |j        d u |j        d u | f          rkd ||j        <   t          |j        |j                  |_        t          |j
        |j
                  |_
        t          d                    |                     |s#t          d                    ||                    t          |          D ]y\  }}t          |d u t          |t          j                   f          r3d |d |         D             }	t          |	          D ]\  }
}|j        |j        k    r6t          |          t          j        u r|xj        |j        z  c_        d ||
<   K|j        |j        k    r4t          |          t          j        u r|j        |j        z   |_        d ||
<   d |d |         D             }|D ]|}|j        |j        k    r|j        |j        z   |_        d ||<   ,t          |j        |j        k    |j        |j
        k    f          r#t          d                    ||                    }{i }t          |          D ];\  }}||                    |j                  rt          d	          |||j        <   <|S )
Nc                 F    g | ]}t          |t          j                  |S  rY   r   r<   .0r3   s     r   
<listcomp>zHTokenStreamRewriter._reduceToSingleOperationPerIndex.<locals>.<listcomp>   s+    gggbJrCVCe4f4fgrgggr   z{}{}c                 F    g | ]}t          |t          j                  |S ru   rY   r   rO   rw   s     r   ry   zHTokenStreamRewriter._reduceToSingleOperationPerIndex.<locals>.<listcomp>   +    ggg2BH[He9f9fgBgggr   z
New rop {}z4replace op boundaries of {} overlap with previous {}c                 F    g | ]}t          |t          j                  |S ru   rv   rw   s     r   ry   zHTokenStreamRewriter._reduceToSingleOperationPerIndex.<locals>.<listcomp>   s+    kkk"
2GZGi8j8jk2kkkr   c                 F    g | ]}t          |t          j                  |S ru   r{   rw   s     r   ry   zHTokenStreamRewriter._reduceToSingleOperationPerIndex.<locals>.<listcomp>   r|   r   z-insert op {} within boundaries of previous {}zshould be only one op per index)	enumeraterL   rY   r   rO   r2   r0   rN   r(   ri   
last_indexminprintrM   r<   rk   r-   r   )r   r4   r^   ropinsertsiopprevReplacesprevRop
isDisjointprevInserts
prev_indexprevIopreducedr3   s                 r   rh   z4TokenStreamRewriter._reduceToSingleOperationPerIndex   s1   )) 	r 	rFAsC4KZ5H5R%S%S!STUU ggHRaRLgggG : :9	))59HS12%}}SXsx@@CHH#)ci/cn1LMNN :59HS12 hg"1"gggL' r r2G4F#.4XYZZ 9=HW56 '"4SY">cn@\!]^^
,ch$.>JOPP r9=HW56 #GM39 = =CI%();S^%L%LCN,--c223333$ r$%[%b%bcfho%p%pqqqrr  )) 	g 	gFAsC4KZ5H5W%X%X!XYZZ kk!kkkK'0'='= 0 0#
G=CI--$w--CVCe2e2eHH,HH+/HZ((]ci//DMMEXEf4f4f&|ch6CH+/HZ(gg"1"gggL# g g9	))"x#(2CH"&HQK	SY.	S^0KLMM g$%T%[%[\_ad%e%efffgg x(( 	# 	#EArz8{{28$$YJ7X,Y,Y&Y "GBHr   c                   &    e Zd ZdZddZd Zd ZdS )$TokenStreamRewriter.RewriteOperationr   r2   r(   r0   rX   c                 >    || _         || _        || _        d| _        dS )z
            :type tokens: CommonTokenStream
            :param tokens:
            :param index:
            :param text:
            :return:
            r   Nr   )r   r   r2   r(   s       r   r   z-TokenStreamRewriter.RewriteOperation.__init__   s'     !DKDJDI$%D!!!r   c                     | j         S )zc
            :type buf: StringIO.StringIO
            :param buf:
            :return:
            )r2   r   rq   s     r   rn   z,TokenStreamRewriter.RewriteOperation.execute   s     :r   c                     d                     | j        j        | j                            | j                  | j                  S )Nz<{}@{}:"{}">)rN   r   __name__r   r   r2   r(   r   s    r   __str__z,TokenStreamRewriter.RewriteOperation.__str__   s5    !(()@$+//RVR\B]B]_c_hiiir   NrX   )r   
__module____qualname__	__slots__r   rn   r   ru   r   r   RewriteOperationr      sP        C		& 	& 	& 	&	 	 		j 	j 	j 	j 	jr   r   c                   &     e Zd Zd fd	Zd Z xZS )"TokenStreamRewriter.InsertBeforeOprX   c                 f    t          t          j        |                               |||           d S r   )r   r   r<   r   )r   r   r2   r(   r   s       r   r   z+TokenStreamRewriter.InsertBeforeOp.__init__   s0    %4d;;DDVUTXYYYYYr   c                    |                     | j                   | j                            | j                  j        t          j        k    r7|                     | j                            | j                  j                   | j        dz   S r+   )rm   r(   r   r   r2   rk   r   rl   r   s     r   rn   z*TokenStreamRewriter.InsertBeforeOp.execute   sg    IIdi   {tz**/59<<		$+//$*55:;;;:>!r   r   )r   r   r   r   rn   __classcell__r   s   @r   r<   r      sR        	Z 	Z 	Z 	Z 	Z 	Z	" 	" 	" 	" 	" 	" 	"r   r<   c                       e Zd ZdS )!TokenStreamRewriter.InsertAfterOpN)r   r   r   ru   r   r   r-   r      s        r   r-   c                   .     e Zd ZdZ fdZd Zd Z xZS )TokenStreamRewriter.ReplaceOpr   c                 t    t          t          j        |                               |||           || _        d S r   )r   r   rO   r   r   )r   rB   rC   r   r(   r   s        r   r   z&TokenStreamRewriter.ReplaceOp.__init__   s5    %/66??RVWWW$DOOOr   c                 X    | j         r|                    | j                    | j        dz   S r+   )r(   rm   r   r   s     r   rn   z%TokenStreamRewriter.ReplaceOp.execute   s-    y %		$)$$$?Q&&r   c                     | j         rVd                    | j                            | j                  | j                            | j                  | j                   S d S )Nz<ReplaceOp@{}..{}:"{}">)r(   rN   r   r   r2   r   r   s    r   r   z%TokenStreamRewriter.ReplaceOp.__str__   sc    y C077
8S8SUYU`UdUdeietUuUu8<	C C CC Cr   )r   r   r   r   r   rn   r   r   r   s   @r   rO   r      sb         		% 	% 	% 	% 	%	' 	' 	'
	C 	C 	C 	C 	C 	C 	Cr   rO   )%r   r   r   r   r   PROGRAM_INIT_SIZEr   r   r   r   r"   r)   r$   r8   r:   r6   r@   rD   rF   rJ   r?   rS   rV   rR   r\   r_   r.   rd   intrc   rh   objectr   r<   r-   rO   r   r   s   @r   r   r      s       AI$O	* 	* 	* 	* 	*  W W W
 *> : : : : :N ? ? ? ? 5I    B B B ;O @ @ @ @  D D DH H HZ Z Z K_ U U U U  = = == = == = = 2F B B B B7 7 7: : :W W W# C    @9 9 9vj j j j j6 j j j6	" 	" 	" 	" 	") 	" 	" 	"       C C C C C$ C C C C C C Cr   r   N)ior   antlr4.Tokenr   antlr4.CommonTokenStreamr   r   r   ru   r   r   <module>r      s                6 6 6 6 6 6rC rC rC rC rC& rC rC rC rC rCr   