a
    còfk ã                   @   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  *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.d/„ d/eƒZ1G d0d1„ d1eƒZ2G d2d3„ d3eƒZ3d4d5„ Z4d6d7„ Z5G d8d9„ d9eƒZ6G d:d;„ d;e3ƒZ7d<d=„ Z8d>d?„ Z9G d@dA„ dAeƒZ:de
deddddeddddfdBdC„Z;dS )Dé    Nz3.10Tz
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
   úO/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/pycparser/ply/yacc.pyÚ__init__n   s    zPlyLogger.__init__c                 O   s   | j  || d ¡ d S )NÚ
©r   Úwrite©r	   ÚmsgÚargsÚkwargsr
   r
   r   Údebugq   s    zPlyLogger.debugc                 O   s   | j  d||  d ¡ d S )Nz	WARNING: r   r   r   r
   r
   r   Úwarningv   s    zPlyLogger.warningc                 O   s   | j  d||  d ¡ d S )NzERROR: r   r   r   r
   r
   r   Úerrory   s    zPlyLogger.errorN)	Ú__name__Ú
__module__Ú__qualname__r   r   Úinfor   r   Ú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 r   r
   )r	   Únamer
   r
   r   Ú__getattribute__€   s    zNullLogger.__getattribute__c                 O   s   | S r   r
   )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|v 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|v 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  t¡ tƒ S r   )ÚwarningsÚwarnÚ_warnmsgÚ_errokr
   r
   r
   r   Úerrok¯   s    
r1   c                   C   s   t  t¡ tƒ S r   )r-   r.   r/   Ú_restartr
   r
   r
   r   Úrestart³   s    
r3   c                   C   s   t  t¡ tƒ S r   )r-   r.   r/   Ú_tokenr
   r
   r
   r   Útoken·   s    
r5   c                 C   s<   |j a|ja|ja| |ƒ}z
bbbW n ty6   Y n0 |S r   )r1   r0   r5   r4   r3   r2   Ú	NameError)Ú	errorfuncr5   Úparserr'   r
   r
   r   Úcall_errorfunc¼   s    
r9   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú
YaccSymbolc                 C   s   | j S r   ©r%   ©r	   r
   r
   r   Ú__str__Ú   s    zYaccSymbol.__str__c                 C   s   t | ƒS r   ©Ústrr<   r
   r
   r   Ú__repr__Ý   s    zYaccSymbol.__repr__N)r   r   r   r=   r@   r
   r
   r
   r   r:   Ù   s   r:   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 r   )ÚsliceÚstackÚlexerr8   )r	   ÚsrC   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©Ú.0rE   r
   r
   r   Ú
<listcomp>ò   ó    z.YaccProduction.__getitem__.<locals>.<listcomp>r   )Ú
isinstancerB   rG   rC   ©r	   Únr
   r
   r   Ú__getitem__ð   s
    
zYaccProduction.__getitem__c                 C   s   || j | _d S r   )rB   rG   )r	   rN   Úvr
   r
   r   Ú__setitem__ø   s    zYaccProduction.__setitem__c                 C   s   dd„ | j ||… D ƒS )Nc                 S   s   g | ]
}|j ‘qS r
   rF   rH   r
   r
   r   rJ   ü   rK   z/YaccProduction.__getslice__.<locals>.<listcomp>)rB   )r	   ÚiÚjr
   r
   r   Ú__getslice__û   s    zYaccProduction.__getslice__c                 C   s
   t | jƒS r   )r#   rB   r<   r
   r
   r   Ú__len__þ   s    zYaccProduction.__len__c                 C   s   t | j| ddƒS )NÚlinenor   ©ÚgetattrrB   rM   r
   r
   r   rV     s    zYaccProduction.linenoc                 C   s   || j | _d S r   )rB   rV   )r	   rN   rV   r
   r
   r   Ú
set_lineno  s    zYaccProduction.set_linenoc                 C   s,   t | j| ddƒ}t | j| d|ƒ}||fS )NrV   r   Ú	endlinenorW   )r	   rN   Ú	startlineÚendliner
   r
   r   Úlinespan  s    zYaccProduction.linespanc                 C   s   t | j| ddƒS )NÚlexposr   rW   rM   r
   r
   r   r^     s    zYaccProduction.lexposc                 C   s,   t | j| ddƒ}t | j| d|ƒ}||fS )Nr^   r   Ú	endlexposrW   )r	   rN   ÚstartposÚendposr
   r
   r   Úlexspan  s    zYaccProduction.lexspanc                 C   s   t ‚d S r   )ÚSyntaxErrorr<   r
   r
   r   r     s    zYaccProduction.error)N)r   r   r   r   rO   rQ   rT   rU   rV   rY   r]   r^   rb   r   r
   r
   r
   r   rA   é   s   
rA   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| _|| _|  ¡  d| _d S ©NT)	Úlr_productionsÚproductionsÚ	lr_actionÚactionÚlr_gotoÚgotor7   Úset_defaulted_statesÚerrorok)r	   ZlrtabZerrorfr
   r
   r   r     s    zLRParser.__init__c                 C   s
   d| _ d S re   )rm   r<   r
   r
   r   r1   &  s    zLRParser.errokc                 C   s@   | j d d …= | jd d …= tƒ }d|_| j |¡ | j  d¡ d S )Nú$endr   )Ú
statestackÚsymstackr:   r%   Úappend)r	   Úsymr
   r
   r   r3   )  s    zLRParser.restartc                 C   sP   i | _ | j ¡ D ]:\}}t| ¡ ƒ}t|ƒdkr|d dk r|d | j |< qd S ©Né   r   )Údefaulted_statesri   ÚitemsÚlistÚvaluesr#   )r	   ÚstateÚactionsÚrulesr
   r
   r   rl   9  s
    zLRParser.set_defaulted_statesc                 C   s
   i | _ d S r   )ru   r<   r
   r
   r   Údisable_defaulted_states@  s    z!LRParser.disable_defaulted_statesNFc                 C   sZ   |st r.t|tƒrttjƒ}|  |||||¡S |rD|  |||||¡S |  |||||¡S d S r   )	Ú	yaccdevelrL   Úintr   ÚsysÚstderrÚ
parsedebugÚparseoptÚparseopt_notrack)r	   ÚinputrD   r   ÚtrackingÚ	tokenfuncr
   r
   r   ÚparseC  s    

