B
    v9au                 @   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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.7/parse.pyr      s    zParseError.__init__N)__name__
__module____qualname__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 )Nr   )grammarnoder   r   r   <lambda>W       z!Parser.__init__.<locals>.<lambda>)r   convert)r
   r   r   r   r   r   r   9   s    zParser.__init__c             C   sH   |d k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   setupY   s    zParser.setupc             C   s8  |  |||}x"| jd \}}}|\}}	|| }
x|
D ]\}}| jj| \}}||kr| |||| |}x@|| d|fgkr|   | jsdS | jd \}}}|\}}	qnW dS |dkr8| jj| }|\}}||kr8| || jj| || P q8W d|f|
kr"|   | js0td|||qtd|||qW 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   addtokenq   s:    zParser.addtokenc             C   sX   |t jkr0| j| | jj|}|d k	r0|S | jj|}|d k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 k	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   r4   )	r
   r   Znewdfar+   r	   r'   r(   r   r   r   r   r   r%      s    zParser.pushc             C   s`   | j  \}}}| | j|}|d k	r\| j rL| j d \}}}|d | n|| _| j| j_d S )Nr   )r   r$   r   r   r4   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   r.   r!   r#   r%   r$   r   r   r   r   r      s   
 
0	r   N) r   r   r   objectr   r   r   r   r   <module>   s   