509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
.[ˆ`F ã               @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZdZdZ	dZ
dZdZdZdZd	Zd
Zd Zejd  dk rteZneZejZG dd„ deƒZG dd„ deƒZG dd„ deƒZdd„ Zdd„ Zdada da!dZ"dd„ Z#dd„ Z$dd„ Z%dd„ Z&G dd„ dƒZ'G d d!„ d!ƒZ(G d"d#„ d#ƒZ)e j*d$ƒZ+G d%d&„ d&eƒZ,G d'd(„ d(eƒZ-G d)d*„ d*eƒZ.d+d,„ Z/G d-d.„ d.eƒZ0G d/d0„ d0eƒZ1G d1d2„ d2eƒZ2G d3d4„ d4eƒZ3d5d6„ Z4d7d8„ Z5G d9d:„ d:eƒZ6G d;d<„ d<e3ƒZ7d=d>„ Z8d?d@„ Z9G dAdB„ dBeƒZ:de
deddd	deddddfdCdD„Z;dS )Eé    Nz3.9z3.8Tz
parser.outÚparsetabÚLALRé   Fé(   c               @   s4   e Zd Zdd„ Zdd„ ZeZdd„ Zdd„ ZeZd	S )
Ú	PlyLoggerc             C   s
   || _ d S )N)Úf)Úselfr   © r	   ú/usr/lib/python3.6/yacc.pyÚ__init__n   s    zPlyLogger.__init__c             O   s   | j j|| d ƒ d S )NÚ
)r   Úwrite)r   ÚmsgÚargsÚkwargsr	   r	   r
   Údebugq   s    zPlyLogger.debugc             O   s   | j jd||  d ƒ d S )Nz	WARNING: r   )r   r   )r   r   r   r   r	   r	   r
   Úwarningv   s    zPlyLogger.warningc             O   s   | j jd||  d ƒ d S )NzERROR: r   )r   r   )r   r   r   r   r	   r	   r
   Úerrory   s    zPlyLogger.errorN)	Ú__name__Ú
__module__Ú__qualname__r   r   Úinfor   r   Zcriticalr	   r	   r	   r
   r   m   s   r   c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú
NullLoggerc             C   s   | S )Nr	   )r   Únamer	   r	   r
   Ú__getattribute__€   s    zNullLogger.__getattribute__c             O   s   | S )Nr	   )r   r   r   r	   r	   r
   Ú__call__ƒ   s    zNullLogger.__call__N)r   r   r   r   r   r	   r	   r	   r
   r      s   r   c               @   s   e Zd ZdS )Ú	YaccErrorN)r   r   r   r	   r	   r	   r
   r   ‡   s   r   c             C   sP   t | ƒ}d|krt |ƒ}t|ƒtkr4|d t… d }dt| ƒjt| ƒ|f }|S )Nr   z ...z<%s @ 0x%x> (%s))ÚreprÚlenÚresultlimitÚtyper   Úid)ÚrÚrepr_strÚresultr	   r	   r
   Úformat_result‹   s    r%   c             C   sB   t | ƒ}d|krt |ƒ}t|ƒdk r(|S dt| ƒjt| ƒf S d S )Nr   é   z<%s @ 0x%x>)r   r   r    r   r!   )r"   r#   r	   r	   r
   Úformat_stack_entry•   s    r'   a  PLY: Don't use global functions errok(), token(), and restart() in p_error().
Instead, invoke the methods on the associated parser instance:

    def p_error(p):
        ...
        # Use parser.errok(), parser.token(), parser.restart()
        ...

    parser = yacc.yacc()
c               C   s   t jtƒ tƒ S )N)ÚwarningsÚwarnÚ_warnmsgÚ_errokr	   r	   r	   r
   Úerrok¯   s    
r,   c               C   s   t jtƒ tƒ S )N)r(   r)   r*   Ú_restartr	   r	   r	   r
   Úrestart³   s    
r.   c               C   s   t jtƒ tƒ S )N)r(   r)   r*   Ú_tokenr	   r	   r	   r
   Útoken·   s    
r0   c             C   s>   |j a|ja|ja| |ƒ}y
bbbW n tk
r8   Y nX |S )N)r,   r+   r0   r/   r.   r-   Ú	NameError)Ú	errorfuncr0   Úparserr"   r	   r	   r
   Úcall_errorfunc¼   s    
r4   c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú
YaccSymbolc             C   s   | j S )N)r    )r   r	   r	   r
   Ú__str__Ú   s    zYaccSymbol.__str__c             C   s   t | ƒS )N)Ústr)r   r	   r	   r
   Ú__repr__Ý   s    zYaccSymbol.__repr__N)r   r   r   r6   r8   r	   r	   r	   r
   r5   Ù   s   r5   c               @   sf   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S )ÚYaccProductionNc             C   s   || _ || _d | _d | _d S )N)ÚsliceÚstackÚlexerr3   )r   Úsr;   r	   r	   r
   r   ê   s    zYaccProduction.__init__c             C   sB   t |tƒrdd„ | j| D ƒS |dkr2| j| jS | j| jS d S )Nc             S   s   g | ]
}|j ‘qS r	   )Úvalue)Ú.0r=   r	   r	   r
   ú
<listcomp>ò   s    z.YaccProduction.__getitem__.<locals>.<listcomp>r   )Ú
isinstancer:   r>   r;   )r   Únr	   r	   r
   Ú__getitem__ð   s
    
zYaccProduction.__getitem__c             C   s   || j | _d S )N)r:   r>   )r   rB   Úvr	   r	   r
   Ú__setitem__ø   s    zYaccProduction.__setitem__c             C   s   dd„ | j ||… D ƒS )Nc             S   s   g | ]
}|j ‘qS r	   )r>   )r?   r=   r	   r	   r
   r@   ü   s    z/YaccProduction.__getslice__.<locals>.<listcomp>)r:   )r   ÚiÚjr	   r	   r
   Ú__getslice__û   s    zYaccProduction.__getslice__c             C   s
   t | jƒS )N)r   r:   )r   r	   r	   r
   Ú__len__þ   s    zYaccProduction.__len__c             C   s   t | j| ddƒS )NÚlinenor   )Úgetattrr:   )r   rB   r	   r	   r
   rJ     s    zYaccProduction.linenoc             C   s   || j | _d S )N)r:   rJ   )r   rB   rJ   r	   r	   r
   Ú
set_lineno  s    zYaccProduction.set_linenoc             C   s,   t | j| ddƒ}t | j| d|ƒ}||fS )NrJ   r   Ú	endlineno)rK   r:   )r   rB   Ú	startlineZendliner	   r	   r
   Úlinespan  s    zYaccProduction.linespanc             C   s   t | j| ddƒS )NÚlexposr   )rK   r:   )r   rB   r	   r	   r
   rP     s    zYaccProduction.lexposc             C   s,   t | j| ddƒ}t | j| d|ƒ}||fS )NrP   r   Ú	endlexpos)rK   r:   )r   rB   ÚstartposÚendposr	   r	   r
   Úlexspan  s    zYaccProduction.lexspanc             C   s   t ‚d S )N)ÚSyntaxError)r   r	   r	   r
   r     s    zYaccProduction.error)N)r   r   r   r   rC   rE   rH   rI   rJ   rL   rO   rP   rT   r   r	   r	   r	   r
   r9   é   s   
r9   c               @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zddd„Zddd„Z	ddd„Z
ddd„ZdS )ÚLRParserc             C   s0   |j | _|j| _|j| _|| _| jƒ  d| _d S )NT)	Úlr_productionsÚproductionsÚ	lr_actionÚactionÚlr_gotoÚgotor2   Úset_defaulted_statesÚerrorok)r   ZlrtabZerrorfr	   r	   r
   r     s    zLRParser.__init__c             C   s
   d| _ d S )NT)r^   )r   r	   r	   r
   r,   &  s    zLRParser.errokc             C   s@   | j d d …= | jd d …= tƒ }d|_| jj|ƒ | j jdƒ d S )Nz$endr   )Ú
statestackÚsymstackr5   r    Úappend)r   Úsymr	   r	   r
   r.   )  s    zLRParser.restartc             C   sT   i | _ xH| jjƒ D ]:\}}t|jƒ ƒ}t|ƒdkr|d dk r|d | j |< qW d S )Né   r   )Údefaulted_statesrZ   ÚitemsÚlistÚvaluesr   )r   ÚstateÚactionsZrulesr	   r	   r
   r]   9  s
    zLRParser.set_defaulted_statesc             C   s
   i | _ d S )N)rd   )r   r	   r	   r
   Údisable_defaulted_states@  s    z!LRParser.disable_defaulted_statesNFc             C   sZ   |st r.t|tƒrttjƒ}| j|||||ƒS |rD| j|||||ƒS | j|||||ƒS d S )N)	Ú	yaccdevelrA   Úintr   ÚsysÚstderrÚ
parsedebugÚparseoptÚparseopt_notrack)r   Úinputr<   r   ÚtrackingÚ	tokenfuncr	   r	   r
   ÚparseC  s    

zLRParser.parsec              C   sÌ  d }g }| j }| j}	| j}
| j}td ƒ}d}|jdƒ |sLddlm} |j}||_| |_	|d k	rj|j
|ƒ |d krz|j}n|}|| _g }|| _g }|| _||_d }|jdƒ tƒ }d|_|j|ƒ d}�xþ|jdƒ |jd|ƒ ||k�r.|�s|� sþ|ƒ }n|jƒ }|�stƒ }d|_|j}|| j|ƒ}n|| }|jd|| ƒ |jd	d
djdd„ |D ƒdd … ƒt|ƒf jƒ ƒ |d k	�rŠ|dk�rÄ|j|ƒ |}|jd|ƒ |j|ƒ d }|rÊ|d8 }qÊ|dk �rN|
|  }|j}|j}tƒ }||_d |_|�rB|jd|jddjdd„ || d … D ƒƒ d |	|d%|   | ƒ n|jd|jg |	|d&  | ƒ |�r’|| d d … }||d< |�rÆ|d }|j|_|j|_|d' }t|d|jƒ|_t|d|jƒ|_||_ yd|| d …= || _!|j"|ƒ || d …= |jdt#|d ƒƒ |j|ƒ |	|d(  | }|j|ƒ W qÊ t$k
�rŒ   |j|ƒ |j%|dd)… ƒ |jƒ  |d* }d|_d|_|}t&}d| _'Y qÊX qÊn¼|�r¨|j|_|j|_|g}||_ yL|| _!|j"|ƒ |jdt#|d ƒƒ |j|ƒ |	|d+  | }|j|ƒ W qÊ t$k
�rJ   |j|ƒ |jƒ  |d, }d|_d|_|}t&}d| _'Y qÊX qÊ|dk�rŠ|d- }t|dd ƒ}|jdt#|ƒƒ |jdƒ |S |d k�r¼|j(dd
djdd„ |D ƒdd … ƒt|ƒf jƒ ƒ |dk�sÚ| j'�r¤t&}d| _'|}|jdk�rød }| j)�rB|�rt*|dƒ �r||_|| _!t+| j)|| ƒ}| j'�r¢|}d }qÊn`|�r’t*|dƒ�r\|j}nd}|�r~t,j-j.d ||jf ƒ nt,j-j.d!|j ƒ nt,j-j.d"ƒ d S nt&}t|ƒdk�rÚ|jdk�rÚd }d }d}|d d …= qÊ|jdk�rêd S |jdk�rŒ|d. }|jdk�r6|�r0t|d|jƒ|_t|d#|jƒ|_d }qÊtƒ }d|_t*|dƒ�r\|j |_|_t*|d#ƒ�rv|j |_|_||_|j|ƒ |}qÊ|jƒ }|�rª|j|_|j|_|jƒ  |d/ }qÊt/d$ƒ‚qÊW d S )0Nr   zPLY: PARSE DEBUG STARTrc   )Úlexz$endÚ zState  : %sz#Defaulted state %s: Reduce using %dzStack  : %sz%s . %sú c             S   s   g | ]
}|j ‘qS r	   )r    )r?   Úxxr	   r	   r
   r@   ±  s    z'LRParser.parsedebug.<locals>.<listcomp>z Action : Shift and goto state %sz3Action : Reduce rule [%s] with %s and goto state %dú[ú,c             S   s   g | ]}t |jƒ‘qS r	   )r'   r>   )r?   Z_vr	   r	   r
   r@   Ô  s    ú]rM   rQ   zResult : %sr   Fr>   zDone   : Returning %szPLY: PARSE DEBUG ENDzError  : %sc             S   s   g | ]
}|j ‘qS r	   )r    )r?   ry   r	   r	   r
   r@   B  s    r<   rJ   z(yacc: Syntax error at line %d, token=%s
zyacc: Syntax error, token=%sz yacc: Parse error in input. EOF
rP   zyacc: internal parser error!!!
éÿÿÿÿr}   r}   r}   r}   r}   r}   r}   r}   r}   r}   )0rZ   r\   rX   rd   r9   r   rw   rv   r<   r3   rr   r0   r_   r`   r;   ra   r5   r    r   ÚpopÚgetÚjoinr7   Úlstripr   r   r>   rJ   rP   rK   rM   rQ   r:   rh   Úcallabler%   rU   ÚextendÚerror_countr^   r   r2   Úhasattrr4   rm   rn   r   ÚRuntimeError) r   rr   r<   r   rs   rt   Ú	lookaheadÚlookaheadstackri   r\   Úprodrd   ÚpsliceÚ
errorcountrv   Ú	get_tokenr_   r`   Úerrtokenrb   rh   ÚltypeÚtÚpÚpnameÚplenÚtargÚt1rB   r$   ÚtokrJ   r	   r	   r
   ro   \  s~   





