o
    Zh                     @   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ddee fddZdd ZdS )	NFAArcnext_NFAStatenonterminal_or_stringc                 C   s   || _ || _d S N)nextr   selfr
   r    r   Q/var/www/html/lang_env/lib/python3.10/site-packages/parso/pgen2/grammar_parser.py__init__      
zNFAArc.__init__c                 C      d| j j| jf S )Nz<%s: %s>)	__class____name__r   r   r   r   r   __repr__      zNFAArc.__repr__N)r   
__module____qualname__r   strr   r   r   r   r   r   r	      s    r	   c                   @   s,   e Zd Zdef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      r   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   r   )Nz<%s: from %s>)r   r   r   r   r   r   r   r   !   r   zNFAState.__repr__r   )r   r   r   r   r   r"   r   r   r   r   r   r      s    
r   c                   @   sr   e Zd ZdZdefddZdeeeef  f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   s    | j tjkr>| j tjkr|   | j tjks| tj| _| tjd | 	 \}}| tj ||fV  | j tjksd S 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   sr   |   \}}| jdkr||fS t| j}t| j}	 || || | jdkr.	 ||fS |   |   \}}q)N|)_parse_itemsvaluer   r0   r"   r(   )r   r4   r5   Zaazzr   r   r   r2   @   s   





zGrammarParser._parse_rhsc                 C   sf   |   \}}| jtjtjfv s| jdv r/|   \}}|| |}| jtjtjfv s| jdv s||fS )N)([)_parse_itemr+   r   r/   STRINGr9   r"   )r   r4   bcdr   r   r   r8   T   s   


zGrammarParser._parse_itemsc                 C   s   | j dkr|   |  \}}| tjd || ||fS |  \}}| j }|dvr0||fS |   || |dkrA||fS ||fS )Nr<   ])+*rC   )r9   r(   r2   r.   r   r1   r"   _parse_atom)r   r4   r5   r9   r   r   r   r=   _   s   


zGrammarParser._parse_itemc                 C   s   | j dkr|   |  \}}| tjd ||fS | jtjtjfv r<t	| j
}t	| j
}||| j  |   ||fS | d| j| j  d S )Nr;   )z+expected (...) or NAME or STRING, got %s/%s)r9   r(   r2   r.   r   r1   r+   r/   r>   r   r0   r"   _raise_errorr3   r   r   r   rE   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+   rG   r9   r(   )r   type_r9   r   r   r   r.      s   

zGrammarParser._expectc                 C   s    t | j}|\| _| _| _}d S r   )r   r'   r+   r9   begin)r   tupprefixr   r   r   r(      s   
zGrammarParser._gettokenc              
   G   sj   |rz|| }W n   d |gttt| }Y | j | jd d  }t|d| jd | jd |f)N r      z	<grammar>)joinlistmapr   r&   
splitlinesrI   SyntaxError)r   msgargsliner   r   r   rG      s   
zGrammarParser._raise_errorr   )r   r   r   __doc__r   r   r   r   r   r6   r2   r8   r=   rE   r.   r(   rG   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   	