o
    ^’i;  ã                   @   s´   d dl Z d dlmZmZ d dl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)ÚIteratorÚSequence)ÚIOÚAnyÚNoReturnÚOptionalÚUnion)ÚgrammarÚtokenÚtokenize)Ú	TokenInfozos.PathLike[str]c                   @   s   e Zd ZdS )ÚPgenGrammarN)Ú__name__Ú
__module__Ú__qualname__© r   r   úX/var/www/html/stock_analysis/be/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< d7d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d8d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d7d.ed/e
e defd0d1„Z d8d2d3„Z!d4ede"fd5d6„Z#dS )9ÚParserGeneratorÚfilenameÚstreamÚ	generatorÚfirstNÚreturnc                 C   sl   d }|d u rt |dd}|j}|| _t | ¡ ¡| _|  ¡  |  ¡ \| _| _	|d ur-|ƒ  i | _
|  ¡  d S )Nzutf-8)Úencoding)ÚopenÚcloser   r   Úreadr   Ú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Údfar5   Ústater/   ÚlabelÚnextr   r   r   Úmake_grammar&   s.   

zParserGenerator.make_grammarr8   r:   c                 C   s@   | j | }|d usJ ‚i }t|ƒD ]}|  ||¡}d||< q|S ©Né   )r   r.   r2   )r"   r8   r:   Úrawfirstr   r>   Úilabelr   r   r   r6   ?   s   

zParserGenerator.make_firstr>   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   )ú"ú'rE   )r+   ÚlabelsÚisalphar,   Úsymbol2labelr1   Úgetattrr
   Ú
isinstanceÚintÚtok_nameÚtokensÚevalÚsoft_keywordsÚkeywordsÚNAMEr	   Úopmap)r"   r8   r>   rD   ÚitokenÚvaluerQ   r   r   r   r2   I   sB   











zParserGenerator.make_labelc                 C   s8   t | j ¡ ƒ}| ¡  |D ]}|| jvr|  |¡ qd S ©N)r&   r   r'   r(   r   Ú	calcfirst)r"   r9   r:   r   r   r   r!   |   s   

€þzParserGenerator.addfirstsetsc                 C   s  | j | }d | j|< |d }i }i }|jD ]A}|| j v rL|| jv r2| j| }|d u r1td|›ƒ‚n|  |¡ | j| }|d usBJ ‚| |¡ |||< qd||< |di||< qi }| ¡ D ]#\}}	|	D ]}
|
|v r{td|› d|
› d|› d||
 › ƒ‚|||
< qcq]|| j|< d S )Nr   zrecursion for rule rB   zrule z is ambiguous; z is in the first sets of z as well as )r   r   r/   Ú
ValueErrorrW   Úupdater0   )r"   r:   r<   r=   ÚtotalsetÚoverlapcheckr>   ÚfsetÚinverseÚitsfirstÚsymbolr   r   r   rW   „   sB   





ÿ



