o
    ڷicY                     @   s  d dl Z e jd dkrd dlmZ nd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d dlmZ d dl m!Z!m"Z"m#Z# G dd de!Z$G dd deZ%dS )    N      )TextIO)TokenStream)TokenFactory)DefaultErrorStrategy)InputStream)
Recognizer)RuleContext)ParserRuleContext)Token)Lexer)ATNDeserializer)ATNDeserializationOptions)UnsupportedOperationExceptionRecognitionException)ParseTreePatternMatcher)ParseTreeListenerTerminalNode	ErrorNodec                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )TraceListener_parserc                 C   s
   || _ d S N)r   )selfparser r   C/home/ubuntu/vllm_env/lib/python3.10/site-packages/antlr4/Parser.py__init__      
zTraceListener.__init__c                 C   8   t d| jj|   d | jjdj | jjd d S )Nzenter   , LT(1)=r   fileprintr   	ruleNamesgetRuleIndex_inputLTtext_outputr   ctxr   r   r   enterEveryRule      8zTraceListener.enterEveryRulec                 C   s6   t dt|j d | jj| jj   | jjd d S )Nzconsume z rule r!   )r$   strsymbolr   r%   _ctxr&   r*   r   noder   r   r   visitTerminal"   s   6zTraceListener.visitTerminalc                 C   s   d S r   r   r2   r   r   r   visitErrorNode&   s   zTraceListener.visitErrorNodec                 C   r   )Nzexit    r    r   r!   r#   r+   r   r   r   exitEveryRule*   r.   zTraceListener.exitEveryRuleN)	__name__
__module____qualname__	__slots__r   r-   r4   r5   r6   r   r   r   r   r      s    r   c                       s0  e Zd ZdZe Zejfdede	f fddZ
dd Zdefd	d
Zdd Zdd ZdefddZdefddZdd Zdd Zdd Zdd Zdd Zdefdd Zd!d" Zdmd$ed%ed&efd'd(Zd)d* Zdefd+d,Z d-d. Z!defd/d0Z"d1d2 Z#dnd3ed4e$d5e%fd6d7Z&d8d9 Z'd:d; Z(d<e)d=ed>efd?d@Z*dAdB Z+d<e)dCefdDdEZ,dFdG Z-d<e)d=ed>edHefdIdJZ.d<e)d=ed>efdKdLZ/dMe)fdNdOZ0d>efdPdQZ1d<e2dHefdRdSZ3dTefdUdVZ4dWefdXdYZ5dZd[ Z6d\d] Z7d^efd_d`Z8dmdae2fdbdcZ9ddde Z:dfdg Z;dhdi Z<dje=fdkdlZ>  Z?S )oParser)	r'   r*   _errHandler_precedenceStackr1   buildParseTrees_tracer_parseListeners_syntaxErrorsinputoutputc                    s^   t    d | _|| _t | _t | _| jd d | _	d| _
d | _d | _d| _| | d S )Nr   T)superr   r'   r*   r   r<   listr=   appendr1   r>   r?   r@   rA   setInputStream)r   rB   rC   	__class__r   r   r   <   s   
zParser.__init__c                 C   sh   | j d ur| j d | j|  d | _d| _| d t | _| j	d | j
d ur2| j
  d S d S )Nr   F)r'   seekr<   resetr1   rA   setTracerE   r=   rF   _interpr   r   r   r   rK   [   s   


zParser.resetttypec                 C   sV   |   }|j|kr| j|  |   |S | j| }| jr)|jdkr)| j	| |S N
getCurrentTokentyper<   reportMatchconsumerecoverInliner>   
tokenIndexr1   addErrorNode)r   rO   tr   r   r   matchx   s   
zParser.matchc                 C   sV   |   }|jdkr| j|  |   |S | j| }| jr)|jdkr)| j	| |S Nr   rQ   rR   )r   rZ   r   r   r   matchWildcard   s   
zParser.matchWildcardc                 C   s   | j d u rt S | j S r   )r@   rE   rN   r   r   r   getParseListeners   s   zParser.getParseListenerslistenerc                 C   s0   |d u rt d| jd u rg | _| j| d S )Nr_   )ReferenceErrorr@   rF   r   r_   r   r   r   addParseListener   s
   
zParser.addParseListenerc                 C   s6   | j d ur| j | t| j dkrd | _ d S d S d S Nr   )r@   removelenra   r   r   r   removeParseListener   s   

