Your IP : 216.73.216.36
3
\�5�@sdddlmZmZmZGdd�dej�ZGdd�de�ZGdd�de�ZGdd �d e�Z ddd�Z
d
S)�)�grammar�token�tokenizec@seZdZdS)�PgenGrammarN)�__name__�
__module__�__qualname__�r r �*/usr/lib64/python3.6/lib2to3/pgen2/pgen.pyrsrc@s�eZdZd&dd�Zdd�Zdd�Zdd �Zd
d�Zdd
�Zdd�Z dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zd'd d!�Zd"d#�Zd$d%�ZdS)(�ParserGeneratorNcCsld}|dkrt|�}|j}||_||_tj|j�|_|j�|j �\|_
|_|dk rZ|�i|_|j
�dS)N)�open�close�filename�streamr�generate_tokens�readline� generator�gettoken�parse�dfas�startsymbol�first�addfirstsets)�selfrrZclose_streamr r r
�__init__szParserGenerator.__init__cCs*t�}t|jj��}|j�|j|j�|jd|j�x.|D]&}dt|j �}||j |<||j
|<q<Wx�|D]�}|j|}g}xl|D]d}g}x6t|jj
��D]$\} }
|j|j|| �|j|
�f�q�W|jr�|jd|j|�f�|j|�q�W|jj|�||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_grammars.
zParserGenerator.make_grammarcCs8|j|}i}x$t|�D]}|j||�}d||<qW|S)Nr)rr$r()rr.r0Zrawfirstrr4�ilabelr r r
r,4s
zParserGenerator.make_firstcCs&t|j�}|dj�r�||jkrZ||jkr4|j|S|jj|j|df�||j|<|Sn>tt|d�}||jkrz|j|S|jj|df�||j|<|Sn�t |�}|dj�r�||j
kr�|j
|S|jjtj|f�||j
|<|Sn>tj
|}||jk�r|j|S|jj|df�||j|<|SdS)Nr)r"Zlabels�isalphar#Zsymbol2labelr'�getattrr�tokens�eval�keywords�NAMErZopmap)rr.r4r7Zitoken�valuer r r
r(=s6
zParserGenerator.make_labelcCs<t|jj��}|j�x |D]}||jkr|j|�qWdS)N)rrrrr� calcfirst)rr/r0r r r
rks
zParserGenerator.addfirstsetsc Cs
|j|}d|j|<|d}i}i}x�|jj�D]x\}}||jkr�||jkrl|j|}|dkr�td|��n|j|�|j|}|j|�|||<q0d||<|di||<q0Wi} xJ|j�D]>\}}
x4|
D],}|| kr�td|||| |f��|| |<q�Wq�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)rr0r2r3ZtotalsetZoverlapcheckr4r5�fsetZinverseZitsfirstZsymbolr r r
r?ss2
zParserGenerator.calcfirstc Cs�i}d}x�|jtjkr�x|jtjkr.|j�qW|jtj�}|jtjd�|j�\}}|jtj�|j ||�}t
|�}|j|�t
|�}|||<|dkr
|}q
W||fS)N�:)�typer� ENDMARKER�NEWLINEr�expectr=�OP� parse_rhs�make_dfar"�simplify_dfa) rrrr0�a�zr2ZoldlenZnewlenr r r
r�s"
zParserGenerator.parsecs��fdd�}�fdd��t||�|�g}x�|D]�}i}x<|jD]2}x,|jD]"\}} |dk rJ�| |j|i��qJWq>WxRt|j��D]B\}}
x,|D]}|j|
kr�Pq�Wt|
|�}|j|�|j||�q�Wq.W|S)Ncsi}�||�|S)Nr )r3�base)�
addclosurer r
�closure�s
z)ParserGenerator.make_dfa.<locals>.closurecs>||krdSd||<x$|jD]\}}|dkr�||�qWdS)Nr)r%)r3rNr4r5)rOr r
rO�sz,ParserGenerator.make_dfa.<locals>.addclosure)�DFAState�nfasetr%�
setdefaultr$r&r'�addarc)rr-�finishrPr+r3r%Znfastater4r5rR�str )rOr
rJ�s"
zParserGenerator.make_dfac
Cs�td|�|g}x�t|�D]�\}}td|||kr4dp6d�x^|jD]T\}}||kr^|j|�} nt|�} |j|�|dkr�td| �qBtd|| f�qBWqWdS)NzDump of NFA forz Statez(final)�z -> %dz %s -> %d)�print� enumerater%r)r"r')
rr0r-rUZtodor1r3r4r5�jr r r
�dump_nfa�s
zParserGenerator.dump_nfacCsltd|�x\t|�D]P\}}td||jr,dp.d�x0t|jj��D]\}}td||j|�f�qBWqWdS)NzDump of DFA forz Statez(final)rWz %s -> %d)rXrYr*r$r%r&r))rr0r2r1r3r4r5r r r
�dump_dfa�s
zParserGenerator.dump_dfacCs~d}xt|rxd}xft|�D]Z\}}xPt|dt|��D]:}||}||kr4||=x|D]}|j||�qTWd}Pq4WqWqWdS)NTFr)rY�ranger"�
unifystate)rr2Zchangesr1Zstate_irZZstate_jr3r r r
rK�s
zParserGenerator.simplify_dfacCs�|j�\}}|jdkr||fSt�}t�}|j|�|j|�x6|jdkrt|j�|j�\}}|j|�|j|�q@W||fSdS)N�|)� parse_altr>�NFAStaterTr)rrLrMZaaZzzr r r
rI�s
zParserGenerator.parse_rhscCsP|j�\}}x:|jdks*|jtjtjfkrF|j�\}}|j|�|}qW||fS)N�(�[)rbrc)�
parse_itemr>rDrr=�STRINGrT)rrL�br.�dr r r
r`
s
zParserGenerator.parse_altcCs�|jdkr>|j�|j�\}}|jtjd�|j|�||fS|j�\}}|j}|dkr`||fS|j�|j|�|dkr�||fS||fSdS)Nrc�]�+�*)rirj)r>rrIrGrrHrT�
parse_atom)rrLrMr>r r r
rds
zParserGenerator.parse_itemcCs�|jdkr4|j�|j�\}}|jtjd�||fS|jtjtjfkrpt �}t �}|j
||j�|j�||fS|jd|j|j�dS)Nrb�)z+expected (...) or NAME or STRING, got %s/%s)r>rrIrGrrHrDr=rerarT�raise_error)rrLrMr r r
rk(s
zParserGenerator.parse_atomcCsD|j|ks|dk r2|j|kr2|jd|||j|j�|j}|j�|S)Nzexpected %s/%s, got %s/%s)rDr>rmr)rrDr>r r r
rG9szParserGenerator.expectcCsJt|j�}x"|dtjtjfkr,t|j�}qW|\|_|_|_|_|_ dS)Nr)
r5rr�COMMENT�NLrDr>Zbegin�end�line)r�tupr r r
rAs
zParserGenerator.gettokencGs^|r8y||}Wn&dj|gttt|���}YnXt||j|jd|jd|jf��dS)N� rr)�joinr�map�str�SyntaxErrorrrprq)r�msg�argsr r r
rmHs zParserGenerator.raise_error)N)N)rrrrr6r,r(rr?rrJr[r\rKrIr`rdrkrGrrmr r r r
r
s$
.$
rc@seZdZdd�Zddd�ZdS)racCs
g|_dS)N)r%)rr r r
rSszNFAState.__init__NcCs|jj||f�dS)N)r%r')rr5r4r r r
rTVszNFAState.addarc)N)rrrrrTr r r r
raQsrac@s0eZdZdd�Zdd�Zdd�Zdd�Zd Zd S)
rQcCs||_||k|_i|_dS)N)rRr*r%)rrR�finalr r r
r]s
zDFAState.__init__cCs||j|<dS)N)r%)rr5r4r r r
rTeszDFAState.addarccCs.x(|jj�D]\}}||kr||j|<qWdS)N)r%r&)r�old�newr4r5r r r
r^kszDFAState.unifystatecCsX|j|jkrdSt|j�t|j�kr(dSx*|jj�D]\}}||jj|�k r4dSq4WdS)NFT)r*r"r%r&�get)r�otherr4r5r r r
�__eq__pszDFAState.__eq__N)rrrrrTr^r�__hash__r r r r
rQ[s
rQ�Grammar.txtcCst|�}|j�S)N)rr6)r�pr r r
�generate_grammar�sr�N)r�)rWrrrZGrammarr�objectrrarQr�r r r r
�<module>sI
%
?>