Your IP : 18.117.192.205


Current Path : /opt/alt/python35/lib64/python3.5/lib2to3/pgen2/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/lib2to3/pgen2/__pycache__/pgen.cpython-35.opt-2.pyc



���]�5�@s�ddlmZmZmZGdd�dej�ZGdd�de�ZGdd�de�ZGdd	�d	e�Z	d
dd�Z
d
S)�)�grammar�token�tokenizec@seZdZdS)�PgenGrammarN)�__name__�
__module__�__qualname__�r	r	�)/opt/alt/python35/lib64/python3.5/pgen.pyrsrc@s�eZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd d!�Zd"d#�Zd$d%�ZdS)&�ParserGeneratorNcCs�d}|dkr't|�}|j}||_||_tj|j�|_|j�|j	�\|_
|_|dk	r�|�i|_|j
�dS)N)�open�close�filename�streamr�generate_tokens�readline�	generator�gettoken�parse�dfas�startsymbol�first�addfirstsets)�selfrrZclose_streamr	r	r
�__init__s			
	zParserGenerator.__init__cCs�t�}t|jj��}|j�|j|j�|jd|j�x;|D]3}dt|j	�}||j	|<||j
|<qRWx�|D]�}|j|}g}x�|D]�}g}xKt|jj
��D]4\}	}
|j|j||	�|j|
�f�q�W|jr/|jd|j|�f�|j|�q�W|jj|�||j||�f|j|j	|<q�W|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_grammars.	





",	*zParserGenerator.make_grammarcCsJ|j|}i}x0t|�D]"}|j||�}d||<q W|S)Nr)rr$r()rr.r0Zrawfirstrr4�ilabelr	r	r
r,4s
zParserGenerator.make_firstcCs�t|j�}|dj�r�||jkry||jkrH|j|S|jj|j|df�||j|<|Sq�tt|d�}||jkr�|j|S|jj|df�||j|<|Sn�t	|�}|dj�r2||j
kr|j
|S|jjtj|f�||j
|<|SnNtj
|}||jkrY|j|S|jj|df�||j|<|SdS)Nr)r"Zlabels�isalphar#Zsymbol2labelr'�getattrr�tokens�eval�keywords�NAMErZopmap)rr.r4r7Zitoken�valuer	r	r
r(=s6




zParserGenerator.make_labelcCsPt|jj��}|j�x*|D]"}||jkr&|j|�q&WdS)N)rrrrr�	calcfirst)rr/r0r	r	r
rks


zParserGenerator.addfirstsetsc	Csc|j|}d|j|<|d}i}i}x�|jj�D]�\}}||jkr�||jkr�|j|}|dkr�td|��n|j|�|j|}|j|�|||<q@d||<|di||<q@Wi}	xa|j�D]S\}}
xD|
D]<}||	kr@td||||	|f��||	|<qWq�W||j|<dS)Nrzrecursion for rule %rrzArule %s is ambiguous; %s is in the first sets of %s as well as %s)rrr%r&�
ValueErrorr?�update)rr0r2r3ZtotalsetZoverlapcheckr4r5�fsetZinverseZitsfirst�symbolr	r	r
r?ss2









zParserGenerator.calcfirstc	Cs�i}d}x�|jtjkr�x |jtjkrC|j�q$W|jtj�}|jtjd�|j�\}}|jtj�|j	||�}t
|�}|j|�t
|�}|||<|dkr|}qW||fS)N�:)�typer�	ENDMARKER�NEWLINEr�expectr=�OP�	parse_rhs�make_dfar"�simplify_dfa)	rrrr0�a�zr2ZoldlenZnewlenr	r	r
r�s"


zParserGenerator.parsecs�fdd�}�fdd��t||�|�g}x�|D]�}i}xP|jD]E}x<|jD]1\}}	|dk	ri�|	|j|i��qiWqYWxmt|j��D]Y\}}
x:|D]}|j|
kr�Pq�Wt|
|�}|j|�|j||�q�WqCW|S)Ncsi}�||�|S)Nr	)r3�base)�
addclosurer	r
�closure�s
z)ParserGenerator.make_dfa.<locals>.closurecsQ||krdSd||<x0|jD]%\}}|dkr$�||�q$WdS)Nr)r%)r3rOr4r5)rPr	r
rP�s
z,ParserGenerator.make_dfa.<locals>.addclosure)�DFAState�nfasetr%�
setdefaultr$r&r'�addarc)rr-�finishrQr+r3r%Znfastater4r5rS�str	)rPr
rK�s"
!

