o
    'z†ak ã                   @   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 r:e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
   ú6usr/lib/python3.10/site-packages/pycparser/ply/yacc.pyÚ__init__n   ó   
zPlyLogger.__init__c                 O   s   | j  || d ¡ d S )NÚ
©r   Úwrite©r	   ÚmsgÚargsÚkwargsr
   r
   r   Údebugq   ó   zPlyLogger.debugc                 O   ó   | j  d||  d ¡ d S )Nz	WARNING: r   r   r   r
   r
   r   Úwarningv   ó   zPlyLogger.warningc                 O   r   )NzERROR: r   r   r   r
   r
   r   Úerrory   r   zPlyLogger.errorN)	Ú__name__Ú
__module__Ú__qualname__r   r   Úinfor   r   Úcriticalr
   r
   r
   r   r   m   s    r   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )Ú
NullLoggerc                 C   ó   | S r   r
   )r	   Únamer
   r
   r   Ú__getattribute__€   ó   zNullLogger.__getattribute__c                 O   r"   r   r
   )r	   r   r   r
   r
   r   Ú__call__ƒ   r%   zNullLogger.__call__N)r   r   r   r$   r&   r
   r
   r
   r   r!      ó    r!   c                   @   ó   e Zd ZdS )Ú	YaccErrorN©r   r   r   r
   r
   r
   r   r)   ‡   ó    r)   c                 C   sP   t | ƒ}d|v rt |ƒ}t|ƒtkr|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   r4   c                 C   s>   t | ƒ}d|v rt |ƒ}t|ƒdk r|S dt| ƒjt| ƒf S )Nr   é   z<%s @ 0x%x>)r,   r-   r/   r   r0   )r1   r2   r
   r
   r   Úformat_stack_entry•   s   r6   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   ó   t  t¡ tƒ S r   )ÚwarningsÚwarnÚ_warnmsgÚ_errokr
   r
   r
   r   Úerrok¯   ó   
r<   c                   C   r7   r   )r8   r9   r:   Ú_restartr
   r
   r
   r   Úrestart³   r=   r?   c                   C   r7   r   )r8   r9   r:   Ú_tokenr
   r
   r
   r   Útoken·   r=   rA   c                 C   s<   |j a|ja|ja| |ƒ}zbbbW |S  ty   Y |S w r   )r<   r;   rA   r@   r?   r>   Ú	NameError)Ú	errorfuncrA   Úparserr1   r
   r
   r   Úcall_errorfunc¼   s   þþrE   c                   @   r    )Ú
YaccSymbolc                 C   ó   | j S r   ©r/   ©r	   r
   r
   r   Ú__str__Ú   ó   zYaccSymbol.__str__c                 C   s   t | ƒS r   ©ÚstrrI   r
   r
   r   Ú__repr__Ý   s   zYaccSymbol.__repr__N)r   r   r   rJ   rN   r
   r
   r
   r   rF   Ù   r'   rF   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ÚlexerrD   )r	   ÚsrQ   r
   r
   r   r   ê   ó   
zYaccProduction.__init__c                 C   s>   t |tƒrdd„ | j| D ƒS |dkr| j| jS | j| jS )Nc                 S   ó   g | ]}|j ‘qS r
   ©Úvalue©Ú.0rS   r
   r
   r   Ú
<listcomp>ò   ó    z.YaccProduction.__getitem__.<locals>.<listcomp>r   )Ú
isinstancerP   rW   rQ   ©r	   Únr
   r
   r   Ú__getitem__ð   s
   
