a
    g	gƒ<  ã                   @   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eedœ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   úV/var/www/html/llm_bihealth/app/venv/lib/python3.9/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< d8ee
ee  ddœdd„Zed	œd
d„Zeee	eef dœdd„Zeeedœdd„Zdd	œdd„Zeddœdd„Zee	eed f ef d	œdd„Zdded dœdd„Zeddddœdd „Zeed dd!œd"d#„Zed dd$œd%d&„Zed' d	œd(d)„Zed' d	œd*d+„Zed' d	œd,d-„Zed' d	œd.d/„Zd9ee
e ed0œd1d2„Z dd	œd3d4„Z!e"ee#d5œd6d7„Z$dS ):ÚParserGeneratorÚfilenameÚstreamÚ	generatorÚfirstN)r   r   Úreturnc                 C   sl   d }|d u rt |ƒ}|j}|| _|| _t |j¡| _|  ¡  |  	¡ \| _
| _|d urZ|ƒ  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__©r   c              	   C   s  t ƒ }t| j ¡ ƒ}| ¡  | | j¡ | d| j¡ |D ]&}dt|j	ƒ }||j	|< ||j
|< q:|D ] }| j| }g }|D ]`}g }t|j ¡ ƒD ]$\}	}
| |  ||	¡| |
¡f¡ q’|jrÒ| d| |¡f¡ | |¡ q||j |¡ ||  ||¡f|j|j	| < qf|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Údfar:   Ústater4   ÚlabelÚnextr   r   r   Úmake_grammar6   s.    

zParserGenerator.make_grammar)r=   r?   r   c                 C   s@   | j | }|d usJ ‚i }t|ƒD ]}|  ||¡}d||< q"|S ©Nr   )r   r3   r7   )r(   r=   r?   Zrawfirstr   rC   Úilabelr   r   r   r;   O   s    

zParserGenerator.make_first)r=   rC   r   c                 C   sx  t |jƒ}|d  ¡ r¾||jv rZ||jv r4|j| S |j |j| d f¡ ||j|< |S nbtt|d ƒ}t|t	ƒsxJ |ƒ‚|tj
v sŠJ |ƒ‚||jv rž|j| S |j |d f¡ ||j|< |S n¶|d dv sÒJ |ƒ‚t|ƒ}|d  ¡ r6|d dk rþ|j}n|j}||v r|| S |j tj|f¡ |||< |S n>tj| }||jv rV|j| S |j |d f¡ ||j|< |S d S )Nr   )ú"ú'rH   )r1   ÚlabelsÚisalphar2   Zsymbol2labelr6   Úgetattrr   Ú
isinstanceÚintÚtok_nameÚtokensÚevalZsoft_keywordsÚkeywordsÚNAMEr   Úopmap)r(   r=   rC   rG   ZitokenÚvaluerR   r   r   r   r7   Y   sB    











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.addfirstsets)r?   r   c              	   C   s
  | j | }d | j|< |d }i }i }|j ¡ D ]„\}}|| j v rž|| jv rj| j| }|d u rŠtd| ƒ‚n |  |¡ | j| }|d usŠJ ‚| |¡ |||< q.d||< |di||< q.i }	| ¡ D ]:\}}
|
D ],}||	v rðtd||||	| f ƒ‚||	|< qÌqÀ|| 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   r4   r5   Ú
ValueErrorrV   Úupdate)r(   r?   rA   rB   ZtotalsetZoverlapcheckrC   rD   ÚfsetZinverseZitsfirstÚsymbolr   r   r   rV   ”   s:    








ÿÿzParserGenerator.calcfirstÚDFAStatec           	      C   s¬   i }d }| j tjkr˜| j tjkr*|  ¡  q|  tj¡}|  tjd¡ |  ¡ \}}|  tj¡ |  	||¡}t
|ƒ}|  |¡ t
|ƒ}|||< |d u r|}q|d us¤J ‚||fS )Nú:)Útyper   Ú	ENDMARKERÚNEWLINEr#   ÚexpectrS   ÚOPÚ	parse_rhsÚmake_dfar1   Úsimplify_dfa)	r(   r%   r&   r?   ÚaÚzrA   ZoldlenZnewlenr   r   r   r$   ´   s$    

zParserGenerator.parseÚNFAState)r<   Úfinishr   c              	      sü   t |tƒsJ ‚t |tƒsJ ‚ttttf dœ‡ fdd„}ttttf d dœ‡ fdd„‰ t||ƒ|ƒg}|D ]Œ}i }|jD ].}|jD ]"\}}	|d ur‚ˆ |	| |i ¡ƒ q‚qxt| 	¡ ƒD ]@\}}
|D ]}|j|
krÀ qèqÀt|
|ƒ}| 
|¡ | ||¡ q´qj|S )N)rB   r   c                    s   i }ˆ | |ƒ |S r   r   )rB   Úbase©Ú
addclosurer   r   ÚclosureÕ   s    
z)ParserGenerator.make_dfa.<locals>.closure)rB   ri   r   c                    sH   t | tƒsJ ‚| |v rd S d|| < | jD ]\}}|d u r(ˆ ||ƒ q(d S rF   )rM   rg   r4   )rB   ri   rC   rD   rj   r   r   rk   Ú   s    z,ParserGenerator.make_dfa.<locals>.addclosure)rM   rg   r   rN   r[   Únfasetr4   Ú
setdefaultr3   r5   r6   Úaddarc)r(   r<   rh   rl   r:   rB   r4   ZnfastaterC   rD   rm   Ústr   rj   r   rc   Í   s&    	



zParserGenerator.make_dfa)r?   r<   rh   r   c           
      C   sš   t d|ƒ |g}t|ƒD ]|\}}t d|||u r2dp4dƒ |jD ]T\}}||v rZ| |¡}	nt|ƒ}	| |¡ |d u r‚t d|	 ƒ q>t d||	f ƒ q>qd S )NzDump of NFA forú  Stateú(final)Ú z	    -> %dú    %s -> %d)ÚprintÚ	enumerater4   r8   r1   r6   )
r(   r?   r<   rh   Útodor@   rB   rC   rD   Újr   r   r   Údump_nfaô   s    

zParserGenerator.dump_nfa)r?   rA   r   c                 C   sd   t d|ƒ t|ƒD ]L\}}t d||jr*dp,dƒ t|j ¡ ƒD ]\}}t d|| |¡f ƒ q>qd S )NzDump of DFA forrq   rr   rs   rt   )ru   rv   r9   r3   r4   r5   r8   )r(   r?   rA   r@   rB   rC   rD   r   r   r   Údump_dfa  s
    
zParserGenerator.dump_dfa)rA   r   c                 C   sp   d}|rld}t |ƒD ]T\}}t|d t|ƒƒD ]8}|| }||kr.||= |D ]}| ||¡ qLd} qq.qqd S )NTFr   )rv   Úranger1   Ú
unifystate)r(   rA   Úchangesr@   Zstate_irx   Zstate_jrB   r   r   r   rd     s    zParserGenerator.simplify_dfa)rg   rg   c                 C   s~   |   ¡ \}}| jdkr||fS tƒ }tƒ }| |¡ | |¡ | jdkrr|  ¡  |   ¡ \}}| |¡ | |¡ q>||fS d S )Nú|)Ú	parse_altrU   rg   ro   r#   )r(   re   rf   ZaaÚzzr   r   r   rb      s    




zParserGenerator.parse_rhsc                 C   sL   |   ¡ \}}| jdv s(| jtjtjfv rD|   ¡ \}}| |¡ |}q||fS )N)ú(ú[)Ú
parse_itemrU   r]   r   rS   ÚSTRINGro   )r(   re   Úbr=   Údr   r   r   r   1  s    
zParserGenerator.parse_altc                 C   sŽ   | j dkr>|  ¡  |  ¡ \}}|  tjd¡ | |¡ ||fS |  ¡ \}}| j }|dvr`||fS |  ¡  | |¡ |dkr‚||fS ||fS d S )Nr‚   ú])ú+Ú*rˆ   )rU   r#   rb   r`   r   ra   ro   Ú
parse_atom)r(   re   rf   rU   r   r   r   rƒ   :  s    


zParserGenerator.parse_itemc                 C   sŽ   | j dkr4|  ¡  |  ¡ \}}|  tjd¡ ||fS | jtjtjfv rpt	ƒ }t	ƒ }| 
|| j ¡ |  ¡  ||fS |  d| j| j ¡ dsŠJ ‚d S )Nr   ú)z+expected (...) or NAME or STRING, got %s/%sF)rU   r#   rb   r`   r   ra   r]   rS   r„   rg   ro   Úraise_error)r(   re   rf   r   r   r   rŠ   N  s    

