o
    ԅ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 r6e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
   */usr/lib/python3/dist-packages/ply/yacc.py__init__m      
zPlyLogger.__init__c                 O   s   | j || d  d S )N
r   writer	   msgargskwargsr
   r
   r   debugp      zPlyLogger.debugc                 O      | j d||  d  d S )Nz	WARNING: r   r   r   r
   r
   r   warningu      zPlyLogger.warningc                 O   r   )NzERROR: r   r   r   r
   r
   r   errorx   r   zPlyLogger.errorN)	__name__
__module____qualname__r   r   infor   r   Zcriticalr
   r
   r
   r   r   l   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   r3   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   r/   )r0   r1   r
   r
   r   format_stack_entry   s   r5   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   r6   r   )r7   r8   r9   _restartr
   r
   r
   r   restart   r<   r>   c                   C   r6   r   )r7   r8   r9   _tokenr
   r
   r
   r   token   r<   r@   c                 C   s<   |j a|ja|ja| |}zbbbW |S  ty   Y |S w r   )r;   r:   r@   r?   r>   r=   	NameError)	errorfuncr@   parserr0   r
   r
   r   call_errorfunc   s   rD   c                   @   r   )
YaccSymbolc                 C      | j S r   r.   r	   r
   r
   r   __str__      zYaccSymbol.__str__c                 C   s   t | S r   strrH   r
   r
   r   __repr__   s   zYaccSymbol.__repr__N)r   r   r   rI   rM   r
   r
   r
   r   rE      r&   rE   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lexerrC   )r	   srP   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.0rR   r
   r
   r   
<listcomp>       z.YaccProduction.__getitem__.<locals>.<listcomp>r   )
isinstancerO   rV   rP   r	   nr
   r
   r   __getitem__   s
   
zYaccProduction.__getitem__c                 C      || j | _d S r   )rO   rV   )r	   r]   vr
   r
   r   __setitem__      zYaccProduction.__setitem__c                 C   s   dd | j || D S )Nc                 S   rT   r
   rU   rW   r
   r
   r   rY      rZ   z/YaccProduction.__getslice__.<locals>.<listcomp>)rO   )r	   ijr
   r
   r   __getslice__   r   zYaccProduction.__getslice__c                 C   
   t | jS r   )r,   rO   rH   r
   r
   r   __len__   r   zYaccProduction.__len__c                 C      t | j| ddS )Nlinenor   getattrrO   r\   r
   r
   r   ri         zYaccProduction.linenoc                 C   r_   r   )rO   ri   )r	   r]   ri   r
   r
   r   
set_lineno  rb   zYaccProduction.set_linenoc                 C   ,   t | j| dd}t | j| d|}||fS )Nri   r   	endlinenorj   )r	   r]   	startlineZendliner
   r
   r   linespan     zYaccProduction.linespanc                 C   rh   )Nlexposr   rj   r\   r
   r
   r   rs     rl   zYaccProduction.lexposc                 C   r_   r   )rO   rs   )r	   r]   rs   r
   r
   r   
set_lexpos  rb   zYaccProduction.set_lexposc                 C   rn   )Nrs   r   	endlexposrj   )r	   r]   Zstartposendposr
   r
   r   lexspan  rr   zYaccProduction.lexspanc                 C   s   t r   )SyntaxErrorrH   r
   r
   r   r     r$   zYaccProduction.errorr   )r   r   r   r   r^   ra   re   rg   ri   rm   rq   rs   rt   rw   r   r
   r
   r
   r   rN      s    
rN   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gotorB   set_defaulted_stateserrorok)r	   ZlrtabZerrorfr
   r
   r   r      s   
zLRParser.__init__c                 C   s
   d| _ d S rz   )r   rH   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symstackrE   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   ;  s   zLRParser.set_defaulted_statesc                 C   s
   i | _ d S r   )r   rH   r
   r
   r   disable_defaulted_statesB  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	   inputrQ   r   tracking	tokenfuncr
   r
   r   parseE  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| }|st }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'rt&}d| _'|}|jdkrsd }| j)r|rt*|d s||_|| _!t+| j)|| }| j'r|}d }qcn2|rt*|d!r|j}nd}|rt,j-.d"||jf  nt,j-.d#|j  n
