U
    :qLet                     @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZ dZG dd deZG dd	 d	eZG d
d deZ[dS )    N)IntervalSet)Token)ATNState)RecognitionExceptionNoViableAltExceptionInputMismatchExceptionFailedPredicateExceptionParseCancellationExceptionc                   @   sd   e Zd ZedddZedddZeedddZedd	d
ZedddZ	eedddZ
dS )ErrorStrategy
recognizerc                 C   s   d S N selfr   r   r   q/home/p21-0144/sympy/latex2sympy2solve-back-end/sympyEq/lib/python3.8/site-packages/antlr4/error/ErrorStrategy.pyreset   s    zErrorStrategy.resetc                 C   s   d S r   r   r   r   r   r   recoverInline   s    zErrorStrategy.recoverInliner   ec                 C   s   d S r   r   r   r   r   r   r   r   recover   s    zErrorStrategy.recoverc                 C   s   d S r   r   r   r   r   r   sync   s    zErrorStrategy.syncc                 C   s   d S r   r   r   r   r   r   inErrorRecoveryMode   s    z!ErrorStrategy.inErrorRecoveryModec                 C   s   d S r   r   r   r   r   r   reportError"   s    zErrorStrategy.reportErrorN)__name__
__module____qualname__Parserr   r   r   r   r   r   r   r   r   r   r   r
      s   r
   c                       sT  e Zd Z fddZedddZedddZeddd	Zedd
dZedddZ	ee
dddZee
dddZedddZeedddZeedddZdd ZedddZedddZeddd Zedd!d"Zedd#d$Zedd%d&Zedd'd(Zed)d*d+Zed,d-d.Zedd/d0Zeed1d2d3Z   Z!S )4DefaultErrorStrategyc                    s    t    d| _d| _d | _d S NF)super__init__errorRecoveryModelastErrorIndexlastErrorStates)r   	__class__r   r   r#   +   s    
zDefaultErrorStrategy.__init__r   c                 C   s   |  | d S r   endErrorConditionr   r   r   r   r   @   s    zDefaultErrorStrategy.resetc                 C   s
   d| _ d S )NTr$   r   r   r   r   beginErrorConditionI   s    z(DefaultErrorStrategy.beginErrorConditionc                 C   s   | j S r   r+   r   r   r   r   r   L   s    z(DefaultErrorStrategy.inErrorRecoveryModec                 C   s   d| _ d | _d| _d S r    )r$   r&   r%   r   r   r   r   r*   U   s    z&DefaultErrorStrategy.endErrorConditionc                 C   s   |  | d S r   r)   r   r   r   r   reportMatch_   s    z DefaultErrorStrategy.reportMatchr   c                 C   s   |  |rd S | | t|tr0| || nTt|trH| || n<t|tr`| || n$t	dt
|j  ||j|j| d S )Nz unknown recognition error type: )r   r,   
isinstancer   reportNoViableAlternativer   reportInputMismatchr   reportFailedPredicateprinttyper   notifyErrorListenersmessageoffendingTokenr   r   r   r   r   u   s    




z DefaultErrorStrategy.reportErrorc                 C   sp   | j | jkr.| jd k	r.|j| jkr.|  |jj| _ | jd krHg | _| j|j | |}| 	|| d S r   )
r%   getInputStreamindexr&   stateconsume_inputappendgetErrorRecoverySetconsumeUntil)r   r   r   Z	followSetr   r   r   r      s    



zDefaultErrorStrategy.recoverc                 C   s   |  |rd S |jjj|j }| d}|j|}tj	|ksJ||krNd S |j
tjtjtjtjfkr| |d k	rzd S t|nB|j
tjtjfkr| | | }|| |}| || n d S N   )r   _interpatnstatesr9   getTokenStreamLA
nextTokensr   EPSILON	stateTyper   BLOCK_STARTSTAR_BLOCK_STARTPLUS_BLOCK_STARTSTAR_LOOP_ENTRYsingleTokenDeletionr   PLUS_LOOP_BACKSTAR_LOOP_BACKreportUnwantedTokengetExpectedTokensaddSetr=   r>   )r   r   slarF   	expectingZwhatFollowsLoopIterationOrRuler   r   r   r      s(    
 

zDefaultErrorStrategy.syncc                 C   s^   |  }|d k	r8|jjtjkr$d}q<||j|jf}nd}d| | }|||j| d S )N<EOF>z<unknown input>zno viable alternative at input )	rD   
startTokenr3   r   EOFgetTextr6   escapeWSAndQuoter4   )r   r   r   tokensinputmsgr   r   r   r/      s    z.DefaultErrorStrategy.reportNoViableAlternativec                 C   s<   d|  |j d | |j|j }|||j| d S )Nzmismatched input  expecting )getTokenErrorDisplayr6   rQ   toStringliteralNamessymbolicNamesr4   )r   r   r   r]   r   r   r   r0     s    z(DefaultErrorStrategy.reportInputMismatchc                 C   s6   |j |j  }d| d |j }|||j| d S )Nzrule  )	ruleNames_ctxgetRuleIndexr5   r4   r6   )r   r   r   ruleNamer]   r   r   r   r1     s    z*DefaultErrorStrategy.reportFailedPredicatec                 C   sb   |  |rd S | | | }| |}| |}d| d ||j|j }|||d  d S )Nzextraneous input r^   )	r   r,   getCurrentTokenr_   rQ   r`   ra   rb   r4   )r   r   t	tokenNamerU   r]   r   r   r   rP   )  s    




