o
    wiv                     @   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                   @   sh   e Zd ZdefddZdefddZdedefddZdefd	d
ZdefddZ	dedefddZ
dS )ErrorStrategy
recognizerc                 C      d S N selfr   r   r   W/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/antlr4/error/ErrorStrategy.pyreset      zErrorStrategy.resetc                 C   r   r   r   r   r   r   r   recoverInline   r   zErrorStrategy.recoverInlineec                 C   r   r   r   r   r   r   r   r   r   recover   r   zErrorStrategy.recoverc                 C   r   r   r   r   r   r   r   sync   r   zErrorStrategy.syncc                 C   r   r   r   r   r   r   r   inErrorRecoveryMode   r   z!ErrorStrategy.inErrorRecoveryModec                 C   r   r   r   r   r   r   r   reportError"   r   zErrorStrategy.reportErrorN)__name__
__module____qualname__Parserr   r   r   r   r   r   r   r   r   r   r   r
      s    r
   c                       s^  e Zd Z fddZdefddZdefddZdefdd	Zdefd
dZdefddZ	dede
fddZdede
fddZdefddZdedefddZdedefddZdd ZdefddZdefddZdefdd Zdefd!d"Zdefd#d$Zdefd%d&Zdefd'd(Zd)efd*d+Zd,efd-d.Zdefd/d0Zded1efd2d3Z   Z!S )4DefaultErrorStrategyc                    s,   t    d| _d| _d | _d | _d| _d S )NFr   )super__init__errorRecoveryModelastErrorIndexlastErrorStatesnextTokensContextnextTokenState)r   	__class__r   r   r"   +   s   

zDefaultErrorStrategy.__init__r   c                 C      |  | d S r   endErrorConditionr   r   r   r   r   B      zDefaultErrorStrategy.resetc                 C   s
   d| _ d S )NTr#   r   r   r   r   beginErrorConditionK   s   
z(DefaultErrorStrategy.beginErrorConditionc                 C   s   | j S r   r.   r   r   r   r   r   N   s   z(DefaultErrorStrategy.inErrorRecoveryModec                 C   s   d| _ d | _d| _d S )NFr    )r#   r%   r$   r   r   r   r   r,   W   s   
z&DefaultErrorStrategy.endErrorConditionc                 C   r*   r   r+   r   r   r   r   reportMatcha   r-   z DefaultErrorStrategy.reportMatchr   c                 C   s   |  |rd S | | t|tr| || d S t|tr&| || d S t|tr3| || d S 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   w   s   




z DefaultErrorStrategy.reportErrorc                 C   sp   | j | jkr| jd ur|j| jv r|  |jj| _ | jd u r$g | _| j|j | |}| 	|| d S r   )
r$   getInputStreamindexr%   stateconsume_inputappendgetErrorRecoverySetconsumeUntil)r   r   r   	followSetr   r   r   r      s   



zDefaultErrorStrategy.recoverc                 C   s   |  |rd S |jjj|j }| d}|j|}||v r)d | _t	j
| _d S tj|v r=| jd u r;|j| _|j| _d S |jt	jt	jt	jt	jfv rW| |d urSd S t||jt	jt	jfv ry| | | }|| |}| || d S 	 d S N   )r   _interpatnstatesr<   getTokenStreamLA
nextTokensr&   r   INVALID_STATE_NUMBERr'   r   EPSILON_ctx_stateNumbernextTokensState	stateTypeBLOCK_STARTSTAR_BLOCK_STARTPLUS_BLOCK_STARTSTAR_LOOP_ENTRYsingleTokenDeletionr   PLUS_LOOP_BACKSTAR_LOOP_BACKreportUnwantedTokengetExpectedTokensaddSetr@   rA   )r   r   slarJ   	expectingwhatFollowsLoopIterationOrRuler   r   r   r      s4   



zDefaultErrorStrategy.syncc                 C   s\   |  }|d ur|jjtjkrd}n||j|j}nd}d| | }|||j| d S )N<EOF>z<unknown input>zno viable alternative at input )	rH   
startTokenr6   r   EOFgetTextr9   escapeWSAndQuoter7   )r   r   r   tokensinputmsgr   r   r   r2      s   z.DefaultErrorStrategy.reportNoViableAlternativec                 C   s<   d|  |j d | |j|j }|||j| d S )Nzmismatched input  expecting )getTokenErrorDisplayr9   rY   toStringliteralNamessymbolicNamesr7   )r   r   r   rf   r   r   r   r3     s   z(DefaultErrorStrategy.reportInputMismatchc                 C   s6   |j |j  }d| d |j }|||j| d S )Nzrule  )	ruleNamesrM   getRuleIndexr8   r7   r9   )r   r   r   ruleNamerf   r   r   r   r4     s   z*DefaultErrorStrategy.reportFailedPredicatec                 C   sb   |  |rd S | | | }| |}| |}d| d ||j|j }|||d  d S )Nzextraneous input rg   )	r   r/   getCurrentTokenrh   rY   ri   rj   rk   r7   )r   r   t	tokenNamer]   rf   r   r   r   rX   4  s   




