U
    þÔ…Z ã                   @   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ZdZdZ	dZ
dZdZdZd	Zd
Zd Zejd  dk rle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ƒZ/G d/d0„ d0eƒZ0G d1d2„ d2eƒZ1G d3d4„ d4eƒZ2d5d6„ Z3d7d8„ Z4G d9d:„ d:eƒZ5G d;d<„ d<e2ƒZ6d=d>„ Z7d?d@„ Z8G dAdB„ dBeƒZ9de	deddd	de
ddddfdCdD„Z:dS )Eé    Nz3.11z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
   ú'lib/python3.8/site-packages/ply/yacc.pyÚ__init__m   s    zPlyLogger.__init__c                 O   s   | j  || d ¡ d S )NÚ
©r   Úwrite©r	   ÚmsgÚargsÚkwargsr
   r
   r   Údebugp   s    zPlyLogger.debugc                 O   s   | j  d||  d ¡ d S )Nz	WARNING: r   r   r   r
   r
   r   Úwarningu   s    zPlyLogger.warningc                 O   s   | j  d||  d ¡ d S )NzERROR: r   r   r   r
   r
   r   Úerrorx   s    zPlyLogger.errorN)	Ú__name__Ú
__module__Ú__qualname__r   r   Úinfor   r   Zcriticalr
   r
   r
   r   r   l   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|krt |ƒ}t|ƒtkr4|d t… d }dt| ƒjt| ƒ|f }|S )Nr   z ...z<%s @ 0x%x> (%s))ÚreprÚlenÚresultlimitÚtyper   Úid)ÚrÚrepr_strÚresultr
   r
   r   Úformat_resultŠ   s    r)   c                 C   sB   t | ƒ}d|krt |ƒ}t|ƒdk r(|S dt| ƒjt| ƒf S d S )Nr   é   z<%s @ 0x%x>)r!   r"   r$   r   r%   )r&   r'   r
   r
   r   Úformat_stack_entry”   s    r+   a  PLY: Don't use global functions errok(), token(), and restart() in p_error().
Instead, invoke the methods on the associated parser instance:

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

    parser = yacc.yacc()
c                   C   s   t  t¡ tƒ S r   )ÚwarningsÚwarnÚ_warnmsgÚ_errokr
   r
   r
   r   Úerrok®   s    
r0   c                   C   s   t  t¡ tƒ S r   )r,   r-   r.   Ú_restartr
   r
   r
   r   Úrestart²   s    
r2   c                   C   s   t  t¡ tƒ S r   )r,   r-   r.   Ú_tokenr
   r
   r
   r   Útoken¶   s    
r4   c                 C   s>   |j a|ja|ja| |ƒ}z
bbbW n tk
r8   Y nX |S r   )r0   r/   r4   r3   r2   r1   Ú	NameError)Ú	errorfuncr4   Úparserr&   r
   r
   r   Úcall_errorfunc»   s    
r8   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   r9   Ø   s   r9   c                   @   sn   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S )ÚYaccProductionNc                 C   s   || _ || _d | _d | _d S r   )ÚsliceÚstackÚlexerr7   )r	   ÚsrB   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©Ú.0rD   r
   r
   r   Ú
<listcomp>ñ   s     z.YaccProduction.__getitem__.<locals>.<listcomp>r   )Ú
isinstancerA   rF   rB   ©r	   Únr
   r
   r   Ú__getitem__ï   s
    
zYaccProduction.__getitem__c                 C   s   || j | _d S r   )rA   rF   )r	   rL   Úvr
   r
   r   Ú__setitem__÷   s    zYaccProduction.__setitem__c                 C   s   dd„ | j ||… D ƒS )Nc                 S   s   g | ]
}|j ‘qS r
   rE   rG   r
   r
   r   rI   û   s     z/YaccProduction.__getslice__.<locals>.<listcomp>)rA   )r	   ÚiÚjr
   r
   r   Ú__getslice__ú   s    zYaccProduction.__getslice__c                 C   s
   t | jƒS r   )r"   rA   r;   r
   r
   r   Ú__len__ý   s    zYaccProduction.__len__c                 C   s   t | j| ddƒS )NÚlinenor   ©ÚgetattrrA   rK   r
   r
   r   rT      s    zYaccProduction.linenoc                 C   s   || j | _d S r   )rA   rT   )r	   rL   rT   r
   r
   r   Ú