.






$








.

zLRParser.parsedebugc              C   sv  d }g }| j }| j}	| j}
| j}td ƒ}d}|sBddlm} |j}||_| |_|d k	r`|j	|ƒ |d krp|j
}n|}|| _
g }|| _g }|| _||_d }|jdƒ tƒ }d|_|j|ƒ d}�x²||k�r|sò|sÚ|ƒ }n|jƒ }|sòtƒ }d|_|j}|| j|ƒ}n|| }|d k	�rh|dk�rN|j|ƒ |}|j|ƒ d }|rÀ|d8 }qÀ|dk �rF|
|  }|j}|j}tƒ }||_d |_|�rž|| d d … }||d< |�ræ|d }|j|_|j|_|d }t|d|jƒ|_t|d|jƒ|_||_yP|| d …= || _|j|ƒ || d …= |j|ƒ |	|d  | }|j|ƒ W qÀ tk
�r˜   |j|ƒ |j|dd… ƒ |jƒ  |d }d|_d|_|}t }d| _!Y qÀX qÀn¨|�r´|j|_|j|_|g}||_y8|| _|j|ƒ |j|ƒ |	|d  | }|j|ƒ W qÀ tk
�rB   |j|ƒ |jƒ  |d }d|_d|_|}t }d| _!Y qÀX qÀ|dk�rh|d }t|d	d ƒ}|S |d k�rf|dk�s„| j!�rNt }d| _!|}|jdk�r¢d }| j"�rì|�rÄt#|d
ƒ �rÄ||_|| _t$| j"|| ƒ}| j!�rL|}d }qÀn`|�r<t#|dƒ�r|j}nd}|�r(t%j&j'd||jf ƒ nt%j&j'd|j ƒ nt%j&j'dƒ d S nt }t|ƒdk�r„|jdk�r„d }d }d}|d d …= qÀ|jdk�r”d S |jdk�r6|d }|jdk�rà|�rÚt|d|jƒ|_t|d|jƒ|_d }qÀtƒ }d|_t#|dƒ�r|j |_|_t#|dƒ�r |j |_|_||_|j|ƒ |}qÀ|jƒ }|�rT|j|_|j|_|jƒ  |d }qÀt(dƒ‚qÀW d S )Nr   rc   )rv   z$endrM   rQ   r   Fr>   r<   rJ   z(yacc: Syntax error at line %d, token=%s
zyacc: Syntax error, token=%sz yacc: Parse error in input. EOF
rP   zyacc: internal parser error!!!
r}   r}   r}   r}   r}   r}   r}   r}   r}   ))rZ   r\   rX   rd   r9   rw   rv   r<   r3   rr   r0   r_   r`   r;   ra   r5   r    r~   r   r   r   r>   rJ   rP   rK   rM   rQ   r:   rh   r‚   rU   rƒ   r„   r^   r2   r…   r4   rm   rn   r   r†   ) r   rr   r<   r   rs   rt   r‡   rˆ   ri   r\   r‰   rd   rŠ   r‹   rv   rŒ   r_   r`   r�   rb   rh   rŽ   r�   r�   r‘   r’   r“   r”   rB   r$   r•   rJ   r	   r	   r
   rp   ·  sX   



















