o
    Šbc6  ã                   @   sd   d dl mZmZm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d„Z
dS )é   )ÚgrammarÚtokenÚtokenizec                   @   s   e Zd ZdS )ÚPgenGrammarN)Ú__name__Ú
__module__Ú__qualname__© r	   r	   ú)/usr/lib/python3.10/lib2to3/pgen2/pgen.pyr      s    r   c                   @   s    e Zd Zd&dd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd&d d!„Zd"d#„ Zd$d%„ ZdS )'ÚParserGeneratorNc                 C   sp   d }|d u rt |dd}|j}|| _|| _t |j¡| _|  ¡  |  	¡ \| _
| _|d ur/|ƒ  i | _|  ¡  d S )Nzutf-8)Úencoding)ÚopenÚcloseÚfilenameÚstreamr   Úgenerate_tokensÚreadlineÚ	generatorÚgettokenÚparseÚdfasÚstartsymbolÚfirstÚ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 )Né    é   )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Údfar.   Ústater(   ÚlabelÚnextr	   r	   r
   Úmake_grammar   s.   

zParserGenerator.make_grammarc                 C   s4   | j | }i }t|ƒD ]}|  ||¡}d||< q|S ©Nr   )r   r'   r+   )r   r1   r3   Úrawfirstr   r7   Úilabelr	   r	   r
   r/   4   s   

zParserGenerator.make_firstc                 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   )ú"ú')r$   ÚlabelsÚisalphar%   Úsymbol2labelr*   Úgetattrr   Ú
isinstanceÚintÚtok_nameÚtokensÚevalÚkeywordsÚNAMEr   Úopmap)r   r1   r7   r<   ÚitokenÚvaluer	   r	   r
   r+   =   s<   














zParserGenerator.make_labelc                 C   s8   t | j ¡ ƒ}| ¡  |D ]}|| jvr|  |¡ qd S ©N)r   r   r    r!   r   Ú	calcfirst)r   r2   r3   r	   r	   r
   r   k   s   