zLRParser.parsec                  C   s¾  d }g }| j }| j}	| j}
| j}td ƒ}d}| d¡ |sLddlm} |j}||_| |_	|d urj| 
|¡ |d u rz|j}n|}|| _g }|| _g }|| _||_d }| d¡ tƒ }d|_| |¡ d}| d¡ | d|¡ ||v�r(|�s|sø|ƒ }n| ¡ }|�stƒ }d|_|j}||  |¡}n|| }| d|| ¡ | d	d
d dd„ |D ƒdd … ¡t|ƒf  ¡ ¡ |d u�r€|dk�r¾| |¡ |}| d|¡ | |¡ d }|rÆ|d8 }qÆ|dk �rD|
|  }|j}|j}tƒ }||_d |_|�r<| d|jdd dd„ || d … D ƒ¡ d |	|d|   | ¡ n| d|jg |	|d  | ¡ |�rŠ|| d d … }||d< |�rÀ|d }|j|_|j|_|d }t|d|jƒ|_t|d|jƒ|_||_ zd|| d …= || _!| "|¡ || d …= | dt#|d ƒ¡ | |¡ |	|d  | }| |¡ W qÆ t$�y„   | |¡ | %|dd… ¡ | ¡  |d }d|_d|_|}t&}d| _'Y qÆ0 qÆnº|�r |j|_|j|_|g}||_ zL|| _!| "|¡ | dt#|d ƒ¡ | |¡ |	|d  | }| |¡ W qÆ t$�y@   | |¡ | ¡  |d }d|_d|_|}t&}d| _'Y qÆ0 qÆ|dk�r€|d }t|dd ƒ}| dt#|ƒ¡ | d¡ |S |d u �r°| (dd
d dd„ |D ƒdd … ¡t|ƒf  ¡ ¡ |dk�sÐ| j'�r˜t&}d| _'|}|jdk�rîd }| j)�r6|�rt*|dƒ�s||_|| _!t+| j)|| ƒ}| j'�r–|}d }qÆn`|�r†t*|d ƒ�rP|j}nd}|�rrt,j- .d!||jf ¡ nt,j- .d"|j ¡ nt,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�r*|�r$t|d |jƒ|_t|d$|jƒ|_d }qÆtƒ }d|_t*|d ƒ�rP|j |_|_t*|d$ƒ�rj|j |_|_||_| |¡ |}qÆ| ¡ }|�rž|j|_|j|_| ¡  |d }qÆt/d%ƒ‚qÆd S )&Nr   zPLY: PARSE DEBUG STARTrt   ©Úlexrn   Ú zState  : %sz#Defaulted state %s: Reduce using %dzStack  : %sz%s . %sú c                 S   s   g | ]
}|j ‘qS r
   r;   ©rI   Úxxr
   r
   r   rJ   ±  rK   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,   rG   )rI   Ú_vr
   r
   r   rJ   Ô  rK   ú]éÿÿÿÿrZ   r_   zResult : %sr   FrG   zDone   : Returning %szPLY: PARSE DEBUG ENDzError  : %sc                 S   s   g | ]
}|j ‘qS r
   r;   rŒ   r
   r
   r   rJ   B  rK   rD   rV   ú(yacc: Syntax error at line %d, token=%s
úyacc: Syntax error, token=%sú yacc: Parse error in input. EOF
r^   úyacc: internal parser error!!!
)0ri   rk   rg   ru   rA   r   rŠ   r‰   rD   r8   r„   r5   ro   rp   rC   rq   r:   r%   r   ÚpopÚgetÚjoinr?   Úlstripr   r#   rG   rV   r^   rX   rZ   r_   rB   ry   Úcallabler*   rc   ÚextendÚerror_countrm   r   r7   Úhasattrr9   r   r€   r   ÚRuntimeError© r	   r„   rD   r   r…   r†   Ú	lookaheadÚlookaheadstackrz   rk   Úprodru   ÚpsliceÚ
errorcountr‰   Ú	get_tokenro   rp   Úerrtokenrr   ry   ÚltypeÚtÚpÚpnameÚplenÚtargÚt1rN   r)   ÚtokrV   r
   r
   r   r�   \  s„   





*ÿ






$þÿ








*ÿ

zLRParser.parsedebugc                  C   sj  d }g }| j }| j}	| j}
| j}td ƒ}d}|sBddlm} |j}||_| |_|d ur`| 	|¡ |d u rp|j
}n|}|| _
g }|| _g }|| _||_d }| d¡ tƒ }d|_| |¡ d}||v�r|sî|sÖ|ƒ }n| ¡ }|sîtƒ }d|_|j}||  |¡}n|| }|d u�r`|dk�rJ| |¡ |}| |¡ d }|r¼|d8 }q¼|dk �r>|
|  }|j}|j}tƒ }||_d |_|�r˜|| d d … }||d< |�râ|d }|j|_|j|_|d }t|d|jƒ|_t|d|jƒ|_||_zP|| d …= || _| |¡ || d …= | |¡ |	|d  | }| |¡ W q¼ t�y’   | |¡ | |dd… ¡ | ¡  |d }d|_d|_|}t }d	| _!Y q¼0 q¼n¦|�r®|j|_|j|_|g}||_z8|| _| |¡ | |¡ |	|d  | }| |¡ W q¼ t�y:   | |¡ | ¡  |d }d|_d|_|}t }d	| _!Y q¼0 q¼|dk�r`|d }t|d
d ƒ}|S |d u �r\|dk�s|| j!�rDt }d	| _!|}|jdk�ršd }| j"�râ|�rºt#|dƒ�sº||_|| _t$| j"|| ƒ}| j!�rB|}d }q¼n`|�r2t#|dƒ�rü|j}nd}|�rt%j& 'd||jf ¡ nt%j& 'd|j ¡ nt%j& 'd¡ d S nt }t|ƒdk�rz|jdk�rzd }d }d}|d d …= q¼|jdk�rŠd S |jdk�r,|d }|jdk�rÖ|�rÐt|d|jƒ|_t|d|jƒ|_d }q¼tƒ }d|_t#|dƒ�rü|j |_|_t#|dƒ�r|j |_|_||_| |¡ |}q¼| ¡ }|�rJ|j|_|j|_| ¡  |d }q¼t(dƒ‚q¼d S )Nr   rt   rˆ   rn   r’   rZ   r_   r   FrG   rD   rV   r“   r”   r•   r^   r–   ))ri   rk   rg   ru   rA   rŠ   r‰   rD   r8   r„   r5   ro   rp   rC   rq   r:   r%   r—   r˜   r   r#   rG   rV   r^   rX   rZ   r_   rB   ry   r›   rc   rœ   r�   rm   r7   rž   r9   r   r€   r   rŸ   r    r
   r
   r   r‚   ·  sV   



















zLRParser.parseoptc                 C   sÒ  d }g }| j }| j}	| j}
| j}td ƒ}d}|sBddlm} |j}||_| |_|d ur`| 	|¡ |d u rp|j
}n|}|| _
g }|| _g }|| _||_d }| d¡ tƒ }d|_| |¡ d}||v�r|sî|sÖ|ƒ }n| ¡ }|sîtƒ }d|_|j}||  |¡}n|| }|d u�r|dk�rJ| |¡ |}| |¡ d }|r¼|d8 }q¼|dk �râ|
|  }|j}|j}tƒ }||_d |_|�rR|| d d … }||d< ||_zP|| d …= || _| |¡ || d …= | |¡ |	|d  | }| |¡ W q¼ t�yL   | |¡ | |dd… ¡ | ¡  |d }d|_d|_|}t}d| _Y q¼0 q¼n�|g}||_z8|| _| |¡ | |¡ |	|d  | }| |¡ W q¼ t�yÞ   | |¡ | ¡  |d }d|_d|_|}t}d| _Y q¼0 q¼|dk�r|d }t|dd ƒ}|S |d u �rÄ|dk�s | j�rèt}d| _|}|jdk�r>d }| j�r†|�r^t|d	ƒ�s^||_|| _t | j|| ƒ}| j�ræ|}d }q¼n`|�rÖt|d
ƒ�r |j!}nd}|�rÂt"j# $d||jf ¡ nt"j# $d|j ¡ nt"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�rTd }q¼tƒ }d|_t|d
ƒ�rz|j! |_!|_%t|dƒ�r”|j& |_&|_'||_| |¡ |}q¼| ¡ }| ¡  |d }q¼t(dƒ‚q¼d S )Nr   rt   rˆ   rn   r’   r   FrG   rD   rV   r“   r”   r•   r^   r–   ))ri   rk   rg   ru   rA   rŠ   r‰   rD   r8   r„   r5   ro   rp   rC   rq   r:   r%   r—   r˜   r   r#   rG   rB   ry   r›   rc   rœ   r�   rm   rX   r7   rž   r9   rV   r   r€   r   rZ   r^   r_   rŸ   )r	   r„   rD   r   r…   r†   r¡   r¢   rz   rk   r£   ru   r¤   r¥   r‰   r¦   ro   rp   r§   rr   ry   r¨   r©   rª   r«   r¬   r­   rN   r)   r¯   rV   r
   r
   r   rƒ   é  s6   



















