o
    ٷi                     @   sX   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dS )    )StringIO)Token)escapeWhitespace)RuleNode	ErrorNodeTerminalNodeTree	ParseTreeNc                	   @   s   e Zd ZeddededefddZeddededefddZedefd	d
Z	edefddZ
ededefddZededefddZedededefddZededededefddZedefddZdS )TreesNt	ruleNamesrecogc              	   C   s   |d ur|j }t| ||d}| dkr|S t ?}|d || |d td| D ]}|dkr=|d || ||| q2|d |	 W  d    S 1 s]w   Y  d S )NFr   ( ))
r   r   getNodeTextgetChildCountr   writerangetoStringTreegetChildgetvalue)clsr   r   r   sbufi r   E/home/ubuntu/.local/lib/python3.10/site-packages/antlr4/tree/Trees.pyr      s    




$zTrees.toStringTreec                 C   s   |d ur|j }|d urAt|tr*| dkr$||  d t|  S ||  S t|tr3t|S t|trA|jd urA|jj	S |
 }t|trM|j	S t|
 S )Nr   :)r   
isinstancer   getAltNumbergetRuleIndexstrr   r   symboltext
getPayloadr   )r   r   r   r   payloadr   r   r   r   (   s    




zTrees.getNodeTextc                    s    fddt d  D S )Nc                    s   g | ]}  |qS r   )r   ).0r   r   r   r   
<listcomp>@   s    z%Trees.getChildren.<locals>.<listcomp>r   )r   r   )r   r   r   r(   r   getChildren>   s   zTrees.getChildrenc                 C   s4   g }|  }|d ur|d| |  }|d us
|S Nr   )	getParentinsert)r   r   	ancestorsr   r   r   getAncestorsE   s   zTrees.getAncestorsttypec                 C      |  ||dS )NTfindAllNodes)r   r   r0   r   r   r   findAllTokenNodesN      zTrees.findAllTokenNodes	ruleIndexc                 C   r1   )NFr2   )r   r   r6   r   r   r   findAllRuleNodesR   r5   zTrees.findAllRuleNodesindex
findTokensc                 C   s   g }|  |||| |S )N)_findAllNodes)r   r   r8   r9   nodesr   r   r   r3   V   s   zTrees.findAllNodesr;   c                 C   s   ddl m} |rt|tr|jj|kr|| n|s*t||r*|j|kr*|| td|	 D ]}| 
||||| q1d S )Nr   )ParserRuleContext)antlr4.ParserRuleContextr<   r   r   r#   typeappendr6   r   r   r:   r   )r   r   r8   r9   r;   r<   r   r   r   r   r:   \   s   


zTrees._findAllNodesc                 C   s4   |g}t d| D ]}|| || q
|S r+   )r   r   extenddescendantsr   )r   r   r;   r   r   r   r   rA   j   s   zTrees.descendants)NN)__name__
__module____qualname__classmethodr   listParserr   r   r*   r/   r	   intr4   r7   boolr3   r:   rA   r   r   r   r   r
      s&    r
   )ior   antlr4.Tokenr   antlr4.Utilsr   antlr4.tree.Treer   r   r   r   r	   rG   objectr
   r   r   r   r   <module>   s   