B
    Khûhƒ<  ã               @   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   ú6/tmp/pip-install-vv81h98y/black/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 krt |ƒ}|j}|| _|| _t |j¡| _|  ¡  |  	¡ \| _
| _|d k	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¡ x.|D ]&}dt|j	ƒ }||j	|< ||j
|< q<W x°|D ]¨}| j| }g }xl|D ]d}g }x6t|j ¡ ƒD ]$\}	}
| |  ||	¡| |
¡f¡ qœW |jrÞ| d| |¡f¡ | |¡ q„W |j |¡ ||  ||¡f|j|j	| < qlW |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Údfar8   Ústater2   ÚlabelÚnextr   r   r   Úmake_grammar6   s.    




  zParserGenerator.make_grammar)r;   r=   r   c             C   sD   | j | }|d k	st‚i }x$t|ƒD ]}|  ||¡}d||< q$W |S )Nr   )r   ÚAssertionErrorr1   r5   )r'   r;   r=   Zrawfirstr   rA   Úilabelr   r   r   r9   O   s    
zParserGenerator.make_first)r;   rA   r   c             C   sx  t |jƒ}|d  ¡ r¾||jkrZ||jkr4|j| S |j |j| d f¡ ||j|< |S nbtt|d ƒ}t|t	ƒsxt
|ƒ‚|tjksŠt
|ƒ‚||jkrž|j| S |j |d f¡ ||j|< |S n¶|d dksÒt
|ƒ‚t|ƒ}|d  ¡ r6|d dk rþ|j}n|j}||kr|| S |j tj|f¡ |||< |S n>tj| }||jkrV|j| S |j |d f¡ ||j|< |S d S )Nr   )ú"ú'rF   )r/   ÚlabelsÚisalphar0   Zsymbol2labelr4   Úgetattrr   Ú
isinstanceÚintrD   Útok_nameÚtokensÚevalZsoft_keywordsÚkeywordsÚNAMEr   Úopmap)r'   r;   rA   rE   ZitokenÚvaluerP   r   r   r   r5   Y   sB    











zParserGenerator.make_labelc             C   s<   t | j ¡ ƒ}| ¡  x |D ]}|| jkr|  |¡ qW d S )N)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 }x’|j ¡ D ]„\}}|| j kr || jkrl| j| }|d krŒtd| ƒ‚n |  |¡ | j| }|d k	sŒt‚| |¡ |||< q0d||< |di||< q0W i }	xJ| ¡ D ]>\}}
x4|
D ],}||	krøtd||||	| f ƒ‚||	|< qÔW qÆW || 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   r2   r3   Ú
ValueErrorrT   rD   Úupdate)r'   r=   r?   r@   ZtotalsetZoverlapcheckrA   rB   ÚfsetZinverseZitsfirstÚsymbolr   r   r   rT   ”   s6    









zParserGenerator.calcfirstÚDFAStatec       	      C   s´   i }d }x–| j tjkržx| j tjkr.|  ¡  qW |  tj¡}|  tjd¡ |  ¡ \}}|  tj¡ |  	||¡}t
|ƒ}|  |¡ t
|ƒ}|||< |d kr
|}q
W |d k	s¬t‚||fS )Nú:)Útyper   Ú	ENDMARKERÚNEWLINEr"   ÚexpectrQ   ÚOPÚ	parse_rhsÚmake_dfar/   Úsimplify_dfarD   )	r'   r$   r%   r=   ÚaÚzr?   ZoldlenZnewlenr   r   r   r#   ´   s$    
zParserGenerator.parseÚNFAState)r:   Úfinishr   c          	      s  t |tƒst‚t |tƒst‚ttttf dœ‡ fdd„}ttttf d dœ‡ fdd„‰ t||ƒ|ƒg}x¢|D ]š}i }x<|jD ]2}x,|jD ]"\}}	|d k	rˆˆ |	| |i ¡ƒ qˆW q|W xRt	| 
¡ ƒD ]B\}}
x,|D ]}|j|
krÎP qÎW t|
|ƒ}| |¡ | ||¡ qÀW qlW |S )N)r@   r   c                s   i }ˆ | |ƒ |S )Nr   )r@   Úbase)Ú
addclosurer   r   ÚclosureÕ   s    
z)ParserGenerator.make_dfa.<locals>.closure)r@   rg   r   c                sL   t | tƒst‚| |krd S d|| < x$| jD ]\}}|d kr*ˆ ||ƒ q*W d S )Nr   )rK   re   rD   r2   )r@   rg   rA   rB   )rh   r   r   rh   Ú   s    z,ParserGenerator.make_dfa.<locals>.addclosure)rK   re   rD   r   rL   rY   Únfasetr2   Ú
setdefaultr1   r3   r4   Úaddarc)r'   r:   rf   ri   r8   r@   r2   ZnfastaterA   rB   rj   Ústr   )rh   r   ra   Í   s&    	




zParserGenerator.make_dfa)r=   r:   rf   r   c       
      C   s¢   t d|ƒ |g}xŒt|ƒD ]€\}}t d|||kr4dp6dƒ x^|jD ]T\}}||kr^| |¡}	nt|ƒ}	| |¡ |d kr†t d|	 ƒ qBt d||	f ƒ qBW qW d S )NzDump of NFA forz  Statez(final)Ú z	    -> %dz    %s -> %d)ÚprintÚ	enumerater2   r6   r/   r4   )
r'   r=   r:   rf   Útodor>   r@   rA   rB   Újr   r   r   Údump_nfaô   s    