ÿzParserGenerator.parse_atom)r]   rU   r   c                 C   sD   | j |ks|d ur2| j|kr2|  d||| j | j¡ | j}|  ¡  |S )Nzexpected %s/%s, got %s/%s)r]   rU   rŒ   r#   )r(   r]   rU   r   r   r   r`   a  s    ÿzParserGenerator.expectc                 C   sF   t | jƒ}|d tjtjfv r*t | jƒ}q
|\| _| _| _| _| _	d S )Nr   )
rD   r   r   ÚCOMMENTÚNLr]   rU   ÚbeginÚendÚline)r(   Útupr   r   r   r#   j  s    
zParserGenerator.gettoken)ÚmsgÚargsr   c              
   G   s^   |r8z|| }W n&   d  |gttt|ƒƒ ¡}Y n0 t|| j| jd | jd | jfƒ‚d S )Nú r   r   )Újoinr,   ÚmapÚstrÚSyntaxErrorr   r   r‘   )r(   r“   r”   r   r   r   rŒ   q  s     zParserGenerator.raise_error)N)N)%r   r   r   ÚPathÚ__annotations__r   r   r	   r   r   r   rN   r)   r   rE   r;   r7   r'   rV   r   r
   r$   rc   ry   r   rz   rd   rb   r   rƒ   rŠ   r   r`   r#   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d„Zd	d ee ddœdd„Z	dS )
rg   r4   Nr*   c                 C   s
   g | _ d S r   )r4   )r(   r   r   r   r)   }  s    zNFAState.__init__©rD   rC   r   c                 C   s8   |d u st |tƒsJ ‚t |tƒs$J ‚| j ||f¡ d S r   )rM   r˜   rg   r4   r6   ©r(   rD   rC   r   r   r   ro   €  s    zNFAState.addarc)N)
r   r   r   r
   r   r   r   r›   r)   ro   r   r   r   r   rg   z  s   
rg   c                   @   s   e Zd ZU eeef ed< eed< eed f ed< eeef eddœdd„Z	d eddœd	d
„Z
d d ddœdd„Zeedœdd„ZdZeed< dS )r[   rm   r9   r4   N)rm   Úfinalr   c                 C   sL   t |tƒsJ ‚t tt|ƒƒtƒs$J ‚t |tƒs2J ‚|| _||v | _i | _d S r   )rM   ÚdictrD   Úiterrg   rm   r9   r4   )r(   rm   rž   r   r   r   r)   ‹  s    
zDFAState.__init__rœ   c                 C   s8   t |tƒsJ ‚|| jvsJ ‚t |tƒs*J ‚|| j|< d S r   )rM   r˜   r4   r[   r   r   r   r   ro   “  s    zDFAState.addarc)ÚoldÚnewr   c                 C   s*   | j  ¡ D ]\}}||u r
|| j |< q
d S r   )r4   r5   )r(   r¡   r¢   rC   rD   r   r   r   r|   ™  s    zDFAState.unifystate)Úotherr   c                 C   sd   t |tƒsJ ‚| j|jkrdS t| jƒt|jƒkr6dS | j ¡ D ]\}}||j |¡ur@ dS q@dS )NFT)rM   r[   r9   r1   r4   r5   Úget)r(   r£   rC   rD   r   r   r   Ú__eq__ž  s    zDFAState.__eq__Ú__hash__)r   r   r   r   rg   r   r›   Úboolr   r)   ro   r|   r¥   r¦   r   r   r   r   r[   †  s   
r[   úGrammar.txt)r   r   c                 C   s   t | ƒ}| ¡ S r   )r   rE   )r   Úpr   r   r   Úgenerate_grammar¯  s    rª   )r¨   )rs   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   rg   r[   rª   r   r   r   r   Ú<module>   s   4  \)