zLRParser.parseoptc             C   sÞ  d }g }| j }| j}	| j}
| j}td ƒ}d}|sBddlm} |j}||_| |_|d k	r`|j	|ƒ |d krp|j
}n|}|| _
g }|| _g }|| _||_d }|jdƒ tƒ }d|_|j|ƒ d}�x||k�r|sò|sÚ|ƒ }n|jƒ }|sòtƒ }d|_|j}|| j|ƒ}n|| }|d k	�r|dk�rN|j|ƒ |}|j|ƒ d }|rÀ|d8 }qÀ|dk �rê|
|  }|j}|j}tƒ }||_d |_|�rX|| d d … }||d< ||_yP|| d …= || _|j|ƒ || d …= |j|ƒ |	|d  | }|j|ƒ W qÀ tk
�rR   |j|ƒ |j|dd… ƒ |jƒ  |d }d|_d|_|}t}d| _Y qÀX qÀn’|g}||_y8|| _|j|ƒ |j|ƒ |	|d  | }|j|ƒ W qÀ tk
�ræ   |j|ƒ |jƒ  |d }d|_d|_|}t}d| _Y qÀX qÀ|dk�r|d }t|dd ƒ}|S |d k�rÎ|dk�s(| j�ròt}d| _|}|jdk�rFd }| j�r�|�rht|dƒ �rh||_|| _t | j|| ƒ}| j�rð|}d }qÀn`|�ràt|d	ƒ�rª|j!}nd}|�rÌt"j#j$d
||jf ƒ nt"j#j$d|j ƒ nt"j#j$dƒ d S nt}t|ƒdk�r(|jdk�r(d }d }d}|d d …= qÀ|jdk�r8d S |jdk�r´|d }|jdk�r^d }qÀtƒ }d|_t|d	ƒ�r„|j! |_!|_%t|dƒ�rž|j& |_&|_'||_|j|ƒ |}qÀ|jƒ }|jƒ  |d }qÀt(dƒ‚qÀW d S )Nr   rc   )rv   z$endr   Fr>   r<   rJ   z(yacc: Syntax error at line %d, token=%s
zyacc: Syntax error, token=%sz yacc: Parse error in input. EOF
rP   zyacc: internal parser error!!!
r}   r}   r}   r}   r}   r}   r}   r}   ))rZ   r\   rX   rd   r9   rw   rv   r<   r3   rr   r0   r_   r`   r;   ra   r5   r    r~   r   r   r   r>   r:   rh   r‚   rU   rƒ   r„   r^   rK   r2   r…   r4   rJ   rm   rn   r   rM   rP   rQ   r†   )r   rr   r<   r   rs   rt   r‡   rˆ   ri   r\   r‰   rd   rŠ   r‹   rv   rŒ   r_   r`   r�   rb   rh   rŽ   r�   r�   r‘   r’   r“   rB   r$   r•   rJ   r	   r	   r
   rq   é  s8   



















zLRParser.parseopt_notrack)NNFFN)NNFFN)NNFFN)NNFFN)r   r   r   r   r,   r.   r]   rj   ru   ro   rp   rq   r	   r	   r	   r
   rV     s   

  ]
  4rV   z^[a-zA-Z0-9_-]+$c               @   sR   e Zd 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S )Ú
Productionr   ÚrightNrw   c       	      C   s¨   || _ t|ƒ| _|| _|| _d | _|| _|| _|| _t	| jƒ| _	g | _
x$| jD ]}|| j
krN| j
j|ƒ qNW g | _d | _| jr˜d| j dj| jƒf | _nd| j  | _d S )Nz%s -> %srx   z%s -> <empty>)r   Útupler‰   ÚnumberÚfuncr‚   ÚfileÚlineÚprecr   Úusymsra   Úlr_itemsÚlr_nextr€   r7   )	r   r™   r   r‰   Ú
precedencerš   r›   rœ   r=   r	   r	   r
   r     s$    

zProduction.__init__c             C   s   | j S )N)r7   )r   r	   r	   r
   r6   =  s    zProduction.__str__c             C   s   dt | ƒ d S )NzProduction(ú))r7   )r   r	   r	   r
   r8   @  s    zProduction.__repr__c             C   s
   t | jƒS )N)r   r‰   )r   r	   r	   r
   rI   C  s    zProduction.__len__c             C   s   dS )Nrc   r	   )r   r	   r	   r
   Ú__nonzero__F  s    zProduction.__nonzero__c             C   s
   | j | S )N)r‰   )r   Úindexr	   r	   r
   rC   I  s    zProduction.__getitem__c             C   sˆ   |t | jƒkrd S t| |ƒ}yt|j|d   |_W n ttfk
rR   g |_Y nX y|j|d  |_W n tk
r‚   d |_Y nX |S )Nrc   )r   r‰   ÚLRItemÚ	ProdnamesÚlr_afterÚ
IndexErrorÚKeyErrorÚ	lr_before)r   rB   r�   r	   r	   r
   Úlr_itemM  s    
zProduction.lr_itemc             C   s   | j r|| j  | _d S )N)rš   r‚   )r   Úpdictr	   r	   r
   Úbind]  s    zProduction.bind©r—   r   )r®   Nrw   r   )r   r   r   Úreducedr   r6   r8   rI   r£   rC   r«   r­   r	   r	   r	   r
   r–     s   
r–   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚMiniProductionc             C   s.   || _ || _|| _d | _|| _|| _|| _d S )N)r   r   rš   r‚   r›   rœ   r7   )r   r7   r   r   rš   r›   rœ   r	   r	   r
   r   f  s    zMiniProduction.__init__c             C   s   | j S )N)r7   )r   r	   r	   r
   r6   o  s    zMiniProduction.__str__c             C   s
   d| j  S )NzMiniProduction(%s))r7   )r   r	   r	   r
   r8   r  s    zMiniProduction.__repr__c             C   s   | j r|| j  | _d S )N)rš   r‚   )r   r¬   r	   r	   r
   r­   v  s    zMiniProduction.bindN)r   r   r   r   r6   r8   r­   r	   r	   r	   r
   r°   e  s   	r°   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )r¥   c             C   sZ   |j | _ t|jƒ| _|j| _|| _i | _| jj|dƒ t| jƒ| _t| jƒ| _|j	| _	d S )NÚ.)
r   rf   r‰   r™   Úlr_indexÚ
lookaheadsÚinsertr˜   r   rž   )r   r�   rB   r	   r	   r
   r   ”  s    zLRItem.__init__c             C   s,   | j rd| jdj| j ƒf }n
d| j }|S )Nz%s -> %srx   z%s -> <empty>)r‰   r   r€   )r   r=   r	   r	   r
   r6   Ÿ  s    
zLRItem.__str__c             C   s   dt | ƒ d S )NzLRItem(r¢   )r7   )r   r	   r	   r
   r8   ¦  s    zLRItem.__repr__N)r   r   r   r   r6   r8   r	   r	   r	   r
   r¥   “  s   r¥   c             C   s:   t | ƒd }x(|dkr4| | |kr*| | S |d8 }qW d S )Nrc   r   )r   )ZsymbolsÚ	terminalsrF   r	   r	   r
   Úrightmost_terminal®  s    
r¶   c               @   s   e Zd ZdS )ÚGrammarErrorN)r   r   r   r	   r	   r	   r
   r·   ¾  s   r·   c               @   s’   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd$d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 d!„Zd"d#„ Zd	S )'ÚGrammarc             C   sf   d g| _ i | _i | _i | _x|D ]}g | j|< q W g | jd< i | _i | _i | _i | _tƒ | _	d | _
d S )Nr   )ÚProductionsr¦   ÚProdmapÚ	TerminalsÚNonterminalsÚFirstÚFollowÚ
PrecedenceÚsetÚUsedPrecedenceÚStart)r   rµ   Útermr	   r	   r
   r   Â  s    

zGrammar.__init__c             C   s
   t | jƒS )N)r   r¹   )r   r	   r	   r
   rI   æ  s    zGrammar.__len__c             C   s
   | j | S )N)r¹   )r   r¤   r	   r	   r
   rC   é  s    zGrammar.__getitem__c             C   s8   || j krtd| ƒ‚|dkr&tdƒ‚||f| j |< d S )Nz,Precedence already specified for terminal %rÚleftr—   Únonassocz:Associativity must be one of 'left','right', or 'nonassoc')rÄ   r—   rÅ   )r¿   r·   )r   rÃ   ÚassocÚlevelr	   r	   r
   Úset_precedenceô  s
    