z(DefaultErrorStrategy.reportUnwantedTokenc                 C   s^   |  |rd S | | | }| |}d||j|j d | | }|||d  d S )Nzmissing z at )	r   r/   rp   rY   ri   rj   rk   rh   r7   )r   r   rq   r]   rf   r   r   r   reportMissingTokenP  s   


z'DefaultErrorStrategy.reportMissingTokenc                 C   s:   |  |}|d ur|  |S | |r| |S t|r   )rU   r=   singleTokenInsertiongetMissingSymbolr   )r   r   matchedSymbolr   r   r   r     s   


z"DefaultErrorStrategy.recoverInlinec                 C   sV   |  d}|jj}|j|j }|jd j}|||j	}||v r)| 
| dS dS )NrD   r   TF)rH   rI   rE   rF   rG   r<   transitionstargetrJ   rM   rs   )r   r   currentSymbolTyperF   currentStatenextexpectingAtLL2r   r   r   rt     s   
z)DefaultErrorStrategy.singleTokenInsertionc                 C   sL   |  d}| |}||v r$| | |  | }| | |S d S )N   )rH   rI   rY   rX   r=   rp   r0   )r   r   nextTokenTyper]   rv   r   r   r   rU     s   


z(DefaultErrorStrategy.singleTokenDeletionc           	   
   C   s   |  }| |}|d }|tjkrd}n&d }|t|jk r#|j| }|d u r3|t|jk r3|j| }dt| d }|}| 	d}|j
tjkrP|d urP|}| |j||tjdd|j|jS )Nr   z<missing EOF>z	<missing >r    )rp   rY   r   ra   lenrj   rk   strrH   LTr6   getTokenFactorycreatesourceDEFAULT_CHANNELlinecolumn)	r   r   currentSymbolr]   expectedTokenType	tokenTextnamecurrentlookbackr   r   r   ru     s&   



z%DefaultErrorStrategy.getMissingSymbolc                 C   s   |  S r   )rY   r   r   r   r   rY     s   z&DefaultErrorStrategy.getExpectedTokensrq   c                 C   sH   |d u rdS |j }|d u r|jtjkrd}n	dt|j d }| |S )Nz
<no token>r_   <r   )textr6   r   ra   r   rc   )r   rq   r[   r   r   r   rh     s   
z)DefaultErrorStrategy.getTokenErrorDisplayr[   c                 C   s0   | dd}| dd}| dd}d| d S )N
z\nz\r	z\t')replace)r   r[   r   r   r   rc     s   z%DefaultErrorStrategy.escapeWSAndQuotec                 C   sz   |j j}|j}t }|d ur5|jdkr5|j|j }|jd }||j}|	| |j
}|d ur5|jdks|tj |S )Nr   )rE   rF   rM   r   invokingStaterG   rw   rJ   followStaterZ   	parentCtx	removeOner   rL   )r   r   rF   ctx
recoverSetr   rtfollowr   r   r   r@   |  s   

z(DefaultErrorStrategy.getErrorRecoverySetset_c                 C   sX   |  d}|tjkr&||vr*|  |  d}|tjkr(||vsd S d S d S d S rC   )rH   rI   r   ra   r=   )r   r   r   ttyper   r   r   rA     s
   "z!DefaultErrorStrategy.consumeUntil)"r   r   r   r"   r   r   r/   r   r,   r0   r   r   r   r   r   r2   r   r3   r4   rX   rs   r   rt   rU   ru   rY   r   rh   r   rc   r@   setrA   __classcell__r   r   r(   r   r   )   s0    		
>/9!!$br   c                   @   s:   e Zd ZdedefddZdefddZdefddZd	S )
BailErrorStrategyr   r   c                 C   s*   |j }|d ur||_|j}|d ust|r   )rM   	exceptionr   r	   )r   r   r   contextr   r   r   r     s   zBailErrorStrategy.recoverc                 C   s   |  |t| d S r   )r   r   r   r   r   r   r     s   zBailErrorStrategy.recoverInlinec                 C   r   r   r   r   r   r   r   r     r   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        