zLRParser.parseopt_notrack)NNFFN)NNFFN)NNFFN)NNFFN)r   r   r   r   r1   r3   rl   r|   r‡   r�   r‚   rƒ   r
   r
   r
   r   rd     s   

  ]
  4rd   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   ©Úrightr   NrŠ   c           	      C   s¤   || _ t|ƒ| _|| _|| _d | _|| _|| _|| _t	| jƒ| _	g | _
| jD ]}|| j
vrL| j
 |¡ qLg | _d | _| jr”d| j d | j¡f | _nd| j  | _d S ©Nú%s -> %sr‹   z%s -> <empty>)r   Útupler£   ÚnumberÚfuncr›   ÚfileÚlineÚprecr#   Úusymsrq   Úlr_itemsÚlr_nextr™   r?   )	r	   r¶   r   r£   Ú
precedencer·   r¸   r¹   rE   r
   r
   r   r     s$    


zProduction.__init__c                 C   s   | j S r   r>   r<   r
   r
   r   r=   =  s    zProduction.__str__c                 C   s   dt | ƒ d S )NzProduction(ú)r>   r<   r
   r
   r   r@   @  s    zProduction.__repr__c                 C   s
   t | jƒS r   )r#   r£   r<   r
   r
   r   rU   C  s    zProduction.__len__c                 C   s   dS ©Nrt   r
   r<   r
   r
   r   Ú__nonzero__F  s    zProduction.__nonzero__c                 C   s
   | j | S r   )r£   ©r	   Úindexr
   r
   r   rO   I  s    zProduction.__getitem__c              	   C   s„   |t | jƒkrd S t| |ƒ}zt|j|d   |_W n ttfyP   g |_Y n0 z|j|d  |_W n ty~   d |_Y n0 |S rÀ   )r#   r£   ÚLRItemÚ	ProdnamesÚlr_afterÚ
IndexErrorÚKeyErrorÚ	lr_before)r	   rN   rª   r
   r
   r   Úlr_itemM  s    
zProduction.lr_itemc                 C   s   | j r|| j  | _d S r   ©r·   r›   ©r	   Úpdictr
   r
   r   Úbind]  s    zProduction.bind)r±   NrŠ   r   )r   r   r   Úreducedr   r=   r@   rU   rÁ   rO   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 r   )r   r#   r·   r›   r¸   r¹   r?   )r	   r?   r   r#   r·   r¸   r¹   r
   r
   r   r   f  s    zMiniProduction.__init__c                 C   s   | j S r   r>   r<   r
   r
   r   r=   o  s    zMiniProduction.__str__c                 C   s
   d| j  S )NzMiniProduction(%s)r>   r<   r
   r
   r   r@   r  s    zMiniProduction.__repr__c                 C   s   | j r|| j  | _d S r   rË   rÌ   r
   r
   r   rÎ   v  s    zMiniProduction.bindN)r   r   r   r   r=   r@   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 |d¡ t| jƒ| _t| jƒ| _|j	| _	d S )NÚ.)
r   rw   r£   r¶   Úlr_indexÚ
lookaheadsÚinsertrµ   r#   r»   )r	   rª   rN   r
   r
   r   r   ”  s    zLRItem.__init__c                 C   s,   | j rd| jd | j ¡f }n
d| j }|S r³   )r£   r   r™   )r	   rE   r
   r
   r   r=   Ÿ  s    
zLRItem.__str__c                 C   s   dt | ƒ d S )NzLRItem(r¿   r>   r<   r
   r
   r   r@   ¦  s    zLRItem.__repr__N)r   r   r   r   r=   r@   r
   r
   r
   r   rÄ   “  s   rÄ   c                 C   s6   t | ƒd }|dkr2| | |v r(| | S |d8 }qd S rs   )r#   )ÚsymbolsÚ	terminalsrR   r
   r
   r   Úrightmost_terminal®  s    
r×   c                   @   s   e Zd ZdS )ÚGrammarErrorNr!   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   sb   d g| _ i | _i | _i | _|D ]}g | j|< q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 r   )r#   rÛ   r<   r
   r
   r   rU   æ  s    zGrammar.__len__c                 C   s
   | j | S r   )rÛ   rÂ   r
   r
   r   rO   é  s    zGrammar.__getitem__c                 C   sL   | j d gksJ dƒ‚|| jv r*td| ƒ‚|dvr:tdƒ‚||f| j|< d S )Nz2Must call set_precedence() before add_production()z,Precedence already specified for terminal %r)Úleftr²   Únonassocz:Associativity must be one of 'left','right', or 'nonassoc')rÛ   rá   rØ   )r	   rå   ÚassocÚlevelr
   r
   r   Úset_precedenceô  s    
zGrammar.set_precedenceNrŠ   r   c              	   C   s´  || j v rtd|||f ƒ‚|dkr6td|||f ƒ‚t |¡sRtd|||f ƒ‚t|ƒD ]š\}}|d dv rÎzLt|ƒ}t|ƒdkr˜td||||f ƒ‚|| j vr¬g | j |< |||< W qZW n tyÌ   Y n0 t |¡sZ|d	krZtd
||||f ƒ‚qZd	|v �r‚|d d	k�rtd||f ƒ‚|d d	k�r<td||f ƒ‚|d }	| j 	|	¡}
|
�sjtd|||	f ƒ‚n| j
 |	¡ |dd …= nt|| j ƒ}	| j 	|	d¡}
d||f }|| jv �rà| j| }td|||f d|j|jf  ƒ‚t| jƒ}|| jv�r g | j|< |D ]J}|| j v �r&| j |  |¡ n&|| jv�r<g | j|< | j|  |¡ �qt||||
|||ƒ}| j |¡ || j|< z| j|  |¡ W n  t�y®   |g| j|< Y n0 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'"rt   zA%s:%d: Literal token %s in rule %r may only be a single characterz%precz!%s:%d: Illegal name %r in rule %rr’   z+%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±   r´   z%s:%d: Duplicate rule %s. zPrevious definition at %s:%d)rÝ   rØ   Ú_is_identifierÚmatchÚ	enumerateÚevalr#   rc   rá   r˜   rã   Úaddr×   rÜ   r¸   r¹   rÛ   rÞ   rq   r°   rÅ   rÈ   )r	   ÚprodnameÚsymsr·   r¸   r¹   rN   rE   ÚcZprecnameZprodprecÚmapÚmZpnumberr©   rª   r
   r
   r   Úadd_production  sv    