zYaccProduction.__getitem__c                 C   ó   || j | _d S r   )rP   rW   )r	   r^   Úvr
   r
   r   Ú__setitem__ø   ó   zYaccProduction.__setitem__c                 C   s   dd„ | j ||… D ƒS )Nc                 S   rU   r
   rV   rX   r
   r
   r   rZ   ü   r[   z/YaccProduction.__getslice__.<locals>.<listcomp>)rP   )r	   ÚiÚjr
   r
   r   Ú__getslice__û   r   zYaccProduction.__getslice__c                 C   ó
   t | jƒS r   )r-   rP   rI   r
   r
   r   Ú__len__þ   r   zYaccProduction.__len__c                 C   ó   t | j| ddƒS )NÚlinenor   ©ÚgetattrrP   r]   r
   r
   r   rj     ó   zYaccProduction.linenoc                 C   r`   r   )rP   rj   )r	   r^   rj   r
   r
   r   Ú
set_lineno  rc   zYaccProduction.set_linenoc                 C   ó,   t | j| ddƒ}t | j| d|ƒ}||fS )Nrj   r   Ú	endlinenork   )r	   r^   Ú	startlineZendliner
   r
   r   Úlinespan  ó   zYaccProduction.linespanc                 C   ri   )NÚlexposr   rk   r]   r
   r
   r   rt     rm   zYaccProduction.lexposc                 C   ro   )Nrt   r   Ú	endlexposrk   )r	   r^   ÚstartposÚendposr
   r
   r   Úlexspan  rs   zYaccProduction.lexspanc                 C   s   t ‚r   )ÚSyntaxErrorrI   r
   r
   r   r     r%   zYaccProduction.errorr   )r   r   r   r   r_   rb   rf   rh   rj   rn   rr   rt   rx   r   r
   r
   r
   r   rO   é   s    
rO   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ÚgotorC   Úset_defaulted_statesÚerrorok)r	   ZlrtabZerrorfr
   r
   r   r     s   
zLRParser.__init__c                 C   s
   d| _ d S r{   )rƒ   rI   r
   r
   r   r<   &  r   zLRParser.errokc                 C   s@   | j d d …= | jd d …= tƒ }d|_| j |¡ | j  d¡ d S )Nú$endr   )Ú
statestackÚsymstackrF   r/   Úappend)r	   Úsymr
   r
   r   r?   )  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_statesr   ÚitemsÚlistÚvaluesr-   )r	   ÚstateÚactionsZrulesr
   r
   r   r‚   9  s   €ýzLRParser.set_defaulted_statesc                 C   s
   i | _ d S r   )r‹   rI   r
   r
   r   Údisable_defaulted_states@  r   z!LRParser.disable_defaulted_statesNFc                 C   sV   |st rt|tƒrttjƒ}|  |||||¡S |r"|  |||||¡S |  |||||¡S r   )	Ú	yaccdevelr\   Úintr   ÚsysÚstderrÚ
parsedebugÚparseoptÚparseopt_notrack)r	   ÚinputrR   r   ÚtrackingÚ	tokenfuncr
   r
   r   ÚparseC  s   

zLRParser.parsec                  C   s®  d }g }| j }| j}	| j}
| j}td ƒ}d}| d¡ |s&ddlm} |j}||_| |_	|d ur5| 
|¡ |d u r=|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 }qc|dk r|
|  }|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ƒ|_||_ z2|| d …= || _!| "|¡ || d …= | dt#|d ƒ¡ | |¡ |	|d  | }| |¡ W n- t$y¿   | |¡ | %|dd… ¡ | ¡  |d }d|_d|_|}t&}d| _'Y nw qc|rÌ|j|_|j|_|g}||_ z&|| _!| "|¡ | dt#|d ƒ¡ | |¡ |	|d  | }| |¡ W n$ t$y   | |¡ | ¡  |d }d|_d|_|}t&}d| _'Y nw qc|dkr<|d }t|dd ƒ}| dt#|ƒ¡ | d¡ |S |d u rS| (ddd dd„ |D ƒdd … ¡t|ƒf  ¡ ¡ |dksd| j'rÇt&}d| _'|}|jdkrsd }| j)r—|rƒt*|d ƒsƒ||_|| _!t+| j)|| ƒ}| j'r–|}d }qcn2|r¿t*|d!ƒr¤|j}nd}|rµt,j- .d"||jf ¡ nt,j- .d#|j ¡ n
t,j- .d$¡ d S t&}t|ƒdkrâ|jdkrâd }d }d}|d d …= qc|jdkrêd S |jdkr;|d }|jdkr|rt|d!|jƒ|_t|d%|jƒ|_d }qctƒ }d|_t*|d!ƒr#|j |_|_t*|d%ƒr0|j |_|_||_| |¡ |}n| ¡ }|rJ|j|_|j|_| ¡  |d }qct/d&ƒ‚)'Nr   zPLY: PARSE DEBUG STARTrŠ   ©Úlexr„   TÚ zState  : %sz#Defaulted state %s: Reduce using %dzStack  : %sz%s . %sú c                 S   rU   r
   rH   ©rY   Zxxr
   r
   r   rZ   ±  r[   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
   )r6   rW   )rY   Z_vr
   r
   r   rZ   Ô  ó    ú]éÿÿÿÿrp   ru   zResult : %sr   FrW   zDone   : Returning %szPLY: PARSE DEBUG ENDzError  : %sc                 S   rU   r
   rH   r¡   r
   r
   r   rZ   B  r[   rR   rj   ú(yacc: Syntax error at line %d, token=%s
úyacc: Syntax error, token=%sú yacc: Parse error in input. EOF
rt   úyacc: internal parser error!!!
)0r   r   r}   r‹   rO   r   rŸ   rž   rR   rD   r™   rA   r…   r†   rQ   r‡   rF   r/   r   ÚpopÚgetÚjoinrM   Úlstripr#   r-   rW   rj   rt   rl   rp   ru   rP   r   Úcallabler4   ry   ÚextendÚerror_countrƒ   r   rC   ÚhasattrrE   r”   r•   r   ÚRuntimeError© r	   r™   rR   r   rš   r›   Ú	lookaheadÚlookaheadstackr   r   Úprodr‹   ÚpsliceÚ
errorcountrž   Ú	get_tokenr…   r†   Úerrtokenrˆ   r   ÚltypeÚtÚpÚpnameÚplenÚtargÚt1r^   r3   Útokrj   r
   r
   r   r–   \  sŒ  




*ÿ





$þÿ



ö



÷


*ÿú

zLRParser.parsedebugc                  C   s\  d }g }| j }| j}	| j}
| j}td ƒ}d}|s!ddlm} |j}||_| |_|d ur0| 	|¡ |d u r8|j
}n|}|| _
g }|| _g }|| _||_d }| d¡ tƒ }d|_| |¡ d}	 ||vr‚|sw|sk|ƒ }n| ¡ }|swtƒ }d|_|j}||  |¡}n|| }|d ur­|dkr¤| |¡ |}| |¡ d }|r£|d8 }q^|dk rœ|
|  }|j}|j}tƒ }||_d |_|rI|| d d … }||d< |rï|d }|j|_|j|_|d }t|d|jƒ|_t|d|jƒ|_||_z(|| d …= || _| |¡ || d …= | |¡ |	|d  | }| |¡ W n- tyG   | |¡ | |dd… ¡ | ¡  |d }d	|_d	|_|}t }d
| _!Y nw q^|rT|j|_|j|_|g}||_z|| _| |¡ | |¡ |	|d  | }| |¡ W n$ tyš   | |¡ | ¡  |d }d	|_d	|_|}t }d
| _!Y nw 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^n2|rt#|dƒrû|j}nd}|rt%j& 'd||jf ¡ nt%j& 'd|j ¡ n
t%j& 'd¡ d S t }t|ƒdkr9|jdkr9d }d }d}|d d …= q^|jdkrAd S |jd	kr’|d }|jd	krg|rdt|d|jƒ|_t|d|jƒ|_d }q^tƒ }d	|_t#|dƒrz|j |_|_t#|dƒr‡|j |_|_||_| |¡ |}n| ¡ }|r¡|j|_|j|_| ¡  |d }q^t(dƒ‚)Nr   rŠ   r   r„   Tr¦   rp   ru   r   FrW   rR   rj   r§   r¨   r©   rt   rª   ))r   r   r}   r‹   rO   rŸ   rž   rR   rD   r™   rA   r…   r†   rQ   r‡   rF   r/   r«   r¬   r#   r-   rW   rj   rt   rl   rp   ru   rP   r   r¯   ry   r°   r±   rƒ   rC   r²   rE   r”   r•   r   r³   r´   r
   r
   r   r—   ·  s^  











ö



÷

ú

zLRParser.parseoptc                 C   sÆ  d }g }| j }| j}	| j}
| j}td ƒ}d}|s!ddlm} |j}||_| |_|d ur0| 	|¡ |d u r8|j
}n|}|| _
g }|| _g }|| _||_d }| d¡ tƒ }d|_| |¡ d}	 ||vr‚|sw|sk|ƒ }n| ¡ }|swtƒ }d|_|j}||  |¡}n|| }|d ur€|dkr¤| |¡ |}| |¡ d }|r£|d8 }q^|dk ro|
|  }|j}|j}tƒ }||_d |_|r'|| d d … }||d< ||_z(|| d …= || _| |¡ || d …= | |¡ |	|d  | }| |¡ W n- ty%   | |¡ | |dd… ¡ | ¡  |d }d|_d|_|}t}d| _Y nw q^|g}||_z|| _| |¡ | |¡ |	|d  | }| |¡ W n$ tym   | |¡ | ¡  |d }d|_d|_|}t}d| _Y nw q^|dkr€|d }t|d	d ƒ}|S |d u r_|dksŽ| jrñt}d| _|}|jdkrd }| jrÁ|r­t|d
ƒs­||_|| _t | j|| ƒ}| jrÀ|}d }q^n2|rét|dƒrÎ|j!}nd}|rßt"j# $d||jf ¡ nt"j# $d|j ¡ n
t"j# $d¡ d S t}t|ƒdkr|jdkrd }d }d}|d d …= q^|jdkrd S |jdkrR|d }|jdkr'd }q^tƒ }d|_t|dƒr:|j! |_!|_%t|dƒrG|j& |_&|_'||_| |¡ |}n| ¡ }| ¡  |d }q^t(dƒ‚)Nr   rŠ   r   r„   Tr¦   r   FrW   rR   rj   r§   r¨   r©   rt   rª   ))r   r   r}   r‹   rO   rŸ   rž   rR   rD   r™   rA   r…   r†   rQ   r‡   rF   r/   r«   r¬   r#   r-   rW   rP   r   r¯   ry   r°   r±   rƒ   rl   rC   r²   rE   rj   r”   r•   r   rp   rt   ru   r³   )r	   r™   rR   r   rš   r›   rµ   r¶   r   r   r·   r‹   r¸   r¹   rž   rº   r…   r†   r»   rˆ   r   r¼   r½   r¾   r¿   rÀ   rÁ   r^   r3   rÃ   rj   r
   r
   r   r˜   é  s>  











ö



÷

ú

zLRParser.parseopt_notrack)NNFFN)r   r   r   r   r<   r?   r‚   r‘   rœ   r–   r—   r˜   r
   r
   r
   r   rz     s    

  
]  4rz   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r3| j
 |¡ q&g | _d | _| jrKd| j d | j¡f | _d S d| j  | _d S ©Nú%s -> %sr    z%s -> <empty>)r#   Útupler·   ÚnumberÚfuncr¯   ÚfileÚlineÚprecr-   Úusymsr‡   Úlr_itemsÚlr_nextr­   rM   )	r	   rÊ   r#   r·   Ú
precedencerË   rÌ   rÍ   rS   r
   r
   r   r     s&   


€zProduction.__init__c                 C   rG   r   rL   rI   r
   r
   r   rJ   =  rK   zProduction.__str__c                 C   ó   dt | ƒ d S )NzProduction(ú)rL   rI   r
   r
   r   rN   @  rc   zProduction.__repr__c                 C   rg   r   )r-   r·   rI   r
   r
   r   rh   C  r   zProduction.__len__c                 C   s   dS ©NrŠ   r
   rI   r
   r
   r   Ú__nonzero__F  r%   zProduction.__nonzero__c                 C   ó
   | j | S r   )r·   ©r	   Úindexr
   r
   r   r_   I  r   zProduction.__getitem__c              	   C   s„   |t | jƒkr	d S t| |ƒ}zt|j|d   |_W n ttfy(   g |_Y nw z|j|d  |_W |S  tyA   d |_Y |S w rÕ   )r-   r·   ÚLRItemÚ	ProdnamesÚlr_afterÚ
IndexErrorÚKeyErrorÚ	lr_before)r	   r^   r¾   r
   r
   r   Úlr_itemM  s   

ÿþþzProduction.lr_itemc                 C   ó   | j r|| j  | _d S d S r   ©rË   r¯   ©r	   Úpdictr
   r
   r   Úbind]  ó   ÿzProduction.bind)rÅ   NrŸ   r   )r   r   r   Úreducedr   rJ   rN   rh   rÖ   r_   rà   rå   r
   r
   r
   r   rÄ     s    
rÄ   c                   @   ó,   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Í   rM   )r	   rM   r#   r-   rË   rÌ   rÍ   r
   r
   r   r   f  s   
zMiniProduction.__init__c                 C   rG   r   rL   rI   r
   r
   r   rJ   o  rK   zMiniProduction.__str__c                 C   s
   d| j  S )NzMiniProduction(%s)rL   rI   r
   r
   r   rN   r  r   zMiniProduction.__repr__c                 C   rá   r   râ   rã   r
   r
   r   rå   v  ræ   zMiniProduction.bindN)r   r   r   r   rJ   rN   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#   r   r·   rÊ   Úlr_indexÚ
lookaheadsÚinsertrÉ   r-   rÏ   )r	   r¾   r^   r
   r
   r   r   ”  s   zLRItem.__init__c                 C   s.   | j rd| jd | j ¡f }|S d| j }|S rÇ   )r·   r#   r­   )r	   rS   r
   r
   r   rJ   Ÿ  s
   
ÿzLRItem.__str__c                 C   rÓ   )NzLRItem(rÔ   rL   rI   r
   r
   r   rN   ¦  rc   zLRItem.__repr__N)r   r   r   r   rJ   rN   r
   r
   r
   r   rÚ   “  s    rÚ   c                 C   s<   t | ƒd }|dkr| | |v r| | S |d8 }|dks
d S r‰   )r-   )ÚsymbolsÚ	terminalsrd   r
   r
   r   Úrightmost_terminal®  s   ýrð   c                   @   r(   )ÚGrammarErrorNr*   r
   r
   r
   r   rñ   ¾  r+   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   rg   r   )r-   rô   rI   r
   r
   r   rh   æ  r   zGrammar.__len__c                 C   r×   r   )rô   rØ   r
   r
   r   r_   é  r   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rtd|||f ƒ‚t |¡s)td|||f ƒ‚t|ƒD ]K\}}|d dv rez$t|ƒ}t|ƒdkrLtd||||f ƒ‚|| j vrVg | j |< |||< W q- tyd   Y nw t |¡sx|d	krxtd
||||f ƒ‚q-d	|v rº|d d	kr‹td||f ƒ‚|d d	kr™td||f ƒ‚|d }	| j 	|	¡}
|
s®td|||	f ƒ‚| 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 v r
| j |  |¡ qù|| jvrg | j|< | j|  |¡ qùt||||
|||ƒ}| j |¡ || j|< z| j|  |¡ W d S  tyO   |g| j|< Y d S w )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'"rŠ   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-   ry   rú   r¬   rü   Úaddrð   rõ   rÌ   rÍ   rô   r÷   r‡   rÄ   rÛ   rÞ   )r	   ÚprodnameÚsymsrË   rÌ   rÍ   r^   rS   ÚcZprecnameZprodprecÚmapÚmZpnumberr½   r¾   r
   r
   r   Úadd_production  s|   


ÿ

ÿ€ÿ

ÿ




ÿ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 )NrŠ   zstart symbol %s undefinedr   úS')rô   r#   r÷   rñ   rÄ   r‡   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·   )rS   r¾   r1   ©Ú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
   rX   )r  r
   r   rZ   ~  s    z,Grammar.find_unreachable.<locals>.<listcomp>)rû   rô   r·   r÷   rI   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 ]'\}}|D ] }|jD ]
}|| s7d} nq-d}|rH|| sFd||< d} nq(q"|sMnqg }	| ¡ D ]\}}
|
sn|| jvri|| j vri|dkriqT|	 |¡ qT|	S )NTr„   Fr   )rö   r÷   rÛ   rŒ   r·   r‡   )r	   Z
terminatesr½   r^   Úsome_changeÚplr¾   rS   Zp_terminatesÚinfiniterþ   r
   r
   r   Úinfinite_cyclesˆ  sD   




ü	ú€å
€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ö   r‡   )r	   r3   r¾   rS   r
   r
   r   Úundefined_symbolsÈ  s   

€þzGrammar.undefined_symbolsc                 C   s2   g }| j  ¡ D ]\}}|dkr|s| |¡ q|S ró   )rö   rŒ   r‡   )r	   Z
unused_tokrS   ra   r
   r
   r   Úunused_terminalsÙ  s   
€zGrammar.unused_terminalsc                 C   s8   g }| j  ¡ D ]\}}|s| j| d }| |¡ q|S ©Nr   )r÷   rŒ   rÛ   r‡   )r	   Zunused_prodrS   ra   r¾   r
   r
   r   Úunused_rulesè  s   
€zGrammar.unused_rulesc                 C   s@   g }| j D ]}|| jv s|| jv s| || j | d f¡ q|S r  )rú   rö   rü   r‡   )r	   ZunusedZtermnamer
   r
   r   Úunused_precedenceù  s   
€zGrammar.unused_precedencec                 C   sZ   g }|D ]!}d}| j | D ]}|dkrd}q||vr| |¡ q|r#q |S | d¡ |S )NFú<empty>T)rø   r‡   )r	   Úbetar3   Ú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 |< q	 d}| jD ]$}| j| D ]}|  |j¡D ]}|| j | vrK| j |  |¡ d}q8q0q)|sT	 | j S q$)Nr„   TF)rø   rö   r÷   rÛ   r#  r·   r‡   )r	   r½   r^   r  r¾   r   r
   r
   r   Úcompute_first,  s,   


€ýÿõzGrammar.compute_firstc           
      C   s8  | j r| j S | js|  ¡  | jD ]}g | j |< q|s | jd j}dg| j |< 	 d}| jdd … D ]d}t|jƒD ]\\}}|| jv r“|  |j|d d … ¡}d}|D ]}	|	dkrg|	| j | vrg| j |  	|	¡ d}|	dkrmd}qP|sy|t
|jƒd kr“| j |j D ]}	|	| j | vr’| j |  	|	¡ d}qq7q0|s›	 | j S q')NrŠ   r„   TFr   )rù   rø   r$  r÷   rô   r#   r  r·   r#  r‡   r-   )
r	   r  ÚkÚdidaddr¾   rd   ÚBZfstZhasemptyr   r
   r
   r   Úcompute_followQ  sD   

€€ðézGrammar.compute_followc              
   C   sÊ   | j D ]_}|}d}g }	 |t|ƒkrd }n8t||ƒ}z| j|j|d   |_W n ttfy5   g |_Y nw z
|j|d  |_W n tyL   d |_Y nw ||_	|sSn| 
|¡ |}|d7 }q||_qd S ©Nr   TrŠ   )rô   r-   rÚ   rÛ   r·   rÜ   rÝ   rÞ   rß   rÑ   r‡   rÐ   )r	   r¾   Zlastlrird   rÐ   Zlrir
   r
   r   Úbuild_lritemsŒ  s6   


ÿ
ÿ
ìçzGrammar.build_lritems)NrŸ   r   r   )r   r   r   r   rh   r_   r  r  r  r  r  r  r  r  r  r#  r$  r(  r*  r
   r
   r
   r   rò   Á  s"    $

T@#
%;rò   c                   @   r(   )ÚVersionErrorNr*   r
   r
   r
   r   r+  °  r+   r+  c                   @   rè   )
ÚLRTablec                 C   s   d | _ d | _d | _d | _d S r   )r~   r€   r|   Ú	lr_methodrI   r
   r
   r   r   ´  rT   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|Ž ¡ q+|j| _|jS )Nú	import %sú&yacc table file version is out of date)r\   ÚtypesÚ
ModuleTypeÚexecr”   ÚmodulesZ_tabversionÚ__tabversion__r+  Z
_lr_actionr~   Z_lr_gotor€   r|   Z_lr_productionsr‡   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w tj |¡st‚t|dƒ}| |¡}|tkr.t	dƒ‚| |¡| _
| |¡}| |¡| _| |¡| _| |¡}g | _|D ]
}| j t|Ž ¡ qO| ¡  |S )Nr   Úrbr/  )ÚcPickleÚImportErrorÚpickleÚosÚpathÚexistsÚopenÚloadr4  r+  r-  r~   r€   r|   r‡   ré   Úclose)r	   Úfilenamer:  Zin_fZ
tabversionÚ	signaturer}   r¾   r
   r
   r   Úread_pickleÎ  s*   ÿ



zLRTable.read_picklec                 C   s   | j D ]}| |¡ qd S r   )r|   rå   )r	   rä   r¾   r
   r
   r   Úbind_callablesê  s   
ÿzLRTable.bind_callablesN)r   r   r   r   r6  rC  rD  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"  rQ   ÚFr
   r
   r   Údigraph  s   
€rK  c              	   C   s
  |  | ¡ t|ƒ}||| < || ƒ|| < || ƒ}|D ]3}	||	 dkr+t|	||||||ƒ t||  ||	 ƒ|| < | |	g ¡D ]}
|
||  vrK||    |
¡ q<q||  |krt||d < ||  ||d < | ¡ }|| krƒt||d < ||  ||d < | ¡ }|| ksid S d S d S )Nr   r¦   )r‡   r-   rE  Úminr¬   ÚMAXINTr«   )r"  rI  rQ   rJ  rF  rG  rH  ÚdÚrelÚyÚaÚelementr
   r
   r   rE    s2   
€þýürE  c                   @   r(   )Ú	LALRErrorNr*   r
   r
   r
   r   rS  )  r+   rS  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   )rS  Úgrammarr-  r!   Úlogr~   r€   rô   r|   Úlr_goto_cacheÚlr0_cidhashÚ
_add_countZsr_conflictZrr_conflictZ	conflictsÚsr_conflictsÚrr_conflictsr*  r$  r(  Úlr_parse_table)r	   rU  ÚmethodrV  r
   r
   r   r   4  s,   


zLRGeneratedTable.__init__c                 C   sp   |  j d7  _ |d d … }d}|r6d}|D ]}|jD ]}t|ddƒ| j kr&q| |j¡ | j |_d}qq|s|S )NrŠ   TFÚ	lr0_addedr   )rY  rÜ   rl   r‡   rÑ   r^  )r	   ÚIÚJr&  re   r"  r
   r
   r   Úlr0_closureY  s   
úýzLRGeneratedTable.lr0_closurec           	      C   sÐ   | j  t|ƒ|f¡}|r|S | j  |¡}|si }|| j |< g }|D ]$}|j}|rE|j|krE| t|ƒ¡}|s>i }||t|ƒ< | |¡ |}q!| d¡}|s]|rY|  |¡}||d< n||d< || j t|ƒ|f< |S )Nr„   )rW  r¬   r0   rÑ   rß   r‡   ra  )	r	   r_  r"  ÚgrS   Zgsr¾   r^   Ús1r
   r
   r   Úlr0_gotos  s4   

€


zLRGeneratedTable.lr0_gotoc           	      C   sÔ   |   | jjd jg¡g}d}|D ]}|| jt|ƒ< |d7 }qd}|t|ƒk rh|| }|d7 }i }|D ]}|jD ]}d ||< q7q2|D ] }|  ||¡}|rRt|ƒ| jv rSqAt|ƒ| jt|ƒ< | 	|¡ qA|t|ƒk s&|S )Nr   rŠ   )
ra  rU  rô   rÑ   rX  r0   r-   rÏ   rd  r‡   )	r	   ÚCrd   r_  ZasymsÚiirS   r"  rb  r
   r
   r   Ú	lr0_items–  s,   


ÿñzLRGeneratedTable.lr0_itemsc                 C   sz   t ƒ }d}	 | jjdd … D ] }|jdkr| |j¡ q|jD ]}||vr' nq| |j¡ qt|ƒ|kr8	 |S t|ƒ}qr)  )rû   rU  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 ],\}}|D ]%}|j|jd k r1||j|jd  f}|d | jjv r1||vr1| |¡ qq|S rÕ   )r  rë   r-   r·   rU  r÷   r‡   )r	   re  ÚtransZstatenor   r¾   r½   r
   r
   r   Úfind_nonterminal_transitionsë  s   
€ûz-LRGeneratedTable.find_nonterminal_transitionsc                 C   s”   i }|\}}g }|   || |¡}|D ]!}	|	j|	jd k r3|	j|	jd  }
|
| jjv r3|
|vr3| |
¡ q|dkrH|| jjd jd krH| d¡ |S )NrŠ   r   r„   )rd  rë   r-   r·   rU  rö   r‡   rô   )r	   re  rj  rh  Zdr_setr   rI  Útermsrb  r¾   rQ  r
   r
   r   Údr_relationÿ  s   
€
zLRGeneratedTable.dr_relationc                 C   sr   g }|\}}|   || |¡}| j t|ƒd¡}|D ]}	|	j|	jd k r6|	j|	jd  }
|
|v r6| ||
f¡ q|S )Nr¦   rŠ   )rd  rX  r¬   r0   rë   r-   r·   r‡   )r	   re  rj  ÚemptyrO  r   rI  rb  re   r¾   rQ  r
   r
   r   Úreads_relation	  s   €zLRGeneratedTable.reads_relationc                 C   s¼  i }i }i }|D ]}d||< q|D ]È\}}	g }
g }|| D ]Ÿ}|j |	kr%q|j}|}||jd k rƒ|d }|j| }||f|v rk|d }||jk rd|j| | jjv rSn|j| |vr[n|d }||jk sI| ||f¡ |  || |¡}| j 	t
|ƒd¡}||jd k s1|| D ]4}|j |j krq‡|j|jkr—q‡d}||jk r´|j| |j|d  kr«n|d }||jk sž|
 ||f¡ q‡q|D ]}||vrÉg ||< ||  ||	f¡ q¿|
|||	f< q||fS )NrŠ   r¦   r   )r#   rë   r-   r·   rU  rö   r‡   rd  rX  r¬   r0   )r	   re  rj  rh  ZlookdictZincludedictZdtransr½   r   rI  ZlookbÚincludesr¾   rë   re   Zlirb  r1   rd   r
   r
   r   Úcompute_lookback_includesC	  sb   




ûê

ý€ôz*LRGeneratedTable.compute_lookback_includesc                    s0   ‡ ‡‡fdd„}‡ ‡‡fdd„}t |||ƒ}|S )Nc                    ó   ˆ  ˆ | ˆ¡S r   )rm  ©r"  ©re  rh  r	   r
   r   Ú<lambda>”	  ó    z4LRGeneratedTable.compute_read_sets.<locals>.<lambda>c                    rr  r   )ro  rs  rt  r
   r   ru  •	  rv  ©rK  )r	   re  Úntransrh  rH  rG  rJ  r
   rt  r   Úcompute_read_sets“	  s   z"LRGeneratedTable.compute_read_setsc                    s(   ‡fdd„}‡ fdd„}t |||ƒ}|S )Nc                    s   ˆ |  S r   r
   rs  )Úreadsetsr
   r   ru  ª	  s    z6LRGeneratedTable.compute_follow_sets.<locals>.<lambda>c                    s   ˆ   | g ¡S r   )r¬   rs  )Úinclsetsr
   r   ru  «	  s    rw  )r	   rx  rz  r{  rH  rG  rJ  r
   )r{  rz  r   Úcompute_follow_sets©	  s   z$LRGeneratedTable.compute_follow_setsc           	      C   sl   |  ¡ D ]/\}}|D ](\}}||jvrg |j|< | |g ¡}|D ]}||j| vr1|j|  |¡ q q
qd S r   )rŒ   rì   r¬   r‡   )	r	   Z	lookbacksZ	followsetrj  Zlbr   r¾   r   rQ  r
   r
   r   Úadd_lookaheads»	  s   

€þüþzLRGeneratedTable.add_lookaheadsc                 C   sP   |   ¡ }|  |¡}|  |||¡}|  |||¡\}}|  |||¡}|  ||¡ d S r   )ri  rk  ry  rq  r|  r}  )r	   re  rh  rj  rz  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r(|  	|¡ d}|D ]È}	g }
i }i }i }| d¡ | d|¡ | d¡ |	D ]
}| d|j
|¡ qI| d¡ |	D ]ë}|j|jd kr}|jdkrud|d	< ||d	< q[| jdkr€|j| }n| j j|j }|D ]ò}|
 ||d
|j
|f f¡ | |¡}|d urg|dkr| |d¡\}}||j
 j\}}||k sÃ||krë|dkrë|j
 ||< |||< |sà|sà| d|¡ | j ||df¡ ||j
  jd7  _q‰||krø|dkrød ||< q‰|s
| d|¡ | j ||df¡ q‰|dk ra||  }||j
 }|j|jkrE|j
 ||< |||< ||}}||j
  jd7  _||j
  jd8  _n||}}| j |||f¡ | d||| j
|| ¡ q‰td| ƒ‚|j
 ||< |||< ||j
  jd7  _q‰q[|j}|j|d  }|| j jv rG|  |	|¡}| j t|ƒd¡}|dkrG|
 ||d| f¡ | |¡}|d ur?|dkrÇ||krÆtd| ƒ‚q[|dk r9| |d¡\}}||| j
 j\}}||ksí||kr|dkr||| j
  jd8  _|||< |||< |s| d|¡ | j ||df¡ q[||kr#|dkr#d ||< q[|s8|s8| d|¡ | j ||df¡ q[td| ƒ‚|||< |||< q[i }|
D ]\}}}||v rj||| u rj| d||¡ d|||f< qL| d¡ d}|
D ](\}}}||v rœ||| urœ||f|vrœ| d||¡ d}d|||f< qu|r¦| d¡ i } |	D ]}!|!jD ]}"|"| j jv r¼d | |"< q¯qª| D ]"}#|  |	|#¡}| j t|ƒd¡}|dkrã|||#< | d|#|¡ qÂ|||< |||< |||< |d7 }q,d S )NzParsing method: %sr   r   rŸ   zstate %dz    (%d) %srŠ   r  r„   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) rU  rô   rú   r€   r~   rV  r   r-  rg  r~  rÊ   r-   rë   r#   rì   rù   r‡   r¬   rÎ   rZ  rç   rÍ   r[  rS  r·   rö   rd  rX  r0   r   rÏ   r÷   )$r	   rô   rú   r   r   rV  Zactionpre  Ústr_  ZactlistZ	st_actionZ
st_actionpZst_gotor¾   ZlaheadsrQ  r1   ZsprecZslevelZrprecZrlevelZoldpÚppZchosenpZrejectprd   rb  re   Z	_actprintr  Znot_usedZnkeysrf  rS   r^   r
   r
   r   r\  å	  s  













€




ÿÌ6




ÿ
€
€€
€

€

€þ
€
 ÛzLRGeneratedTable.lr_parse_tablerŸ   c                 C   s‚  t |tjƒr
tdƒ‚| d¡d }tj ||¡d }z—t|dƒ}| 	dtj 
|¡t| j|f ¡ d}|r­i }| j ¡ D ]*\}	}
|
 ¡ D ]!\}}| |¡}|sWg g f}|||< |d  |	¡ |d  |¡ qDq<| 	d	¡ | ¡ D ]1\}}| 	d
| ¡ |d D ]	}| 	d| ¡ q| 	d¡ |d D ]	}| 	d| ¡ q’| 	d¡ qp| 	d¡ | 	d¡ n"| 	d¡ | j ¡ D ]\}}| 	d|d |d |f ¡ q·| 	d¡ |rMi }| j ¡ D ]*\}	}
|
 ¡ D ]!\}}| |¡}|sôg g f}|||< |d  |	¡ |d  |¡ qáqÙ| 	d¡ | ¡ D ]4\}}| 	d
| ¡ |d D ]
}| 	d| ¡ q| 	d¡ |d D ]
}| 	d| ¡ q0| 	d¡ q| 	d¡ | 	d¡ n#| 	d¡ | j ¡ D ]\}}| 	d|d |d |f ¡ qW| 	d¡ | 	d¡ | jD ].}|jr—| 	d|j|j|j|jtj 
|j¡|jf ¡ qx| 	dt|ƒ|j|jf ¡ qx| 	d¡ | ¡  W d S  tyÀ } z‚ d }~ww )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
    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\   r0  r1  ÚIOErrorÚsplitr;  r<  r­   r>  r   Úbasenamer4  r-  r~   rŒ   r¬   r‡   r€   r|   rË   rM   r#   r-   rÌ   rÍ   r@  )r	   Ú	tabmoduleÚ	outputdirrB  ZbasemodulenamerA  r   ZsmallerrŒ   rS   Zndr#   ra   rd   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w t|dƒf}| t|t¡ | | j|t¡ | ||t¡ | | j|t¡ | | j	|t¡ g }| j
D ]*}|jr`| |j|j|j|jtj |j¡|jf¡ qE| t|ƒ|j|jd d d f¡ qE| ||t¡ W d   ƒ d S 1 s‚w   Y  d S )Nr   Úwb)r8  r9  r:  r>  Údumpr4  Úpickle_protocolr-  r~   r€   r|   rË   r‡   rM   r#   r-   r;  r<  r†  rÌ   rÍ   )r	   rA  rB  r:  ÚoutfZoutpr¾   r
   r
   r   Úpickle_table   s$   ÿ