t,j-.d$ d S t&}t|dkr|jdkrd }d }d}|d d = qc|jdkrd 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   rT   r
   rG   rX   Zxxr
   r
   r   rY     rZ   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
   )r5   rV   )rX   Z_vr
   r
   r   rY         ]ro   ru   zResult : %sr   FrV   zDone   : Returning %szPLY: PARSE DEBUG ENDzError  : %sc                 S   rT   r
   rG   r   r
   r
   r   rY   D  rZ   rQ   ri   (yacc: Syntax error at line %d, token=%s
yacc: Syntax error, token=%s yacc: Parse error in input. EOF
rs   yacc: internal parser error!!!
)0r~   r   r|   r   rN   r   r   r   rQ   rC   r   r@   r   r   rP   r   rE   r.   r   popgetjoinrL   lstripr"   r,   rV   ri   rs   rk   ro   ru   rO   r   callabler3   rx   extenderror_countr   r   rB   hasattrrD   r   r   r   RuntimeError r	   r   rQ   r   r   r   	lookaheadlookaheadstackr   r   prodr   pslice
errorcountr   	get_tokenr   r   errtokenr   r   ltypetppnameplentargt1r]   r2   tokri   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rd }| j"r|rt#|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   ro   ru   r   FrV   rQ   ri   r   r   r   rs   r   ))r~   r   r|   r   rN   r   r   rQ   rC   r   r@   r   r   rP   r   rE   r.   r   r   r"   r,   rV   ri   rs   rk   ro   ru   rO   r   r   rx   r   r   r   rB   r   rD   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rt}d| _|}|jdkrd }| jr|rt|d
s||_|| _t | j|| }| jr|}d }q^n2|rt|dr|j!}nd}|rt"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   FrV   rQ   ri   r   r   r   rs   r   ))r~   r   r|   r   rN   r   r   rQ   rC   r   r@   r   r   rP   r   rE   r.   r   r   r"   r,   rV   rO   r   r   rx   r   r   r   rk   rB   r   rD   ri   r   r   r   ro   rs   ru   r   )r	   r   rQ   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]   r2   r   ri   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   ry     s    

  
]  4ry   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   rL   )	r	   r   r"   r   
precedencer   r   r   rR   r
   r
   r   r   !  s&   


zProduction.__init__c                 C   rF   r   rK   rH   r
   r
   r   rI   ?  rJ   zProduction.__str__c                 C      dt |  d S )NzProduction()rK   rH   r
   r
   r   rM   B  rb   zProduction.__repr__c                 C   rf   r   )r,   r   rH   r
   r
   r   rg   E  r   zProduction.__len__c                 C   s   dS Nr   r
   rH   r
   r
   r   __nonzero__H  r$   zProduction.__nonzero__c                 C   
   | j | S r   )r   r	   indexr
   r
   r   r^   K  r   zProduction.__getitem__c              	   C   s   |t | jkr	d S t| |}z| j|j|d   |_W n ttfy)   g |_Y nw z|j|d  |_W |S  tyB   d |_Y |S w r   )r,   r   LRItem	Prodnameslr_after
IndexErrorKeyError	lr_before)r	   r]   r   r
   r
   r   lr_itemO  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   rI   rM   rg   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   rL   )r	   rL   r"   r,   r   r   r   r
   r
   r   r   h  s   
zMiniProduction.__init__c                 C   rF   r   rK   rH   r
   r
   r   rI   q  rJ   zMiniProduction.__str__c                 C   s
   d| j  S )NzMiniProduction(%s)rK   rH   r
   r
   r   rM   t  r   zMiniProduction.__repr__c                 C   r   r   r   r   r
   r
   r   r   x  r   zMiniProduction.bindN)r   r   r   r   rI   rM   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"   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	   rR   r
   r
   r   rI     s
   
zLRItem.__str__c                 C   r   )NzLRItem(r   rK   rH   r
   r
   r   rM     rb   zLRItem.__repr__N)r   r   r   r   rI   rM   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	terminalsrc   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   rf   r   )r,   r   rH   r
   r
   r   rg     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rtd||f |d d	krtd||f |d }	| j	|	}
|
st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rg | j|< |D ]$}|| j v r
| j | | q|| jvrg | j|< | j| | qt||||
|||}| 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 %%preczH%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,   rx   r   r   r   addr   r   r   r   r   r   r   r   r   r   )r	   prodnamesymsr   r   r   r]   rR   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_startc  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   )rR   r   r0   mark_reachable_from	reachabler	   r
   r   r  v  s   


