ÿØÿà JFIF      ÿÛ C      

!"$"$ÿÛ C  ÿÂ p " ÿÄ              ÿÄ             ÿÚ    ÕÔË®
(%	aA*‚XYD¡(J„¡E¢RE,P€XYae )(E¤²€B¤R¥	BQ¤¢ X«)X…€¤   @  

  ..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ C      

!"$"$ÿÛ C  ÿÂ p " ÿÄ              ÿÄ             ÿÚ    ÕÔË®
(%	aA*‚XYD¡(J„¡E¢RE,P€XYae )(E¤²€B¤R¥	BQ¤¢ X«)X…€¤   @  

  ..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     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
%