a
    lc                     @   sj   d dl mZmZmZmZ d dlmZ d dlmZ d dl	m
Z
 G dd dZG dd dZG d	d
 d
ZdS )    )OptionalIteratorTupleList)tokenize)parse_version_string)PythonTokenTypesc                   @   s(   e Zd Zdee dddZdd ZdS )NFAArcNFAState)next_nonterminal_or_stringc                 C   s   || _ || _d S N)nextr   selfr   r    r   V/var/www/html/django/DPS/env/lib/python3.9/site-packages/parso/pgen2/grammar_parser.py__init__   s    zNFAArc.__init__c                 C   s   d| j j| jf S )Nz<%s: %s>)	__class____name__r   r   r   r   r   __repr__   s    zNFAArc.__repr__N)r   
__module____qualname__r   strr   r   r   r   r   r   r	      s   r	   c                   @   s,   e Zd ZedddZd	ddZdd ZdS )
r
   )	from_rulec                 C   s   || _ g | _d S r   )r   arcs)r   r   r   r   r   r      s    zNFAState.__init__Nc                 C   s:   |d u st |tsJ t |ts$J | jt|| d S r   )
isinstancer   r
   r   appendr	   r   r   r   r   add_arc   s    zNFAState.add_arcc                 C   s   d| j j| jf S )Nz<%s: from %s>)r   r   r   r   r   r   r   r   !   s    zNFAState.__repr__)N)r   r   r   r   r   r   r   r   r   r   r   r
      s   
r
   c                   @   sr   e Zd ZdZedddZeeeef  dddZ	dd	 Z
d
d Zdd Zdd ZdddZdd Zdd ZdS )GrammarParserz.
    The parser for Python grammar files.
    )bnf_grammarc                 C   s$   || _ t|tdd| _|   d S )Nz3.9)version_info)_bnf_grammarr   r   	generator	_gettoken)r   r!   r   r   r   r   )   s    zGrammarParser.__init__)returnc                 c   sf   | j tjkrb| j tjkr"|   q| tj| _| tjd | 	 \}}| tj ||fV  q d S )N:)
typer   	ENDMARKERNEWLINEr%   _expectNAME_current_rule_nameOP
_parse_rhsr   azr   r   r   parse1   s    
zGrammarParser.parsec                 C   st   |   \}}| jdkr||fS t| j}t| j}|| || | jdkrRqh|   |   \}}q2||fS d S )N|)_parse_itemsvaluer
   r-   r   r%   )r   r1   r2   Zaazzr   r   r   r/   @   s    





zGrammarParser._parse_rhsc                 C   sL   |   \}}| jtjtjfv s(| jdv rD|   \}}|| |}q||fS )N)([)_parse_itemr(   r   r,   STRINGr6   r   )r   r1   bcdr   r   r   r5   T   s    
zGrammarParser._parse_itemsc                 C   s   | j dkr>|   |  \}}| tjd || ||fS |  \}}| j }|dvr`||fS |   || |dkr||fS ||fS d S )Nr9   ])+*r@   )r6   r%   r/   r+   r   r.   r   _parse_atom)r   r1   r2   r6   r   r   r   r:   _   s    


zGrammarParser._parse_itemc                 C   s   | j dkr4|   |  \}}| tjd ||fS | jtjtjfv rxt	| j
}t	| j
}||| j  |   ||fS | d| j| j  d S )Nr8   )z+expected (...) or NAME or STRING, got %s/%s)r6   r%   r/   r+   r   r.   r(   r,   r;   r
   r-   r   _raise_errorr0   r   r   r   rB   x   s    


zGrammarParser._parse_atomNc                 C   sR   | j |kr| d|| j | j |d ur@| j|kr@| d|| j | j}|   |S )Nzexpected %s, got %s [%s]zexpected %s, got %s)r(   rD   r6   r%   )r   type_r6   r   r   r   r+      s    

zGrammarParser._expectc                 C   s    t | j}|\| _| _| _}d S r   )r   r$   r(   r6   begin)r   tupprefixr   r   r   r%      s    
zGrammarParser._gettokenc              
   G   sr   |r8z|| }W n&   d |gttt| }Y n0 | j | jd d  }t|d| jd | jd |fd S )N r      z	<grammar>)joinlistmapr   r#   
splitlinesrF   SyntaxError)r   msgargsliner   r   r   rD      s     
zGrammarParser._raise_error)N)r   r   r   __doc__r   r   r   r   r
   r3   r/   r5   r:   rB   r+   r%   rD   r   r   r   r   r    %   s   

r    N)typingr   r   r   r   Zparso.python.tokenizer   Zparso.utilsr   Zparso.python.tokenr   r	   r
   r    r   r   r   r   <module>   s   	