ÿ


ÿ
ÿ



zGrammar.add_productionc                 C   sT   |s| j d j}|| jvr&td| ƒ‚tdd|gƒ| j d< | j|  d¡ || _d S )Nrt   zstart symbol %s undefinedr   úS')rÛ   r   rÞ   rØ   r°   rq   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                    sB   | ˆv rd S ˆ  | ¡ ˆj | g ¡D ]}|jD ]}ˆ |ƒ q.q$d S r   )rð   rÅ   r˜   r£   )rE   rª   r'   ©Úmark_reachable_fromÚ	reachabler	   r
   r   rû   t  s    

z5Grammar.find_unreachable.<locals>.mark_reachable_fromr   c                    s   g | ]}|ˆ vr|‘qS r
   r
   rH   )rü   r
   r   rJ   ~  rK   z,Grammar.find_unreachable.<locals>.<listcomp>)râ   rÛ   r£   rÞ   r<   r
   rú   r   Úfind_unreachableq  s    zGrammar.find_unreachablec                 C   sà   i }| j D ]}d||< q
d|d< | jD ]}d||< q&d}| j ¡ D ]N\}}|D ]@}|jD ]}|| sXd} qrqXd}|rN|| sŠd||< d} qBqNqB|s4qšq4g }	| ¡ D ]4\}}
|
s¦|| jvrÐ|| j vrÐ|dkrÐq¦|	 |¡ q¦|	S )NTrn   Fr   )rÝ   rÞ   rÅ   rv   r£   rq   )r	   Z
terminatesr©   rN   Úsome_changeÚplrª   rE   Zp_terminatesÚinfiniterå   r
   r
   r   Úinfinite_cyclesˆ  s8    




zGrammar.infinite_cyclesc                 C   sP   g }| j D ]@}|sq
|jD ].}|| jvr|| jvr|dkr| ||f¡ qq
|S rÚ   )rÛ   r£   rÅ   rÝ   rq   )r	   r)   rª   rE   r
   r
   r   Úundefined_symbolsÈ  s    

zGrammar.undefined_symbolsc                 C   s2   g }| j  ¡ D ]\}}|dkr|s| |¡ q|S rÚ   )rÝ   rv   rq   )r	   Z
unused_tokrE   rP   r
   r
   r   Úunused_terminalsÙ  s
    zGrammar.unused_terminalsc                 C   s8   g }| j  ¡ D ]$\}}|s| j| d }| |¡ q|S ©Nr   )rÞ   rv   rÅ   rq   )r	   Zunused_prodrE   rP   rª   r
   r
   r   Úunused_rulesè  s    zGrammar.unused_rulesc                 C   s@   g }| j D ]0}|| jv s
|| jv s
| || j | d f¡ q
|S r  )rá   rÝ   rã   rq   )r	   ZunusedZtermnamer
   r
   r   Úunused_precedenceù  s
    
zGrammar.unused_precedencec                 C   sZ   g }|D ]B}d}| j | D ]$}|dkr,d}q||vr| |¡ q|rFq qVq| d¡ |S )NFú<empty>T)rß   rq   )r	   Úbetar)   ÚxZx_produces_emptyr   r
   r
   r   Ú_first	  s    
zGrammar._firstc                 C   s¨   | j r| j S | jD ]}|g| j |< qdg| j d< | jD ]}g | j |< q6d}| jD ]H}| j| D ]8}|  |j¡D ]&}|| j | vrn| j |  |¡ d}qnq^qP|sFq¢qF| j S )Nrn   FT)rß   rÝ   rÞ   rÅ   r
  r£   rq   )r	   r©   rN   rþ   rª   r   r
   r
   r   Úcompute_first,  s"    



zGrammar.compute_firstc           
      C   s<  | j r| j S | js|  ¡  | jD ]}g | j |< q |s@| jd j}dg| j |< d}| jdd … D ]Ì}t|jƒD ]¼\}}|| jv rl|  |j|d d … ¡}d}|D ]:}	|	dkrÌ|	| j | vrÌ| j |  	|	¡ d}|	dkržd}qž|sð|t
|jƒd krl| j |j D ]*}	|	| j | v� rü| j |  	|	¡ d}� qüqlq^|sL�q6qL| j S )Nrt   rn   Fr  T)rà   rß   r  rÞ   rÛ   r   rî   r£   r
  rq   r#   )
r	   rø   ÚkÚdidaddrª   rR   ÚBZfstZhasemptyr   r
   r
   r   Úcompute_followQ  s:    

zGrammar.compute_followc              
   C   sÈ   | j D ]¼}|}d}g }|t|ƒkr(d }npt||ƒ}z| j|j|d   |_W n ttfyh   g |_Y n0 z|j|d  |_W n ty–   d |_Y n0 ||_	|s¤q¼| 
|¡ |}|d7 }q||_qd S ©Nr   rt   )rÛ   r#   rÄ   rÅ   r£   rÆ   rÇ   rÈ   rÉ   r½   rq   r¼   )r	   rª   ZlastlrirR   r¼   Zlrir
   r
   r   Úbuild_lritemsŒ  s,    



zGrammar.build_lritems)NrŠ   r   )N)N)r   r   r   r   rU   rO   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 )ÚVersionErrorNr!   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 r   )rh   rj   rf   Ú	lr_methodr<   r
   r
   r   r   ´  s    zLRTable.__init__c                 C   sz   t |tjƒr|}ntd| ƒ tj| }|jtkr:tdƒ‚|j	| _
|j| _g | _|jD ]}| j t|Ž ¡ qV|j| _|jS )Nú	import %sú&yacc table file version is out of date)rL   ÚtypesÚ
ModuleTypeÚexecr   ÚmodulesZ_tabversionÚ__tabversion__r  Z
_lr_actionrh   Z_lr_gotorj   rf   Z_lr_productionsrq   rÐ   Z
_lr_methodr  Z_lr_signature)r	   Úmoduler   rª   r
   r
   r   Ú
read_tableº  s    


zLRTable.read_tablec                 C   sÀ   zdd l }W n ty&   dd l}Y n0 tj |¡s8t‚t|dƒ}| |¡}|tkr\t	dƒ‚| |¡| _
| |¡}| |¡| _| |¡| _| |¡}g | _|D ]}| j t|Ž ¡ qž| ¡  |S )Nr   Úrbr  )ÚcPickleÚImportErrorÚpickleÚosÚpathÚexistsÚopenÚloadr  r  r  rh   rj   rf   rq   rÐ   Úclose)r	   Úfilenamer!  Zin_fZ
tabversionÚ	signaturerg   rª   r
   r
   r   Úread_pickleÎ  s(    



zLRTable.read_picklec                 C   s   | j D ]}| |¡ qd S r   )rf   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   sL   i }| D ]}d||< qg }i }| D ]$}|| dkr"t ||||| ||ƒ q"|S r  )Útraverse)ÚXÚRÚFPÚNr	  rC   ÚFr
   r
   r   Údigraph  s    