z5Grammar.find_unreachable.<locals>.mark_reachable_fromr   c                    s   g | ]}| vr|qS r
   r
   rW   )r  r
   r   rY     s    z,Grammar.find_unreachable.<locals>.<listcomp>)r   r   r   r   rH   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 ]'\}}|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   rR   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	   r2   r   rR   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_tokrR   r`   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_prodrR   r`   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	   Zbetar2   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   rc   BZfstZhasemptyr   r
   r
   r   compute_followS  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lastlrirc   r   Zlrir
   r
   r   build_lritems  s6   




zGrammar.build_lritems)Nr   r   r   )r   r   r   r   rg   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_methodrH   r
   r
   r   r     rS   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loadr2  r)  r+  r}   r   r{   r   r   close)r	   filenamer8  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   r4  rA  rB  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   rP   Fr
   r
   r   digraph	  s   
rI  c              	   C   s
  | |  t|}||| < || || < || }|D ]3}	||	 dkr+t|	|||||| t||  ||	 || < ||	g D ]}
|
||  vrK||   |
 q<q||  |krt||d < ||  ||d < | }|| krt||d < ||  ||d < | }|| ksid S d S d S )Nr   r   )r   r,   rC  minr   MAXINTr   )r   rG  rP   rH  rD  rE  rF  drelyaelementr
   r
   r   rC    s2   
rC  c                   @   r'   )	LALRErrorNr)   r
   r
   r
   r   rQ  +  r*   rQ  c                   @   s   e Zd Zd$ddZdd Zdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zd%d 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   )rQ  grammarr+  r    logr}   r   r   r{   lr_goto_cachelr0_cidhash
_add_countZsr_conflictZrr_conflict	conflictssr_conflictsrr_conflictsr(  r"  r&  lr_parse_table)r	   rS  methodrT  r
   r
   r   r   6  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   )rW  r   rk   r   r   r]  )r	   IJr$  rd   r   r
   r
   r   lr0_closure[  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   )rU  r   r/   r   r   r   r`  )	r	   r^  r   grR   Zgsr   r]   s1r
   r
   r   lr0_gotou  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   )
r`  rS  r   r   rV  r/   r,   r   rc  r   )	r	   Crc   r^  ZasymsiirR   r   ra  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   rS  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   rS  r   r   )r	   rd  transZstatenor   r   r   r
   r
   r   find_nonterminal_transitions  s   
z-LRGeneratedTable.find_nonterminal_transitionsc           
      C   s   |\}}g }|  || |}|D ]!}|j|jd k r1|j|jd  }	|	| jjv r1|	|vr1||	 q|dkrF|| jjd jd krF|d |S )Nr   r   r   )rc  r   r,   r   rS  r   r   r   )
r	   rd  ri  rg  r   rG  termsra  r   rO  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   )rc  rV  r   r/   r   r,   r   r   )r	   rd  ri  emptyrM  r   rG  ra  rd   r   rO  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rqd}||jk r|j| |j|d  krn|d }||jk s|
||f qq|D ]}||vrg ||< || ||	f q|
|||	f< q||fS )Nr   r   r   )r"   r   r,   r   rS  r   r   rc  rV  r   r/   )r	   rd  ri  rg  ZlookdictZincludedictZdtransr   r   rG  ZlookbZincludesr   r   rd   Zlira  r0   rc   r
   r
   r   compute_lookback_includesD	  sb   






z*LRGeneratedTable.compute_lookback_includesc                    s0    fdd} fdd}t |||}|S )Nc                         | S r   )rl  r   rd  rg  r	   r
   r   <lambda>	      z4LRGeneratedTable.compute_read_sets.<locals>.<lambda>c                    rp  r   )rn  rq  rr  r
   r   rs  	  rt  rI  )r	   rd  ntransrg  rF  rE  rH  r
   rr  r   compute_read_sets	  s   z"LRGeneratedTable.compute_read_setsc                    s(   fdd} fdd}t |||}|S )Nc                    s    |  S r   r
   rq  )readsetsr
   r   rs  	  s    z6LRGeneratedTable.compute_follow_sets.<locals>.<lambda>c                    s     | g S r   )r   rq  )inclsetsr
   r   rs  	  s    ru  )r	   rv  rx  ry  rF  rE  rH  r
   )ry  rx  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	followsetri  Zlbr   r   r   rO  r
   r
   r   add_lookaheads	  s   

zLRGeneratedTable.add_lookaheadsc                 C   sP   |   }| |}| |||}| |||\}}| |||}| || d S r   )rh  rj  rw  ro  rz  r{  )r	   rd  rg  ri  rx  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rd ||< 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
||  qtd| |j
 ||< |||< ||j
  jd7  _qq[|j}|j|d  }|| j jv rG| |	|}| jt|d}|dkrG|
