<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    ˆ fô5  ã               @   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	   ú7/opt/alt/python37/lib64/python3.7/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   sl   d }|d krt |ƒ}|j}|| _|| _t |j¡| _|  ¡  |  	¡ \| _
| _|d k	rZ|ƒ  i | _|  ¡  d S )N)Ú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¡ 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 )Né    é   )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+   Ústater%   ÚlabelÚnextr	   r	   r
   Úmake_grammar   s.    




  zParserGenerator.make_grammarc             C   s8   | j | }i }x$t|ƒD ]}|  ||¡}d||< qW |S )Nr   )r   r$   r(   )r   r.   r0   Zrawfirstr   r4   Úilabelr	   r	   r
   r,   4   s    
zParserGenerator.make_firstc             C   s&  t |jƒ}|d  ¡ rš||jkrZ||jkr4|j| S |j |j| d f¡ ||j|< |S n>tt|d ƒ}||jkrz|j| S |j |d f¡ ||j|< |S nˆt	|ƒ}|d  ¡ rä||j
krÂ|j
| S |j tj|f¡ ||j
|< |S n>tj| }||jkr|j| S |j |d f¡ ||j|< |S d S )Nr   )r"   ÚlabelsÚisalphar#   Zsymbol2labelr'   Úgetattrr   ÚtokensÚevalÚkeywordsÚNAMEr   Zopmap)r   r.   r4   r7   ZitokenÚvaluer	   r	   r
   r(   =   s6    













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/   r0   r	   r	   r
   r   k   s
    

zParserGenerator.addfirstsetsc          	   C   s
  | j | }d | j|< |d }i }i }x†|j ¡ D ]x\}}|| j kr”|| jkrl| j| }|d kr€td| ƒ‚n|  |¡ | j| }| |¡ |||< 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   r%   r&   Ú
ValueErrorr@   Úupdate)r   r0   r2   r3   ZtotalsetZoverlapcheckr4   r5   ÚfsetZinverseZitsfirstZsymbolr	   r	   r
   r@   s   s2    









zParserGenerator.calcfirstc       	      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 ||fS )Nú:)Útyper   Ú	ENDMARKERÚNEWLINEr   Úexpectr>   ÚOPÚ	parse_rhsÚmake_dfar"   Úsimplify_dfa)	r   r   r   r0   ÚaÚzr2   ZoldlenZnewlenr	   r	   r
   r   ‘   s"    
zParserGenerator.parsec          	      sÐ   ‡ fdd„}‡ fdd„‰ t ||ƒ|ƒg}x¢|D ]š}i }x<|jD ]2}x,|jD ]"\}}	|d k	rJˆ |	| |i ¡ƒ qJW q>W xRt| ¡ ƒD ]B\}}
x,|D ]}|j|
krP qW t |
|ƒ}| |¡ | ||¡ q‚W q.W |S )Nc                s   i }ˆ | |ƒ |S )Nr	   )r3   Úbase)Ú
addclosurer	   r
   Úclosure°   s    
z)ParserGenerator.make_dfa.<locals>.closurec                s>   | |krd S d|| < x$| j D ]\}}|d krˆ ||ƒ qW d S )Nr   )r%   )r3   rO   r4   r5   )rP   r	   r
   rP   ´   s    z,ParserGenerator.make_dfa.<locals>.addclosure)ÚDFAStateÚnfasetr%   Ú
setdefaultr$   r&   r'   Úaddarc)r   r-   ÚfinishrQ   r+   r3   r%   Znfastater4   r5   rS   Ústr	   )rP   r
   rK   ©   s"    




zParserGenerator.make_dfac       
      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Ú	enumerater%   r)   r"   r'   )
r   r0   r-   rV   Ztodor1   r3   r4   r5   Újr	   r	   r
   Údump_nfaÍ   s    

zParserGenerator.dump_nfac             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)rX   z    %s -> %d)rY   rZ   r*   r$   r%   r&   r)   )r   r0   r2   r1   r3   r4   r5   r	   r	   r
   Údump_dfaÝ   s
    
