o
    !Qçd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	   ú-/RAG/Python-3.10.13/Lib/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   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 )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   r0   r2   Zrawfirstr   r6   Ú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   r0   r6   r:   Z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   r1   r2   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(   Ú
ValueErrorrK   Úupdate)r   r2   r4   r5   ZtotalsetZoverlapcheckr6   r7   ÚfsetZinverseÚitsfirstZsymbolr	   r	   r
   rK   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   ÚexpectrG   ÚOPÚ	parse_rhsÚmake_dfar#   Úsimplify_dfa)	r   r   r   r2   ÚaÚzr4   ZoldlenZ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 rJ   r	   )r5   Ú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 r9   )rA   ÚNFAStater'   )r5   r[   r6   r7   r\   r	   r
   r]   ´   s   
€þz,ParserGenerator.make_dfa.<locals>.addclosure)
rA   r_   ÚDFAStateÚnfasetr'   Ú
setdefaultr&   r(   r)   Úaddarc)r   r/   Úfinishr^   r-   r5   r'   Znfastater6   r7   ra   Ústr	   r\   r
   rW   ©   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   r2   r/   rd   Ztodor3   r5   r6   r7   Ú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 forrf   rg   rh   ri   )rj   rk   r,   r&   r'   r(   r+   )r   r2   r4   r3   r5   r6   r7   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   )rk   Úranger#   Ú
unifystate)r   r4   Zchangesr3   Zstate_irl   Zstate_jr5   r	   r	   r
   rX   ä   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_altrI   r_   rc   r   )r   rY   rZ   ZaaZzzr	   r	   r
   rV   ù   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_itemrI   rQ   r   rG   ÚSTRINGrc   )r   rY   Úbr0   Údr	   r	   r
   rr   
  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 )Nrt   ú])ú+Ú*rz   )rI   r   rV   rT   r   rU   rc   Ú
parse_atom)r   rY   rZ   rI   r	   r	   r
   ru     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 )Nrs   ú)z+expected (...) or NAME or STRING, got %s/%s)rI   r   rV   rT   r   rU   rQ   rG   rv   r_   rc   Úraise_error)r   rY   rZ   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)rQ   rI   r~   r   )r   rQ   rI   r	   r	   r
   rT   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   )
r7   r   r   ÚCOMMENTÚNLrQ   rI   Z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_errorrJ   )r   r   r   r   r8   r.   r*   r   rK   r   rW   rm   rn   rX   rV   rr   ru   r|   rT   r   r~   r	   r	   r	   r
   r   
   s&    
	.$

r   c                   @   s   e Zd Zdd„ Zddd„ZdS )r_   c                 C   s
   g | _ d S rJ   )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 rJ   )rA   r‡   r_   r'   r)   ©r   r7   r6   r	   r	   r
   rc   V  s   zNFAState.addarcrJ   )r   r   r   r   rc   r	   r	   r	   r
   r_   Q  s    r_   c                   @   s0   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	Zd	S )
r`   c                 C   sL   t |tƒsJ ‚t tt|ƒƒtƒsJ ‚t |tƒsJ ‚|| _||v | _i | _d S rJ   )rA   Údictr7   Úiterr_   ra   r,   r'   )r   ra   Ú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 rJ   )rA   r‡   r'   r`   r‹   r	   r	   r
   rc   e  s   zDFAState.addarcc                 C   s*   | j  ¡ D ]\}}||u r|| j |< qd S rJ   )r'   r(   )r   ÚoldÚnewr6   r7   r	   r	   r
   rp   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)rA   r`   r,   r#   r'   r(   Úget)r   Úotherr6   r7   r	   r	   r
   Ú__eq__p  s   ÿzDFAState.__eq__N)r   r   r   r   rc   rp   r“   Ú__hash__r	   r	   r	   r
   r`   [  s    r`   úGrammar.txtc                 C   s   t | ƒ}| ¡ S rJ   )r   r8   )r   Úpr	   r	   r
   Úgenerate_grammar€  s   r—   N)r•   )rh   r   r   r   ÚGrammarr   Úobjectr   r_   r`   r—   r	   r	   r	   r
   Ú<module>   s     I
%