set_lineno  s    zYaccProduction.set_linenoc                 C   s,   t | j| ddƒ}t | j| d|ƒ}||fS )NrT   r   Ú	endlinenorU   )r	   rL   Ú	startlineZendliner
   r
   r   Úlinespan  s    zYaccProduction.linespanc                 C   s   t | j| ddƒS )NÚlexposr   rU   rK   r
   r
   r   r[     s    zYaccProduction.lexposc                 C   s   || j | _d S r   )rA   r[   )r	   rL   r[   r
   r
   r   Ú
set_lexpos  s    zYaccProduction.set_lexposc                 C   s,   t | j| ddƒ}t | j| d|ƒ}||fS )Nr[   r   Ú	endlexposrU   )r	   rL   Ú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   rM   rO   rR   rS   rT   rW   rZ   r[   r\   r`   r   r
   r
   r
   r   r@   è   s   
r@   c                   @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ 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Úgotor6   Úset_defaulted_statesÚerrorok)r	   ZlrtabZerrorfr
   r
   r   r      s    zLRParser.__init__c                 C   s
   d| _ d S rc   )rk   r;   r
   r
   r   r0   (  s    zLRParser.errokc                 C   s@   | j d d …= | jd d …= tƒ }d|_| j |¡ | j  d¡ d S )Nú$endr   )Ú
statestackÚsymstackr9   r$   Úappend)r	   Úsymr
   r
   r   r2   +  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_statesrg   ÚitemsÚlistÚvaluesr"   )r	   ÚstateÚactionsZrulesr
   r
   r   rj   ;  s
    zLRParser.set_defaulted_statesc                 C   s
   i | _ d S r   )rs   r;   r
   r
   r   Údisable_defaulted_statesB  s    z!LRParser.disable_defaulted_statesNFc                 C   sZ   |st r.t|tƒrttjƒ}|  |||||¡S |rD|  |||||¡S |  |||||¡S d S r   )	Ú	yaccdevelrJ   Úintr   ÚsysÚstderrÚ
parsedebugÚparseoptÚparseopt_notrack)r	   ÚinputrC   r   ÚtrackingÚ	tokenfuncr
   r
   r   ÚparseE  s    

zLRParser.parsec                  C   sÂ  d }g }| j }| j}	| j}
| j}td ƒ}d}| d¡ |sLddlm} |j}||_| |_	|d k	rj| 
|¡ |d krz|j}n|}|| _g }|| _g }|| _||_d }| d¡ tƒ }d|_| |¡ d}| d¡ | d|¡ ||kr(|s|sø|ƒ }n| ¡ }|stƒ }d|_|j}||  |¡}n|| }| d|| ¡ | d	d
d dd„ |D ƒdd … ¡t|ƒf  ¡ ¡ |d k	r„|dkr¾| |¡ |}| d|¡ | |¡ d }|rÆ|d8 }qÆ|dk rH|
|  }|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$k
r†   | |¡ | %|dd… ¡ | ¡  |d }d|_d|_|}t&}d| _'Y qÆX qÆn¼|r¢|j|_|j|_|g}||_ zL|| _!| "|¡ | dt#|d ƒ¡ | |¡ |	|d  | }| |¡ W qÆ t$k
rD   | |¡ | ¡  |d }d|_d|_|}t&}d| _'Y qÆX qÆ|dkr„|d }t|dd ƒ}| dt#|ƒ¡ | d¡ |S |d kr´| (dd
d dd„ |D ƒdd … ¡t|ƒf  ¡ ¡ |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 ƒrT|j}nd}|rvt,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 ƒrT|j |_|_t*|d$ƒrn|j |_|_||_| |¡ |}qÆ| ¡ }|r¢|j|_|j|_| ¡  |d }qÆt/d%ƒ‚qÆd S )&Nr   zPLY: PARSE DEBUG STARTrr   ©Úlexrl   Ú zState  : %sz#Defaulted state %s: Reduce using %dzStack  : %sz%s . %sú c                 S   s   g | ]
}|j ‘qS r
   r:   ©rH   Zxxr
   r
   r   rI   ³  s     z'LRParser.parsedebug.<locals>.<listcomp>z Action : Shift and goto state %sz3Action : Reduce rule [%s] with %s and goto state %dú[ú,c                 S   s   g | ]}t |jƒ‘qS r
   )r+   rF   )rH   Z_vr
   r
   r   rI   Ö  s     ú]éÿÿÿÿrX   r]   zResult : %sr   FrF   zDone   : Returning %szPLY: PARSE DEBUG ENDzError  : %sc                 S   s   g | ]
}|j ‘qS r
   r:   r‰   r
   r
   r   rI   D  s     rC   rT   ú(yacc: Syntax error at line %d, token=%s
úyacc: Syntax error, token=%sú yacc: Parse error in input. EOF
r[   úyacc: internal parser error!!!
)0rg   ri   re   rs   r@   r   r‡   r†   rC   r7   r   r4   rm   rn   rB   ro   r9   r$   r   ÚpopÚgetÚjoinr>   Úlstripr   r"   rF   rT   r[   rV   rX   r]   rA   rw   Úcallabler)   ra   ÚextendÚerror_countrk   r   r6   Úhasattrr8   r|   r}   r   ÚRuntimeError© r	   r   rC   r   r‚   rƒ   Ú	lookaheadÚlookaheadstackrx   ri   Úprodrs   ÚpsliceÚ
errorcountr†   Ú	get_tokenrm   rn   Úerrtokenrp   rw   ÚltypeÚtÚpÚpnameÚplenÚtargÚt1rL   r(   ÚtokrT   r
   r
   r   r~   ^  s„   





*ÿ






$þÿ








*ÿ

zLRParser.parsedebugc                  C   sn  d }g }| j }| j}	| j}
| j}td ƒ}d}|sBddlm} |j}||_| |_|d k	r`| 	|¡ |d krp|j
}n|}|| _
g }|| _g }|| _||_d }| d¡ tƒ }d|_| |¡ d}||kr|sî|sÖ|ƒ }n| ¡ }|sîtƒ }d|_|j}||  |¡}n|| }|d k	rd|dkrJ| |¡ |}| |¡ d }|r¼|d8 }q¼|dk rB|
|  }|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k
r”   | |¡ | |dd… ¡ | ¡  |d }d|_d|_|}t }d	| _!Y q¼X q¼n¨|r°|j|_|j|_|g}||_z8|| _| |¡ | |¡ |	|d  | }| |¡ W q¼ tk
r>   | |¡ | ¡  |d }d|_d|_|}t }d	| _!Y q¼X q¼|dkrd|d }t|d
d ƒ}|S |d kr`|dks€| j!rHt }d	| _!|}|jdkržd }| j"ræ|r¾t#|dƒs¾||_|| _t$| j"|| ƒ}| j!rF|}d }q¼n`|r6t#|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r0|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¼| ¡ }|rN|j|_|j|_| ¡  |d }q¼t(dƒ‚q¼d S )Nr   rr   r…   rl   r   rX   r]   r   FrF   rC   rT   rŽ   r   r   r[   r‘   ))rg   ri   re   rs   r@   r‡   r†   rC   r7   r   r4   rm   rn   rB   ro   r9   r$   r’   r“   r   r"   rF   rT   r[   rV   rX   r]   rA   rw   r–   ra   r—   r˜   rk   r6   r™   r8   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 k	r`| 	|¡ |d krp|j
}n|}|| _
g }|| _g }|| _||_d }| d¡ tƒ }d|_| |¡ d}||kr|sî|sÖ|ƒ }n| ¡ }|sîtƒ }d|_|j}||  |¡}n|| }|d k	r|dkrJ| |¡ |}| |¡ d }|r¼|d8 }q¼|dk ræ|
|  }|j}|j}tƒ }||_d |_|rT|| d d … }||d< ||_zP|| d …= || _| |¡ || d …= | |¡ |	|d  | }| |¡ W q¼ tk
rN   | |¡ | |dd… ¡ | ¡  |d }d|_d|_|}t}d| _Y q¼X q¼n’|g}||_z8|| _| |¡ | |¡ |	|d  | }| |¡ W q¼ tk
râ   | |¡ | ¡  |d }d|_d|_|}t}d| _Y q¼X q¼|dkr|d }t|dd ƒ}|S |d krÈ|dks$| jrìt}d| _|}|jdkrBd }| jrŠ|rbt|d	ƒsb||_|| _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r2d S |jdkr®|d }|jdkrXd }q¼tƒ }d|_t|d
ƒr~|j! |_!|_%t|dƒr˜|j& |_&|_'||_| |¡ |}q¼| ¡ }| ¡  |d }q¼t(dƒ‚q¼d S )Nr   rr   r…   rl   r   r   FrF   rC   rT   rŽ   r   r   r[   r‘   ))rg   ri   re   rs   r@   r‡   r†   rC   r7   r   r4   rm   rn   rB   ro   r9   r$   r’   r“   r   r"   rF   rA   rw   r–   ra   r—   r˜   rk   rV   r6   r™   r8   rT   r|   r}   r   rX   r[   r]   rš   )r	   r   rC   r   r‚   rƒ   rœ   r   rx   ri   rž   rs   rŸ   r    r†   r¡   rm   rn   r¢   rp   rw   r£   r¤   r¥   r¦   r§   r¨   rL   r(   rª   rT   r
   r
   r   r€   ë  s6   



