z(DefaultErrorStrategy.reportUnwantedTokenc                 C   s^   |  |rd S | | | }| |}d||j|j d | | }|||d  d S )Nzmissing z at )	r   r,   rh   rQ   r`   ra   rb   r_   r4   )r   r   ri   rU   r]   r   r   r   reportMissingTokenE  s    


z'DefaultErrorStrategy.reportMissingTokenc                 C   s>   |  |}|d k	r|  |S | |r2| |S t|d S r   )rM   r:   singleTokenInsertiongetMissingSymbolr   )r   r   matchedSymbolr   r   r   r   ~  s    


z"DefaultErrorStrategy.recoverInlinec                 C   sZ   |  d}|jj}|j|j }|jd j}|||j	}||krR| 
| dS dS d S )Nr@   r   TF)rD   rE   rA   rB   rC   r9   transitionstargetrF   re   rk   )r   r   ZcurrentSymbolTyperB   ZcurrentStatenextZexpectingAtLL2r   r   r   rl     s    
z)DefaultErrorStrategy.singleTokenInsertionc                 C   sP   |  d}| |}||krH| | |  | }| | |S d S d S )N   )rD   rE   rQ   rP   r:   rh   r-   )r   r   ZnextTokenTyperU   rn   r   r   r   rM     s    


z(DefaultErrorStrategy.singleTokenDeletionc           	   
   C   s   |  }| |}|d }|tjkr*d}nLd }|t|jk rF|j| }|d krf|t|jk rf|j| }dt| d }|}| 	d}|j
tjkr|d k	r|}| |j||tjdd|j|jS )Nr   z<missing EOF>z	<missing >r!   )rh   rQ   r   rX   lenra   rb   strrD   LTr3   getTokenFactorycreatesourceDEFAULT_CHANNELlinecolumn)	r   r   ZcurrentSymbolrU   ZexpectedTokenTypeZ	tokenTextnamecurrentZlookbackr   r   r   rm     s0    



     z%DefaultErrorStrategy.getMissingSymbolc                 C   s   |  S r   )rQ   r   r   r   r   rQ     s    z&DefaultErrorStrategy.getExpectedTokens)ri   c                 C   sH   |d krdS |j }|d kr>|jtjkr,d}ndt|j d }| |S )Nz
<no token>rV   <rs   )textr3   r   rX   ru   rZ   )r   ri   rS   r   r   r   r_     s    z)DefaultErrorStrategy.getTokenErrorDisplay)rS   c                 C   s0   | dd}| dd}| dd}d| d S )N
z\nz\r	z\t')replace)r   rS   r   r   r   rZ     s    z%DefaultErrorStrategy.escapeWSAndQuotec                 C   sj   |j j}|j}t }|d k	rZ|jdkrZ|j|j }|jd }||j}|	| |j
}q|tj |S )Nr   )rA   rB   re   r   invokingStaterC   ro   rF   followStaterR   	parentCtx	removeOner   rG   )r   r   rB   ctxZ
recoverSetr   rtfollowr   r   r   r=   q  s    

z(DefaultErrorStrategy.getErrorRecoverySet)r   set_c                 C   s<   |  d}|tjkr8||kr8|  |  d}qd S r?   )rD   rE   r   rX   r:   )r   r   r   ttyper   r   r   r>     s    z!DefaultErrorStrategy.consumeUntil)"r   r   r   r#   r   r   r,   r   r*   r-   r   r   r   r   r   r/   r   r0   r1   rP   rk   r   rl   rM   rm   rQ   r   r_   ru   rZ   r=   setr>   __classcell__r   r   r'   r   r   )   s.   		
>&9!!$br   c                   @   s8   e Zd ZeedddZedddZedddZd	S )
BailErrorStrategyr   c                 C   s(   |j }|d k	r||_|j}qt|d S r   )re   	exceptionr   r	   )r   r   r   contextr   r   r   r     s
    zBailErrorStrategy.recoverr   c                 C   s   |  |t| d S r   )r   r   r   r   r   r   r     s    zBailErrorStrategy.recoverInlinec                 C   s   d S r   r   r   r   r   r   r     s    zBailErrorStrategy.syncN)r   r   r   r   r   r   r   r   r   r   r   r   r     s   
r   )sysantlr4.IntervalSetr   antlr4.Tokenr   antlr4.atn.ATNStater   antlr4.error.Errorsr   r   r   r   r	   r   objectr
   r   r   r   r   r   r   <module>   s       ~