, "ózLRGeneratedTable.pickle_table)r   N)rŸ   rŸ   ©rŸ   )r   r   r   r   ra  rd  rg  ri  rk  rm  ro  rq  ry  r|  r}  r~  r\  rŠ  r  r
   r
   r
   r   rT  3  s$    
%#8+P 
BzrT  c                 C   s0   t  | ¡}|j ¡ }|j|jkr| |j¡ |S r   )r”   Ú	_getframeÚ	f_globalsÚcopyÚf_localsÚupdate)Úlevelsr   Zldictr
   r
   r   Úget_caller_module_dictC  s
   

r—  c              
   C   sò   g }|   ¡ }d }|}|D ]j}|d7 }| ¡ }|sqzD|d dkr3|s*td||f ƒ‚|}	|dd … }
n |d }	|	}|dd … }
|d }|dkrS|dkrStd||f ƒ‚| |||	|
f¡ W q tye   ‚  tyv   td	||| ¡ f ƒ‚w |S )
NrŠ   r   ú|z%s:%d: Misplaced '|'é   ú:z::=z!%s:%d: Syntax error. Expected ':'z%s:%d: Syntax error in rule %r)Ú
splitlinesr…  ry   r‡   Ú	ExceptionÚstrip)ÚdocrÌ   rÍ   rU  ZpstringsZlastpZdlineZpsr¾   r
  r  Zassignr
   r
   r   Úparse_grammarO  s8   ÿ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   sN   || _ d | _d | _d | _tƒ | _g | _d| _|d u r"tt	j