||d| f ||}|d ur?|dkr||krt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 rd | |"< 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) rS  r   r   r   r}   rT  r   r+  rf  r|  r   r,   r   r"   r   r   r   r   r   rY  r   r   rZ  rQ  r   r   rc  rV  r/   r   r   r   )$r	   r   r   r   r~   rT  Zactionprd  str^  ZactlistZ	st_actionZ
st_actionpZst_gotor   ZlaheadsrO  r0   ZsprecZslevelZrprecZrlevelZoldpppZchosenpZrejectprc   ra  rd   Z	_actprintr  Znot_usedZnkeysre  rR   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 }zt|d}|	dtj
|t| j|f  d}|ri }| 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 ]!\}}||}|sg g f}|||< |d |	 |d | qq|	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wz
# %s
# This file is automatically generated. Do not edit.
# pylint: disable=W,C,R
_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[   r.  r/  IOErrorsplitr9  r:  r   r<  r   basenamer2  r+  r}   r   r   r   r   r{   r   rL   r"   r,   r   r   r>  )r	   	tabmodule	outputdirr@  Zbasemodulenamer?  r   Zsmallerr   rR   Zndr"   r`   rc   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 sw   Y  d S )Nr   wb)r6  r7  r8  r<  dumpr2  pickle_protocolr+  r}   r   r{   r   r   rL   r"   r,   r9  r:  r  r   r   )r	   r?  r@  r8  ZoutfZoutpr   r
   r
   r   pickle_table"  s$   
, "zLRGeneratedTable.pickle_table)r   N)r   r   r   )r   r   r   r   r`  rc  rf  rh  rj  rl  rn  ro  rw  rz  r{  r|  r[  r  r  r
   r
   r
   r   rR  5  s$    
%#8+P 
B{rR  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
   

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  rx   r   	Exceptionstrip)docr   r   rS  ZpstringsZlastpZdlineZpsr   r	  r
  Zassignr
   r
   r   parse_grammarQ  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   r1  rS  r   r   r   r   rT  )r	   r   rT  r
   r
   r   r   {  s   
zParserReflect.__init__c                 C   s,   |    |   |   |   |   d S r   )	get_startget_error_func
get_tokensget_precedenceget_pfunctionsrH   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   rH   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   )rX   r   r
   r
   r   rY     r   z+ParserReflect.signature.<locals>.<listcomp>r   r   )r  r   r   r   r  pfuncs	TypeError
ValueError)r	   partsr   r
   r
   r   r@    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compiler1  inspectZgetsourcelinesr  r  r  groupr   getsourcefilerT  r   )r	   Zfrer3  linesZlinenZ	counthashr   r  r"   prevr?  r
   r
   r   r    s.   






zParserReflect.validate_modulesc                 C      | j d| _d S )Nr  )r   r   r  rH   r
   r
   r   r    rl   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_typesrT  r   rH   r
   r
   r   r    s
   
zParserReflect.validate_startc                 C   r  )Np_error)r   r   r  rH   r
   r
   r   r    rl   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[   r.  FunctionType
MethodTyperT  r   __code__co_firstlinenoco_filenamer  	getmoduler1  r  co_argcount)r	   ZismethodZelineZefiler3  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s%| jd d| _d S |s2| 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   rT  r   r[   r   r   sortedr  )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  rT  r   r   r   r  )r	   r   r]   r
   r
   r   r    s   

zParserReflect.validate_tokensc                 C   r  )Nr   )r   r   r   rH   r
   r
   r   r    rl   zParserReflect.get_precedencec                 C   s  g }| j rt| 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   rT  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   rK   )Z
p_functionr
   r
   r   rs  F  s
   
z.ParserReflect.get_pfunctions.<locals>.<lambda>)key)r   r   
startswithr[   r.  r  r  rk   r  r  r  r  r   __doc__sortr  )r	   Zp_functionsr"   itemr   r3  r
   r
   r   r  9  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	rt|tjtj	frq|d
rq|d	r|dkr| jd| t|tjr|j
jdkst|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 qw 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  rT  r   r  r  r   r[   r.  r  r  r  r   r  r   r  r   rx   rL   r1  r  r   r  r  __func__r  r  r  r   rS  )r	   rS  r   r3  r"   r  r   r   ZreqargsZparsed_gra  r  r]   r`   r
   r
   r   r  N  sr   