zLRParser.parseopt_notrack)NNFFN)NNFFN)NNFFN)NNFFN)r   r   r   r   r0   r2   rj   ry   r„   r~   r   r€   r
   r
   r
   r   rb     s   

  ]
  4rb   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
k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"   Úusymsro   Úlr_itemsÚlr_nextr”   r>   )	r	   r±   r   rž   Ú
precedencer²   r³   r´   rD   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?   B  s    zProduction.__repr__c                 C   s
   t | jƒS r   )r"   rž   r;   r
   r
   r   rS   E  s    zProduction.__len__c                 C   s   dS ©Nrr   r
   r;   r
   r
   r   Ú__nonzero__H  s    zProduction.__nonzero__c                 C   s
   | j | S r   )rž   ©r	   Úindexr
   r
   r   rM   K  s    zProduction.__getitem__c              	   C   sŠ   |t | jƒkrd S t| |ƒ}z| j|j|d   |_W n ttfk
rT   g |_Y nX z|j|d  |_W n tk
r„   d |_Y nX |S r»   )r"   rž   ÚLRItemÚ	ProdnamesÚlr_afterÚ
IndexErrorÚKeyErrorÚ	lr_before)r	   rL   r¥   r
   r
   r   Úlr_itemO  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?   rS   r¼   rM   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   h  s    zMiniProduction.__init__c                 C   s   | j S r   r=   r;   r
   r
   r   r<   q  s    zMiniProduction.__str__c                 C   s
   d| j  S )NzMiniProduction(%s)r=   r;   r
   r
   r   r?   t  s    zMiniProduction.__repr__c                 C   s   | j r|| j  | _d S r   rÆ   rÇ   r
   r
   r   rÉ   x  s    zMiniProduction.bindN)r   r   r   r   r<   r?   rÉ   r
   r
   r
   r   rË   g  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   ru   rž   r±   Úlr_indexÚ
lookaheadsÚinsertr°   r"   r¶   )r	   r¥   rL   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	   rD   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| | |kr(| | S |d8 }qd S rq   )r"   )ZsymbolsÚ	terminalsrP   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   rS   è  s    zGrammar.__len__c                 C   s
   | j | S r   )rÕ   r½   r
   r
   r   rM   ë  s    zGrammar.__getitem__c                 C   sL   | j d gkstdƒ‚|| jkr*td| ƒ‚|dk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Õ   ÚAssertionErrorrÛ   rÒ   )r	   rß   ÚassocÚlevelr
   r
   r   Úset_precedenceö  s    