zGrammar.set_precedenceNrw   r   c             C   sÀ  || j krtd|||f ƒ‚|dkr6td|||f ƒ‚tj|ƒsRtd|||f ƒ‚x¨t|ƒD ]œ\}}|d dkrÐyJt|ƒ}t|ƒdkrštd||||f ƒ‚|| j kr®g | j |< |||< w\W n tk
rÎ   Y nX tj|ƒ r\|d	kr\td
||||f ƒ‚q\W d	|k�rˆ|d d	k�r$td||f ƒ‚|d d	k�rBtd||f ƒ‚|d }	| jj	|	ƒ}
|
�sptd|||	f ƒ‚n| j
j|	ƒ |dd …= nt|| j ƒ}	| jj	|	dƒ}
d||f }|| jk�ræ| j| }td|||f d|j|jf  ƒ‚t| jƒ}|| jk�rg | j|< xR|D ]J}|| j k�r.| j | j|ƒ n&|| jk�rDg | j|< | j| j|ƒ �qW t||||
|||ƒ}| jj|ƒ || j|< y| j| j|ƒ W n" tk
�rº   |g| j|< Y nX d S )Nz7%s:%d: Illegal rule name %r. Already defined as a tokenr   z5%s:%d: Illegal rule name %r. error is a reserved wordz%s:%d: Illegal rule name %rr   z'"rc   zA%s:%d: Literal token %s in rule %r may only be a single characterz%precz!%s:%d: Illegal name %r in rule %rz+%s:%d: Syntax error. Nothing follows %%precé   zH%s:%d: Syntax error. %%prec can only appear at the end of a grammar rulez/%s:%d: Nothing known about the precedence of %rr—   z%s -> %sz%s:%d: Duplicate rule %s. zPrevious definition at %s:%dr}   éþÿÿÿr}   rÊ   )r—   r   )r»   r·   Ú_is_identifierÚmatchÚ	enumerateÚevalr   rU   r¿   r   rÁ   Úaddr¶   rº   r›   rœ   r¹   r¼   ra   r–   r¦   r©   )r   ÚprodnameÚsymsrš   r›   rœ   rB   r=   ÚcZprecnameZprodprecÚmapÚmZpnumberr�   r�   r	   r	   r
   Úadd_production  sp    










zGrammar.add_productionc             C   sT   |s| j d j}|| jkr&td| ƒ‚tdd|gƒ| j d< | j| jdƒ || _d S )Nrc   zstart symbol %s undefinedr   zS')r¹   r   r¼   r·   r–   ra   rÂ   )r   Ústartr	   r	   r
   Ú	set_starta  s    
zGrammar.set_startc                s>   ‡ ‡‡fdd„‰ t ƒ ‰ˆ ˆjd jd ƒ ‡fdd„ˆjD ƒS )Nc                sJ   | ˆkrd S ˆj | ƒ x.ˆjj| g ƒD ]}x|jD ]}ˆ |ƒ q2W q&W d S )N)rÏ   r¦   r   r‰   )r=   r�   r"   )Úmark_reachable_fromÚ	reachabler   r	   r
   rØ   t  s    
z5Grammar.find_unreachable.<locals>.mark_reachable_fromr   c                s   g | ]}|ˆ kr|‘qS r	   r	   )r?   r=   )rÙ   r	   r
   r@   ~  s    z,Grammar.find_unreachable.<locals>.<listcomp>)rÀ   r¹   r‰   r¼   )r   r	   )rØ   rÙ   r   r
   Úfind_unreachableq  s    zGrammar.find_unreachablec             C   sø   i }x| j D ]}d||< qW d|d< x| jD ]}d||< q,W xpd}x`| jjƒ D ]R\}}xH|D ]@}x |jD ]}|| shd}P qhW d}|r\|| sšd||< d}P q\W qNW |s>P q>W g }	x@|jƒ D ]4\}}
|
s¼|| jkræ|| j kræ|dkræq¼|	j|ƒ q¼W |	S )NTz$endFr   )r»   r¼   r¦   re   r‰   ra   )r   Z
terminatesr�   rB   Úsome_changeZplr�   r=   Zp_terminatesÚinfiniterÃ   r	   r	   r
   Úinfinite_cyclesˆ  s:    

zGrammar.infinite_cyclesc             C   sX   g }xN| j D ]D}|sqx8|jD ].}|| jkr|| jkr|dkr|j||fƒ qW qW |S )Nr   )r¹   r‰   r¦   r»   ra   )r   r$   r�   r=   r	   r	   r
   Úundefined_symbolsÈ  s    zGrammar.undefined_symbolsc             C   s8   g }x.| j jƒ D ] \}}|dkr| r|j|ƒ qW |S )Nr   )r»   re   ra   )r   Z
unused_tokr=   rD   r	   r	   r
   Úunused_terminalsÙ  s
    zGrammar.unused_terminalsc             C   s<   g }x2| j jƒ D ]$\}}|s| j| d }|j|ƒ qW |S )Nr   )r¼   re   r¦   ra   )r   Zunused_prodr=   rD   r�   r	   r	   r
   Úunused_rulesè  s    zGrammar.unused_rulesc             C   sD   g }x:| j D ]0}|| jkp"|| jks|j|| j | d fƒ qW |S )Nr   )r¿   r»   rÁ   ra   )r   ZunusedZtermnamer	   r	   r
   Úunused_precedenceù  s
    zGrammar.unused_precedencec             C   s`   g }xV|D ]D}d}x2| j | D ]$}|dkr0d}q||kr|j|ƒ qW |rLq
P q
W |jdƒ |S )NFz<empty>T)r½   ra   )r   Zbetar$   ÚxZx_produces_emptyr   r	   r	   r
   Ú_first	  s    

zGrammar._firstc             C   sÀ   | j r| j S x| jD ]}|g| j |< qW dg| j d< x| jD ]}g | j |< q<W xjd}xZ| jD ]P}xJ| j| D ]<}x6| j|jƒD ]&}|| j | kr~| j | j|ƒ d}q~W qlW q\W |sPP qPW | j S )Nz$endFT)r½   r»   r¼   r¦   rã   r‰   ra   )r   r�   rB   rÛ   r�   r   r	   r	   r
   Úcompute_first,  s$    zGrammar.compute_firstc       
      C   sV  | j r| j S | js| jƒ  x| jD ]}g | j |< q"W |sD| jd j}dg| j |< � xüd}xì| jdd … D ]Ú}xÔt|jƒD ]Æ\}}|| jkrx| j|j|d d … ƒ}d}xB|D ]:}	|	dkrÚ|	| j | krÚ| j | j	|	ƒ d}|	dkr¬d}q¬W |�s|t
|jƒd krxx:| j |j D ]*}	|	| j | k�r| j | j	|	ƒ d}�qW qxW qhW |sTP qTW | j S )Nrc   z$endFz<empty>T)r¾   r½   rä   r¼   r¹   r   rÍ   r‰   rã   ra   r   )
r   rÖ   ÚkÚdidaddr�   rF   ÚBZfstZhasemptyr   r	   r	   r
   Úcompute_followQ  s<    

zGrammar.compute_followc             C   sÔ   xÎ| j D ]Ä}|}d}g }x¬|t|ƒkr,d }ntt||ƒ}y| j|j|d   |_W n ttfk
rn   g |_Y nX y|j|d  |_W n tk
rž   d |_Y nX ||_	|s¬P |j
|ƒ |}|d7 }qW ||_qW d S )Nr   rc   )r¹   r   r¥   r¦   r‰   r§   r¨   r©   rª   r    ra   rŸ   )r   r�   ZlastlrirF   rŸ   Zlrir	   r	   r
   Úbuild_lritemsŒ  s.    

zGrammar.build_lritems)Nrw   r   )N)N)r   r   r   r   rI   rC   rÈ   rÕ   r×   rÚ   rÝ   rÞ   rß   rà   rá   rã   rä   rè   ré   r	   r	   r	   r
   r¸   Á  s    $
T
@#%
;r¸   c               @   s   e Zd ZdS )ÚVersionErrorN)r   r   r   r	   r	   r	   r
   rê   °  s   rê   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚLRTablec             C   s   d | _ d | _d | _d | _d S )N)rY   r[   rW   Ú	lr_method)r   r	   r	   r
   r   ´  s    zLRTable.__init__c             C   s~   t |tjƒr|}ntd| ƒ tj| }|jtkr:tdƒ‚|j	| _
|j| _g | _x|jD ]}| jjt|Ž ƒ qXW |j| _|jS )Nz	import %sz&yacc table file version is out of date)rA   ÚtypesÚ
ModuleTypeÚexecrm   ÚmodulesZ_tabversionÚ__tabversion__rê   Z
_lr_actionrY   Z_lr_gotor[   rW   Z_lr_productionsra   r°   Z
_lr_methodrì   Z_lr_signature)r   Úmoduler   r�   r	   r	   r
   Ú
read_tableº  s    

zLRTable.read_tablec             C   sÆ   ydd l }W n tk
r(   dd l}Y nX tjj|ƒs:t‚t|dƒ}|j|ƒ}|tkr^t	dƒ‚|j|ƒ| _
|j|ƒ}|j|ƒ| _|j|ƒ| _|j|ƒ}g | _x|D ]}| jjt|Ž ƒ q¢W |jƒ  |S )Nr   Úrbz&yacc table file version is out of date)ÚcPickleÚImportErrorÚpickleÚosÚpathÚexistsÚopenÚloadrñ   rê   rì   rY   r[   rW   ra   r°   Úclose)r   Úfilenamer÷   Zin_fZ
tabversionÚ	signaturerX   r�   r	   r	   r
   Úread_pickleÎ  s(    




zLRTable.read_picklec             C   s   x| j D ]}|j|ƒ qW d S )N)rW   r­   )r   r¬   r�   r	   r	   r
   Úbind_callablesê  s    zLRTable.bind_callablesN)r   r   r   r   ró   r   r  r	   r	   r	   r
   rë   ³  s   rë   c          	   C   sT   i }x| D ]}d||< q