zParserGenerator.make_dfac
Cs�td|�|g}x�t|�D]�\}}td|||krJdpMd�x|jD]t\}}||kr�|j|�}	nt|�}	|j|�|dkr�td|	�q[td||	f�q[Wq#WdS)NzDump of NFA forz  Statez(final)�z	    -> %dz    %s -> %d)�print�	enumerater%r)r"r')
rr0r-rVZtodor1r3r4r5�jr	r	r
�dump_nfa�s
	"
zParserGenerator.dump_nfacCs�td|�x|t|�D]n\}}td||jr>dpAd�x@t|jj��D])\}}td||j|�f�q[WqWdS)NzDump of DFA forz  Statez(final)rXz    %s -> %d)rYrZr*r$r%r&r))rr0r2r1r3r4r5r	r	r
�dump_dfa�s

"zParserGenerator.dump_dfacCs�d}x�|r�d}x�t|�D]u\}}xft|dt|��D]K}||}||krH||=x|D]}|j||�qrWd}PqHWq"Wq	WdS)NTFr)rZ�ranger"�
unifystate)rr2Zchangesr1Zstate_ir[Zstate_jr3r	r	r
rL�s	 

zParserGenerator.simplify_dfacCs�|j�\}}|jdkr+||fSt�}t�}|j|�|j|�xI|jdkr�|j�|j�\}}|j|�|j|�qZW||fSdS)N�|)�	parse_altr>�NFAStaterUr)rrMrNZaa�zzr	r	r
rJ�s
		



zParserGenerator.parse_rhscCsr|j�\}}xS|jdks?|jtjtjfkrg|j�\}}|j|�|}qW||fS)N�(�[)rdre)�
parse_itemr>rErr=�STRINGrU)rrM�br.�dr	r	r
ra
s

zParserGenerator.parse_altcCs�|jdkrU|j�|j�\}}|jtjd�|j|�||fS|j�\}}|j}|dkr�||fS|j�|j|�|dkr�||fS||fSdS)Nre�]�+�*)rkrl)r>rrJrHrrIrU�
parse_atom)rrMrNr>r	r	r
rfs


	



zParserGenerator.parse_itemcCs�|jdkrH|j�|j�\}}|jtjd�||fS|jtjtjfkr�t	�}t	�}|j
||j�|j�||fS|jd|j|j�dS)Nrd�)z+expected (...) or NAME or STRING, got %s/%s)r>rrJrHrrIrEr=rgrbrU�raise_error)rrMrNr	r	r
rm(s

		

	zParserGenerator.parse_atomcCs`|j|ks*|dk	rI|j|krI|jd|||j|j�|j}|j�|S)Nzexpected %s/%s, got %s/%s)rEr>ror)rrEr>r	r	r
rH9s*		
zParserGenerator.expectcCsit|j�}x/|dtjtjfkr@t|j�}qW|\|_|_|_|_|_	dS)Nr)
r5rr�COMMENT�NLrEr>Zbegin�end�line)r�tupr	r	r
rAszParserGenerator.gettokencGsw|rDy||}Wn-dj|gttt|���}YnXt||j|jd|jd|jf��dS)N� rr)�joinr�map�str�SyntaxErrorrrrrs)r�msg�argsr	r	r
roHs*zParserGenerator.raise_error)rrrrr6r,r(rr?rrKr\r]rLrJrarfrmrHrror	r	r	r
r
s$	.$
rc@s+eZdZdd�Zddd�ZdS)rbcCs
g|_dS)N)r%)rr	r	r
rSszNFAState.__init__NcCs|jj||f�dS)N)r%r')rr5r4r	r	r
rUVszNFAState.addarc)rrrrrUr	r	r	r
rbQsrbc@sFeZdZdd�Zdd�Zdd�Zdd�Zd	Zd	S)
rRcCs%||_||k|_i|_dS)N)rSr*r%)rrS�finalr	r	r
r]s	zDFAState.__init__cCs||j|<dS)N)r%)rr5r4r	r	r
rUeszDFAState.addarccCs=x6|jj�D]%\}}||kr||j|<qWdS)N)r%r&)r�old�newr4r5r	r	r
r_kszDFAState.unifystatecCsx|j|jkrdSt|j�t|j�kr8dSx9|jj�D](\}}||jj|�k	rHdSqHWdS)NFT)r*r"r%r&�get)r�otherr4r5r	r	r
�__eq__pszDFAState.__eq__N)rrrrrUr_r��__hash__r	r	r	r
rR[s
rRzGrammar.txtcCst|�}|j�S)N)rr6)r�pr	r	r
�generate_grammar�sr�N)rXrrrZGrammarr�objectrrbrRr�r	r	r	r
�<module>s�H
%

?>