zParser.removeParseListenerc                 C   s
   d | _ d S r   )r@   rN   r   r   r   removeParseListeners   r   zParser.removeParseListenersc                 C   s6   | j d ur| j D ]}|| j | j| qd S d S r   )r@   r-   r1   	enterRulera   r   r   r   triggerEnterRuleEvent   s   

zParser.triggerEnterRuleEventc                 C   s:   | j d urt| j D ]}| j| || j q
d S d S r   )r@   reversedr1   exitRuler6   ra   r   r   r   triggerExitRuleEvent   s   
zParser.triggerExitRuleEventc                 C      | j S r   )rA   rN   r   r   r   getNumberOfSyntaxErrors      zParser.getNumberOfSyntaxErrorsc                 C   s
   | j jjS r   r'   tokenSource_factoryrN   r   r   r   getTokenFactory   r   zParser.getTokenFactoryfactoryc                 C   s   || j j_d S r   rp   )r   rt   r   r   r   setTokenFactory      zParser.setTokenFactoryc                 C   sV   |   }|d u rtd| j|d }|d u r)t }d|_t||}|| j|< |S )NzDThe current parser does not support an ATN with bypass alternatives.T)getSerializedATNr   bypassAltsAtnCachegetr   generateRuleBypassTransitionsr   deserialize)r   serializedAtnresultdeserializationOptionsr   r   r   getATNWithBypassAlts  s   
zParser.getATNWithBypassAltsNpatternpatternRuleIndexlexerc                 C   sR   |d u r|   d ur|   j}t|tr|}|d u rtdt|| }|||S )Nz$Parser can't discover a lexer to use)getTokenStreamrq   
isinstancer   r   r   compile)r   r   r   r   rq   mr   r   r   compileParseTreePattern  s   


zParser.compileParseTreePatternc                 C   s   |   S r   )r   rN   r   r   r   getInputStream&     zParser.getInputStreamc                 C   s   |  | d S r   )setTokenStreamr   rB   r   r   r   rG   )  rv   zParser.setInputStreamc                 C   rm   r   )r'   rN   r   r   r   r   ,  ro   zParser.getTokenStreamc                 C   s   d | _ |   || _ d S r   )r'   rK   r   r   r   r   r   0  s   
zParser.setTokenStreamc                 C   s   | j dS Nr   )r'   r(   rN   r   r   r   rS   8  s   zParser.getCurrentTokenmsgoffendingTokenec                 C   sJ   |d u r|   }|  jd7  _|j}|j}|  }|| ||||| d S r   )rS   rA   linecolumngetErrorListenerDispatchsyntaxError)r   r   r   r   r   r   r_   r   r   r   notifyErrorListeners;  s   zParser.notifyErrorListenersc                 C   s   |   }|jtjkr|    | jd uot| jdk}| js!|rQ| j	
| r.| j|}n| j|}|rQ| jD ]}t|trF|| q9t|trP|| q9|S rc   )rS   rT   r   EOFr   rV   r@   re   r>   r<   inErrorRecoveryModer1   rY   addTokenNoder   r   r5   r   r4   )r   ohasListenerr3   r_   r   r   r   rV   Y  s    




zParser.consumec                 C   s$   | j jd ur| j j| j  d S d S r   )r1   	parentCtxaddChildrN   r   r   r   addContextToParseTreek  s   zParser.addContextToParseTreelocalctxstate	ruleIndexc                 C   sD   || _ || _| jd| j_| jr|   | jd ur |   d S d S r   )	r   r1   r'   r(   startr>   r   r@   ri   )r   r   r   r   r   r   r   rh   s  s   
zParser.enterRulec                 C   s:   | j d| j_| jd ur|   | jj| _| jj| _d S rP   )	r'   r(   r1   stopr@   rl   invokingStater   r   rN   r   r   r   rk   |  s
   

zParser.exitRulealtNumc                 C   sJ   | | | jr | j|kr | jjd ur | jj  | jj| || _d S r   )setAltNumberr>   r1   r   removeLastChildr   )r   r   r   r   r   r   enterOuterAlt  s   

zParser.enterOuterAltc                 C   s   t | jdkr	dS | jd S r\   )re   r=   rN   r   r   r   getPrecedence  s   
zParser.getPrecedence
precedencec                 C   sB   || _ | j| || _| jd| j_| jd ur|   d S d S r   )	r   r=   rF   r1   r'   r(   r   r@   ri   )r   r   r   r   r   r   r   r   enterRecursionRule  s   
zParser.enterRecursionRulec                 C   s\   | j }||_||_| jd|_|| _ |j| j _| jr!| j | | j	d ur,| 
  d S d S rP   )r1   r   r   r'   r(   r   r   r>   r   r@   ri   )r   r   r   r   previousr   r   r   pushNewRecursionContext  s   

