o
    ٷi@                     @   s   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mZ d d
lmZ d dlmZ d dlmZmZmZ dZdZG dd deZG dd deZ G dd de!Z"dS )    )CommonTokenStream)InputStream)ParserRuleContext)Lexer)ListTokenSource)Token)BailErrorStrategy)RecognitionExceptionParseCancellationException)TagChunk	TextChunk)RuleTagToken)TokenTagToken)	ParseTreeTerminalNodeRuleNodeNc                       s"   e Zd Zdef fddZ  ZS )CannotInvokeStartRuleec                    s   t  | d S N)super__init__)selfr   	__class__ W/home/ubuntu/.local/lib/python3.10/site-packages/antlr4/tree/ParseTreePatternMatcher.pyr   S   s   zCannotInvokeStartRule.__init__)__name__
__module____qualname__	Exceptionr   __classcell__r   r   r   r   r   Q   s    r   c                   @   s   e Zd ZdS )"StartRuleDoesNotConsumeFullPatternN)r   r   r   r   r   r   r   r!   V   s    r!   c                   @   s   e Zd ZdZdedefddZdededefd	d
Zde	dede
fddZde	defddZde	dede
fddZde	defddZdede
fddZde	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$S )%ParseTreePatternMatcherlexerparserstartstopescaper$   r%   c                 C   s"   || _ || _d| _d| _d| _d S )N<>\r#   )r   r$   r%   r   r   r   r   b   s
   
z ParseTreePatternMatcher.__init__r&   r'   
escapeLeftc                 C   sN   |d u s
t |dkrtd|d u st |dkrtd|| _|| _|| _d S )Nr   zstart cannot be null or emptyzstop cannot be null or empty)lenr   r&   r'   r(   )r   r&   r'   r,   r   r   r   setDelimiterss   s   
z%ParseTreePatternMatcher.setDelimiterstreepatternpatternRuleIndexc                 C      |  ||}| ||S r   )compileTreePatternmatchesr   r/   r0   r1   pr   r   r   matchesRuleIndex}      z(ParseTreePatternMatcher.matchesRuleIndexc                 C   s   |  ||jt }|d u S r   )	matchImplpatternTreedict)r   r/   r0   mismatchedNoder   r   r   matchesPattern   s   z&ParseTreePatternMatcher.matchesPatternc                 C   r2   r   )r3   matchPatternr5   r   r   r   matchRuleIndex   r8   z&ParseTreePatternMatcher.matchRuleIndexc                 C   s0   t  }| ||j|}ddlm} |||||S )Nr   )ParseTreeMatch)r;   r9   r:   antlr4.tree.ParseTreeMatchr@   )r   r/   r0   labelsr<   r@   r   r   r   r>      s   z$ParseTreePatternMatcher.matchPatternc              
   C   s   |  |}t|}t|}ddlm} || jj| jj| jj| j	 |}d }z|
t  ||}W n+ tyB }	 z|	jd }	~	w tyO }	 z|	d }	~	w ty^ }	 zt|	d }	~	ww |dtjkrjt ddlm}
 |
| |||S )Nr   )ParserInterpreter   )ParseTreePattern)tokenizer   r   antlr4.ParserInterpreterrC   r%   grammarFileName
tokenNames	ruleNamesgetATNWithBypassAltssetErrorHandlerr   parser
   causer	   r   r   LAr   EOFr!   antlr4.tree.ParseTreePatternrE   )r   r0   r1   	tokenListtokenSrctokensrC   parserInterpr/   r   rE   r   r   r   r3      s2   
z*ParseTreePatternMatcher.compileTreePatternr:   rB   c                 C   s  |d u rt d|d u rt dt|tr_t|tr_d }|jj|jjkrWt|jtrD|j}| ||j| |jd urB| ||j| |S |	 |	 krO	 |S |d u rU|}|S |d u r]|}|S t|t
rt|t
rd }| |}|d urd }|jj|jjkr| ||j| |jd ur| ||j| |S |d u r|}|S | | kr|d u r|}|S | }td|D ]}	| ||	||	|}
|
d ur|
  S q|S |S )Nztree cannot be nullzpatternTree cannot be nullr   )r   
