o
    ÕÜÓhD<  ã                   @   s¸   d dl Z d dlmZmZmZmZmZmZmZm	Z	m
Z
mZ d dlmZmZmZ d dlmZ eedf ZG dd„ dejƒZG dd	„ d	ƒZG d
d„ dƒZG dd„ dƒZddedefdd„ZdS )é    N)
ÚIOÚAnyÚDictÚIteratorÚListÚNoReturnÚOptionalÚSequenceÚTupleÚUnion)ÚgrammarÚtokenÚtokenize)ÚGoodTokenInfozos.PathLike[str]c                   @   s   e Zd ZdS )ÚPgenGrammarN)Ú__name__Ú
__module__Ú__qualname__© r   r   úI/var/www/html/ai/venv/lib/python3.10/site-packages/blib2to3/pgen2/pgen.pyr      s    r   c                   @   sÒ  e Zd ZU eed< ee ed< ee ed< e	ee
e	eef  f ed< d8dede
ee  ddfdd„Zdefd	d
„Zdedede	eef fdd„Zdededefdd„Zd9dd„Zdeddfdd„Zdee	eed f ef fdd„Zddddded fdd„Zdeddddddfdd„Zded ed ddfd!d"„Zd ed ddfd#d$„Zded% fd&d'„Zded% fd(d)„Zded% fd*d+„Zded% fd,d-„Zd8d.ed/e
e defd0d1„Z d9d2d3„Z!d4ed5ede"fd6d7„Z#dS ):ÚParserGeneratorÚfilenameÚstreamÚ	generatorÚfirstNÚreturnc                 C   sp   d }|d u rt |dd}|j}|| _|| _t |j¡| _|  ¡  |  	¡ \| _
| _|d ur/|ƒ  i | _|  ¡  d S )Nzutf-8)Úencoding)ÚopenÚcloser   r   r   Úgenerate_tokensÚreadliner   ÚgettokenÚparseÚdfasÚstartsymbolr   Úaddfirstsets)Úselfr   r   Ú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 )Nr   é   )r   Úlistr#   ÚkeysÚsortÚremover$   ÚinsertÚlenÚsymbol2numberÚnumber2symbolÚsortedÚarcsÚitemsÚappendÚ
make_labelÚindexÚisfinalÚstatesÚ
make_firstÚstart)r&   ÚcÚnamesÚnameÚiÚdfar9   Ústater3   ÚlabelÚnextr   r   r   Úmake_grammar1   s.   

zParserGenerator.make_grammarr<   r>   c                 C   s@   | j | }|d usJ ‚i }t|ƒD ]}|  ||¡}d||< q|S ©Né   )r   r2   r6   )r&   r<   r>   Úrawfirstr   rB   Úilabelr   r   r   r:   J   s   

zParserGenerator.make_firstrB   c                 C   sf  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•|d dkr{|j}n|j}||v r†|| S |j tj|f¡ |||< |S tj| }||jv r¤|j| S |j |d f¡ ||j|< |S )Nr   )ú"ú'rI   )r/   ÚlabelsÚisalphar0   Úsymbol2labelr5   Úgetattrr   Ú
isinstanceÚintÚtok_nameÚtokensÚevalÚsoft_keywordsÚkeywordsÚNAMEr   Úopmap)r&   r<   rB   rH   ÚitokenÚvaluerU   r   r   r   r6   T   sB   











zParserGenerator.make_labelc                 C   s8   t | j ¡ ƒ}| ¡  |D ]}|| jvr|  |¡ qd S ©N)r*   r#   r+   r,   r   Ú	calcfirst)r&   r=   r>   r   r   r   r%   ‡   s   

€þzParserGenerator.addfirstsetsc              	   C   s  | j | }d | j|< |d }i }i }|jD ]@}|| j v rK|| jv r1| j| }|d u r0td| ƒ‚n|  |¡ | j| }|d usAJ ‚| |¡ |||< qd||< |di||< qi }| ¡ D ]\}}	|	D ]}
|
|v rttd||
|||
 f ƒ‚|||