ƒ| _d S || _d S )NF)rä   r  Ú
error_funcÚtokensrû   r3  rU  r   r   r”   r•   rV  )r	   rä   rV  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_pfunctionsrI   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   rI   r
   r
   r   Úvalidate_all  s   zParserReflect.validate_allc              	   C   s˜   g }z9| j r| | j ¡ | jr| d dd„ | jD ƒ¡¡ | jr)| d | j¡¡ | jD ]}|d r9| |d ¡ q,W n ttfyF   Y nw d |¡S )NrŸ   c                 S   s   g | ]}d   |¡‘qS r  )r­   )rY   r¾   r
   r
   r   rZ      r¤   z+ParserReflect.signature.<locals>.<listcomp>r    r   )r  r‡   rÎ   r­   r¢  ÚpfuncsÚ	TypeErrorÚ
ValueError)r	   Úpartsr   r
   r
   r   rB  š  s"   
€þÿ
zParserReflect.signaturec              	   C   s¬   t  d¡}| jD ]K}z	t |¡\}}W n	 ty   Y qw i }t|ƒD ]/\}}|d7 }| |¡}|rR| d¡}| 	|¡}	|	sC|||< q#t 
|¡}
| j d|
|||	¡ q#qd S )Nz\s*def\s+(p_[a-zA-Z_0-9]*)\(rŠ   z;%s:%d: Function %s redefined. Previously defined on line %d)ÚreÚcompiler3  ÚinspectÚgetsourcelinesr„  r  r  Úgroupr¬   ÚgetsourcefilerV  r   )r	   Zfrer5  ÚlinesZlinenZ	counthashrÍ   r  r#   ÚprevrA  r
   r
   r   r®  µ  s.   

