o
    DDi!                  
   @   s   d dl mZmZ d dlmZmZmZmZmZm	Z	 d dl
mZmZmZmZ d dlmZmZmZ d dlmZ d dlmZ edZeded	Zed
ed	ZeddG dd deeef Zdddedede	eef fddZG dd deeeef ZdS )    )	dataclassfield)GenericIterableListSequenceTypeVarUnion)EOFSentinelget_expected_strParserSyntaxErrorPartialParserSyntaxError)DFAStateGrammarReservedString)	TokenType)Token_NodeT_TokenTypeT)bound_TokenTF)frozenc                   @   s>   e Zd ZU ded< eedZee ed< e	de
fddZdS )		StackNodezDFAState[_TokenTypeT]dfa)default_factorynodesreturnc                 C   s   | j jS N)r   	from_rule)self r    S/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/_parser/base_parser.pynonterminal1   s   zStackNode.nonterminalN)__name__
__module____qualname____annotations__r   listr   r   r   propertystrr"   r    r    r    r!   r   ,   s
   
 r   grammarGrammar[_TokenTypeT]type_valuer   c                 C   s,   |j rz| j| W S  ty   Y |S w |S r   )contains_syntaxreserved_syntax_stringsKeyError)r*   r,   r-   r    r    r!   _token_to_transition6   s   r1   c                
   @   s   e Zd ZU dZee ed< ee ed< ded< e	e
eef  ed< eed< dee dee ddd	ed
df
ddZd
efddZdedee d
efddZded
efddZded
dfddZdddZdS )
BaseParsera  Parser engine.

    A Parser instance contains state pertaining to the current token
    sequence, and should not be used concurrently by different threads
    to parse separate token sequences.

    See python/tokenize.py for how to get input tokens by a string.
    tokenslinesr+   _pgen_grammarstack_BaseParser__was_parse_calledpgen_grammarstart_nonterminalr   Nc                C   s6   || _ || _|| _|j| d }t|g| _d| _d S )Nr   F)r3   r4   r5   nonterminal_to_dfasr   r6   r7   )r   r3   r4   r8   r9   	first_dfar    r    r!   __init__X   s   
zBaseParser.__init__c                 C   s   | j rtdd| _ | jD ]}| | q	 | jd }|jjs=ttj	|jj
 }td| | jt| jt| jd dt| jdkrI|   n| |j|jS q)Nz2Each parser object may only be used to parse once.TIncomplete input. r4   raw_line
raw_column   )r7   	Exceptionr3   
_add_tokenr6   r   is_finalr   r
   EOFtransitionskeysr   r4   len_popconvert_nonterminalr"   r   )r   tokentosexpected_strr    r    r!   parseg   s*   


zBaseParser.parser"   childrenc                 C      d S r   r    )r   r"   rP   r    r    r!   rK      s   zBaseParser.convert_nonterminalrL   c                 C   rQ   r   r    )r   rL   r    r    r!   convert_terminal   s    zBaseParser.convert_terminalc           
      C   s  | j }| j}t||j|j}	 z
|d jj| }W n ty   |d jjrfz| 	  W nV t
yH } zt|j| j|jd |jd dd}~w tye } ztd| | j|jd |jd dd}~ww t||d jj }td| | j|jd |jd dY n ty   t|tj}td	| | j|jd |jd dw q|j|d _|jD ]	}|t| q| |}	|d j|	 dS )
z
        This is the only core function for parsing. Here happens basically
        everything. Everything is well prepared by the parser generator and we
        only apply the necessary steps here.
        Tr=   r   rB   r?   NzInternal error: r>   zToo much input. )r5   r6   r1   typestringr   rG   r0   rE   rJ   r   r   messager4   	start_posrC   r   rH   
IndexErrorr
   rF   next_dfa
dfa_pushesappendr   rR   r   )
r   rL   r*   r6   
transitionplanexrN   pushleafr    r    r!   rD      sj   $:

zBaseParser._add_tokenc                 C   s2   | j  }| |jj|j}| j d j| d S )Nr=   )r6   poprK   r   r   r   rZ   )r   rM   new_noder    r    r!   rJ      s   
zBaseParser._pop)r   N)r#   r$   r%   __doc__r   r   r&   r   r)   r   r   r   r   boolr<   rO   rK   rR   rD   rJ   r    r    r    r!   r2   F   s:   
 	

Mr2   N)dataclassesr   r   typingr   r   r   r   r   r	   libcst._exceptionsr
   r   r   r   $libcst._parser.parso.pgen2.generatorr   r   r   !libcst._parser.parso.python.tokenr   libcst._parser.types.tokenr   r   r   r   r   r)   r1   r2   r    r    r    r!   <module>   s*    	