< qbq\|| j|< d S )Nr   zrecursion for rule %rrF   zArule %s is ambiguous; %s is in the first sets of %s as well as %s)r#   r   r3   Ú
ValueErrorr[   Úupdater4   )r&   r>   r@   rA   ÚtotalsetÚoverlapcheckrB   ÚfsetÚinverseÚitsfirstÚsymbolr   r   r   r[      s>   





ÿ



ÿÿ
úzParserGenerator.calcfirstÚDFAStatec                 C   s°   i }d }| j tjkrN| j tjkr|  ¡  | j tjks|  tj¡}|  tjd¡ |  ¡ \}}|  tj¡ |  	||¡}|  
|¡ |||< |d u rH|}| j tjks
|d usTJ ‚||fS )Nú:)Útyper   Ú	ENDMARKERÚNEWLINEr!   ÚexpectrV   ÚOPÚ	parse_rhsÚmake_dfaÚsimplify_dfa)r&   r#   r$   r>   ÚaÚzr@   r   r   r   r"   ¯   s$   ÿ
ïzParserGenerator.parser;   ÚNFAStateÚfinishc              	      s  t |tƒsJ ‚t |tƒsJ ‚dtdtttf f‡ fdd„}dtdtttf dd f‡ fdd„‰ t||ƒ|ƒg}|D ]F}i }|jD ]}|jD ]\}}	|d urUˆ |	| |i ¡ƒ qDq?t| 	¡ ƒD ] \}}
|D ]	}|j|
krl nqct|
|ƒ}| 
|¡ | ||¡ q]q8|S )NrA   r   c                    s   i }ˆ | |ƒ |S rZ   r   )rA   Úbase©Ú
addclosurer   r   ÚclosureÐ   s   
z)ParserGenerator.make_dfa.<locals>.closurerr   c                    sH   t | tƒsJ ‚| |v rd S d|| < | jD ]\}}|d u r!ˆ ||ƒ qd S rE   )rO   rp   r3   )rA   rr   rB   rC   rs   r   r   rt   Õ   s   
€þz,ParserGenerator.make_dfa.<locals>.addclosure)rO   rp   r   rP   rd   Únfasetr3   Ú
setdefaultr2   r4   r5   Úaddarc)r&   r;   rq   ru   r9   rA   r3   ÚnfastaterB   rC   rv   Ústr   rs   r   rl   È   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Ú	enumerater3   r7   r/   r5   )
r&   r>   r;   rq   Útodor?   rA   rB   rC   Újr   r   r   Údump_nfaï   s   

÷þzParserGenerator.dump_nfar@   c                 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 forr{   r|   r}   r~   )r   r€   r8   r2   r3   r4   r7   )r&   r>   r@   r?   rA   rB   rC   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 )NTFrF   )r€   Úranger/   Ú
unifystate)r&   r@   Úchangesr?   Ústate_ir‚   Ústate_jrA   r   r   r   rm     s   ú€ûzParserGenerator.simplify_dfa)rp   rp   c                 C   s‚   |   ¡ \}}| jdkr||fS tƒ }tƒ }| |¡ | |¡ | jdkr=|  ¡  |   ¡ \}}| |¡ | |¡ | jdks$||fS )Nú|)Ú	parse_altrY   rp   rx   r!   )r&   rn   ro   ÚaaÚzzr   r   r   rk     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_itemrY   rf   r   rV   ÚSTRINGrx   )r&   rn   Úbr<   Údr   r   r   r‹   ,  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 )Nr   ú])ú+Ú*r•   )rY   r!   rk   ri   r   rj   rx   Ú
parse_atom)r&   rn   ro   rY   r   r   r   r   5  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 ¡ t‚)NrŽ   ú)z+expected (...) or NAME or STRING, got %s/%s)rY   r!   rk   ri   r   rj   rf   rV   r‘   rp   rx   Úraise_errorÚAssertionError)r&   rn   ro   r   r   r   r—   I  s   