zGrammar.set_precedenceNr‡   r   c              	   C   s¸  || j krtd|||f ƒ‚|dkr6td|||f ƒ‚t |¡sRtd|||f ƒ‚t|ƒD ]œ\}}|d dkrÐzLt|ƒ}t|ƒdkr˜td||||f ƒ‚|| j kr¬g | j |< |||< W qZW n tk
rÎ   Y nX t |¡sZ|d	krZtd
||||f ƒ‚qZd	|kr„|d d	kr td||f ƒ‚|d d	kr>td||f ƒ‚|d }	| j 	|	¡}
|
sltd|||	f ƒ‚n| j
 |	¡ |dd …= nt|| j ƒ}	| j 	|	d¡}
d||f }|| jkrâ| j| }td|||f d|j|jf  ƒ‚t| jƒ}|| jkrg | j|< |D ]J}|| j kr(| j |  |¡ n&|| jkr>g | j|< | j|  |¡ qt||||
|||ƒ}| j |¡ || j|< z| j|  |¡ W n" tk
r²   |g| j|< Y nX d S )Nz7%s:%d: Illegal rule name %r. Already defined as a tokenr   z5%s:%d: Illegal rule name %r. error is a reserved wordz%s:%d: Illegal rule name %rr   z'"rr   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"   ra   rÛ   r“   rÝ   ÚaddrÑ   rÖ   r³   r´   rÕ   rØ   ro   r«   rÀ   rÃ   )r	   ÚprodnameÚsymsr²   r³   r´   rL   rD   ÚcZprecnameZprodprecÚmapÚmZpnumberr¤   r¥   r
   r
   r   Úadd_production  sv    


ÿ


ÿ
ÿ



zGrammar.add_productionc                 C   sT   |s| j d j}|| jkr&td| ƒ‚tdd|gƒ| j d< | j|  d¡ || _d S )Nrr   zstart symbol %s undefinedr   úS')rÕ   r   rØ   rÒ   r«   ro   rÞ   )r	   Ústartr
   r
   r   Ú	set_startc  s    
zGrammar.set_startc                    s>   ‡ ‡‡fdd„‰ t ƒ ‰ˆ ˆjd jd ƒ ‡fdd„ˆjD ƒS )Nc                    sB   | ˆkrd S ˆ  | ¡ ˆj | g ¡D ]}|jD ]}ˆ |ƒ q.q$d S r   )rë   rÀ   r“   rž   )rD   r¥   r&   ©Úmark_reachable_fromÚ	reachabler	   r
   r   rö   v  s    

z5Grammar.find_unreachable.<locals>.mark_reachable_fromr   c                    s   g | ]}|ˆ kr|‘qS r
   r
   rG   )r÷   r
   r   rI   €  s      z,Grammar.find_unreachable.<locals>.<listcomp>)rÜ   rÕ   rž   rØ   r;   r
   rõ   r   Úfind_unreachables  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krÐ|| j krÐ|dkrÐq¦|	 |¡ q¦|	S )NTrl   Fr   )r×   rØ   rÀ   rt   rž   ro   )r	   Z
terminatesr¤   rL   Úsome_changeÚplr¥   rD   Zp_terminatesÚinfiniterß   r
   r
   r   Úinfinite_cyclesŠ  s8    




zGrammar.infinite_cyclesc                 C   sP   g }| j D ]@}|sq
|jD ].}|| jkr|| jkr|dkr| ||f¡ qq
|S rÔ   )rÕ   rž   rÀ   r×   ro   )r	   r(   r¥   rD   r
   r
   r   Úundefined_symbolsÊ  s    

zGrammar.undefined_symbolsc                 C   s2   g }| j  ¡ D ]\}}|dkr|s| |¡ q|S rÔ   )r×   rt   ro   )r	   Z
unused_tokrD   rN   r
   r
   r   Úunused_terminalsÛ  s
    zGrammar.unused_terminalsc                 C   s8   g }| j  ¡ D ]$\}}|s| j| d }| |¡ q|S ©Nr   )rØ   rt   rÀ   ro   )r	   Zunused_prodrD   rN   r¥   r
   r
   r   Úunused_rulesê  s    zGrammar.unused_rulesc                 C   s@   g }| j D ]0}|| jks
|| jks
| || j | d f¡ q
|S rÿ   )rÛ   r×   rÝ   ro   )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||kr| |¡ q|rFq qVq| d¡ |S )NFú<empty>T)rÙ   ro   )r	   Z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 | krn| j |  |¡ d}qnq^qP|sFq¢qF| j S )Nrl   FT)rÙ   r×   rØ   rÀ   r  rž   ro   )r	   r¤   rL   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krl|  |j|d d … ¡}d}|D ]:}	|	dkrÌ|	| j | krÌ| j |  	|	¡ d}|	dkržd}qž|sð|t
|jƒd krl| j |j D ]*}	|	| j | k rü| j |  	|	¡ d} qüqlq^|sLq6qL| j S )Nrr   rl   Fr  T)rÚ   rÙ   r  rØ   rÕ   r   ré   rž   r  ro   r"   )
r	   ró   ÚkÚdidaddr¥   rP   ÚBZfstZhasemptyr   r
   r
   r   Úcompute_followS  s:    