ÿ




ÿ€öùzParserReflect.validate_modulesc                 C   ó   | j  d¡| _d S )Nr  )rä   r¬   r  rI   r
   r
   r   r£  Î  rm   zParserReflect.get_startc                 C   s.   | j d urt| j tƒs| j d¡ d S d S d S )Nz'start' must be a string)r  r\   Ústring_typesrV  r   rI   r
   r
   r   r©  Ò  s
   
þzParserReflect.validate_startc                 C   r¼  )NÚp_error)rä   r¬   r¡  rI   r
   r
   r   r¤  Ø  rm   zParserReflect.get_error_funcc                 C   s¨   | j rPt| 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rR| j d||¡ d| _d S d S d S )Nr   rŠ   z2'p_error' defined, but is not a function or methodTz$%s:%d: p_error() requires 1 argument)r¡  r\   r0  ÚFunctionTypeÚ
MethodTyperV  r   Ú__code__Úco_firstlinenoÚco_filenamer¶  Ú	getmoduler3  r	  Úco_argcount)r	   ÚismethodZelineZefiler5  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ƒs%| j d¡ d| _d S |s2| 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¬   rV  r   r\   r   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 r#| j d|¡ | |¡ qd S )Nr   z.Illegal token name 'error'. Is a reserved wordTzToken %r multiply defined)r¢  rV  r   rû   r   r	  )r	   rï   r^   r
   r
   r   r«    s   

