o
    DDi                     @   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 )    )	GeneratorListOptionalTuple)PythonTokenTypes)tokenize)parse_version_stringc                   @   s4   e Zd Zdddee ddfddZdefdd	ZdS )
NFAArcnext_NFAStatenonterminal_or_stringreturnNc                 C   s   || _ || _d S N)nextr   selfr
   r    r   b/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/_parser/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__)r   
__module____qualname__r   strr   r   r   r   r   r   r	      s    r	   c                   @   sJ   e Zd ZdeddfddZ	ddd dee ddfdd	Zdefd
dZdS )r   	from_ruler   Nc                 C   s   || _ g | _d S r   )r   arcs)r   r   r   r   r   r   !   r   zNFAState.__init__r
   r   c                 C   s   | j t|| d S 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   r       s    
r   c                   @   s   e Zd ZdZdeddfddZdeeeef ddf fddZ	d	d
 Z
dd Zdd Zdd ZdddZdddZdededdfddZdS )GrammarParserz.
    The parser for Python grammar files.
    bnf_grammarr   Nc                 C   s$   || _ t|tdd| _|   d S )Nz3.6)version_info)_bnf_grammarr   r   	generator	_gettoken)r   r$   r   r   r   r   3   s   zGrammarParser.__init__c                 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   parse8   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   r/   r"   r(   )r   r3   r4   aazzr   r   r   r1   I   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.   STRINGr8   r"   )r   r3   bcdr   r   r   r7   ]   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   )r8   r(   r1   r-   r   r0   r"   _parse_atom)r   r3   r4   r8   r   r   r   r=   j   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)r8   r(   r1   r-   r   r0   r*   r.   r>   r   r/   r"   _raise_errorr2   r   r   r   rE      s   



zGrammarParser._parse_atomc                 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   r8   r(   )r   type_r8   r   r   r   r-      s   
zGrammarParser._expectc                 C   s    t | j}|\| _| _| _}d S r   )r   r'   r*   r8   begin)r   tupprefixr   r   r   r(      s   
zGrammarParser._gettokenmsgargsc              
   G   st   |rz|| }W n t y   d|gttt| }Y nw | j | jd d  }t|d| jd | jd |f)N r      z	<grammar>)		Exceptionjoinlistmapr   r&   
splitlinesrI   SyntaxError)r   rL   rM   liner   r   r   rG      s   zGrammarParser._raise_errorr   )r   N)r   r   r   __doc__r   r   r   r   r   r5   r1   r7   r=   rE   r-   r(   objectrG   r   r   r   r   r#   .   s     

	r#   N)typingr   r   r   r   !libcst._parser.parso.python.tokenr   $libcst._parser.parso.python.tokenizer   libcst._parser.parso.utilsr   r	   r   r#   r   r   r   r   <module>   s   	