zGrammar.compute_followc              
   C   sÌ   | j D ]À}|}d}g }|t|ƒkr(d }ntt||ƒ}z| j|j|d   |_W n ttfk
rj   g |_Y nX z|j|d  |_W n tk
rš   d |_Y nX ||_	|s¨qÀ| 
|¡ |}|d7 }q||_qd S ©Nr   rr   )rÕ   r"   r¿   rÀ   rž   rÁ   rÂ   rÃ   rÄ   r¸   ro   r·   )r	   r¥   ZlastlrirP   r·   Zlrir
   r
   r   Úbuild_lritemsŽ  s,    



zGrammar.build_lritems)Nr‡   r   )N)N)r   r   r   r   rS   rM   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   )rf   rh   rd   Ú	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)rJ   ÚtypesÚ
ModuleTypeÚexecr|   ÚmodulesZ_tabversionÚ__tabversion__r  Z
_lr_actionrf   Z_lr_gotorh   rd   Z_lr_productionsro   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k
r(   dd l}Y nX tj |¡s:t‚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  rf   rh   rd   ro   rË   Úclose)r	   Úfilenamer  Zin_fZ
tabversionÚ	signaturere   r¥   r
   r
   r   Úread_pickleÐ  s(    



zLRTable.read_picklec                 C   s   | j D ]}| |¡ qd S r   )rd   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  rB   ÚFr
   r
   r   Údigraph	  s    
r,  c              	   C   sü   |  | ¡ t|ƒ}||| < || ƒ|| < || ƒ}|D ]f}	||	 dkrVt|	||||||ƒ t||  ||	 ƒ|| < | |	g ¡D ]}
|
||  krx||    |
¡ qxq2||  |krøt||d < ||  ||d < | ¡ }|| krøt||d < ||  ||d < | ¡ }qÊd S )Nr   r   )ro   r"   r&  Úminr“   ÚMAXINTr’   )r  r*  rB   r+  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   r4  +  s   r4  c                   @   s’   e Zd Zd$dd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd%d d!„Zd&d"d#„ZdS )'ÚLRGeneratedTabler   Nc                 C   sž   |dkrt d| ƒ‚|| _|| _|s*tƒ }|| _i | _i | _|j| _i | _	i | _
d| _d| _d| _g | _g | _g | _| j ¡  | j ¡  | j ¡  |  ¡  d S )N)ZSLRr   zUnsupported method %sr   )r4  Úgrammarr  r   Úlogrf   rh   rÕ   rd   Úlr_goto_cacheÚlr0_cidhashÚ
_add_countZsr_conflictZrr_conflictÚ	conflictsÚsr_conflictsÚrr_conflictsr  r  r	  Úlr_parse_table)r	   r6  Úmethodr7  r
   r
   r   r   6  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 )Nrr   TFÚ	lr0_addedr   )r:  rÁ   rV   ro   r¸   r@  )r	   ÚIÚJr  rQ   r  r
   r
   r   Úlr0_closure[  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 )Nrl   )r8  r“   r%   r¸   rÄ   ro   rC  )	r	   rA  r  ÚgrD   Zgsr¥   rL   Ús1r
   r
   r   Úlr0_gotou  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kr¦q‚t|ƒ| jt|ƒ< | 	|¡ q‚q@|S r
  )
rC  r6  rÕ   r¸   r9  r%   r"   r¶   rF  ro   )	r	   ÚCrP   rA  ZasymsÚiirD   r  rD  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 ]}||kr< qq<| |j¡ qt|ƒ|krjqtt|ƒ}q
|S r
  )rÜ   r6  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kr||kr| |¡ qq|S r»   )ré   rÍ   r"   rž   r6  rØ   ro   )r	   rG  ÚtransZstatenorw   r¥   r¤   r
   r
   r   Úfind_nonterminal_transitionsí  s    z-LRGeneratedTable.find_nonterminal_transitionsc           
      C   s   |\}}g }|   || |¡}|D ]B}|j|jd k r |j|jd  }	|	| jjkr |	|kr | |	¡ q |dkrŒ|| jjd jd krŒ| d¡ |S )Nrr   r   rl   )rF  rÍ   r"   rž   r6  r×   ro   rÕ   )
r	   rG  rL  rJ  rw   r*  ÚtermsrD  r¥   r2  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  }
|
|kr2| ||
f¡ q2|S )Nr   rr   )rF  r9  r“   r%   rÍ   r"   rž   ro   )r	   rG  rL  Úemptyr0  rw   r*  rD  rQ   r¥   r2  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|krÒ|d }||jk rÄ|j| | jjkrªqÒ|j| |k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 ]*}||kr†g ||< ||  ||	f¡ qp|
|||	f< q"||fS )Nrr   r   r   )r   rÍ   r"   rž   r6  r×   ro   rF  r9  r“   r%   )r	   rG  rL  rJ  ZlookdictZincludedictZdtransr¤   rw   r*  ZlookbZincludesr¥   rÍ   rQ   ZlirD  r&   rP   r
   r
   r   Úcompute_lookback_includesD	  sX    