ýzParserReflect.validate_tokensc                 C   r¼  )NrÒ   )rä   r¬   rÎ   rI   r
   r
   r   r¦    rm   zParserReflect.get_precedencec                 C   s  g }| j r‚t| j ttfƒs| j d¡ d| _d S t| j ƒD ]d\}}t|ttfƒs4| j d¡ d| _ d S t|ƒdk rG| j d|¡ d| _ d S |d }t|tƒs\| j d¡ d| _ d S |dd … D ]}t|tƒsv| j d	¡ d| _  d S | 	|||d f¡ qbq|| _
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 stringrŠ   z precedence items must be strings)rÎ   r\   r   rÉ   rV  r   r  r-   r½  r‡   Úpreclist)r	   rÇ  r  r¾   r  rþ   r
   r
   r   r¬    s8   

û
z!ParserReflect.validate_precedencec                 C   s†   g }| j  ¡ D ].\}}| d¡r|dkrqt|tjtjfƒr5t|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   rŠ   r™  r   rL   )Z
p_functionr
   r
   r   ru  D  s
   
üz.ParserReflect.get_pfunctions.<locals>.<lambda>)Úkey)rä   rŒ   Ú
startswithr\   r0  r¿  rÀ  rl   rÁ  rÂ  r¶  rÄ  r‡   Ú__doc__Úsortr°  )r	   Zp_functionsr#   ÚitemrÍ   r5  r
   r
   r   r§  7  s   