isinstancer   symboltyper   map	tokenNamelabelgetTextr   getRuleTagTokenruleContext	ruleIndexruleNamegetChildCountranger9   getChild)r   r/   r:   rB   r<   tokenTagTokenruleTagTokenmni
childMatchr   r   r   r9      s^   
	

z!ParseTreePatternMatcher.matchImplc                 C   s0   | |d }|d u rt }|||< || d S r   )getlistappend)r   rB   r[   r/   vr   r   r   rY     s
   zParseTreePatternMatcher.mapc                 C   sF   t |tr!| dkr!t |dtr!|d}t |jtr!|jS d S )NrD   r   )rV   r   ra   rc   r   rW   r   )r   r/   cr   r   r   r]     s   

z'ParseTreePatternMatcher.getRuleTagTokenc           	      C   sH  |  |}t }|D ]}t|tr}|jd  r=| j|j}|tj	kr1t
dt|j d | |t|j||j q
|jd  rp| j|j}|dkr\t
dt|j d | | j j| }|t|j||j q
t
dt|j d | | jt|j | j }|jtjkr|| | j }|jtjksq
|S )Nr   zUnknown token z in pattern: zUnknown rule zinvalid tag: )splitrk   rV   r   tagisupperr%   getTokenTyper   INVALID_TYPEr   strrl   r   r[   islowergetRuleIndexrK   ruleToTokenTyper   r$   setInputStreamr   text	nextTokenrX   rP   )	r   r0   chunksrT   chunkttyper_   ruleImaginaryTokenTypetr   r   r   rF     s0   





z ParseTreePatternMatcher.tokenizec                 C   s  d}t |}t }t }t }||k ry||| j| j |kr,|t | jt | j 7 }nI||| j| j |krE|t | jt | j 7 }n0||| j|kr[|| |t | j7 }n||| j|krq|| |t | j7 }n|d7 }||k st |}|t |krtd| |t |k rtd| td|D ]}|| || krtd| q|dkr|t	| |dkr|d dkr|d|d  }	|
t	|	 td|D ]X}||| t | j ||  }
|
}d }|
d}|dkr|
d| }|
|d t |
 }|t|| |d t |k r,||| t | j ||d   }	|t	|	 q|dkrO||d  t | j }||k rO||| }	|t	|	 tdt |D ]%}|| }t|t	rz|j| jd}t |t |jk rzt	|||< qV|S )Nr   rD   zunterminated tag in pattern: zmissing start tag in pattern: z(tag delimiters out of order in pattern: : )r-   rk   findr(   r&   r'   rl   r   rb   r   addr   rV   rz   replace)r   r0   r6   rg   r|   startsstopsntrh   rz   rq   ruleOrTokenr[   colonafterLastTagrn   	unescapedr   r   r   rp   2  st   



"

zParseTreePatternMatcher.splitN)r   r   r   	__slots__r   Parserr   ru   r.   r   intr7   rE   r=   r?   r>   r3   r;   r9   rY   r]   rF   rp   r   r   r   r   r"   [   s    
	

"@r"   )#antlr4.CommonTokenStreamr   antlr4.InputStreamr   antlr4.ParserRuleContextr   antlr4.Lexerr   antlr4.ListTokenSourcer   antlr4.Tokenr   antlr4.error.ErrorStrategyr   antlr4.error.Errorsr	   r
   antlr4.tree.Chunkr   r   antlr4.tree.RuleTagTokenr   antlr4.tree.TokenTagTokenr   antlr4.tree.Treer   r   r   r   rE   r   r   r!   objectr"   r   r   r   r   <module>   s"   ?