zParserGenerator.dump_nfa)r=   r?   r   c             C   sl   t d|ƒ x\t|ƒD ]P\}}t d||jr,dp.dƒ x0t|j ¡ ƒD ]\}}t d|| |¡f ƒ qBW qW d S )NzDump of DFA forz  Statez(final)rn   z    %s -> %d)ro   rp   r7   r1   r2   r3   r6   )r'   r=   r?   r>   r@   rA   rB   r   r   r   Údump_dfa  s
    
zParserGenerator.dump_dfa)r?   r   c             C   s~   d}xt|rxd}xft |ƒD ]Z\}}xPt|d t|ƒƒD ]:}|| }||kr4||= x|D ]}| ||¡ qTW d}P q4W qW qW d S )NTFr   )rp   Úranger/   Ú
unifystate)r'   r?   Zchangesr>   Zstate_irr   Zstate_jr@   r   r   r   rb     s    
zParserGenerator.simplify_dfa)re   re   c             C   s‚   |   ¡ \}}| jdkr||fS tƒ }tƒ }| |¡ | |¡ x6| jdkrt|  ¡  |   ¡ \}}| |¡ | |¡ q@W ||fS d S )Nú|)Ú	parse_altrS   re   rl   r"   )r'   rc   rd   ZaaÚzzr   r   r   r`      s    



zParserGenerator.parse_rhsc             C   sP   |   ¡ \}}x:| jdks*| jtjtjfkrF|   ¡ \}}| |¡ |}qW ||fS )N)ú(ú[)Ú
parse_itemrS   r[   r   rQ   ÚSTRINGrl   )r'   rc   Úbr;   Údr   r   r   rx   1  s    
zParserGenerator.parse_altc             C   sŽ   | j dkr>|  ¡  |  ¡ \}}|  tjd¡ | |¡ ||fS |  ¡ \}}| j }|dkr`||fS |  ¡  | |¡ |dkr‚||fS ||fS d S )Nr{   ú])ú+Ú*r   )rS   r"   r`   r^   r   r_   rl   Ú
parse_atom)r'   rc   rd   rS   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krpt	ƒ }t	ƒ }| 
|| j ¡ |  ¡  ||fS |  d| j| j ¡ dsŠt‚d S )Nrz   ú)z+expected (...) or NAME or STRING, got %s/%sF)rS   r"   r`   r^   r   r_   r[   rQ   r}   re   rl   Úraise_errorrD   )r'   rc   rd   r   r   r   rƒ   N  s    
zParserGenerator.parse_atom)r[   rS   r   c             C   sD   | j |ks|d k	r2| j|kr2|  d||| j | j¡ | j}|  ¡  |S )Nzexpected %s/%s, got %s/%s)r[   rS   r…   r"   )r'   r[   rS   r   r   r   r^   a  s    zParserGenerator.expectc             C   sJ   t | jƒ}x"|d tjtjfkr,t | jƒ}qW |\| _| _| _| _| _	d S )Nr   )
rB   r   r   ÚCOMMENTÚNLr[   rS   ÚbeginÚendÚline)r'   Útupr   r   r   r"   j  s    
zParserGenerator.gettoken)ÚmsgÚargsr   c          
   G   s^   |r8y|| }W n&   d  |gttt|ƒƒ ¡}Y nX 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   rL   r(   r   rC   r9   r5   r&   rT   r   r
   r#   ra   rs   r   rt   rb   r`   rx   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 )
re   r2   N)r   c             C   s
   g | _ d S )N)r2   )r'   r   r   r   r(   }  s    zNFAState.__init__)rB   rA   r   c             C   s8   |d kst |tƒst‚t |tƒs$t‚| j ||f¡ d S )N)rK   r‘   rD   re   r2   r4   )r'   rB   rA   r   r   r   rl   €  s    zNFAState.addarc)N)
r   r   r   r
   r   r   r   r”   r(   rl   r   r   r   r   re   z  s   
re   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 )rY   rj   r7   r2   N)rj   Úfinalr   c             C   sL   t |tƒst‚t tt|ƒƒtƒs$t‚t |tƒs2t‚|| _||k| _i | _d S )N)	rK   ÚdictrD   rB   Úiterre   rj   r7   r2   )r'   rj   r•   r   r   r   r(   ‹  s    
zDFAState.__init__)rB   rA   r   c             C   s8   t |tƒst‚|| jkst‚t |tƒs*t‚|| j|< d S )N)rK   r‘   rD   r2   rY   )r'   rB   rA   r   r   r   rl   “  s    zDFAState.addarc)ÚoldÚnewr   c             C   s.   x(| j  ¡ D ]\}}||kr|| j |< qW d S )N)r2   r3   )r'   r˜   r™   rA   rB   r   r   r   rv   ™  s    zDFAState.unifystate)Úotherr   c             C   sf   t |tƒst‚| j|jkrdS t| jƒt|jƒkr6dS x*| j ¡ D ]\}}||j |¡k	rBdS qBW dS )NFT)rK   rY   rD   r7   r/   r2   r3   Úget)r'   rš   rA   rB   r   r   r   Ú__eq__ž  s    zDFAState.__eq__Ú__hash__)r   r   r   r   re   r   r”   Úboolr   r(   rl   rv   rœ   r   r   r   r   r   rY   †  s   
rY   úGrammar.txt)r   r   c             C   s   t | ƒ}| ¡ S )N)r   rC   )r   Úpr   r   r   Úgenerate_grammar¯  s    r¡   )rŸ   )rn   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   re   rY   r¡   r   r   r   r   Ú<module>   s   4  \)