€
zParserReflect.get_pfunctionsc                 C   s6  g }t | jƒdkr| j d¡ d| _d S | jD ]‰\}}}}t |¡}| j| }t|tj	ƒr0d}nd}|j
j|krF| j d|||j¡ d| _q|j
j|k rZ| j d|||j¡ d| _q|jsh| j d|||j¡ qzt|||ƒ}	|	D ]	}
| ||
f¡ qqW n ty™ } z| j t|ƒ¡ d| _W Y d }~nd }~ww | j |¡ q| j ¡ D ]o\}}| d	¡r¹t|tjtj	fƒr¹q¦| d
¡r¿q¦| d	¡rÏ|dkrÏ| j d|¡ t|tjƒrÛ|j
jdksêt|tj	ƒr|jj
jdkr|jrz|j d¡}|d dkr	| j d|j
j|j
j|¡ W q¦ ty   Y q¦w q¦|| _d S )Nr   z+no rules of the form p_rulename are definedTr™  rŠ   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°  rV  r   r¶  r¹  rä   r\   r0  rÀ  rÁ  rÅ  r   rË  r   rŸ  r‡   ry   rM   r3  r	  rŒ   rÊ  r¿  Ú__func__r…  rÃ  rÂ  rÝ   rU  )r	   rU  rÍ   r5  r#   rž  rÌ   rË   ZreqargsZparsed_grb  r‰  r^   ra   r
   r
   r   r­  L  sp   

