o
    ǋ|c6                     @   sd   d dl mZmZmZ G dd dejZG dd deZG dd deZG dd	 d	eZ	dddZ
dS )   )grammartokentokenizec                   @   s   e Zd ZdS )PgenGrammarN)__name__
__module____qualname__ r	   r	   $  /home/conda/feedstock_root/build_artifacts/python-split_1669104742391/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehol/lib/python3.10/lib2to3/pgen2/pgen.pyr      s    r   c                   @   s   e Zd Zd&ddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Z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 )'ParserGeneratorNc                 C   sp   d }|d u rt |dd}|j}|| _|| _t|j| _|   | 	 \| _
| _|d ur/|  i | _|   d S )Nzutf-8)encoding)openclosefilenamestreamr   generate_tokensreadline	generatorgettokenparsedfasstartsymbolfirstaddfirstsets)selfr   r   Zclose_streamr	   r	   r
   __init__   s   zParserGenerator.__init__c              	   C   s  t  }t| j }|  || j |d| j |D ]}dt|j	 }||j	|< ||j
|< q|D ]P}| j| }g }|D ]0}g }t|j D ]\}	}
|| ||	||
f qI|jri|d||f || q>|j| || ||f|j|j	| < q3|j	| j |_|S )N       )r   listr   keyssortremover   insertlensymbol2numberZnumber2symbolsortedarcsitemsappend
make_labelindexisfinalstates
make_firststart)r   cnamesnameidfar,   stater&   labelnextr	   r	   r
   make_grammar   s.   

zParserGenerator.make_grammarc                 C   s4   | j | }i }t|D ]}| ||}d||< q|S Nr   )r   r%   r)   )r   r/   r1   Zrawfirstr   r5   ilabelr	   r	   r
   r-   4   s   

zParserGenerator.make_firstc                 C   sR  t |j}|d  r]||jv r,||jv r|j| S |j|j| d f ||j|< |S tt|d }t|t	s;J ||tj
v sDJ |||jv rN|j| S |j|d f ||j|< |S |d dv sgJ |t|}|d  r||jv r{|j| S |jtj|f ||j|< |S tj| }||jv r|j| S |j|d f ||j|< |S )Nr   )"')r#   labelsisalphar$   Zsymbol2labelr(   getattrr   
isinstanceinttok_nametokensevalkeywordsNAMEr   Zopmap)r   r/   r5   r9   Zitokenvaluer	   r	   r
   r)   =   s<   














zParserGenerator.make_labelc                 C   s8   t | j }|  |D ]}|| jvr| | qd S N)r   r   r   r    r   	calcfirst)r   r0   r1   r	   r	   r
   r   k   s   

zParserGenerator.addfirstsetsc              	   C   s   | j | }d | j|< |d }i }i }|j D ]<\}}|| j v rI|| jv r5| j| }|d u r4td| n
| | | j| }|| |||< qd||< |di||< qi }	| D ]\}}
|
D ]}||	v rrtd||||	| f ||	|< q`qZ|| j|< d S )Nr   zrecursion for rule %rr   zArule %s is ambiguous; %s is in the first sets of %s as well as %s)r   r   r&   r'   
ValueErrorrH   update)r   r1   r3   r4   ZtotalsetZoverlapcheckr5   r6   fsetZinverseZitsfirstsymbolr	   r	   r
   rH   s   s8   









zParserGenerator.calcfirstc           	      C   s   i }d }| j tjkrV| j tjkr|   | j tjks| tj}| tjd |  \}}| tj | 	||}t
|}| | t
|}|||< |d u rP|}| j tjks
||fS )N:)typer   	ENDMARKERNEWLINEr   expectrE   OP	parse_rhsmake_dfar#   simplify_dfa)	r   r   r   r1   azr3   ZoldlenZnewlenr	   r	   r
   r      s&   
zParserGenerator.parsec              	      s   t |tsJ t |tsJ  fdd} fdd t|||g}|D ]F}i }|jD ]}|jD ]\}}	|d urA |	||i  q0q+t| D ] \}}
|D ]	}|j|
krX nqOt|
|}|| |	|| qIq$|S )Nc                    s   i } | | |S rG   r	   )r4   base
addclosurer	   r
   closure   s   
z)ParserGenerator.make_dfa.<locals>.closurec                    sH   t | tsJ | |v rd S d|| < | jD ]\}}|d u r! || qd S r8   )r?   NFAStater&   )r4   rX   r5   r6   rY   r	   r
   rZ      s   
z,ParserGenerator.make_dfa.<locals>.addclosure)
r?   r\   DFAStatenfasetr&   
setdefaultr%   r'   r(   addarc)r   r.   finishr[   r,   r4   r&   Znfastater5   r6   r^   str	   rY   r
   rT      s.   



zParserGenerator.make_dfac           
      C   s   t d| |g}t|D ]>\}}t d|||u rdpd |jD ]*\}}||v r-||}	n	t|}	|| |d u rAt d|	  qt d||	f  qqd S )NzDump of NFA for  State(final) z	    -> %d    %s -> %d)print	enumerater&   r*   r#   r(   )
r   r1   r.   ra   Ztodor2   r4   r5   r6   jr	   r	   r
   dump_nfa   s   

zParserGenerator.dump_nfac                 C   sd   t d| t|D ]&\}}t d||jrdpd t|j D ]\}}t d|||f  qq	d S )NzDump of DFA forrc   rd   re   rf   )rg   rh   r+   r%   r&   r'   r*   )r   r1   r3   r2   r4   r5   r6   r	   r	   r
   dump_dfa   s   
zParserGenerator.dump_dfac                 C   sv   d}|r9d}t |D ]*\}}t|d t|D ]}|| }||kr3||= |D ]}||| q&d} nqq
|sd S d S )NTFr   )rh   ranger#   
unifystate)r   r3   Zchangesr2   Zstate_iri   Zstate_jr4   r	   r	   r
   rU      s   zParserGenerator.simplify_dfac                 C   s   |   \}}| jdkr||fS t }t }|| || | jdkr=|   |   \}}|| || | jdks$||fS )N|)	parse_altrF   r\   r`   r   )r   rV   rW   Zaazzr	   r	   r
   rS      s   