ÿÿÿ
ú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   ÚexpectrR   ÚOPÚ	parse_rhsÚmake_dfaÚsimplify_dfa)r"   r   r    r:   ÚaÚzr<   r   r   r   r   ¤   s$   ÿ
ïzParserGenerator.parser7   Ú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 )Nr=   r   c                    s   i }ˆ | |ƒ |S rV   r   )r=   Úbase©Ú
addclosurer   r   ÚclosureÅ   s   
z)ParserGenerator.make_dfa.<locals>.closurern   c                    sH   t | tƒsJ ‚| |v rd S d|| < | jD ]\}}|d u r!ˆ ||ƒ qd S rA   )rK   rl   r/   )r=   rn   r>   r?   ro   r   r   rp   Ê   s   
€þz,ParserGenerator.make_dfa.<locals>.addclosure)rK   rl   ÚdictrL   r`   Únfasetr/   Ú
setdefaultr.   r0   r1   Úaddarc)r"   r7   rm   rq   r5   r=   r/   Únfastater>   r?   rs   Ústr   ro   r   rh   ½   s.   "	
€þ
ÿ

ùzParserGenerator.make_dfac           
      C   s    t d|ƒ |g}t|ƒD ]A\}}t d|||u rdpdƒ |jD ]-\}}||v r-| |¡}	n	t|ƒ}	| |¡ |d u rBt d|	› ƒ qt d|› d|	› ƒ qqd S )NzDump of NFA forú  Stateú(final)Ú z    -> ú    ú -> )ÚprintÚ	enumerater/   r3   r+   r1   )
r"   r:   r7   rm   Útodor;   r=   r>   r?   Újr   r   r   Údump_nfaä   s   

÷þzParserGenerator.dump_nfar<   c              	   C   sh   t d|ƒ t|ƒD ](\}}t d||jrdpdƒ t|j ¡ ƒD ]\}}t d|› d| |¡› ƒ qq	d S )NzDump of DFA forrx   ry   rz   r{   r|   )r}   r~   r4   r.   r/   r0   r3   )r"   r:   r<   r;   r=   r>   r?   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 )NTFrB   )r~   Úranger+   Ú
unifystate)r"   r<   Úchangesr;   Ústate_ir€   Ústate_jr=   r   r   r   ri   û   s   ú€ûzParserGenerator.simplify_dfa)rl   rl   c                 C   s‚   |   ¡ \}}| jdkr||fS tƒ }tƒ }| |¡ | |¡ | jdkr=|  ¡  |   ¡ \}}| |¡ | |¡ | jdks$||fS )Nú|)Ú	parse_altrU   rl   ru   r   )r"   rj   rk   ÚaaÚzzr   r   r   rg     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_itemrU   rb   r
   rR   ÚSTRINGru   )r"   rj   Úbr8   Ú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“   )rU   r   rg   re   r
   rf   ru   Ú
parse_atom)r"   rj   rk   rU   r   r   r   rŽ   *  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› d| j › ¡ d S )NrŒ   ú)z&expected (...) or NAME or STRING, got ú/)rU   r   rg   re   r
   rf   rb   rR   r   rl   ru   Úraise_error)r"   rj   rk   r   r   r   r•   >  s   
ÿzParserGenerator.parse_atomrb   rU   c              
   C   sT   | j |ks|d ur!| j|kr!|  d|› d|› d| j › d| j› ¡ | j}|  ¡  |S )Nz	expected r—   z, got )rb   rU   r˜   r   )r"   rb   rU   r   r   r   re   P  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   )
r?   r   r   ÚCOMMENTÚNLrb   rU   ÚbeginÚendÚline)r"   Útupr   r   r   r   W  s
   

ÿzParserGenerator.gettokenÚmsgc                 C   s&   t |t| jƒ| jd | jd | jfƒ‚)Nr   rB   )ÚSyntaxErrorÚstrr   rœ   r   )r"   rŸ   r   r   r   r˜   ^  s    ÿzParserGenerator.raise_errorrV   ©r   N)$r   r   r   ÚPathÚ__annotations__r   r¡   r   r   rr   r   rL   r$   r   r@   r6   r2   r!   rW   Útupler&   r   rh   r   r   r‚   ri   rg   r‰   rŽ   r•   r   re   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 )rl   r/   r   Nc                 C   s
   g | _ d S rV   )r/   )r"   r   r   r   r$   g  s   
zNFAState.__init__r?   r>   c                 C   s8   |d u st |tƒsJ ‚t |tƒsJ ‚| j ||f¡ d S rV   )rK   r¡   rl   r/   r1   ©r"   r?   r>   r   r   r   ru   j  s   zNFAState.addarcr¢   rV   )
r   r   r   r&   r¥   r   r¡   r¤   r$   ru   r   r   r   r   rl   d  s   
 
 rl   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 )r`   rs   r4   r/   Úfinalr   Nc                 C   sL   t |tƒsJ ‚t tt|ƒƒtƒsJ ‚t |tƒsJ ‚|| _||v | _i | _d S rV   )rK   rr   r?   Úiterrl   rs   r4   r/   )r"   rs   r§   r   r   r   r$   u  s   

zDFAState.__init__r?   r>   c                 C   s8   t |tƒsJ ‚|| jvsJ ‚t |tƒsJ ‚|| j|< d S rV   )rK   r¡   r/   r`   r¦   r   r   r   ru   }  s   zDFAState.addarcÚoldÚnewc                 C   s*   | j  ¡ D ]\}}||u r|| j |< qd S rV   )r/   r0   )r"   r©   rª   r>   r?   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)rK   r`   r4   r+   r/   r0   Úget)r"   r«   r>   r?   r   r   r   Ú__eq__ˆ  s   ÿzDFAState.__eq__Ú__hash__)r©   r`   rª   r`   r   N)r   r   r   rr   rl   r   r¤   Úboolr¡   r$   ru   r„   r­   r®   r   r   r   r   r`   p  s   
 
r`   úGrammar.txtr   r   c                 C   s   t | ƒ}| ¡ S rV   )r   r@   )r   Úpr   r   r   Úgenerate_grammar™  s   r²   )r°   )ÚosÚcollections.abcr   r   Útypingr   r   r   r   r   Úblib2to3.pgen2r	   r
   r   Úblib2to3.pgen2.tokenizer   r¡   r£   ÚGrammarr   r   rl   r`   r²   r   r   r   r   Ú<module>   s     T)