r2  c              	   C   sü   |  | ¡ t|ƒ}||| < || ƒ|| < || ƒ}|D ]f}	||	 dkrVt|	||||||ƒ t||  ||	 ƒ|| < | |	g ¡D ]}
|
||  vrx||    |
¡ qxq2||  |krøt||d < ||  ||d < | ¡ }|| krøt||d < ||  ||d < | ¡ }qÊd S )Nr   r’   )rq   r#   r,  Úminr˜   ÚMAXINTr—   )r	  r0  rC   r1  r-  r.  r/  ÚdÚrelÚyÚaÚelementr
   r
   r   r,    s(    
r,  c                   @   s   e Zd ZdS )Ú	LALRErrorNr!   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vrt d| ƒ‚|| _|| _|s*tƒ }|| _i | _i | _|j| _i | _	i | _
d| _d| _d| _g | _g | _g | _| j ¡  | j ¡  | j ¡  |  ¡  d S )N)ZSLRr   zUnsupported method %sr   )r:  Úgrammarr  r   Úlogrh   rj   rÛ   rf   Úlr_goto_cacheÚlr0_cidhashÚ
_add_countZsr_conflictZrr_conflictÚ	conflictsÚsr_conflictsÚrr_conflictsr  r  r  Úlr_parse_table)r	   r<  Úmethodr=  r
   r
   r   r   4  s,    


zLRGeneratedTable.__init__c                 C   sn   |  j d7  _ |d d … }d}|rjd}|D ]<}|jD ]0}t|ddƒ| j krLq4| |j¡ | j |_d}q4q*q|S )Nrt   TFÚ	lr0_addedr   )r@  rÆ   rX   rq   r½   rF  )r	   ÚIÚJr  rS   r	  r
   r
   r   Úlr0_closureY  s    

zLRGeneratedTable.lr0_closurec           	      C   sÐ   | j  t|ƒ|f¡}|r|S | j  |¡}|s:i }|| j |< g }|D ]H}|j}|rB|j|krB| t|ƒ¡}|s|i }||t|ƒ< | |¡ |}qB| d¡}|sº|r²|  |¡}||d< n||d< || j t|ƒ|f< |S )Nrn   )r>  r˜   r&   r½   rÉ   rq   rI  )	r	   rG  r	  ÚgrE   Úgsrª   rN   Ús1r
   r
   r   Úlr0_gotos  s2    




zLRGeneratedTable.lr0_gotoc           	      C   sÊ   |   | jjd jg¡g}d}|D ]}|| jt|ƒ< |d7 }q d}|t|ƒk rÆ|| }|d7 }i }|D ]}|jD ]}d ||< qnqd|D ]@}|  ||¡}|r‚t|ƒ| jv r¦q‚t|ƒ| jt|ƒ< | 	|¡ q‚q@|S r  )
rI  r<  rÛ   r½   r?  r&   r#   r»   rM  rq   )	r	   ÚCrR   rG  ZasymsÚiirE   r	  rJ  r
   r
   r   Ú	lr0_items–  s(    

zLRGeneratedTable.lr0_itemsc                 C   sx   t ƒ }d}| jjdd … D ]@}|jdkr6| |j¡ q|jD ]}||vr< qq<| |j¡ qt|ƒ|krjqtt|ƒ}q
|S r  )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   sj   g }t |ƒD ]X\}}|D ]J}|j|jd k r||j|jd  f}|d | jjv r||vr| |¡ qq|S rÀ   )rî   rÒ   r#   r£   r<  rÞ   rq   )r	   rN  ÚtransZstatenory   rª   r©   r
   r
   r   Úfind_nonterminal_transitionsë  s    z-LRGeneratedTable.find_nonterminal_transitionsc                 C   s”   i }|\}}g }|   || |¡}|D ]B}	|	j|	jd k r$|	j|	jd  }
|
| jjv r$|
|vr$| |
¡ q$|dkr�|| jjd jd kr�| d¡ |S )Nrt   r   rn   )rM  rÒ   r#   r£   r<  rÝ   rq   rÛ   )r	   rN  rS  rQ  Zdr_setry   r0  ÚtermsrJ  rª   r8  r
   r
   r   Údr_relationÿ  s    
zLRGeneratedTable.dr_relationc                 C   sr   g }|\}}|   || |¡}| j t|ƒd¡}|D ]:}	|	j|	jd k r2|	j|	jd  }
|
|v r2| ||
f¡ q2|S )Nr’   rt   )rM  r?  r˜   r&   rÒ   r#   r£   rq   )r	   rN  rS  Úemptyr6  ry   r0  rJ  rS   rª   r8  r
   r
   r   Úreads_relation	  s    zLRGeneratedTable.reads_relationc                 C   s²  i }i }i }|D ]}d||< q|D �]„\}}	g }
g }|| D �],}|j |	krNq<|j}|}||jd k rö|d }|j| }||f|v rÒ|d }||jk rÄ|j| | jjv rªqÒ|j| |vrºqÒ|d }qŒ| ||f¡ |  || |¡}| j 	t
|ƒd¡}qX|| D ]j}|j |j k�rqþ|j|jk�r"qþd}||jk �rZ|j| |j|d  k�rNqþ|d }�q&|
 ||f¡ qþq<|D ]*}||v�r†g ||< ||  ||	f¡ �qp|
|||	f< q"||fS )Nrt   r’   r   )r   rÒ   r#   r£   r<  rÝ   rq   rM  r?  r˜   r&   )r	   rN  rS  rQ  ZlookdictZincludedictZdtransr©   ry   r0  ZlookbZincludesrª   rÒ   rS   ÚlirJ  r'   rR   r
   r
   r   Úcompute_lookback_includesC	  sX    





z*LRGeneratedTable.compute_lookback_includesc                    s0   ‡ ‡‡fdd„}‡ ‡‡fdd„}t |||ƒ}|S )Nc                    s   ˆ  ˆ | ˆ¡S r   )rV  ©r	  ©rN  rQ  r	   r
   r   Ú<lambda>”	  rK   z4LRGeneratedTable.compute_read_sets.<locals>.<lambda>c                    s   ˆ  ˆ | ˆ¡S r   )rX  r[  r\  r
   r   r]  •	  rK   ©r2  )r	   rN  ÚntransrQ  r/  r.  r1  r
   r\  r   Úcompute_read_sets“	  s    z"LRGeneratedTable.compute_read_setsc                    s(   ‡fdd„}‡ fdd„}t |||ƒ}|S )Nc                    s   ˆ |  S r   r
   r[  )Úreadsetsr
   r   r]  ª	  rK   z6LRGeneratedTable.compute_follow_sets.<locals>.<lambda>c                    s   ˆ   | g ¡S r   )r˜   r[  )Úinclsetsr
   r   r]  «	  rK   r^  )r	   r_  ra  rb  r/  r.  r1  r
   )rb  ra  r   Úcompute_follow_sets©	  s    z$LRGeneratedTable.compute_follow_setsc           	      C   sl   |  ¡ D ]^\}}|D ]P\}}||jvr0g |j|< | |g ¡}|D ]"}||j| vr@|j|  |¡ q@qqd S r   )rv   rÓ   r˜   rq   )	r	   Z	lookbacksZ	followsetrS  Zlbry   rª   r   r8  r
   r
   r   Úadd_lookaheads»	  s    