zParserGenerator.parse_rhsc                 C   sf   |   \}}| jdv s| jtjtjfv r/|   \}}|| |}| jdv s| jtjtjfv s||fS )N)([)
parse_itemrF   rN   r   rE   STRINGr`   )r   rV   br/   dr	   r	   r
   ro   
  s   


zParserGenerator.parse_altc                 C   s   | j dkr|   |  \}}| tjd || ||fS |  \}}| j }|dvr0||fS |   || |dkrA||fS ||fS )Nrr   ])+*rx   )rF   r   rS   rQ   r   rR   r`   
parse_atom)r   rV   rW   rF   r	   r	   r
   rs     s   


zParserGenerator.parse_itemc                 C   s   | j dkr|   |  \}}| tjd ||fS | jtjtjfv r8t	 }t	 }|
|| j  |   ||fS | d| j| j  d S )Nrq   )z+expected (...) or NAME or STRING, got %s/%s)rF   r   rS   rQ   r   rR   rN   rE   rt   r\   r`   raise_error)r   rV   rW   r	   r	   r
   rz   (  s   
zParserGenerator.parse_atomc                 C   sD   | j |ks|d ur| j|kr| d||| j | j | j}|   |S )Nzexpected %s/%s, got %s/%s)rN   rF   r|   r   )r   rN   rF   r	   r	   r
   rQ   9  s   zParserGenerator.expectc                 C   sX   t | j}|d tjtjfv rt | j}|d tjtjfv s|\| _| _| _| _| _	d S )Nr   )
r6   r   r   COMMENTNLrN   rF   Zbeginendline)r   tupr	   r	   r
   r   A  s
   

zParserGenerator.gettokenc              
   G   sV   |rz|| }W n   d |gttt| }Y t|| j| jd | jd | jf)N r   r   )joinr   mapstrSyntaxErrorr   r   r   )r   msgargsr	   r	   r
   r|   H  s   zParserGenerator.raise_errorrG   )r   r   r   r   r7   r-   r)   r   rH   r   rT   rj   rk   rU   rS   ro   rs   rz   rQ   r   r|   r	   r	   r	   r
   r   
   s&    
	.$

r   c                   @   s   e Zd Zdd ZdddZdS )r\   c                 C   s
   g | _ d S rG   )r&   )r   r	   r	   r
   r   S  s   
zNFAState.__init__Nc                 C   s8   |d u st |tsJ t |tsJ | j||f d S rG   )r?   r   r\   r&   r(   r   r6   r5   r	   r	   r
   r`   V  s   zNFAState.addarcrG   )r   r   r   r   r`   r	   r	   r	   r
   r\   Q  s    r\   c                   @   s0   e Zd Zdd Zdd Zdd Zdd Zd	Zd	S )
r]   c                 C   sL   t |tsJ t tt|tsJ t |tsJ || _||v | _i | _d S rG   )r?   dictr6   iterr\   r^   r+   r&   )r   r^   finalr	   r	   r
   r   ]  s   

zDFAState.__init__c                 C   s8   t |tsJ || jvsJ t |tsJ || j|< d S rG   )r?   r   r&   r]   r   r	   r	   r
   r`   e  s   zDFAState.addarcc                 C   s*   | j  D ]\}}||u r|| j |< qd S rG   )r&   r'   )r   oldnewr5   r6   r	   r	   r
   rm   k  s
   
zDFAState.unifystatec                 C   sd   t |tsJ | j|jkrdS t| jt|jkrdS | j D ]\}}||j|ur/ dS q dS )NFT)r?   r]   r+   r#   r&   r'   get)r   otherr5   r6   r	   r	   r
   __eq__p  s   zDFAState.__eq__N)r   r   r   r   r`   rm   r   __hash__r	   r	   r	   r
   r]   [  s    r]   Grammar.txtc                 C   s   t | }| S rG   )r   r7   )r   pr	   r	   r
   generate_grammar  s   r   N)r   )re   r   r   r   ZGrammarr   objectr   r\   r]   r   r	   r	   r	   r
   <module>   s     I
%