z*LRGeneratedTable.compute_lookback_includesc                    s0   ‡ ‡‡fdd„}‡ ‡‡fdd„}t |||ƒ}|S )Nc                    s   ˆ  ˆ | ˆ¡S r   )rO  ©r  ©rG  rJ  r	   r
   r   Ú<lambda>•	  ó    z4LRGeneratedTable.compute_read_sets.<locals>.<lambda>c                    s   ˆ  ˆ | ˆ¡S r   )rQ  rS  rT  r
   r   rU  –	  rV  ©r,  )r	   rG  ÚntransrJ  r)  r(  r+  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  «	  rV  z6LRGeneratedTable.compute_follow_sets.<locals>.<lambda>c                    s   ˆ   | g ¡S r   )r“   rS  )Úinclsetsr
   r   rU  ¬	  rV  rW  )r	   rX  rZ  r[  r)  r(  r+  r
   )r[  rZ  r   Úcompute_follow_setsª	  s    z$LRGeneratedTable.compute_follow_setsc           	      C   sl   |  ¡ D ]^\}}|D ]P\}}||jkr0g |j|< | |g ¡}|D ]"}||j| kr@|j|  |¡ q@qqd S r   )rt   rÎ   r“   ro   )	r	   Z	lookbacksZ	followsetrL  Zlbrw   r¥   r   r2  r
   r
   r   Úadd_lookaheads¼	  s    

zLRGeneratedTable.add_lookaheadsc                 C   sP   |   ¡ }|  |¡}|  |||¡}|  |||¡\}}|  |||¡}|  ||¡ d S r   )rK  rM  rY  rR  r\  r]  )r	   rG  rJ  rL  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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 k	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kr¶|  |	|¡}| j t|ƒd¡}|dkr¶|
 ||d| f¡ | |¡}|d k	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 ]>\}}}||kr®||| kr®| d||¡ d|||f< q®| d¡ d}|
D ]P\}}}||kr ||| k	r ||f|kr | d||¡ d}d|||f< q |rb| d¡ i } |	D ]*}!|!jD ]}"|"| j jk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) %srr   rò   rl   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) r6  rÕ   rÛ   rh   rf   r7  r   r  rI  r^  r±   r"   rÍ   r   rÎ   rÚ   ro   r“   rµ   r<  rÊ   r´   r=  r4  rž   r×   rF  r9  r%   r   r¶   rØ   )$r	   rÕ   rÛ   ri   rg   r7  ZactionprG  ÚstrA  ZactlistZ	st_actionZ
st_actionpZst_gotor¥   Zlaheadsr2  r&   ZsprecZslevelZrprecZrlevelZoldpÚppZchosenpZrejectprP   rD  rQ   Z	_actprintrð   Znot_usedZnkeysrH  rD   rL   r
   r
   r   r>  æ	  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k
r” } z‚ W 5 d }~X Y nX d S )Nz"Won't overwrite existing tabmodulerÌ   r   z.pyÚwz
# %s
# This file is automatically generated. Do not edit.
# pylint: disable=W,C,R
_tabversion = %r

_lr_method = %r

_lr_signature = %r
    rr   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]
)rJ   r  r  ÚIOErrorÚsplitr  r  r”   r  r   Úbasenamer  r  rf   rt   r“   ro   rh   rd   r²   r>   r   r"   r³   r´   r!  )r	   Ú	tabmoduleÚ	outputdirr#  Zbasemodulenamer"  r   Zsmallerrt   rD   Zndr   rN   rP   r  r¥   Úer
   r
   r   Úwrite_table§
  s’    
	÷





 




	
 


  ÿ
 
zLRGeneratedTable.write_tablec                 C   sþ   zdd l }W n tk
r(   dd l}Y nX 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 5 Q R X d S )Nr   Úwb)r  r  r  r  Údumpr  Úpickle_protocolr  rf   rh   rd   r²   ro   r>   r   r"   r  r  rf  r³   r´   )r	   r"  r#  r  ZoutfZoutpr¥   r
   r
   r   Úpickle_table"  s     
, zLRGeneratedTable.pickle_table)r   N)r‡   r‡   )r‡   )r   r   r   r   rC  rF  rI  rK  rM  rO  rQ  rR  rY  r\  r]  r^  r>  rj  rn  r
   r
   r
   r   r5  5  s"   
%#8+P B
{r5  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_dictE  s
    

rt  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k
rÐ   ‚ Y q tk
rø   td	||| ¡ f ƒ‚Y qX q|S )
Nrr   r   ú|z%s:%d: Misplaced '|'é   ú:z::=z!%s:%d: Syntax error. Expected ':'z%s:%d: Syntax error in rule %r)Ú
splitlinesre  ra   ro   Ú	ExceptionÚstrip)Údocr³   r´   r6  ZpstringsZlastpZdlineZpsr¥   rì   rí   Zassignr
   r
   r   Úparse_grammarQ  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 krBtt	j
ƒ| _n|| _d S )NF)rÈ   ró   Ú
error_funcÚtokensrÜ   r  r6  r   r   r|   r}   r7  )r	   rÈ   r7  r
   r
   r   r   {  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k
rŽ   Y nX d |¡S )Nr‡   c                 S   s   g | ]}d   |¡‘qS )r‡   )r”   )rH   r¥   r
   r
   r   rI   ¢  s     z+ParserReflect.signature.<locals>.<listcomp>rˆ   r   )ró   ro   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k