zParserGenerator.dump_dfac             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   )rZ   Úranger"   Ú
unifystate)r   r2   Zchangesr1   Zstate_ir[   Zstate_jr3   r	   r	   r
   rL   ä   s    
zParserGenerator.simplify_dfac             C   s‚   |   ¡ \}}| jdkr||fS tƒ }tƒ }| |¡ | |¡ x6| jdkrt|  ¡  |   ¡ \}}| |¡ | |¡ q@W ||fS d S )Nú|)Ú	parse_altr?   ÚNFAStaterU   r   )r   rM   rN   ZaaZzzr	   r	   r
   rJ   ù   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_itemr?   rE   r   r>   ÚSTRINGrU   )r   rM   Úbr.   Údr	   r	   r
   ra   
  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 )Nrd   ú])ú+Ú*rj   )r?   r   rJ   rH   r   rI   rU   Ú
parse_atom)r   rM   rN   r?   r	   r	   r
   re     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 )Nrc   ú)z+expected (...) or NAME or STRING, got %s/%s)r?   r   rJ   rH   r   rI   rE   r>   rf   rb   rU   Úraise_error)r   rM   rN   r	   r	   r
   rl   (  s    
zParserGenerator.parse_atomc             C   sD   | j |ks|d k	r2| j|kr2|  d||| j | j¡ | j}|  ¡  |S )Nzexpected %s/%s, got %s/%s)rE   r?   rn   r   )r   rE   r?   r	   r	   r
   rH   9  s    zParserGenerator.expectc             C   sJ   t | jƒ}x"|d tjtjfkr,t | jƒ}qW |\| _| _| _| _| _	d S )Nr   )
r5   r   r   ÚCOMMENTÚNLrE   r?   ZbeginÚendÚline)r   Útupr	   r	   r
   r   A  s    
zParserGenerator.gettokenc          
   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   rq   rr   )r   ÚmsgÚargsr	   r	   r
   rn   H  s     zParserGenerator.raise_error)N)N)r   r   r   r   r6   r,   r(   r   r@   r   rK   r\   r]   rL   rJ   ra   re   rl   rH   r   rn   r	   r	   r	   r
   r   
   s$   
	.$

r   c               @   s   e Zd Zdd„ Zddd„ZdS )rb   c             C   s
   g | _ d S )N)r%   )r   r	   r	   r
   r   S  s    zNFAState.__init__Nc             C   s   | j  ||f¡ d S )N)r%   r'   )r   r5   r4   r	   r	   r
   rU   V  s    zNFAState.addarc)N)r   r   r   r   rU   r	   r	   r	   r
   rb   Q  s   rb   c               @   s0   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	Zd	S )
rR   c             C   s   || _ ||k| _i | _d S )N)rS   r*   r%   )r   rS   Úfinalr	   r	   r
   r   ]  s    
zDFAState.__init__c             C   s   || j |< d S )N)r%   )r   r5   r4   r	   r	   r
   rU   e  s    zDFAState.addarcc             C   s.   x(| j  ¡ D ]\}}||kr|| j |< qW d S )N)r%   r&   )r   ÚoldÚnewr4   r5   r	   r	   r
   r_   k  s    zDFAState.unifystatec             C   sX   | j |j krdS t| jƒt|jƒkr(dS x*| j ¡ D ]\}}||j |¡k	r4dS q4W dS )NFT)r*   r"   r%   r&   Úget)r   Úotherr4   r5   r	   r	   r
   Ú__eq__p  s    zDFAState.__eq__N)r   r   r   r   rU   r_   r€   Ú__hash__r	   r	   r	   r
   rR   [  s
   rR   úGrammar.txtc             C   s   t | ƒ}| ¡ S )N)r   r6   )r   Úpr	   r	   r
   Úgenerate_grammar€  s    r„   N)r‚   )rX   r   r   r   ZGrammarr   Úobjectr   rb   rR   r„   r	   r	   r	   r
   Ú<module>   s     I
%