a
    ze                     @   s0   d dl mZ G dd deZG dd deZdS )   )tokenc                   @   s   e Zd Zdd Zdd ZdS )
ParseErrorc                 C   s4   t | d||||f  || _|| _|| _|| _d S )Nz!%s: type=%r, value=%r, context=%r)	Exception__init__msgtypevaluecontext)selfr   r   r   r	    r   )/usr/lib/python3.9/lib2to3/pgen2/parse.pyr      s    
zParseError.__init__c                 C   s   t | | j| j | j| jffS N)r   r   r   r	   )r
   r   r   r   
__reduce__   s    zParseError.__reduce__N)__name__
__module____qualname__r   r   r   r   r   r   r      s   r   c                   @   sH   e Zd ZdddZdddZdd Zdd	 Zd
d Zdd Zdd Z	dS )ParserNc                 C   s   || _ |pdd | _d S )Nc                 S   s   |S r   r   )grammarnoder   r   r   <lambda>Z       z!Parser.__init__.<locals>.<lambda>)r   convert)r
   r   r   r   r   r   r   <   s    zParser.__init__c                 C   sH   |d u r| j j}|d d g f}| j j| d|f}|g| _d | _t | _d S )N    )r   startdfasstackrootnodeset
used_names)r
   r   newnodeZ
stackentryr   r   r   setup\   s    zParser.setupc                 C   s0  |  |||}| jd \}}}|\}}	|| }
|
D ]\}}| jj| \}}||kr| |||| |}|| d|fgkr|   | js dS | jd \}}}|\}}	qf dS |dkr2| jj| }|\}}||v r2| || jj| ||  qq2d|f|
v r|   | js*td|||qtd|||qd S )Nr   TF   ztoo much inputz	bad input)	classifyr   r   labelsshiftpopr   pushr   )r
   r   r   r	   ilabeldfastater   ZstatesfirstZarcsinewstatetvZitsdfaZ	itsstatesZitsfirstr   r   r   addtokent   s:    
zParser.addtokenc                 C   sX   |t jkr0| j| | jj|}|d ur0|S | jj|}|d u rTtd||||S )Nz	bad token)	r   NAMEr   addr   keywordsgettokensr   )r
   r   r   r	   r(   r   r   r   r#      s    
zParser.classifyc           	      C   sT   | j d \}}}|||d f}| | j|}|d ur@|d | |||f| j d< d S Nr!   )r   r   r   append)	r
   r   r   r-   r	   r)   r*   r   r   r   r   r   r%      s    zParser.shiftc           	      C   sB   | j d \}}}|d |g f}|||f| j d< | j |d|f d S )Nr!   r   )r   r7   )	r
   r   Znewdfar-   r	   r)   r*   r   r   r   r   r   r'      s    zParser.pushc                 C   s`   | j  \}}}| | j|}|d ur\| j rL| j d \}}}|d | n|| _| j| j_d S r6   )r   r&   r   r   r7   r   r   )r
   ZpopdfaZpopstateZpopnoder   r)   r*   r   r   r   r   r&      s    z
Parser.pop)N)N)
r   r   r   r   r    r0   r#   r%   r'   r&   r   r   r   r   r      s   
 
0	r   N) r   r   r   objectr   r   r   r   r   <module>   s   