ÿÿ€þ

ÿÿ€ÿ€
z!ParserReflect.validate_pfunctionsr   )r   r   r   r   r¨  r¯  rB  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ƒ}ˆ r3‡ fdd„tˆ ƒD ƒ}t|ƒ}d|vr2tj|d  j|d< ntdƒ}|	d u rqt	|t
jƒrE|j}n&d|vrN|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r tdƒ‚| ¡ }zDtƒ }|r°| |¡}n| |¡}|s»||krçz| |j¡ t||j ƒ}|j!a!|W W S  t"yæ } z| #d|¡ W Y d }~nd }~ww W n# t$y } z| #t|ƒ¡ W Y d }~nd }~w t%y   Y nw |
d u rE|rBztt&tj |	|¡dƒƒ}
W n" t'yA } z| #d||f ¡ t(ƒ }
W Y d }~nd }~ww t(ƒ }
|
 )dt*¡ d}| +¡ rVtdƒ‚|j s_| #d¡ t,|j-ƒ}|j.D ])\}}}z
| /|||¡ W qg t0y } z| #d|¡ W Y d }~qgd }~ww |j1D ]2\}}|\} }!}"}#z| 2|"|#|| |!¡ W q” t0yÆ } z| d|¡ d}W Y d }~q”d }~ww z|d u rÔ| 3|j4¡ n| 3|¡ W n t0yö } z| t|ƒ¡ d}W Y d }~nd }~ww |rþtdƒ‚| 5¡ }$|$D ]\}%}&| d|&j6|&j7|%¡ d}q| 8¡ }'|'r>|
 )d
¡ |
 )d¡ |
 )d
¡ |'D ]}| #d|¡ |
 )d|¡ q.|rb|
 )d
¡ |
 )d¡ |
 )d
¡ t9|j:ƒD ]\}(})|
 )d|(|)¡ qU| ;¡ }*|*D ]}&| #d|&j6|&j7|&j<¡ qht=|'ƒdkrƒ| #d¡ t=|'ƒdkr’| #d t=|'ƒ¡ t=|*ƒdkrž| #d!¡ t=|*ƒdkr­| #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)|/¡ q| C¡ }0|0D ]}1| d*|1¡ d}q.| D¡ }2|2D ]\}}| d+||¡ d}q@|rVtdƒ‚|r_| Ed,| ¡ tF|| |
ƒ}|ržt=|jGƒ}3|3dkrx| #d-¡ n|3dkrƒ| #d.|3¡ t=|jHƒ}4|4dkr“| #d/¡ n|4dkrž| #d0|4¡ |r3|jGs©|jHr3|
 #d
¡ |
 #d1¡ |
 #d
¡ |jGD ]\}5}6}7|
 #d2|6|5|7¡ q»tIƒ }8|jHD ]<\}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s1|:|;vr1|
 #d5|:¡ | #d5|:¡ |; M|:¡ q|r\z	| N||	|¡ W n t'y[ } z| #d6||f ¡ W Y d }~nd }~ww |r„z| O||¡ W n t'yƒ } z| #d6||f ¡ W Y d }~nd }~ww | |j¡ t||j ƒ}|j!a!|S )7Nr   c                    s   g | ]	}|t ˆ |ƒf‘qS r
   )rl   )rY   r%  ©r5  r
   r   rZ   ¡  s    zyacc.<locals>.<listcomp>Ú__file__r   r™  rê   r¦   r.  rŸ   Ú__package__r  )rV  zUnable to build parserz.There was a problem loading the table file: %rrƒ  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 usedrŠ   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   ó   g | ]}t |ƒ‘qS r
   rL   rX   r
   r
   r   rZ   G  ó    z*Nonterminals, with rules where they appearc                 S   rÒ  r
   rL   rX   r
   r
   r   rZ   O  rÓ  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Údictr3  rÐ  r—  r\   r0  r1  r…  r­   r2  rl   r;  r<  Údirnamer¬   rM   r   r¨  r   r)   rB  r,  rC  r6  rD  rä   rz   r¡  rœ   rœ  r   r+  r9  r>  r„  r!   r   Ú__version__r¯  rò   r¢  rÇ  r  rñ   rU  r  r  r  r  rÌ   rÍ   r  r  rô   r  r#   r-   r   rö   rÌ  r÷   r  r  r  r   rT  rZ  r[  rû   r0   r	  rç   r‡   rŠ  r  )<r]  r   r5  r‡  r  Zcheck_recursionÚoptimizeZwrite_tablesZ	debugfilerˆ  ZdebuglogZerrorlogZ
picklefileZ_itemsrä   Úsrcfiler³  ÚpkgnameÚpkgZpinforB  ÚlrZread_signaturerD   r‰  ÚerrorsrU  rþ   r  r  ÚfuncnameZgramrÌ   rÍ   r
  r  r  rˆ   r·   r  r^   r¾   r  rl  ZnontermsZnontermZunreachableÚur  ÚinfZunused_precZnum_srZnum_rrr   rÃ   Ú
resolutionZalready_reportedZruleZrejectedZwarned_neverr
   rÏ  r   ÚyaccŽ  s¬  
€



€ÿ€€ÿ
€þ


€ÿ€þ

€€þ











(



(










€€ÿ€ÿrã  )<r´  r0  r”   Úos.pathr;  r¶  Úbase64r8   rØ  r4  Z	yaccdebugZ
debug_filerÔ  Z
default_lrr±   r’   r.   r  Úversion_infoZ
basestringr½  rM   ÚmaxsizerM  Úobjectr   r!   rœ  r)   r4   r6   r;   r@   r>   r:   r<   r?   rA   rE   rF   rO   rz   rµ  r  rÄ   ré   rÚ   rð   rñ   rò   r+  r,  rK  rE  rS  rT  r—  rŸ  r   rã  r
   r
   r
   r   Ú<module>   s–   =
4       
mH.   rT
      )  
þ