ÿzParserGenerator.parse_atomrf   rY   c                 C   sD   | j |ks|d ur| j|kr|  d||| j | j¡ | j}|  ¡  |S )Nzexpected %s/%s, got %s/%s)rf   rY   r™   r!   )r&   rf   rY   r   r   r   ri   \  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   )
rC   r   r   ÚCOMMENTÚNLrf   rY   ÚbeginÚendÚline)r&   Útupr   r   r   r!   e  s
   

ÿzParserGenerator.gettokenÚmsgÚargsc              
   G   s`   |rz|| }W n t y   d |gttt|ƒƒ ¡}Y nw t|| j| jd | jd | jfƒ‚)Nú r   rF   )	Ú	ExceptionÚjoinr*   ÚmapÚstrÚSyntaxErrorr   rž   rŸ   )r&   r¡   r¢   r   r   r   r™   l  s   ÿ"zParserGenerator.raise_errorrZ   ©r   N)$r   r   r   ÚPathÚ__annotations__r   r§   r   r   r   r   rP   r(   r   rD   r:   r6   r%   r[   r
   r   r"   rl   rƒ   r	   r„   rm   rk   r‹   r   r—   r   ri   r!   r   r™   r   r   r   r   r      s.   
  

3" '	
	r   c                   @   sL   e Zd ZU eeee d f  ed< d
dd„Zddd dee ddfdd	„Z	dS )rp   r3   r   Nc                 C   s
   g | _ d S rZ   )r3   )r&   r   r   r   r(   x  s   
zNFAState.__init__rC   rB   c                 C   s8   |d u st |tƒsJ ‚t |tƒsJ ‚| j ||f¡ d S rZ   )rO   r§   rp   r3   r5   ©r&   rC   rB   r   r   r   rx   {  s   zNFAState.addarcr©   rZ   )
r   r   r   r   r
   r   r§   r«   r(   rx   r   r   r   r   rp   u  s   
 
 rp   c                   @   s’   e Zd ZU eeef ed< eed< eed f ed< deeef deddfdd„Z	d	d d
eddfdd„Z
ddd„Zdedefdd„ZdZeed< dS )rd   rv   r8   r3   Úfinalr   Nc                 C   sL   t |tƒsJ ‚t tt|ƒƒtƒsJ ‚t |tƒsJ ‚|| _||v | _i | _d S rZ   )rO   ÚdictrC   Úiterrp   rv   r8   r3   )r&   rv   r­   r   r   r   r(   †  s   

zDFAState.__init__rC   rB   c                 C   s8   t |tƒsJ ‚|| jvsJ ‚t |tƒsJ ‚|| j|< d S rZ   )rO   r§   r3   rd   r¬   r   r   r   rx   Ž  s   zDFAState.addarcÚoldÚnewc                 C   s*   | j  ¡ D ]\}}||u r|| j |< qd S rZ   )r3   r4   )r&   r°   r±   rB   rC   r   r   r   r†   ”  s
   
€þzDFAState.unifystateÚotherc                 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)rO   rd   r8   r/   r3   r4   Úget)r&   r²   rB   rC   r   r   r   Ú__eq__™  s   ÿzDFAState.__eq__Ú__hash__)r°   rd   r±   rd   r   N)r   r   r   r   rp   r   r«   Úboolr§   r(   rx   r†   r´   rµ   r   r   r   r   rd     s   
 
rd   úGrammar.txtr   r   c                 C   s   t | ƒ}| ¡ S rZ   )r   rD   )r   Úpr   r   r   Úgenerate_grammarª  s   r¹   )r·   )ÚosÚtypingr   r   r   r   r   r   r   r	   r
   r   Úblib2to3.pgen2r   r   r   Úblib2to3.pgen2.tokenizer   r§   rª   ÚGrammarr   r   rp   rd   r¹   r   r   r   r   Ú<module>   s   0  [)