W g }i }x,| D ]$}|| dkr(t ||||| ||ƒ q(W |S )Nr   )Útraverse)ÚXÚRÚFPÚNrâ   r;   ÚFr	   r	   r
   Údigraph  s    

r  c          	   C   s  |j | ƒ t|ƒ}||| < || ƒ|| < || ƒ}xr|D ]j}	||	 dkrXt|	||||||ƒ t||  ||	 ƒ|| < x.|j|	g ƒD ]}
|
||  kr|||  j |
ƒ q|W q4W ||  |k�rt||d < ||  ||d < |jƒ }x2|| k�rt||d < ||  ||d < |jƒ }qÖW d S )Nr   rc   r}   r}   r}   r}   )ra   r   r  Úminr   ÚMAXINTr~   )râ   r  r;   r  r  r  r  ÚdÚrelÚyÚaÚelementr	   r	   r
   r    s(    

r  c               @   s   e Zd ZdS )Ú	LALRErrorN)r   r   r   r	   r	   r	   r
   r  )  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 d!„Zd&d"d#„ZdS )'ÚLRGeneratedTabler   Nc             C   sž   |dkrt d| ƒ‚|| _|| _|s*tƒ }|| _i | _i | _|j| _i | _	i | _
d| _d| _d| _g | _g | _g | _| jjƒ  | jjƒ  | jjƒ  | jƒ  d S )NÚSLRr   zUnsupported method %sr   )r  r   )r  Úgrammarrì   r   ÚlogrY   r[   r¹   rW   Úlr_goto_cacheÚlr0_cidhashÚ
_add_countZsr_conflictZrr_conflictZ	conflictsÚsr_conflictsÚrr_conflictsré   rä   rè   Úlr_parse_table)r   r  Úmethodr  r	   r	   r
   r   4  s,    


zLRGeneratedTable.__init__c             C   sz   |  j d7  _ |d d … }d}xV|rtd}xH|D ]@}x:|jD ]0}t|ddƒ| j krRq:|j|jƒ | j |_d}q:W q.W q W |S )Nrc   TFÚ	lr0_addedr   )r  r§   rK   ra   r    r  )r   ÚIÚJræ   rG   râ   r	   r	   r
   Úlr0_closureY  s    
zLRGeneratedTable.lr0_closurec       	      C   sÔ   | j jt|ƒ|fƒ}|r|S | j j|ƒ}|s:i }|| j |< g }xP|D ]H}|j}|rD|j|krD|jt|ƒƒ}|s~i }||t|ƒ< |j|ƒ |}qDW |jdƒ}|s¾|r¶| j|ƒ}||d< n||d< || j t|ƒ|f< |S )Nz$end)r  r   r!   r    rª   ra   r  )	r   r  râ   Úgr=   Zgsr�   rB   Ús1r	   r	   r
   Úlr0_gotos  s2    





zLRGeneratedTable.lr0_gotoc       	      C   sà   | j | jjd jgƒg}d}x"|D ]}|| jt|ƒ< |d7 }q"W d}x–|t|ƒk rÚ|| }|d7 }i }x$|D ]}x|jD ]}d ||< qxW qlW xJ|D ]B}| j||ƒ}| s’t|ƒ| jkr¸q’t|ƒ| jt|ƒ< |j	|ƒ q’W qFW |S )Nr   rc   )
r  r  r¹   r    r  r!   r   rž   r"  ra   )	r   ÚCrF   r  ZasymsÚiir=   râ   r   r	   r	   r
   Ú	lr0_items–  s(    


zLRGeneratedTable.lr0_itemsc             C   s‚   t ƒ }d}xrxV| jjdd … D ]B}|jdkr:|j|jƒ qx$|jD ]}||krBP qBW |j|jƒ qW t|ƒ|krrP t|ƒ}qW |S )Nr   rc   )rÀ   r  r¹   r   rÏ   r   r‰   )r   ÚnullableZnum_nullabler�   r�   r	   r	   r
   Úcompute_nullable_nonterminalsÎ  s    
z.LRGeneratedTable.compute_nullable_nonterminalsc             C   sr   g }xht |ƒD ]\\}}xR|D ]J}|j|jd k r||j|jd  f}|d | jjkr||kr|j|ƒ qW qW |S )Nrc   )rÍ   r²   r   r‰   r  r¼   ra   )r   r#  ÚtransZstatenorh   r�   r�   r	   r	   r
   Úfind_nonterminal_transitionsë  s    
z-LRGeneratedTable.find_nonterminal_transitionsc             C   s˜   i }|\}}g }| j || |ƒ}xJ|D ]B}	|	j|	jd k r&|	j|	jd  }
|
| jjkr&|
|kr&|j|
ƒ q&W |dkr”|| jjd jd kr”|jdƒ |S )Nrc   r   z$end)r"  r²   r   r‰   r  r»   ra   r¹   )r   r#  r(  r&  Zdr_setrh   r  Útermsr   r�   r  r	   r	   r
   Údr_relationÿ  s    

zLRGeneratedTable.dr_relationc             C   sv   g }|\}}| j || |ƒ}| jjt|ƒdƒ}xB|D ]:}	|	j|	jd k r4|	j|	jd  }
|
|kr4|j||
fƒ q4W |S )Nrc   r}   )r"  r  r   r!   r²   r   r‰   ra   )r   r#  r(  Úemptyr  rh   r  r   rG   r�   r  r	   r	   r
   Úreads_relation	  s    
zLRGeneratedTable.reads_relationc             C   sÞ  i }i }i }x|D ]}d||< qW �x°|D �]¦\}}	g }
g }�xR|| D �]D}|j |	krZqH|j}|}x¦||jd k �r
|d }|j| }||f|kræ|d }xH||jk rÖ|j| | jjkr¼P |j| |krÌP |d }qžW |j||fƒ | j|| |ƒ}| jj	t
|ƒdƒ}qfW x€|| D ]t}|j |j k�r,�q|j|jk�r>�qd}xD||jk �rx|j| |j|d  k�rlP |d }�qDW |
j||fƒ �qW qHW x2|D ]*}||k�r®g ||< || j||	fƒ �q˜W |
|||	f< q*W ||fS )Nrc   r   r}   )r   r²   r   r‰   r  r»   ra   r"  r  r   r!   )r   r#  r(  r&  ZlookdictZincludedictZdtransr�   rh   r  ZlookbZincludesr�   r²   rG   Zlir   r"   rF   r	   r	   r
   Úcompute_lookback_includesC	  sX    




z*LRGeneratedTable.compute_lookback_includesc                s0   ‡ ‡‡fdd„}‡ ‡‡fdd„}t |||ƒ}|S )Nc                s   ˆj ˆ | ˆƒS )N)r+  )râ   )r#  r&  r   r	   r
   Ú<lambda>”	  s    z4LRGeneratedTable.compute_read_sets.<locals>.<lambda>c                s   ˆj ˆ | ˆƒS )N)r-  )râ   )r#  r&  r   r	   r
   r/  •	  s    )r  )r   r#  Úntransr&  r  r  r  r	   )r#  r&  r   r
   Úcompute_read_sets“	  s    z"LRGeneratedTable.compute_read_setsc                s(   ‡fdd„}‡ fdd„}t |||ƒ}|S )Nc                s   ˆ |  S )Nr	   )râ   )Úreadsetsr	   r
   r/  ª	  s    z6LRGeneratedTable.compute_follow_sets.<locals>.<lambda>c                s   ˆ j | g ƒS )N)r   )râ   )Úinclsetsr	   r
   r/  «	  s    )r  )r   r0  r2  r3  r  r  r  r	   )r3  r2  r
   Úcompute_follow_sets©	  s    z$LRGeneratedTable.compute_follow_setsc       	      C   sx   xr|j ƒ D ]f\}}x\|D ]T\}}||jkr4g |j|< |j|g ƒ}x*|D ]"}||j| krF|j| j|ƒ qFW qW q
W d S )N)re   r³   r   ra   )	r   Z	lookbacksZ	followsetr(  Zlbrh   r�   r   r  r	   r	   r
   Úadd_lookaheads»	  s    


zLRGeneratedTable.add_lookaheadsc             C   sP   | j ƒ }| j|ƒ}| j|||ƒ}| j|||ƒ\}}| j|||ƒ}| j||ƒ d S )N)r'  r)  r1  r.  r4  r5  )r   r#  r&  r(  r2  ZlookdZincludedZ
followsetsr	   r	   r
   Úadd_lalr_lookaheadsÍ	  s    