zParser.pushNewRecursionContextr   c                 C   s   | j   | jd| j_| j}| jd ur)| j|ur(|   | jj| _| j|usn|| _||_| j	r=|d ur?|
| d S d S d S rP   )r=   popr'   r(   r1   r   r@   rl   r   r>   r   )r   r   retCtxr   r   r   unrollRecursionContexts  s   




zParser.unrollRecursionContextsc                 C   s0   | j }|d ur| |kr|S |j}|d usd S r   )r1   r&   r   )r   r   r,   r   r   r   getInvokingContext  s   zParser.getInvokingContextc                 C   s   || j d kS rP   )r=   )r   r   r   r   r   r   precpred  rv   zParser.precpredcontextc                 C   s   dS )NFr   )r   r   r   r   r   	inContext  s   zParser.inContextr0   c                 C   s   | j j}| j}|j| j }||}||v rdS tj|vrdS |d urU|jdkrUtj|v rU|j|j }|j	d }||j
}||v rDdS |j}|d urU|jdkrUtj|v s-tj|v ra|tjkradS dS )NTFr   )rM   atnr1   statesr   
nextTokensr   EPSILONr   transitionsfollowStater   r   )r   r0   r   r,   s	followingr   rtr   r   r   isExpectedToken  s&   


zParser.isExpectedTokenc                 C   s   | j j| j| jS r   )rM   r   getExpectedTokensr   r1   rN   r   r   r   r      s   zParser.getExpectedTokensc                 C   s   | j j}|j| j }||S r   )rM   r   r   r   r   )r   r   r   r   r   r   "getExpectedTokensWithinCurrentRule  s   
z)Parser.getExpectedTokensWithinCurrentRuleruleNamec                 C   s    |   |d }|d ur|S dS rP   )getRuleIndexMapry   )r   r   r   r   r   r   r&   	  s   zParser.getRuleIndexpc                 C   sZ   |d u r| j }t }|d ur+| }|dk r|d n|| j|  |j}|d us|S )Nr   zn/a)r1   rE   r&   rF   r%   r   )r   r   stackr   r   r   r   getRuleInvocationStack  s   zParser.getRuleInvocationStackc                 C   s   dd | j jD S )Nc                 S   s   g | ]}t |qS r   )r/   ).0dfar   r   r   
<listcomp>'  s    z(Parser.getDFAStrings.<locals>.<listcomp>)rM   decisionToDFArN   r   r   r   getDFAStrings&  s   zParser.getDFAStringsc                 C   s   d}t dt| jjD ]5}| jj| }t|jdkr@|r"t| jd tdt|j d | jd t|	| j
| jd| jd d}qd S )	NFr   r!   z	Decision : )endr"   T)rangere   rM   r   r   r$   r*   r/   decisiontoStringliteralNamessymbolicNames)r   seenOneir   r   r   r   dumpDFA*  s   zParser.dumpDFAc                 C   s   | j jS r   )r'   
sourceNamerN   r   r   r   getSourceName6  r   zParser.getSourceNametracec                 C   sJ   |s|  | j d | _d S | jd ur|  | j t| | _| | j d S r   )rf   r?   r   rb   )r   r   r   r   r   rL   <  s   


zParser.setTracer   )NN)@r7   r8   r9   r:   dictrx   sysstdoutr   r   r   rK   intr[   r]   r^   r   rb   rf   rg   ri   rl   rn   rs   r   ru   r   r/   r   r   r   r   rG   r   r   rS   r   r   r   rV   r   r   rh   rk   r   r   r   r   r   r   r
   r   r   r   r   r   r&   r   r   r   r   boolrL   __classcell__r   r   rH   r   r;   /   sZ    
			r;   )&r   version_infotypingr   	typing.ioantlr4.BufferedTokenStreamr   antlr4.CommonTokenFactoryr   antlr4.error.ErrorStrategyr   antlr4.InputStreamr   antlr4.Recognizerr	   antlr4.RuleContextr
   antlr4.ParserRuleContextr   antlr4.Tokenr   antlr4.Lexerr   antlr4.atn.ATNDeserializerr   $antlr4.atn.ATNDeserializationOptionsr   antlr4.error.Errorsr   r   #antlr4.tree.ParseTreePatternMatcherr   antlr4.tree.Treer   r   r   r   r;   r   r   r   r   <module>   s(   