zLRGeneratedTable.add_lookaheadsc                 C   sP   |   ¡ }|  |¡}|  |||¡}|  |||¡\}}|  |||¡}|  ||¡ d S r   )rR  rT  r`  rZ  rc  rd  )r	   rN  rQ  rS  ra  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 }| d| j¡ |  ¡ }| jdkrP|  	|¡ d}|D �]¦}	g }
i }i }i }| d¡ | d|¡ | d¡ |	D ]}| d|j
|¡ q’| d¡ |	D �]ì}|j|jd k�r|jdkrìd|d	< ||d	< �q¤| jdk�r|j| }n| j j|j }|D �]ö}|
 ||d
|j
|f f¡ | |¡}|d u�rä|dk�r*| |d¡\}}||j
 j\}}||k �s’||k�ræ|dk�ræ|j
 ||< |||< |�sÐ|�sÐ| d|¡ | j ||df¡ ||j
  jd7  _nB||k�r|dk�rd ||< n$|�sâ| d|¡ | j ||df¡ n¸|dk �rÖ||  }||j
 }|j|jk�rž|j
 ||< |||< || }}||j
  jd7  _||j
  jd8  _n
|| }}| j |||f¡ | d||| j
|| ¡ ntd| ƒ‚n(|j
 ||< |||< ||j
  jd7  _�qq¶|j}|j|d  }|| j jv r¶|  |	|¡}| j t|ƒd¡}|dkr¶|
 ||d| f¡ | |¡}|d u�r”|dk�r¢||k�r’td| ƒ‚nð|dk �r†| |d¡\}}||| j
 j\}}||k�sî||k�r<|dk�r<||| j
  jd8  _|||< |||< |�s„| d|¡ | j ||df¡ nH||k�rZ|dk�rZd ||< n*|�s’|�s’| d|¡ | j ||df¡ ntd| ƒ‚q¶|||< |||< q¶i }|
D ]>\}}}||v �r®||| u �r®| d||¡ d|||f< �q®| d¡ d}|
D ]P\}}}||v �r ||| u�r ||f|v�r | d||¡ d}d|||f< �q |�rb| d¡ i } |	D ]*}!|!jD ]}"|"| j jv �rtd | |"< �qt�qj| D ]D}#|  |	|#¡}| j t|ƒd¡}|dk�rš|||#< | d|#|¡ �qš|||< |||< |||< |d7 }qXd S )NzParsing method: %sr   r   rŠ   zstate %dz    (%d) %srt   r÷   rn   z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 shiftÚshiftz=  ! reduce/reduce conflict for %s resolved using rule %d (%s)zUnknown conflict in state %dr’   zshift and go to state %dz Shift/shift conflict in state %dr²   z    %-15s %sz  ! %-15s [ %s ]z"    %-30s shift and go to state %d) r<  rÛ   rá   rj   rh   r=  r   r  rP  re  r¶   r#   rÒ   r   rÓ   rà   rq   r˜   rº   rB  rÏ   r¹   rC  r:  r£   rÝ   rM  r?  r&   r   r»   rÞ   )$r	   rÛ   rá   rk   ri   r=  ZactionprN  ÚstrG  ZactlistZ	st_actionZ
st_actionpZst_gotorª   Zlaheadsr8  r'   ZsprecZslevelZrprecZrlevelZoldpÚppZchosenpZrejectprR   rJ  rS   Z	_actprintrõ   Znot_usedZnkeysrO  rE   rN   r
   r
   r   rD  å	  s   

















ÿ












zLRGeneratedTable.lr_parse_tablerŠ   c                 C   sœ  t |tjƒrtdƒ‚| d¡d }tj ||¡d }�z8t|dƒ}| 	dtj 
|¡t| j|f ¡ d}|�r`i }| j ¡ D ]T\}	}
|
 ¡ D ]B\}}| |¡}|s°g g f}|||< |d  |	¡ |d  |¡ qŠqz| 	d	¡ | ¡ D ]f\}}| 	d
| ¡ |d D ]}| 	d| ¡ �q | 	d¡ |d D ]}| 	d| ¡ �q(| 	d¡ qâ| 	d¡ | 	d¡ nF| 	d¡ | j ¡ D ]&\}}| 	d|d |d |f ¡ �qt| 	d¡ |�r¨i }| j ¡ D ]Z\}	}
|
 ¡ D ]F\}}| |¡}|�sòg g f}|||< |d  |	¡ |d  |¡ �qÊ�qº| 	d¡ | ¡ D ]h\}}| 	d
| ¡ |d D ]}| 	d| ¡ �qF| 	d¡ |d D ]}| 	d| ¡ �qn| 	d¡ �q(| 	d¡ | 	d¡ nF| 	d¡ | j ¡ D ]&\}}| 	d|d |d |f ¡ �q¼| 	d¡ | 	d¡ | jD ]Z}|j�r:| 	d|j|j|j|jtj 
|j¡|jf ¡ n| 	dt|ƒ|j|jf ¡ �qþ| 	d¡ | ¡  W n( t�y– } z‚ W Y d }~n
d }~0 0 d S )Nz"Won't overwrite existing tabmodulerÑ   r’   z.pyÚwzu
# %s
# This file is automatically generated. Do not edit.
_tabversion = %r

_lr_method = %r

_lr_signature = %r
    rt   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]
)rL   r  r  ÚIOErrorÚsplitr"  r#  r™   r%  r   Úbasenamer  r  rh   rv   r˜   rq   rj   rf   r·   r?   r   r#   r¸   r¹   r'  )r	   Ú	tabmoduleÚ	outputdirr)  Zbasemodulenamer(  r   Zsmallerrv   rE   Úndr   rP   rR   r  rª   Úer
   r
   r   Úwrite_table¦
  sŽ    
ø





 




	
 


ÿ
 
zLRGeneratedTable.write_tablec                 C   s  zdd l }W n ty&   dd l}Y n0 t|dƒ�Ê}| t|t¡ | | j|t¡ | ||t¡ | | j|t¡ | | j	|t¡ g }| j
D ]T}|jrÀ| |j|j|j|jtj |j¡|jf¡ qŠ| t|ƒ|j|jd d d f¡ qŠ| ||t¡ W d   ƒ n1 �s0    Y  d S )Nr   Úwb)r  r   r!  r%  Údumpr  Úpickle_protocolr  rh   rj   rf   r·   rq   r?   r   r#   r"  r#  rm  r¸   r¹   )r	   r(  r)  r!  ÚoutfZoutprª   r
   r
   r   Úpickle_table   s     