z$LRGeneratedTable.add_lalr_lookaheadsc       $   	   C   s<  | j j}| j j}| j}| j}| j}i }|jd| jƒ | jƒ }| jdkrP| j	|ƒ d}�xà|D �]Ö}	g }
i }i }i }|jdƒ |jd|ƒ |jdƒ x|	D ]}|jd|j
|ƒ q˜W |jdƒ �x|	D �]þ}|j|jd k�r,|jdkrød|d	< ||d	< �qÂ| jdk�r|j| }n| j j|j }�x |D �]þ}|
j||d
|j
|f fƒ |j|ƒ}|d k	�rü|dk�rB||| j
 j\}}|j|dƒ\}}||k �s¦||k�rþ|dk�rþ|j
 ||< |||< | �rè| �rè|jd|ƒ | jj||dfƒ ||j
  jd7  _nB||k�r|dk�rd ||< n$|�sú|jd|ƒ | jj||dfƒ n¸|dk �rî||  }||j
 }|j|jk�r¶|j
 ||< |||< || }}||j
  jd7  _||j
  jd8  _n
|| }}| jj|||fƒ |jd||| j
|| ƒ ntd| ƒ‚n(|j
 ||< |||< ||j
  jd7  _�q&W qÂ|j}|j|d  }|| j jkrÂ| j|	|ƒ}| jjt|ƒdƒ}|dkrÂ|
j||d| fƒ |j|ƒ}|d k	�r²|dk�r¼||k�r°td| ƒ‚nô|dk �r¤||| j
 j\}}|j|dƒ\}}||k�s||k�rV|dk�rV||| j
  jd8  _|||< |||< |�s¢|jd|ƒ | jj||dfƒ nL||k�rt|dk�rtd ||< n.| �r°| �r°|jd|ƒ | jj||dfƒ ntd| ƒ‚qÂ|||< |||< qÂW i }xF|
D ]>\}}}||k�rÐ||| k�rÐ|jd||ƒ d|||f< �qÐW |jdƒ d}xX|
D ]P\}}}||k�r&||| k	�r&||f|k�r&|jd||ƒ d}d|||f< �q&W |�rŠ|jdƒ i } x6|	D ].}!x&|!jD ]}"|"| j jk�r d | |"< �q W �q”W xL| D ]D}#| j|	|#ƒ}| jjt|ƒdƒ}|dk�rÌ|||#< |jd|#|ƒ �qÌW |||< |||< |||< |d7 }q\W d S )NzParsing method: %sr   r   rw   zstate %dz    (%d) %src   zS'z$endzreduce using rule %d (%s)r—   rÄ   z3  ! shift/reduce conflict for %s resolved as reduceÚreducerÅ   z2  ! shift/reduce conflict for %s resolved as shiftZshiftz=  ! reduce/reduce conflict for %s resolved using rule %d (%s)zUnknown conflict in state %dzshift and go to state %dz Shift/shift conflict in state %dz    %-15s %sz  ! %-15s [ %s ]z"    %-30s shift and go to state %d)r—   r   r}   )r—   r   r}   ) r  r¹   r¿   r[   rY   r  r   rì   r%  r6  r™   r   r²   r   r³   r¾   ra   r   r�   r  r¯   rœ   r  r  r‰   r»   r"  r  r!   r   rž   r¼   )$r   r¹   r¿   r\   rZ   r  Zactionpr#  Ústr  ZactlistZ	st_actionZ
st_actionpZst_gotor�   Zlaheadsr  r"   ZsprecZslevelZrprecZrlevelZoldpZppZchosenpZrejectprF   r   rG   Z	_actprintrÔ   Znot_usedZnkeysr$  r=   rB   r	   r	   r
   r  å	  s    




























zLRGeneratedTable.lr_parse_tablerw   c             C   sÎ  t |tjƒrtdƒ‚|jdƒd }tjj||ƒd }�ylt|dƒ}|j	dtjj
|ƒt| j|f ƒ d}|�rti }xf| jjƒ D ]X\}	}
xN|
jƒ D ]B\}}|j|ƒ}|s´g g f}|||< |d j|	ƒ |d j|ƒ qŽW q|W |j	dƒ xz|jƒ D ]n\}}|j	d	| ƒ x |d D ]}|j	d
| ƒ �qW |j	dƒ x |d D ]}|j	d
| ƒ �q8W |j	dƒ qìW |j	dƒ |j	dƒ nJ|j	dƒ x4| jjƒ D ]&\}}|j	d|d |d |f ƒ �qŠW |j	dƒ |�rÔi }xl| jjƒ D ]^\}	}
xR|
jƒ D ]F\}}|j|ƒ}|�sg g f}|||< |d j|	ƒ |d j|ƒ �qæW �qÔW |j	dƒ x||jƒ D ]p\}}|j	d	| ƒ x |d D ]}|j	d
| ƒ �qjW |j	dƒ x |d D ]}|j	d
| ƒ �q–W |j	dƒ �qJW |j	dƒ |j	dƒ nJ|j	dƒ x4| jjƒ D ]&\}}|j	d|d |d |f ƒ �qêW |j	dƒ |j	dƒ xd| jD ]Z}|j�rl|j	d|j|j|j|jtjj
|jƒ|jf ƒ n|j	dt|ƒ|j|jf ƒ �q0W |j	dƒ |jƒ  W n& tk
�rÈ } z‚ W Y d d }~X nX d S )Nz"Won't overwrite existing tabmoduler±   rc   z.pyÚwzu
# %s
# This file is automatically generated. Do not edit.
_tabversion = %r

_lr_method = %r

_lr_signature = %r
    r   z
_lr_action_items = {z%r:([z%r,z],[z]),z}
zÂ
_lr_action = {}
for _k, _v in _lr_action_items.items():
   for _x,_y in zip(_v[0],_v[1]):
      if not _x in _lr_action:  _lr_action[_x] = {}
      _lr_action[_x][_k] = _y
del _lr_action_items
z
_lr_action = { z(%r,%r):%r,z
_lr_goto_items = {z¹
_lr_goto = {}
for _k, _v in _lr_goto_items.items():
   for _x, _y in zip(_v[0], _v[1]):
       if not _x in _lr_goto: _lr_goto[_x] = {}
       _lr_goto[_x][_k] = _y
del _lr_goto_items
z
_lr_goto = { z_lr_productions = [
z  (%r,%r,%d,%r,%r,%d),
z  (%r,%r,%d,None,None,None),
z]
r}   )rA   rí   rî   ÚIOErrorÚsplitrø   rù   r€   rû   r   Úbasenamerñ   rì   rY   re   r   ra   r[   rW   rš   r7   r   r   r›   rœ   rý   )r   Ú	tabmoduleÚ	outputdirrÿ   Zbasemodulenamerþ   r   Zsmallerre   r=   Zndr   rD   rF   rå   r�   Úer	   r	   r
   Úwrite_tableœ
  sŽ    





"





"

"
zLRGeneratedTable.write_tablec             C   s  ydd l }W n tk
r(   dd l}Y nX t|dƒ�Ä}|jt|tƒ |j| j|tƒ |j||tƒ |j| j|tƒ |j| j	|tƒ g }x^| j
D ]T}|jrÄ|j|j|j|j|jtjj|jƒ|jfƒ qŽ|jt|ƒ|j|jd d d fƒ qŽW |j||tƒ W d Q R X d S )Nr   Úwb)rõ   rö   r÷   rû   Údumprñ   Úpickle_protocolrì   rY   r[   rW   rš   ra   r7   r   r   rø   rù   r<  r›   rœ   )r   rþ   rÿ   r÷   ZoutfZoutpr�   r	   r	   r
   Úpickle_table  s     ,"zLRGeneratedTable.pickle_table)r   N)rw   rw   )rw   )r   r   r   r   r  r"  r%  r'  r)  r+  r-  r.  r1  r4  r5  r6  r  r@  rD  r	   r	   r	   r
   r  3  s"   
%#8+P 8
zr  c             C   s0   t j| ƒ}|jjƒ }|j|jkr,|j|jƒ |S )N)rm   Ú	_getframeÚ	f_globalsÚcopyÚf_localsÚupdate)Zlevelsr   Zldictr	   r	   r
   Úget_caller_module_dict9  s
    

rJ  c             C   s  g }| j ƒ }d }|}xê|D ]â}|d7 }|jƒ }|s4qyˆ|d dkrh|sVtd||f ƒ‚|}	|dd … }
n@|d }	|	}|dd … }
|d }|dkr¨|dkr¨td||f ƒ‚|j|||	|
fƒ W q tk
rÒ   ‚ Y q tk
rú   td	|||jƒ f ƒ‚Y qX qW |S )
Nrc   r   ú|z%s:%d: Misplaced '|'rÉ   ú:z::=z!%s:%d: Syntax error. Expected ':'z%s:%d: Syntax error in rule %r)Ú
splitlinesr;  rU   ra   Ú	ExceptionÚstrip)Údocr›   rœ   r  ZpstringsZlastpZdlineZpsr�   rÐ   rÑ   Zassignr	   r	   r
   Úparse_grammarE  s6    
 rQ  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S )!ÚParserReflectNc             C   sL   || _ d | _d | _d | _tƒ | _g | _d| _|d krBtt	j
