o
    ýÑÐbõ;  ã                   @   sÎ   d dl mZmZmZ ddlmZ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 ddlmZ ddlZeedf 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edefdd„ZdS )é   )ÚgrammarÚtokenÚtokenizeé    )ÚAnyÚDictÚIOÚIteratorÚListÚOptionalÚTextÚTupleÚUnionÚSequenceÚNoReturn)r   )ÚGoodTokenInfoNzos.PathLike[str]c                   @   s   e Zd ZdS )ÚPgenGrammarN)Ú__name__Ú
__module__Ú__qualname__© r   r   úR/var/www/secure340b-portal/env/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   sl   d }|d u rt |ƒ}|j}|| _|| _t |j¡| _|  ¡  |  	¡ \| _
| _|d ur-|ƒ  i | _|  ¡  d S ©N)ÚopenÚcloser   r   r   Úgenerate_tokensÚreadliner   ÚgettokenÚparseÚdfasÚstartsymbolr   Ú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 )Nr   é   )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Údfar9   Ústater3   ÚlabelÚnextr   r   r   Úmake_grammar6   s.   

zParserGenerator.make_grammarr<   r>   c                 C   s@   | j | }|d usJ ‚i }t|ƒD ]}|  ||¡}d||< q|S ©Nr   )r   r2   r6   )r(   r<   r>   Zrawfirstr   rB   Úilabelr   r   r   r:   O   s   

zParserGenerator.make_firstrB   c                 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   )ú"ú')r0   ÚlabelsÚisalphar1   Zsymbol2labelr5   Úgetattrr   Ú
isinstanceÚintÚtok_nameÚtokensÚevalÚkeywordsÚNAMEr   Úopmap)r(   r<   rB   rF   ZitokenÚvaluer   r   r   r6   Y   s<   














zParserGenerator.make_labelc                 C   s8   t | j ¡ ƒ}| ¡  |D ]}|| jvr|  |¡ qd S r   )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 ]B\}}|| j v rO|| jv r5| j| }|d u r4td| ƒ‚n|  |¡ | j| }|d usEJ ‚| |¡ |||< qd||< |di||< qi }	| ¡ D ]\}}
|
D ]}||	v rxtd||||	| f ƒ‚||	|< qfq`|| 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   r3   r4   Ú
ValueErrorrU   Úupdate)r(   r>   r@   rA   ZtotalsetZoverlapcheckrB   rC   ÚfsetZinverseZitsfirstÚsymbolr   r   r   rU      s>   




ÿ



ÿÿ
úzParserGenerator.calcfirstÚDFAStatec           	      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
|d us\J ‚||fS )Nú:)Útyper   Ú	ENDMARKERÚNEWLINEr#   ÚexpectrR   ÚOPÚ	parse_rhsÚmake_dfar0   Úsimplify_dfa)	r(   r%   r&   r>   ÚaÚzr@   ZoldlenZnewlenr   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 r   r   )rA   Úbase©Ú
addclosurer   r   ÚclosureÐ   s   
z)ParserGenerator.make_dfa.<locals>.closurerh   c                    sH   t | tƒsJ ‚| |v rd S d|| < | jD ]\}}|d u r!ˆ ||ƒ qd S rE   )rL   rf   r3   )rA   rh   rB   rC   ri   r   r   rj   Õ   s   
€þz,ParserGenerator.make_dfa.<locals>.addclosure)rL   rf   r   rM   rZ   Únfasetr3   Ú
setdefaultr2   r4   r5   Úaddarc)r(   r;   rg   rk   r9   rA   r3   ZnfastaterB   rC   rl   Ústr   ri   r   rb   È   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   r0   r5   )
r(   r>   r;   rg   Ú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 forrp   rq   rr   rs   )rt   ru   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 )NTFr   )ru   Úranger0   Ú
unifystate)r(   r@   Úchangesr?   Zstate_irw   Zstate_jrA   r   r   r   rc     s   ú€ûzParserGenerator.simplify_dfa)rf   rf   c                 C   s‚   |   ¡ \}}| jdkr||fS tƒ }tƒ }| |¡ | |¡ | jdkr=|  ¡  |   ¡ \}}| |¡ | |¡ | jdks$||fS )Nú|)Ú	parse_altrT   rf   rn   r#   )r(   rd   re   ZaaÚzzr   r   r   ra     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_itemrT   r\   r   rR   ÚSTRINGrn   )r(   rd   Ú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‡   )rT   r#   ra   r_   r   r`   rn   Ú
parse_atom)r(   rd   re   rT   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 ¡ J ‚)Nr€   ú)z+expected (...) or NAME or STRING, got %s/%s)rT   r#   ra   r_   r   r`   r\   rR   rƒ   rf   rn   Úraise_error)r(   rd   re   r   r   r   r‰   I  s   

ÿzParserGenerator.parse_atomr\   rT   c                 C   sD   | j |ks|d ur| j|kr|  d||| j | j¡ | j}|  ¡  |S )Nzexpected %s/%s, got %s/%s)r\   rT   r‹   r#   )r(   r\   rT   r   r   r   r_   \  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ÚNLr\   rT   ÚbeginÚendÚline)r(   Útupr   r   r   r#   e  s
   

ÿzParserGenerator.gettokenÚmsgÚargsc              
   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(   r’   r“   r   r   r   r‹   l  s   "zParserGenerator.raise_errorr   ©r   N)%r   r   r   ÚPathÚ__annotations__r   r   r	   r   r   r   rM   r)   r   rD   r:   r6   r'   rU   r   r
   r$   rb   rx   r   ry   rc   ra   r~   r‚   r‰   r   r_   r#   r—   r   r‹   r   r   r   r   r       s.   
  

." '	
	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 )rf   r3   r   Nc                 C   s
   g | _ d S r   )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 r   )rL   r—   rf   r3   r5   ©r(   rC   rB   r   r   r   rn   {  s   zNFAState.addarcr™   r   )
r   r   r   r
   r   r   r   r›   r)   rn   r   r   r   r   rf   u  s   
 
 rf   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 )rZ   rl   r8   r3   Úfinalr   Nc                 C   sL   t |tƒsJ ‚t tt|ƒƒtƒsJ ‚t |tƒsJ ‚|| _||v | _i | _d S r   )rL   ÚdictrC   Úiterrf   rl   r8   r3   )r(   rl   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 r   )rL   r—   r3   rZ   rœ   r   r   r   rn   Ž  s   zDFAState.addarcÚoldÚnewc                 C   s*   | j  ¡ D ]\}}||u r|| j |< qd S r   )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)rL   rZ   r8   r0   r3   r4   Úget)r(   r¢   rB   rC   r   r   r   Ú__eq__™  s   ÿzDFAState.__eq__Ú__hash__)r    rZ   r¡   rZ   r   N)r   r   r   r   rf   r   r›   Úboolr   r)   rn   r{   r¤   r¥   r   r   r   r   rZ     s   
 
rZ   úGrammar.txtr   r   c                 C   s   t | ƒ}| ¡ S r   )r   rD   )r   Úpr   r   r   Úgenerate_grammarª  s   r©   )r§   )rr   r   r   r   Útypingr   r   r   r	   r
   r   r   r   r   r   r   Zblib2to3.pgen2Zblib2to3.pgen2.tokenizer   Úosr—   rš   ZGrammarr   Úobjectr   rf   rZ   r©   r   r   r   r   Ú<module>   s   4  W)