€þzParserGenerator.addfirstsetsc              	   C   sþ   | j | }d | j|< |d }i }i }|j ¡ D ]<\}}|| j v rI|| jv r5| j| }|d u r4td| ƒ‚n
|  |¡ | j| }| |¡ |||< qd||< |di||< qi }	| ¡ D ]\}}
|
D ]}||	v rrtd||||	| f ƒ‚||	|< q`qZ|| 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   r(   r)   Ú
ValueErrorrN   Úupdate)r   r3   r5   r6   ÚtotalsetÚoverlapcheckr7   r8   ÚfsetÚinverseÚitsfirstÚsymbolr	   r	   r
   rN   s   s8   




ÿ



þ
ûzParserGenerator.calcfirstc           	      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
||fS )Nú:)Útyper   Ú	ENDMARKERÚNEWLINEr   ÚexpectrI   ÚOPÚ	parse_rhsÚmake_dfar$   Úsimplify_dfa)	r   r   r   r3   ÚaÚzr5   ÚoldlenÚnewlenr	   r	   r
   r   ‘   s&   ÿ
ïzParserGenerator.parsec              	      sÚ   t |tƒsJ ‚t |tƒsJ ‚‡ fdd„}‡ fdd„‰ t||ƒ|ƒg}|D ]F}i }|jD ]}|jD ]\}}	|d urAˆ |	| |i ¡ƒ q0q+t| ¡ ƒD ] \}}
|D ]	}|j|
krX nqOt|
|ƒ}| |¡ | 	||¡ qIq$|S )Nc                    s   i }ˆ | |ƒ |S rM   r	   )r6   Úbase©Ú
addclosurer	   r
   Úclosure°   s   
z)ParserGenerator.make_dfa.<locals>.closurec                    sH   t | tƒsJ ‚| |v rd S d|| < | jD ]\}}|d u r!ˆ ||ƒ qd S r:   )rC   ÚNFAStater(   )r6   rd   r7   r8   re   r	   r
   rf   ´   s   
€þz,ParserGenerator.make_dfa.<locals>.addclosure)
rC   rh   ÚDFAStateÚnfasetr(   Ú
setdefaultr'   r)   r*   Úaddarc)r   r0   Úfinishrg   r.   r6   r(   Únfastater7   r8   rj   Ústr	   re   r
   r^   ©   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Ú	enumerater(   r,   r$   r*   )
r   r3   r0   rm   Útodor4   r6   r7   r8   Újr	   r	   r
   Údump_nfaÍ   s   

÷þzParserGenerator.dump_nfac                 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   r-   r'   r(   r)   r,   )r   r3   r5   r4   r6   r7   r8   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   Úranger$   Ú
unifystate)r   r5   Úchangesr4   Ústate_irw   Ústate_jr6   r	   r	   r
   r_   ä   s   ú€ûzParserGenerator.simplify_dfac                 C   s‚   |   ¡ \}}| jdkr||fS tƒ }tƒ }| |¡ | |¡ | jdkr=|  ¡  |   ¡ \}}| |¡ | |¡ | jdks$||fS )Nú|)Ú	parse_altrL   rh   rl   r   )r   r`   ra   ÚaaÚzzr	   r	   r
   r]   ù   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_itemrL   rX   r   rI   ÚSTRINGrl   )r   r`   Úbr1   Ú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Š   )rL   r   r]   r[   r   r\   rl   Ú
parse_atom)r   r`   ra   rL   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| j ¡ d S )Nrƒ   ú)z+expected (...) or NAME or STRING, got %s/%s)rL   r   r]   r[   r   r\   rX   rI   r†   rh   rl   Úraise_error)r   r`   ra   r	   r	   r
   rŒ   (  s   
ÿzParserGenerator.parse_atomc                 C   sD   | j |ks|d ur| j|kr|  d||| j | j¡ | j}|  ¡  |S )Nzexpected %s/%s, got %s/%s)rX   rL   rŽ   r   )r   rX   rL   r	   r	   r
   r[   9  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   )
r8   r   r   ÚCOMMENTÚNLrX   rL   ÚbeginÚendÚline)r   Útupr	   r	   r
   r   A  s
   

ÿzParserGenerator.gettokenc              
   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   ÚmsgÚargsr	   r	   r
   rŽ   H  s   ÿzParserGenerator.raise_errorrM   )r   r   r   r   r9   r/   r+   r   rN   r   r^   rx   ry   r_   r]   r€   r…   rŒ   r[   r   rŽ   r	   r	   r	   r
   r   
   s&    
	.$

r   c                   @   s   e Zd Zdd„ Zddd„ZdS )rh   c                 C   s
   g | _ d S rM   )r(   )r   r	   r	   r
   r   S  s   
zNFAState.__init__Nc                 C   s8   |d u st |tƒsJ ‚t |tƒsJ ‚| j ||f¡ d S rM   )rC   r˜   rh   r(   r*   ©r   r8   r7   r	   r	   r
   rl   V  s   zNFAState.addarcrM   )r   r   r   r   rl   r	   r	   r	   r
   rh   Q  s    rh   c                   @   s0   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	Zd	S )
ri   c                 C   sL   t |tƒsJ ‚t tt|ƒƒtƒsJ ‚t |tƒsJ ‚|| _||v | _i | _d S rM   )rC   Údictr8   Úiterrh   rj   r-   r(   )r   rj   Úfinalr	   r	   r
   r   ]  s   

zDFAState.__init__c                 C   s8   t |tƒsJ ‚|| jvsJ ‚t |tƒsJ ‚|| j|< d S rM   )rC   r˜   r(   ri   rœ   r	   r	   r
   rl   e  s   zDFAState.addarcc                 C   s*   | j  ¡ D ]\}}||u r|| j |< qd S rM   )r(   r)   )r   ÚoldÚnewr7   r8   r	   r	   r
   r{   k  s
   
€þzDFAState.unifystatec                 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)rC   ri   r-   r$   r(   r)   Úget)r   Úotherr7   r8   r	   r	   r
   Ú__eq__p  s   ÿzDFAState.__eq__N)r   r   r   r   rl   r{   r¤   Ú__hash__r	   r	   r	   r
   ri   [  s    ri   úGrammar.txtc                 C   s   t | ƒ}| ¡ S rM   )r   r9   )r   Úpr	   r	   r
   Úgenerate_grammar€  s   r¨   N)r¦   )rr   r   r   r   ÚGrammarr   Úobjectr   rh   ri   r¨   r	   r	   r	   r
   Ú<module>   s     I
%