, zLRGeneratedTable.pickle_table)r   N)rŠ   rŠ   )rŠ   )r   r   r   r   rI  rM  rP  rR  rT  rV  rX  rZ  r`  rc  rd  re  rD  rr  rw  r
   r
   r
   r   r;  3  s"   
%#8+P B
zr;  c                 C   s0   t  | ¡}|j ¡ }|j|jkr,| |j¡ |S r   )r   Ú	_getframeÚ	f_globalsÚcopyÚf_localsÚupdate)Zlevelsr   Zldictr
   r
   r   Úget_caller_module_dictC  s
    

r}  c              
   C   sü   g }|   ¡ }d }|}|D ]Þ}|d7 }| ¡ }|s2qzˆ|d dkrf|sTtd||f ƒ‚|}	|dd … }
n@|d }	|	}|dd … }
|d }|dkr¦|dkr¦td||f ƒ‚| |||	|
f¡ W q tyÎ   ‚ Y q tyô   td	||| ¡ f ƒ‚Y q0 q|S )
Nrt   r   ú|z%s:%d: Misplaced '|'é   ú:z::=z!%s:%d: Syntax error. Expected ':'z%s:%d: Syntax error in rule %r)Ú
splitlinesrl  rc   rq   Ú	ExceptionÚstrip)Údocr¸   r¹   r<  ZpstringsZlastpZdlineZpsrª   rñ   rò   Zassignr
   r
   r   Úparse_grammarO  s6    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S )!ÚParserReflectNc                 C   sL   || _ d | _d | _d | _tƒ | _g | _d| _|d u rBtt	j
ƒ| _n|| _d S )NF)rÍ   rø   Ú
error_funcÚtokensrâ   r  r<  r   r   r   r€   r=  )r	   rÍ   r=  r
   r
   r   r   y  s    zParserReflect.__init__c                 C   s,   |   ¡  |  ¡  |  ¡  |  ¡  |  ¡  d S r   )Ú	get_startÚget_error_funcÚ
get_tokensÚget_precedenceÚget_pfunctionsr<   r
   r
   r   Úget_allˆ  s
    zParserReflect.get_allc                 C   s6   |   ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  | jS r   )Ú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˜   g }zr| j r| | j ¡ | jr:| d dd„ | jD ƒ¡¡ | jrR| d | j¡¡ | jD ]}|d rX| |d ¡ qXW n ttfyŒ   Y n0 d |¡S )NrŠ   c                 S   s   g | ]}d   |¡‘qS )rŠ   )r™   )rI   rª   r
   r
   r   rJ      rK   z+ParserReflect.signature.<locals>.<listcomp>r‹   r   )rø   rq   rº   r™   rˆ  ÚpfuncsÚ	TypeErrorÚ
ValueError)r	   Úpartsr   r
   r
   r   r)  š  s    
zParserReflect.signaturec              	   C   s°   t  d¡}| jD ]š}zt |¡\}}W n ty<   Y qY n0 i }t|ƒD ]^\}}|d7 }| |¡}|rJ| d¡}| 	|¡}	|	sŠ|||< qJt 
|¡}
| j d|
|||	¡ qJqd S )Nz\s*def\s+(p_[a-zA-Z_0-9]*)\(rt   z;%s:%d: Function %s redefined. Previously defined on line %d)ÚreÚcompiler  ÚinspectÚgetsourcelinesrk  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  d¡| _d S )Nrø   )rÍ   r˜   rø   r<   r
   r
   r   r‰  Î  s    zParserReflect.get_startc                 C   s&   | j d ur"t| j tƒs"| j d¡ d S )Nz'start' must be a string)rø   rL   Ústring_typesr=  r   r<   r
   r
   r   r�  Ò  s    
zParserReflect.validate_startc                 C   s   | j  d¡| _d S )NÚp_error)rÍ   r˜   r‡  r<   r
   r
   r   rŠ  Ø  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 d¡ d| _d S | j jj}| j jj	}t
 | j ¡}| j |¡ | j jj| }|dkrœ| j d||¡ d| _d S )Nr   rt   z2'p_error' defined, but is not a function or methodTz$%s:%d: p_error() requires 1 argument)r‡  rL   r  ÚFunctionTypeÚ
MethodTyper=  r   Ú__code__Úco_firstlinenoÚco_filenamerœ  Ú	getmoduler  rð   Úco_argcount)r	   ÚismethodZelineZefiler  Zargcountr
   r
   r   r�  Ü  s     

z!ParserReflect.validate_error_funcc                 C   sn   | j  d¡}|s&| j d¡ d| _d S t|ttfƒsJ| j d¡ d| _d S |sd| j d¡ d| _d S || _d S )Nrˆ  zNo token list is definedTztokens must be a list or tupleztokens is empty)rÍ   r˜   r=  r   rL   rw   rµ   rˆ  )r	   rˆ  r
   r
   r   r‹  ò  s    zParserReflect.get_tokensc                 C   sV   d| j v r | j d¡ d| _d S tƒ }| j D ]$}||v rF| j d|¡ | |¡ q,d S )Nr   z.Illegal token name 'error'. Is a reserved wordTzToken %r multiply defined)rˆ  r=  r   râ   r   rð   )r	   rÖ   rN   r
   r
   r   r‘    s    

zParserReflect.validate_tokensc                 C   s   | j  d¡| _d S )Nr¾   )rÍ   r˜   rº   r<   r
   r
   r   rŒ    s    zParserReflect.get_precedencec                 C   s  g }| j �rt| j ttfƒs2| j d¡ d| _d S t| j ƒD ]È\}}t|ttfƒsj| j d¡ d| _ d S t|ƒdk r�| j d|¡ d| _ d S |d }t|tƒsº| j d¡ d| _ d S |dd … D ]<}t|tƒsî| j d	¡ d| _  d S | 	|||d f¡ qÆq<|| _
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 stringrt   z precedence items must be strings)rº   rL   rw   rµ   r=  r   rî   r#   r¢  rq   Úpreclist)r	   r¬  ré   rª   rè   rå   r
   r
   r   r’    s6    

z!ParserReflect.validate_precedencec                 C   s†   g }| j  ¡ D ]\\}}| d¡r|dkr*qt|tjtjfƒrt|d|jj	ƒ}t
 |¡}| ||||jf¡ q|jdd„ d� || _d S )NÚp_r£  r§  c                 S   s    | d t | d ƒ| d | d fS )Nr   rt   r  r   r>   )Z
p_functionr
   r
   r   r]  D  s
    
üz.ParserReflect.get_pfunctions.<locals>.<lambda>)Úkey)rÍ   rv   Ú
startswithrL   r  r¤  r¥  rX   r¦  r§  rœ  r©  rq   Ú__doc__Úsortr–  )r	   Zp_functionsr   Úitemr¹   r  r
   r
   r   r�  7  s    
zParserReflect.get_pfunctionsc                 C   sN  g }t | jƒdkr(| j d¡ d| _d S | jD �]\}}}}t |¡}| j| }t|tj	ƒrbd}nd}|j
j|krŽ| j d|||j¡ d| _q.|j
j|k r¶| j d|||j¡ d| _q.|jsÒ| j d|||j¡ q.z(t|||ƒ}	|	D ]}
| ||
f¡ qäW n< t�y6 } z"| j t|ƒ¡ d| _W Y d }~n
d }~0 0 | j |¡ q.| j ¡ D ]ò\}}| d	¡�r|t|tjtj	fƒ�r|�qP| d
¡�rŒ�qP| d	¡�r°|dk�r°| j d|¡ t|tjƒ�rÌ|j
jdk�sêt|tj	ƒ�rP|jj
jdk�rP|j�rPz8|j d¡}|d dk�r(| j d|j
j|j
j|¡ W n t�y>   Y n0 �qP|| _d S )Nr   z+no rules of the form p_rulename are definedTr  rt   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_r£  z%r not defined as a functionr‹   r€  z9%s:%d: Possible grammar rule %r defined without p_ prefix)r#   r–  r=  r   rœ  rŸ  rÍ   rL   r  r¥  r¦  rª  r   r°  r   r…  rq   rc   r?   r  rð   rv   r¯  r¤  Ú__func__rl  r¨  r§  rÇ   r<  )r	   r<  r¹   r  r   r„  r¸   r·   ZreqargsZparsed_grJ  rq  rN   rP   r
   r
   r   r“  L  sf    

ÿ 
ÿÿÿ
z!ParserReflect.validate_pfunctions)N)r   r   r   r   rŽ  r•  r)  r”  r‰  r�  rŠ  r�  r‹  r‘  rŒ  r’  r�  r“  r
   r
   r
   r   r†  x  s   

r†  c           <         s>	  |d u rt }|rd}|d u r&ttjƒ}ˆ rf‡ fdd„tˆ ƒD ƒ}t|ƒ}d|vrntj|d  j|d< ntdƒ}|	d u rât	|t
jƒrŠ|j}nLd|vrœ|d }n:| d¡}d |d d… ¡}td	| ƒ ttj| dd
ƒ}tj |¡}	| d¡}|�rt	|tƒ�rd|v�r|d | }|d u�r&||d< t||d�}| ¡  |j�rJtdƒ‚| ¡ }z�tƒ }|�rl| |¡}n
| |¡}|�s†||k�ràz&| |j¡ t||j ƒ}|j!a!|W W S  t"�yÞ } z| #d|¡ W Y d }~n
d }~0 0 W nF t$�y } z| #t|ƒ¡ W Y d }~nd }~0  t%�y(   Y n0 |
d u �rž|�r˜ztt&tj |	|¡dƒƒ}
W n> t'�y” } z$| #d||f ¡ t(ƒ }
W Y d }~n
d }~0 0 nt(ƒ }
|
 )dt*¡ d}| +¡ �rÀtdƒ‚|j �sÒ| #d¡ t,|j-ƒ}|j.D ]R\}}}z| /|||¡ W n2 t0�y0 } z| #d|¡ W Y d }~n
d }~0 0 �qâ|j1D ]d\}}|\} }!}"}#z| 2|"|#|| |!¡ W n6 t0�yœ } z| d|¡ d}W Y d }~n
d }~0 0 �q<z&|d u �r¼| 3|j4¡ n
| 3|¡ W n8 t0�y  } z| t|ƒ¡ d}W Y d }~n
d }~0 0 |�rtdƒ‚| 5¡ }$|$D ]"\}%}&| d|&j6|&j7|%¡ d}�q| 8¡ }'|'�r�|
 )d
¡ |
 )d¡ |
 )d
¡ |'D ]}| #d|¡ |
 )d|¡ �qp|�rØ|
 )d
¡ |
 )d¡ |
 )d
¡ t9|j:ƒD ]\}(})|
 )d|(|)¡ �q¾| ;¡ }*|*D ]}&| #d|&j6|&j7|&j<¡ �qät=|'ƒdk�r| #d¡ t=|'ƒdk�r8| #d t=|'ƒ¡ t=|*ƒdk�rP| #d!¡ t=|*ƒdk�rn| #d"t=|*ƒ¡ |�r>|
 )d
¡ |
 )d#¡ |
 )d
¡ t>|j?ƒ}+|+ @¡  |+D ]*}|
 )d$|d% d&d„ |j?| D ƒ¡¡ �q¨|
 )d
¡ |
 )d'¡ |
 )d
¡ t>|jAƒ},|, @¡  |,D ]*}-|
 )d$|-d% d(d„ |jA|- D ƒ¡¡ �q|
 )d
¡ |�rˆ| B¡ }.|.D ]}/| #d)|/¡ �qP| C¡ }0|0D ]}1| d*|1¡ d}�qp| D¡ }2|2D ]\}}| d+||¡ d}�q”|�rÀtdƒ‚|�rÒ| Ed,| ¡ tF|| |
ƒ}|�rPt=|jGƒ}3|3dk�r| #d-¡ n|3dk�r| #d.|3¡ t=|jHƒ}4|4dk�r:| #d/¡ n|4dk�rP| #d0|4¡ |�rz|jG�sf|jH�rz|
 #d
¡ |
 #d1¡ |
 #d
¡ |jGD ]\}5}6}7|
 #d2|6|5|7¡ �qŠtIƒ }8|jHD ]x\}5}9}:|5tJ|9ƒtJ|:ƒf|8v �rÚ�q´|
 #d3|5|9¡ |
 #d4|:|5¡ | #d3|5|9¡ | #d4|:|5¡ |8 K|5tJ|9ƒtJ|:ƒf¡ �q´g };|jHD ]@\}5}9}:|:jL�s8|:|;v�r8|
 #d5|:¡ | #d5|:¡ |; M|:¡ �q8|�rÌz| N||	|¡ W n8 t'�yÊ } z| #d6||f ¡ W Y d }~n
d }~0 0 |�	rz| O||¡ W n8 t'�	y } z| #d6||f ¡ W Y d }~n
d }~0 0 | |j¡ t||j ƒ}|j!a!|S )7Nr   c                    s   g | ]}|t ˆ |ƒf‘qS r
   )rX   )rI   r  ©r  r
   r   rJ   ¡  rK   zyacc.<locals>.<listcomp>Ú__file__r   r  rÑ   r’   r  rŠ   Ú__package__rø   )r=  zUnable to build parserz.There was a problem loading the table file: %rrj  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 usedrt   z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 : %sr‹   c                 S   s   g | ]}t |ƒ‘qS r
   r>   rH   r
   r
   r   rJ   G  rK   z*Nonterminals, with rules where they appearc                 S   s   g | ]}t |ƒ‘qS r
   r>   rH   r
   r
   r   rJ   O  rK   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. %s)PÚ
tab_moduler   r   r€   ÚdirÚdictr  rµ  r}  rL   r  r  rl  r™   r  rX   r"  r#  Údirnamer˜   r?   r†  rŽ  r   r    r)  r  r*  r  r+  rÍ   rd   r‡  r‡   r‚  r   r  r   r%  rk  r   r   Ú__version__r•  rÙ   rˆ  r¬  rê   rØ   r<  rö   rù   rø   r  r¸   r¹   r  rî   rÛ   r  r   r#   rw   rÝ   r±  rÞ   rý   r  r  r   r;  rB  rC  râ   r&   rð   rÏ   rq   rr  rw  )<rE  r   r  rn  rø   Zcheck_recursionÚoptimizeZwrite_tablesZ	debugfilero  ZdebuglogZerrorlogZ
picklefileZ_itemsrÍ   Úsrcfiler™  ÚpkgnameÚpkgZpinfor)  ÚlrZread_signaturer8   rq  Úerrorsr<  rå   rè   ré   ÚfuncnameZgramr¸   r¹   rñ   rò   r  rr   r£   r  rN   rª   r  rU  ZnontermsZnontermZunreachableÚur   ÚinfZunused_precZnum_srZnum_rrry   r¯   Ú
resolutionÚalready_reportedÚruleZrejectedZwarned_neverr
   r´  r   ÚyaccŽ  s„   






&"



&












(



(









((rÈ  )<rš  r  r   Úos.pathr"  rœ  Úbase64r-   r»  r  Z	yaccdebugZ
debug_filer·  Z
default_lrr�   r}   r$   ru  Úversion_infoÚ
basestringr¢  r?   Úmaxsizer4  Úobjectr   r   r‚  r    r*   r,   r0   r4   r2   r/   r1   r3   r5   r9   r:   rA   rd   r›  rì   r°   rÐ   rÄ   r×   rØ   rÙ   r  r  r2  r,  r:  r;  r}  r…  r†  rÈ  r
   r
   r
   r   Ú<module>>   s”   
4       m
H.   rT
      )  
þ