ƒ| _n|| _d S )NF)r¬   rÖ   Ú
error_funcÚtokensrÀ   rð   r  r   r   rm   rn   r  )r   r¬   r  r	   r	   r
   r   o  s    zParserReflect.__init__c             C   s,   | j ƒ  | jƒ  | jƒ  | jƒ  | jƒ  d S )N)Ú	get_startÚget_error_funcÚ
get_tokensÚget_precedenceÚget_pfunctions)r   r	   r	   r
   Úget_all~  s
    zParserReflect.get_allc             C   s6   | j ƒ  | jƒ  | jƒ  | jƒ  | jƒ  | jƒ  | jS )N)Úvalidate_startÚvalidate_error_funcÚvalidate_tokensÚvalidate_precedenceÚvalidate_pfunctionsÚvalidate_modulesr   )r   r	   r	   r
   Úvalidate_all†  s    zParserReflect.validate_allc             C   s  yddl m} W n  tk
r0   ddlm} Y nX y˜|dd�}| jrV|j| jjdƒƒ | jr~|jdjdd„ | jD ƒƒjdƒƒ | jrœ|jd	j| jƒjdƒƒ x*| j	D ] }|d
 r¤|j|d
 jdƒƒ q¤W W n t
tfk
râ   Y nX tj|jƒ ƒ}tjd d
k�r|jdƒ}|S )Nr   )Úmd5F)Zusedforsecurityzlatin-1rw   c             S   s   g | ]}d j |ƒ‘qS )rw   )r€   )r?   r�   r	   r	   r
   r@   š  s    z+ParserReflect.signature.<locals>.<listcomp>rx   r   )Zhashlibrb  rö   rÖ   rI  Úencoder�   r€   rT  ÚpfuncsÚ	TypeErrorÚ
ValueErrorÚbase64Z	b16encodeÚdigestrm   Úversion_infoÚdecode)r   rb  Zsigr   rh  r	   r	   r
   rÿ   �  s*    
"
zParserReflect.signaturec             C   s¸   t jdƒ}x¨| jD ]ž}ytj|ƒ\}}W n tk
r>   wY nX i }xjt|ƒD ]^\}}|d7 }|j|ƒ}|rN|jdƒ}|j	|ƒ}	|	sŽ|||< qNtj
|ƒ}
| jjd|
|||	ƒ qNW qW d S )Nz\s*def\s+(p_[a-zA-Z_0-9]*)\(rc   z;%s:%d: Function %s redefined. Previously defined on line %d)ÚreÚcompilerð   ÚinspectZgetsourcelinesr:  rÍ   rÌ   Úgroupr   Úgetsourcefiler  r   )r   Zfrerò   ÚlinesZlinenZ	counthashrœ   rÔ   r   Úprevrþ   r	   r	   r
   r`  ³  s$    





zParserReflect.validate_modulesc             C   s   | j jdƒ| _d S )NrÖ   )r¬   r   rÖ   )r   r	   r	   r
   rU  Ì  s    zParserReflect.get_startc             C   s&   | j d k	r"t| j tƒs"| jjdƒ d S )Nz'start' must be a string)rÖ   rA   Ústring_typesr  r   )r   r	   r	   r
   r[  Ð  s    
zParserReflect.validate_startc             C   s   | j jdƒ| _d S )NÚp_error)r¬   r   rS  )r   r	   r	   r
   rV  Ö  s    zParserReflect.get_error_funcc             C   s    | j rœt| j tjƒrd}n*t| j tjƒr.d}n| jjdƒ d| _d S | j jj}| j jj	}t
j| j ƒ}| jj|ƒ | j jj| }|dkrœ| jjd||ƒ d| _d S )Nr   rc   z2'p_error' defined, but is not a function or methodTz$%s:%d: p_error() requires 1 argument)rS  rA   rí   ÚFunctionTypeÚ
MethodTyper  r   Ú__code__Úco_firstlinenoÚco_filenamerm  Ú	getmodulerð   rÏ   Úco_argcount)r   ZismethodZelineZefilerò   Zargcountr	   r	   r
   r\  Ú  s     

z!ParserReflect.validate_error_funcc             C   sn   | j jdƒ}|s&| jjdƒ d| _d S t|ttfƒsJ| jjdƒ d| _d S |sd| jjdƒ d| _d S || _d S )NrT  zNo token list is definedTztokens must be a list or tupleztokens is empty)r¬   r   r  r   rA   rf   r˜   rT  )r   rT  r	   r	   r
   rW  ð  s    zParserReflect.get_tokensc             C   sZ   d| j kr | jjdƒ d| _d S tƒ }x.| j D ]$}||krH| jjd|ƒ |j|ƒ q.W d S )Nr   z.Illegal token name 'error'. Is a reserved wordTzToken %r multiply defined)rT  r  r   rÀ   r   rÏ   )r   rµ   rB   r	   r	   r
   r]    s    
zParserReflect.validate_tokensc             C   s   | j jdƒ| _d S )Nr¡   )r¬   r   r�   )r   r	   r	   r
   rX    s    zParserReflect.get_precedencec             C   s  g }| j �rt| j ttfƒs2| jjdƒ d| _d S xÐt| j ƒD ]Â\}}t|ttfƒsj| jjdƒ d| _d S t|ƒdk rŽ| jjd|ƒ d| _d S |d }t|tƒs¶| jjdƒ d| _d S xH|dd … D ]8}t|tƒsè| jjd	ƒ d| _d S |j	|||d fƒ qÄW q>W || _
d S )
Nz"precedence must be a list or tupleTzBad precedence tablerÉ   z?Malformed precedence entry %s. Must be (assoc, term, ..., term)r   z)precedence associativity must be a stringrc   z precedence items must be strings)r�   rA   rf   r˜   r  r   rÍ   r   rr  ra   Úpreclist)r   r{  rÇ   r�   rÆ   rÃ   r	   r	   r
   r^    s6    

z!ParserReflect.validate_precedencec             C   sŒ   g }xl| j jƒ D ]^\}}|jdƒ s|dkr.qt|tjtjfƒrt|d|jj	ƒ}t
j|ƒ}|j||||jfƒ qW |jdd„ d� || _d S )NÚp_rs  rw  c             S   s    | d t | d ƒ| d | d fS )Nr   rc   rÉ   r   )r7   )Z
p_functionr	   r	   r
   r/  B  s    
z.ParserReflect.get_pfunctions.<locals>.<lambda>)Úkey)r¬   re   Ú
startswithrA   rí   rt  ru  rK   rv  rw  rm  ry  ra   Ú__doc__Úsortrd  )r   Zp_functionsr   Úitemrœ   rò   r	   r	   r
   rY  5  s    
zParserReflect.get_pfunctionsc             C   s^  g }t | jƒdkr(| jjdƒ d| _d S �x"| jD �]\}}}}tj|ƒ}| j| }t|tj	ƒrfd}nd}|j
j|kr’| jjd|||jƒ d| _q2|j
j|k rº| jjd|||jƒ d| _q2|jsÖ| jjd|||jƒ q2y,t|||ƒ}	x|	D ]}
|j||
fƒ qêW W n: tk
�r< } z| jjt|ƒƒ d| _W Y d d }~X nX | jj|ƒ q2W �x| jjƒ D ]ô\}}|jd	ƒ�rˆt|tjtj	fƒ�rˆ�q\|jd
ƒ�r˜�q\|jd	ƒ�r¼|dk�r¼| jjd|ƒ t|tjƒ�rØ|j
jdk�söt|tj	ƒ�r\|jj
jdk�r\|j�r\y8|jjdƒ}|d dk�r4| jjd|j
j|j
j|ƒ W n tk
�rL   Y nX �q\W || _d S )Nr   z+no rules of the form p_rulename are definedTrÉ   rc   z%%s:%d: Rule %r has too many argumentsz#%s:%d: Rule %r requires an argumentzA%s:%d: No documentation string specified in function %r (ignored)r|  Zt_rs  z%r not defined as a functionrx   rL  z9%s:%d: Possible grammar rule %r defined without p_ prefix)r   rd  r  r   rm  ro  r¬   rA   rí   ru  rv  rz  r   r  r   rQ  ra   rU   r7   rð   rÏ   re   r~  rt  Ú__func__r;  rx  rw  r¨   r  )r   r  rœ   rò   r   rP  r›   rš   ZreqargsZparsed_gr   r?  rB   rD   r	   r	   r
   r_  J  s\    


 z!ParserReflect.validate_pfunctions)N)r   r   r   r   rZ  ra  rÿ   r`  rU  r[  rV  r\  rW  r]  rX  r^  rY  r_  r	   r	   r	   r
   rR  n  s   