z!ParserReflect.validate_pfunctionsr   )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           <         sz	  |d u rt }|r
d}|d u rttj} rO fddt D }t|}d|vr2tj|d  j|d< d|vrNd|v rNttj|d  drNtj|d  j	|d< nt
d}|	d u rt|tjra|j}n&d|vrj|d }n|d}d|d d	 }td
|  ttj| dd}tj|}	|d}|rt|trd|vr|d | }|d ur||d< t||d}|  |jrtd| }zFt }|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 rc|r`ztt(tj|	|d}
W n" t)y_ } z|%d||f  t* }
W Y d }~nd }~ww t* }
|
+dt, d}|- rttd|j"s}|%d t.|j/}|j0D ])\}}}z
|1||| W q t2y } z|%d| W Y d }~qd }~ww |j3D ]2\}}|\} }!}"}#z|4|"|#|| |! W q t2y } z|d| d}W Y d }~qd }~ww z|d u r|5|j6 n|5| W n t2y } z|t| d}W Y d }~nd }~ww |rtd|7 }$|$D ]\}%}&|d|&j8|&j9|% d}q"|: }'|'r\|
+d |
+d |
+d |'D ]}|%d| |
+d| qL|r|
+d |
+d |
+d t;|j<D ]\}(})|
+d|(|) qs|= }*|*D ]}&|%d|&j8|&j9|&j> qt?|'dkr|%d t?|'dkr|%d t?|' t?|*dkr|%d! t?|*dkr|%d"t?|* |r3|
+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  q|
+d |rX|D }.|.D ]	}/|%d)|/ q<|E }0|0D ]}1|d*|1 d}qL|F }2|2D ]\}}|d+|| d}q^|rttd|r}|Gd,|  tH|| |
}|rt?|jI}3|3dkr|%d- n|3dkr|%d.|3 t?|jJ}4|4dkr|%d/ n|4dkr|%d0|4 |rQ|jIs|jJrQ|
%d |
%d1 |
%d |jID ]\}5}6}7|
%d2|6|5|7 qtK }8|jJD ]<\}5}9}:|5tL|9tL|:f|8v rq|
%d3|5|9 |
%d4|:|5 |%d3|5|9 |%d4|:|5 |8M|5tL|9tL|:f qg };|jJD ] \}5}9}:|:jNsO|:|;vrO|
%d5|: |%d5|: |;O|: q0|rz|P||	| |tjv rftj|= W n t)y } z|%d6||f  W Y d }~nd }~ww |rz|Q|| 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
   )rk   )rX   r#  r3  r
   r   rY     s    zyacc.<locals>.<listcomp>__file__r   __package__r  r   r   r,  r   r  )rT  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
   rK   rW   r
   r
   r   rY   M      z*Nonterminals, with rules where they appearc                 S   r  r
   rK   rW   r
   r
   r   rY   U  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)R
tab_moduler   r   r   dirdictr1  r  r   r  r  r[   r.  r/  r  r   r0  rk   r9  r:  dirnamer   rL   r  r  r   r(   r@  r*  rA  r4  rB  r   ry   r  r   r  r   r)  r7  r<  r  r    r   __version__r  r   r  r  r  r   rS  r  r  r  r  r   r   r  r  r   r  r"   r,   r   r   r  r   r  r  r  r   rR  rY  rZ  r   r/   r  r   r   r  r  )<r\  r   r3  r  r  Zcheck_recursionoptimizeZwrite_tablesZ	debugfiler  ZdebuglogZerrorlogZ
picklefileZ_itemsr   Zsrcfiler  ZpkgnameZpkgZpinfor@  ZlrZread_signaturerC   r  errorsrS  r   r   r  funcnameZgramr   r   r	  r
  r  r   r   r  r]   r   r  rk  ZnontermsZnontermZunreachableur  infZunused_precZnum_srZnum_rrr   r   Z
resolutionZalready_reportedZruleZrejectedZwarned_neverr
   r  r   yacc  s  






















(



(










r  );r  r.  r   os.pathr9  r  r7   r  r2  Z	yaccdebugZ
debug_filer  Z
default_lrr   r   r-   r  version_infoZ
basestringr  rL   maxsizerK  objectr   r    r  r(   r3   r5   r:   r?   r=   r9   r;   r>   r@   rD   rE   rN   ry   r  r  r   r   r   r   r   r   r)  r*  rI  rC  rQ  rR  r  r  r  r  r
   r
   r
   r   <module>   s   =
7       
mH.   rT
      )  