r>   Y qY nX i }t|ƒD ]^\}}|d7 }| |¡}|rL| d¡}| 	|¡}	|	sŒ|||< qLt 
|¡}
| j d|
|||	¡ qLqd S )Nz\s*def\s+(p_[a-zA-Z_0-9]*)\(rr   z;%s:%d: Function %s redefined. Previously defined on line %d)ÚreÚcompiler  ÚinspectZgetsourcelinesrd  ré   rè   Úgroupr“   Úgetsourcefiler7  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 k	r"t| j tƒs"| j d¡ d S )Nz'start' must be a string)ró   rJ   Ústring_typesr7  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   rr   z2'p_error' defined, but is not a function or methodTz$%s:%d: p_error() requires 1 argument)r~  rJ   r  ÚFunctionTypeÚ
MethodTyper7  r   Ú__code__Úco_firstlinenoÚco_filenamer“  Ú	getmoduler  rë   Úco_argcount)r	   ZismethodZelineZefiler  Zargcountr
   r
   r   r‡  Þ  s     

z!ParserReflect.validate_error_funcc                 C   sr   | j  d¡}|s&| j d¡ d| _d S t|ttfƒsJ| j d¡ d| _d S |sd| j d¡ d| _d S t|ƒ| _d S )Nr  zNo token list is definedTztokens must be a list or tupleztokens is empty)	rÈ   r“   r7  r   rJ   ru   r°   Úsortedr  )r	   r  r
   r
   r   r‚  ô  s    zParserReflect.get_tokensc                 C   sV   d| j kr | j d¡ d| _d S tƒ }| j D ]$}||krF| j d|¡ | |¡ q,d S )Nr   z.Illegal token name 'error'. Is a reserved wordTzToken %r multiply defined)r  r7  r   rÜ   r   rë   )r	   rÐ   rL   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 tablerv  z?Malformed precedence entry %s. Must be (assoc, term, ..., term)r   z)precedence associativity must be a stringrr   z precedence items must be strings)rµ   rJ   ru   r°   r7  r   ré   r"   r˜  ro   Ú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   rr   rv  r   r=   )Z
p_functionr
   r
   r   rU  F  s
    
üz.ParserReflect.get_pfunctions.<locals>.<lambda>)Úkey)rÈ   rt   Ú
startswithrJ   r  rš  r›  rV   rœ  r  r“  rŸ  ro   Ú__doc__Úsortr  )r	   Zp_functionsr   Úitemr´   r  r
   r
   r   r„  9  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k
r4 } z| j t|ƒ¡ d| _W 5 d }~X Y nX | j |¡ q.| j ¡ D ]ô\}}| d	¡rzt|tjtj	fƒrzqN| d
¡rŠqN| d	¡r®|dkr®| j d|¡ t|tjƒrÊ|j
jdksèt|tj	ƒrN|jj
jdkrN|jrNz8|j d¡}|d dkr&| j d|j
j|j
j|¡ W n tk
r>   Y nX qN|| _d S )Nr   z+no rules of the form p_rulename are definedTrv  rr   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ˆ   rw  z9%s:%d: Possible grammar rule %r defined without p_ prefix)r"   r  r7  r   r“  r•  rÈ   rJ   r  r›  rœ  r   r   r¦  r   r|  ro   ra   r>   r  rë   rt   r¥  rš  Ú__func__re  rž  r  rÂ   r6  )r	   r6  r´   r  r   r{  r³   r²   ZreqargsZparsed_grD  ri  rL   rN   r
   r
   r   rŠ  N  sn    

  ÿ 
ÿÿ  ÿ
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}  z  s   

r}  c           <         s~	  |d krt }|rd}|d kr&ttjƒ}ˆ rž‡ fdd„tˆ ƒD ƒ}t|ƒ}d|krdtj|d  j|d< d|kr¦d|kr¦ttj|d  dƒr¦tj|d  j	|d< nt
dƒ}|	d krt|tjƒrÄ|j}nLd|krÖ|d }n:| d¡}d |d d	… ¡}td
| ƒ ttj| ddƒ}tj |¡}	| d¡}|rNt|tƒrNd|krN|d | }|d k	r`||d< t||d}| ¡  |jr„tdƒ‚| ¡ }zŽtƒ }|r¦| |¡}n
| |¡}|sÀ||krz&| |j ¡ t!||j"ƒ}|j#a#|W W S  t$k
r } z| %d|¡ W 5 d }~X Y nX W nF t&k
rL } z| %t|ƒ¡ W 5 d }~X Y n t'k
r`   Y nX |
d krÔ|rÎztt(tj |	|¡dƒƒ}
W n< t)k
rÊ } z| %d||f ¡ t*ƒ }
W 5 d }~X Y nX nt*ƒ }
|
 +dt,¡ d}| -¡ rötdƒ‚|j"s| %d¡ t.|j/ƒ}|j0D ]P\}}}z| 1|||¡ W n0 t2k