#rR  c       <   O      sd	  |d krt }|rd}|d kr&ttjƒ}ˆ rf‡ fdd„tˆ ƒD ƒ}t|ƒ}d|krntj|d  j|d< ntdƒ}|	d krât	|t
jƒrŠ|j}nLd|krœ|d }n:|jdƒ}dj|d d6… ƒ}td	| ƒ ttj| dd
ƒ}tjj|ƒ}	|jdƒ}|oøt	|tƒ�rd|k�r|d | }|d k	�r$||d< t||d�}|jƒ  |j�rHtdƒ‚|jƒ }yŠtƒ }|�rj|j|ƒ}n
|j|ƒ}|�s„||k�rØy"|j|jƒ t||j ƒ}|j!a!|S  t"k
�rÖ } z|j#d|ƒ W Y d d }~X nX W nF t$k
�r } z|j#t|ƒƒ W Y d d }~X n t%k
�r    Y nX |
d k�r”|�rŽytt&tjj|	|ƒdƒƒ}
W n< t'k
�rŠ } z|j#d||f ƒ t(ƒ }
W Y d d }~X nX nt(ƒ }
|
j)dt*ƒ d}|j+ƒ �r¶tdƒ‚|j �sÈ|j#dƒ t,|j-ƒ}xZ|j.D ]P\}}}y|j/|||ƒ W n0 t0k
�r& } z|j#d|ƒ W Y d d }~X nX �qÚW xl|j1D ]b\}}|\} }!}"}#y|j2|"|#|| |!ƒ W n4 t0k
�r” } z|jd|ƒ d}W Y d d }~X nX �q6W y&|d k�r¶|j3|j4ƒ n
|j3|ƒ W n6 t0k
�rø } z|jt|ƒƒ d}W Y d d }~X nX |�rtdƒ‚|j5ƒ }$x*|$D ]"\}%}&|jd|&j6|&j7|%ƒ d}�qW |j8ƒ }'|'�r�|
j)d
ƒ |
j)dƒ |
j)d
ƒ x&|'D ]}|j#d|ƒ |
j)d|ƒ �qnW |�rÜ|
j)d
ƒ |
j)dƒ |
j)d
ƒ x&t9|j:ƒD ]\}(})|
j)d|(|)ƒ �qÀW |j;ƒ }*x$|*D ]}&|j#d|&j6|&j7|&j<ƒ �qêW t=|'ƒdk�r"|j#dƒ t=|'ƒdk�r@|j#dt=|'ƒƒ t=|*ƒdk�rX|j#d ƒ t=|*ƒdk�rv|j#d!t=|*ƒƒ |�rN|
j)d
ƒ |
j)d"ƒ |
j)d
ƒ t>|j?ƒ}+|+j@ƒ  x2|+D ]*}|
j)d#|d$jd%d„ |j?| D ƒƒƒ �q²W |
j)d
ƒ |
j)d&ƒ |
j)d
ƒ t>|jAƒ},|,j@ƒ  x2|,D ]*}-|
j)d#|-d$jd'd„ |jA|- D ƒƒƒ �qW |
j)d
ƒ |�r |jBƒ }.x|.D ]}/|j#d(|/ƒ �qbW |jCƒ }0x|0D ]}1|jd)|1ƒ d}�q†W |jDƒ }2x$|2D ]\}}|jd*||ƒ d}�q®W |�rÜtdƒ‚|�rî|jEd+| ƒ tF|| |
ƒ}|�rlt=|jGƒ}3|3dk�r |j#d,ƒ n|3dk�r6|j#d-|3ƒ t=|jHƒ}4|4dk�rV|j#d.ƒ n|4dk�rl|j#d/|4ƒ |�r¤|jG�s‚|jH�r¤|
j#d
ƒ |
j#d0ƒ |
j#d
ƒ x&|jGD ]\}5}6}7|
j#d1|6|5|7ƒ �q¨W tIƒ }8x‚|jHD ]x\}5}9}:|5tJ|9ƒtJ|:ƒf|8k�rü�qÖ|
j#d2|5|9ƒ |
j#d3|:|5ƒ |j#d2|5|9ƒ |j#d3|:|5ƒ |8jK|5tJ|9ƒtJ|:ƒfƒ �qÖW g };xL|jHD ]B\}5}9}:|:jL �r^|:|;k�r^|
j#d4|:ƒ |j#d4|:ƒ |;jM|:ƒ �q^W |�rôy|jN||	|ƒ W n6 t'k
�rò } z|j#d5||f ƒ W Y d d }~X nX |�	rBy|jO||ƒ W n6 t'k
�	r@ } z|j#d5||f ƒ W Y d d }~X nX |j|jƒ t||j ƒ}|j!a!|S )7Nr   c                s   g | ]}|t ˆ |ƒf‘qS r	   )rK   )r?   rå   )rò   r	   r
   r@   Ÿ  s    zyacc.<locals>.<listcomp>Ú__file__r   rÉ   r±   rc   z	import %srw   Ú__package__rÖ   )r  zUnable to build parserz.There was a problem loading the table file: %rr9  zCouldn't open %r. %sz5Created by PLY version %s (http://www.dabeaz.com/ply)Fz no p_error() function is definedz%sTz;%s:%d: Symbol %r used, but not defined as a token or a rulezUnused terminals:zToken %r defined, but not usedz    %sr¸   zRule %-5d %sz$%s:%d: Rule %r defined, but not usedzThere is 1 unused tokenzThere are %d unused tokenszThere is 1 unused rulezThere are %d unused rulesz'Terminals, with rules where they appearz
%-20s : %srx   c             S   s   g | ]}t |ƒ‘qS r	   )r7   )r?   r=   r	   r	   r
   r@   E  s    z*Nonterminals, with rules where they appearc             S   s   g | ]}t |ƒ‘qS r	   )r7   )r?   r=   r	   r	   r
   r@   M  s    zSymbol %r is unreachablez)Infinite recursion detected for symbol %rz0Precedence rule %r defined for unknown symbol %rzGenerating %s tablesz1 shift/reduce conflictz%d shift/reduce conflictsz1 reduce/reduce conflictz%d reduce/reduce conflictsz
Conflicts:z7shift/reduce conflict for %s in state %d resolved as %sz;reduce/reduce conflict in state %d resolved using rule (%s)zrejected rule (%s) in state %dzRule (%s) is never reducedzCouldn't create %r. %sr}   )PÚ
tab_moduler   rm   rn   ÚdirÚdictrð   rƒ  rJ  rA   rí   rî   r;  r€   rï   rK   rø   rù   Údirnamer   r7   rR  rZ  r   r   rÿ   rë   r   ró   r  r¬   rV   rS  ru   rN  r   rê   rö   rû   r:  r   r   Ú__version__ra  r¸   rT  r{  rÈ   r·   r  rÕ   r×   rÖ   rÞ   r›   rœ   rß   rÍ   r¹   rà   r   r   rf   r»   r€  r¼   rÚ   rÝ   rá   r   r  r  r  rÀ   r!   rÏ   r¯   ra   r@  rD  )<r  r   rò   r=  rÖ   Zcheck_recursionÚoptimizeZwrite_tablesZ	debugfiler>  ZdebuglogZerrorlogZ
picklefileZ_itemsr¬   ZsrcfileÚpartsZpkgnameZpkgZpinforÿ   ZlrZread_signaturer3   r?  Úerrorsr  rÃ   rÆ   rÇ   ÚfuncnameZgramr›   rœ   rÐ   rÑ   rÞ   rb   r‰   rß   rB   r�   rà   r*  ZnontermsZnontermZunreachableÚurÜ   ÚinfZunused_precZnum_srZnum_rrrh   r•   Z
resolutionZalready_reportedZruleZrejectedZwarned_neverr	   )rò   r
   ÚyaccŒ  s„   






"



$
















*




*













$$r�  )<rk  rí   rm   Zos.pathrø   rm  rg  r(   r‰  rñ   Z	yaccdebugZ
debug_filer…  Z
default_lrr„   rk   r   rC  ri  Z
basestringrr  r7   Úmaxsizer
  Úobjectr   r   rN  r   r%   r'   r+   r/   r-   r*   r,   r.   r0   r4   r5   r9   rV   rl  rË   r–   r°   r¥   r¶   r·   r¸   rê   rë   r  r  r  r  rJ  rQ  rR  r�  r	   r	   r	   r
   Ú<module>>   s’   

4       m
H.   rT
      )   