rd } z| %d|¡ W 5 d }~X Y nX q|j3D ]b\}}|\} }!}"}#z| 4|"|#|| |!¡ W n4 t2k
rÎ } z| d|¡ d}W 5 d }~X Y nX qpz&|d krî| 5|j6¡ n
| 5|¡ W n6 t2k
r0 } z| t|ƒ¡ d}W 5 d }~X Y nX |r@tdƒ‚| 7¡ }$|$D ]"\}%}&| d|&j8|&j9|%¡ d}qL| :¡ }'|'rÀ|
 +d¡ |
 +d¡ |
 +d¡ |'D ]}| %d|¡ |
 +d|¡ q |r|
 +d¡ |
 +d¡ |
 +d¡ t;|j<ƒD ]\}(})|
 +d|(|)¡ qî| =¡ }*|*D ]}&| %d|&j8|&j9|&j>¡ qt?|'ƒdkrJ| %d¡ t?|'ƒdkrh| %d t?|'ƒ¡ t?|*ƒdkr€| %d!¡ t?|*ƒdkrž| %d"t?|*ƒ¡ |rn|
 +d¡ |
 +d#¡ |
 +d¡ t@|jAƒ}+|+ B¡  |+D ]*}|
 +d$|d% d&d„ |jA| D ƒ¡¡ qØ|
 +d¡ |
 +d'¡ |
 +d¡ t@|jCƒ},|, B¡  |,D ]*}-|
 +d$|-d% d(d„ |jC|- D ƒ¡¡ q8|
 +d¡ |r¸| D¡ }.|.D ]}/| %d)|/¡ q€| E¡ }0|0D ]}1| d*|1¡ d}q | F¡ }2|2D ]\}}| d+||¡ d}qÄ|rðtdƒ‚|r| Gd,| ¡ tH|| |
ƒ}|r€t?|jIƒ}3|3dkr4| %d-¡ n|3dkrJ| %d.|3¡ t?|jJƒ}4|4dkrj| %d/¡ n|4dkr€| %d0|4¡ |rª|jIs–|jJrª|
 %d¡ |
 %d1¡ |
 %d¡ |jID ]\}5}6}7|
 %d2|6|5|7¡ qºtKƒ }8|jJD ]x\}5}9}:|5tL|9ƒtL|:ƒf|8kr
qä|
 %d3|5|9¡ |
 %d4|:|5¡ | %d3|5|9¡ | %d4|:|5¡ |8 M|5tL|9ƒtL|:ƒf¡ qäg };|jJD ]@\}5}9}:|:jNsh|:|;krh|
 %d5|:¡ | %d5|:¡ |; O|:¡ qh|	rz&| P||	|¡ |tjkrÔtj|= W n6 t)k
	r } z| %d6||f ¡ W 5 d }~X Y nX |	r\z| Q||¡ W n6 t)k
	rZ } z| %d6||f ¡ W 5 d }~X Y nX | |j ¡ t!||j"ƒ}|j#a#|S )7Nr   c                    s   g | ]}|t ˆ |ƒf‘qS r
   )rV   )rH   r  ©r  r
   r   rI   £  s     zyacc.<locals>.<listcomp>Ú__file__r   Ú__package__rv  rÌ   r   r  r‡   ró   )r7  zUnable to build parserz.There was a problem loading the table file: %rrc  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 usedrr   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=   rG   r
   r
   r   rI   M  s     z*Nonterminals, with rules where they appearc                 S   s   g | ]}t |ƒ‘qS r
   r=   rG   r
   r
   r   rI   U  s     zSymbol %r is unreachablez)Infinite recursion detected for symbol %rz0Precedence rule %r defined for unknown symbol %rzGenerating %s tablesz1 shift/reduce conflictz%d shift/reduce conflictsz1 reduce/reduce conflictz%d reduce/reduce conflictsz
Conflicts:z7shift/reduce conflict for %s in state %d resolved as %sz;reduce/reduce conflict in state %d resolved using rule (%s)zrejected rule (%s) in state %dzRule (%s) is never reducedzCouldn't create %r. %s)RÚ
tab_moduler   r|   r}   ÚdirÚdictr  r«  r™   r¬  rt  rJ   r  r  re  r”   r  rV   r  r  Údirnamer“   r>   r}  r…  r   r   r#  r  r$  r  r%  rÈ   rb   r~  r„   ry  r   r  r  r  rd  r   r   Ú__version__rŒ  rÓ   r  r¢  rå   rÒ   r6  rñ   rô   ró   rý   r³   r´   rþ   ré   rÕ   r   r   r"   ru   r×   r§  rØ   rø   rü   r  r   r5  r<  r=  rÜ   r%   rë   rÊ   ro   rj  rn  )<r?  r   r  rg  ró   Zcheck_recursionÚoptimizeZwrite_tablesZ	debugfilerh  ZdebuglogZerrorlogZ
picklefileZ_itemsrÈ   Zsrcfiler  ZpkgnameÚpkgZpinfor#  ZlrZread_signaturer7   ri  Úerrorsr6  rß   rã   rä   ÚfuncnameZgramr³   r´   rì   rí   rý   rp   rž   rþ   rL   r¥   r   rN  ZnontermsZnontermZunreachableÚurû   ÚinfZunused_precZnum_srZnum_rrrw   rª   Z
resolutionZalready_reportedZruleZrejectedZwarned_neverr
   rª  r   Úyacc  sŽ   







"



"












(



(









$$r¸  );r‘  r  r|   Zos.pathr  r“  r,   r±  r  Z	yaccdebugZ
debug_filer­  Z
default_lrr˜   rz   r#   rm  Úversion_infoZ
basestringr˜  r>   Úmaxsizer.  Úobjectr   r   ry  r   r)   r+   r/   r3   r1   r.   r0   r2   r4   r8   r9   r@   rb   r’  rç   r«   rË   r¿   rÑ   rÒ   rÓ   r  r  r,  r&  r4  r5  rt  r|  r}  r¸  r
   r
   r
   r   Ú<module>>   sž   
7       m
H.   rT
      )  
      þ