a
    ߙfb                    @   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
   6lib/python3.9/site-packages/astropy/extern/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|v rt |}t|tkr4|d t d }dt| jt| |f }|S )Nr   z ...z<%s @ 0x%x> (%s))reprlenresultlimittyper   id)rrepr_strresultr
   r
   r   format_result   s    r)   c                 C   sB   t | }d|v rt |}t|dk r(|S dt| jt| f S d S )Nr      z<%s @ 0x%x>)r!   r"   r$   r   r%   )r&   r'   r
   r
   r   format_stack_entry   s    r+   a  PLY: Don't use global functions errok(), token(), and restart() in p_error().
Instead, invoke the methods on the associated parser instance:

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

    parser = yacc.yacc()
c                   C   s   t t t S r   )warningswarn_warnmsg_errokr
   r
   r
   r   errok   s    
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y6   Y n0 |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>       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	   rM   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      rJ   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   rL   r
   r
   r   rU      s    zYaccProduction.linenoc                 C   s   || j | _d S r   )rA   rU   )r	   rM   rU   r
   r
   r   
set_lineno  s    zYaccProduction.set_linenoc                 C   s,   t | j| dd}t | j| d|}||fS )NrU   r   	endlinenorV   )r	   rM   	startlineZendliner
   r
   r   linespan  s    zYaccProduction.linespanc                 C   s   t | j| ddS )Nlexposr   rV   rL   r
   r
   r   r\     s    zYaccProduction.lexposc                 C   s   || j | _d S r   )rA   r\   )r	   rM   r\   r
   r
   r   
set_lexpos  s    zYaccProduction.set_lexposc                 C   s,   t | j| dd}t | j| d|}||fS )Nr\   r   	endlexposrV   )r	   rM   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   rN   rP   rS   rT   rU   rX   r[   r\   r]   ra   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 rd   )rl   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_statesrh   itemslistvaluesr"   )r	   stateactionsZrulesr
   r
   r   rk   ;  s
    zLRParser.set_defaulted_statesc                 C   s
   i | _ d S r   )rt   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   )		yaccdevelrK   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 urj|
| |d u rz|j}n|}|| _g }|| _g }|| _||_d }|d t }d|_|| d}|d |d| ||vr(|s|s| }n| }|st }d|_|j}|| |}n|| }|d||  |d	d
ddd |D dd  t|f   |d ur|dkr|| |}|d| || d }|r|d8 }q|dk rD|
|  }|j}|j}t }||_d |_|r<|d|jdddd || d  D  d |	|d|   |  n|d|jg |	|d  |  |r|| d d  }||d< |r|d }|j|_|j|_|d }t|d|j|_t|d|j|_||_ zd|| d = || _!|"| || d = |dt#|d  || |	|d  | }|| W q t$y   || |%|dd  |  |d }d|_d|_|}t&}d| _'Y q0 qn|r|j|_|j|_|g}||_ zL|| _!|"| |dt#|d  || |	|d  | }|| W q t$y@   || |  |d }d|_d|_|}t&}d| _'Y q0 q|dkr|d }t|dd }|dt#| |d |S |d u r|(dd
ddd |D dd  t|f   |dks| j'rt&}d| _'|}|jdkrd }| j)r6|rt*|ds||_|| _!t+| j)|| }| j'r|}d }qn`|rt*|d rP|j}nd}|rrt,j-.d!||jf  nt,j-.d"|j  nt,j-.d# d S nt&}t|dkr|jdkrd }d }d}|d d = q|jdkrd S |jdkr|d }|jdkr*|r$t|d |j|_t|d$|j|_d }qt }d|_t*|d rP|j |_|_t*|d$rj|j |_|_||_|| |}q| }|r|j|_|j|_|  |d }qt/d%qd S )&Nr   zPLY: PARSE DEBUG STARTrs   lexrm    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     rJ   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     rJ   ]rY   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  rJ   rC   rU   (yacc: Syntax error at line %d, token=%s
yacc: Syntax error, token=%s yacc: Parse error in input. EOF
r\   yacc: internal parser error!!!
)0rh   rj   rf   rt   r@   r   r   r   rC   r7   r   r4   rn   ro   rB   rp   r9   r$   r   popgetjoinr>   lstripr   r"   rF   rU   r\   rW   rY   r^   rA   rx   callabler)   rb   extenderror_countrl   r   r6   hasattrr8   r}   r~   r   RuntimeError r	   r   rC   r   r   r   	lookaheadlookaheadstackry   rj   prodrt   pslice
errorcountr   	get_tokenrn   ro   errtokenrq   rx   ltypetppnameplentargt1rM   r(   tokrU   r
   r
   r   r   ^  s   





*






$








*

zLRParser.parsedebugc                  C   sj  d }g }| j }| j}	| j}
| j}td }d}|sBddlm} |j}||_| |_|d ur`|	| |d u rp|j
}n|}|| _
g }|| _g }|| _||_d }|d t }d|_|| d}||vr|s|s| }n| }|st }d|_|j}|| |}n|| }|d ur`|dkrJ|| |}|| d }|r|d8 }q|dk r>|
|  }|j}|j}t }||_d |_|r|| d d  }||d< |r|d }|j|_|j|_|d }t|d|j|_t|d|j|_||_zP|| d = || _|| || d = || |	|d  | }|| W q ty   || ||dd  |  |d }d|_d|_|}t }d	| _!Y q0 qn|r|j|_|j|_|g}||_z8|| _|| || |	|d  | }|| W q ty:   || |  |d }d|_d|_|}t }d	| _!Y q0 q|dkr`|d }t|d
d }|S |d u r\|dks|| j!rDt }d	| _!|}|jdkrd }| j"r|rt#|ds||_|| _t$| j"|| }| j!rB|}d }qn`|r2t#|dr|j}nd}|rt%j&'d||jf  nt%j&'d|j  nt%j&'d d S nt }t|dkrz|jdkrzd }d }d}|d d = q|jdkrd S |jdkr,|d }|jdkr|rt|d|j|_t|d|j|_d }qt }d|_t#|dr|j |_|_t#|dr|j |_|_||_|| |}q| }|rJ|j|_|j|_|  |d }qt(dqd S )Nr   rs   r   rm   r   rY   r^   r   FrF   rC   rU   r   r   r   r\   r   ))rh   rj   rf   rt   r@   r   r   rC   r7   r   r4   rn   ro   rB   rp   r9   r$   r   r   r   r"   rF   rU   r\   rW   rY   r^   rA   rx   r   rb   r   r   rl   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 ur`|	| |d u rp|j
}n|}|| _
g }|| _g }|| _||_d }|d t }d|_|| d}||vr|s|s| }n| }|st }d|_|j}|| |}n|| }|d ur|dkrJ|| |}|| d }|r|d8 }q|dk r|
|  }|j}|j}t }||_d |_|rR|| d d  }||d< ||_zP|| d = || _|| || d = || |	|d  | }|| W q tyL   || ||dd  |  |d }d|_d|_|}t}d| _Y q0 qn|g}||_z8|| _|| || |	|d  | }|| W q ty   || |  |d }d|_d|_|}t}d| _Y q0 q|dkr|d }t|dd }|S |d u r|dks | jrt}d| _|}|jdkr>d }| jr|r^t|d	s^||_|| _t | j|| }| jr|}d }qn`|rt|d
r|j!}nd}|rt"j#$d||jf  nt"j#$d|j  nt"j#$d d S nt}t|dkr|jdkrd }d }d}|d d = q|jdkr.d S |jdkr|d }|jdkrTd }qt }d|_t|d
rz|j! |_!|_%t|dr|j& |_&|_'||_|| |}q| }|  |d }qt(dqd S )Nr   rs   r   rm   r   r   FrF   rC   rU   r   r   r   r\   r   ))rh   rj   rf   rt   r@   r   r   rC   r7   r   r4   rn   ro   rB   rp   r9   r$   r   r   r   r"   rF   rA   rx   r   rb   r   r   rl   rW   r6   r   r8   rU   r}   r~   r   rY   r\   r^   r   )r	   r   rC   r   r   r   r   r   ry   rj   r   rt   r   r   r   r   rn   ro   r   rq   rx   r   r   r   r   r   r   rM   r(   r   rU   r
   r
   r   r     s6   



















zLRParser.parseopt_notrack)NNFFN)NNFFN)NNFFN)NNFFN)r   r   r   r   r0   r2   rk   rz   r   r   r   r   r
   r
   r
   r   rc     s   

  ]
  4rc   z^[a-zA-Z0-9_-]+$c                   @   sR   e Zd ZdZdddZdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dd ZdS )
Productionr   rightr   Nr   c           	      C   s   || _ t|| _|| _|| _d | _|| _|| _|| _t	| j| _	g | _
| jD ]}|| j
vrL| j
| qLg | _d | _| jrd| j d| jf | _nd| j  | _d S N%s -> %sr   z%s -> <empty>)r   tupler   numberfuncr   filelineprecr"   usymsrp   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   rT   E  s    zProduction.__len__c                 C   s   dS Nrs   r
   r;   r
   r
   r   __nonzero__H  s    zProduction.__nonzero__c                 C   s
   | j | S r   )r   r	   indexr
   r
   r   rN   K  s    zProduction.__getitem__c              	   C   s   |t | jkrd S t| |}z| j|j|d   |_W n ttfyR   g |_Y n0 z|j|d  |_W n ty   d |_Y n0 |S r   )r"   r   LRItem	Prodnameslr_after
IndexErrorKeyError	lr_before)r	   rM   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?   rT   r   rN   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   rv   r   r   lr_index
lookaheadsinsertr   r"   r   )r	   r   rM   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| | |v r(| | S |d8 }qd S rr   )r"   )Zsymbols	terminalsrQ   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   rT     s    zGrammar.__len__c                 C   s
   | j | S r   )r   r   r
   r
   r   rN     s    zGrammar.__getitem__c                 C   sL   | j d gksJ d|| jv r*td| |dvr:td||f| j|< d S )Nz2Must call set_precedence() before add_production()z,Precedence already specified for terminal %r)leftr   nonassocz:Associativity must be one of 'left','right', or 'nonassoc')r   r   r   )r	   r   assoclevelr
   r
   r   set_precedence  s    
zGrammar.set_precedenceNr   r   c              	   C   s  || j v rtd|||f |dkr6td|||f t|sRtd|||f t|D ]\}}|d dv rzLt|}t|dkrtd||||f || j vrg | j |< |||< W qZW n ty   Y n0 t|sZ|d	krZtd
||||f qZd	|v r|d d	krtd||f |d d	kr<td||f |d }	| j	|	}
|
sjtd|||	f n| j
|	 |dd = nt|| j }	| j	|	d}
d||f }|| jv r| j| }td|||f d|j|jf  t| j}|| jvr g | j|< |D ]J}|| j v r&| j | | n&|| jvr<g | j|< | j| | qt||||
|||}| j| || j|< z| j| | W n  ty   |g| j|< Y n0 d S )Nz7%s:%d: Illegal rule name %r. Already defined as a tokenr   z5%s:%d: Illegal rule name %r. error is a reserved wordz%s:%d: Illegal rule name %rr   z'"rs   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"   rb   r   r   r   addr   r   r   r   r   r   rp   r   r   r   )r	   prodnamesymsr   r   r   rM   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vr&td| tdd|g| j d< | j| d || _d S )Nrs   zstart symbol %s undefinedr   S')r   r   r   r   r   rp   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   )rD   r   r&   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
   rG   )r   r
   r   rI     rJ   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|| sd||< d} qBqNqB|s4qq4g }	| D ]4\}}
|
s|| jvr|| j vr|dkrq|	| q|	S )NTrm   Fr   )r   r   r   ru   r   rp   )r	   Z
terminatesr   rM   some_changeZ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vr|| jvr|dkr|||f qq
|S r   )r   r   r   r   rp   )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   ru   rp   )r	   Z
unused_tokrD   rO   r
   r
   r   unused_terminals  s
    zGrammar.unused_terminalsc                 C   s8   g }| j  D ]$\}}|s| j| d }|| q|S Nr   )r   ru   r   rp   )r	   Zunused_prodrD   rO   r   r
   r
   r   unused_rules  s    zGrammar.unused_rulesc                 C   s@   g }| j D ]0}|| jv s
|| jv s
||| j | d f q
|S r   )r   r   r   rp   )r	   ZunusedZtermnamer
   r
   r   unused_precedence  s
    
zGrammar.unused_precedencec                 C   sZ   g }|D ]B}d}| j | D ]$}|dkr,d}q||vr|| q|rFq qVq|d |S )NF<empty>T)r   rp   )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 | vrn| j | | d}qnq^qP|sFqqF| j S )Nrm   FT)r   r   r   r   r  r   rp   )r	   r   rM   r   r   r   r
   r
   r   compute_first.  s"    



zGrammar.compute_firstc           
      C   s<  | j r| j S | js|   | jD ]}g | j |< q |s@| jd j}dg| j |< d}| jdd  D ]}t|jD ]\}}|| jv rl| |j|d d  }d}|D ]:}	|	dkr|	| j | vr| j | 	|	 d}|	dkrd}q|s|t
|jd krl| j |j D ]*}	|	| j | v r| j | 	|	 d} qqlq^|sLq6qL| j S )Nrs   rm   Fr  T)r   r   r  r   r   r   r   r   r  rp   r"   )
r	   r   kdidaddr   rQ   BZfstZhasemptyr   r
   r
   r   compute_followS  s:    

zGrammar.compute_followc              
   C   s   | j D ]}|}d}g }|t|kr(d }npt||}z| j|j|d   |_W n ttfyh   g |_Y n0 z|j|d  |_W n ty   d |_Y n0 ||_	|sq|
| |}|d7 }q||_qd S Nr   rs   )r   r"   r   r   r   r   r   r   r   r   rp   r   )r	   r   ZlastlrirQ   r   Zlrir
   r
   r   build_lritems  s,    



zGrammar.build_lritems)Nr   r   )N)N)r   r   r   r   rT   rN   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   )rg   ri   re   	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)rK   types
ModuleTypeexecr}   modulesZ_tabversion__tabversion__r  Z
_lr_actionrg   Z_lr_gotori   re   Z_lr_productionsrp   r   Z
_lr_methodr  Z_lr_signature)r	   moduler   r   r
   r
   r   
read_table  s    


zLRTable.read_tablec                 C   s   zdd l }W n ty&   dd l}Y n0 tj|s8tt|d}||}|tkr\t	d||| _
||}||| _||| _||}g | _|D ]}| jt|  q|  |S )Nr   rbr  )cPickleImportErrorpickleospathexistsopenloadr  r  r  rg   ri   re   rp   r   close)r	   filenamer  Zin_fZ
tabversion	signaturerf   r   r
   r
   r   read_pickle  s(    



zLRTable.read_picklec                 C   s   | j D ]}|| qd S r   )re   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 ]}
|
||  vrx||   |
 qxq2||  |krt||d < ||  ||d < | }|| krt||d < ||  ||d < | }qd S )Nr   r   )rp   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   r3  +  s   r3  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   )r3  grammarr  r   logrg   ri   r   re   lr_goto_cachelr0_cidhash
_add_countZsr_conflictZrr_conflictZ	conflictssr_conflictsrr_conflictsr
  r  r  lr_parse_table)r	   r5  methodr6  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 )Nrs   TF	lr0_addedr   )r9  r   rW   rp   r   r>  )r	   IJr  rR   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 )Nrm   )r7  r   r%   r   r   rp   rA  )	r	   r?  r  grD   Zgsr   rM   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 ]@}| ||}|rt|| jv rqt|| jt|< |	| qq@|S r	  )
rA  r5  r   r   r8  r%   r"   r   rD  rp   )	r	   CrQ   r?  ZasymsiirD   r  rB  r
   r
   r   	lr0_items  s(    

zLRGeneratedTable.lr0_itemsc                 C   sx   t  }d}| jjdd  D ]@}|jdkr6||j q|jD ]}||vr< qq<||j qt||krjqtt|}q
|S r	  )r   r5  r   r"   r   r   r   )r	   nullableZnum_nullabler   r   r
   r
   r   compute_nullable_nonterminals  s    


z.LRGeneratedTable.compute_nullable_nonterminalsc                 C   sj   g }t |D ]X\}}|D ]J}|j|jd k r||j|jd  f}|d | jjv r||vr|| qq|S r   )r   r   r"   r   r5  r   rp   )r	   rE  transZstatenorx   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v r |	|vr ||	 q |dkr|| jjd jd kr|d |S )Nrs   r   rm   )rD  r   r"   r   r5  r   rp   r   )
r	   rE  rJ  rH  rx   r)  termsrB  r   r1  r
   r
   r   dr_relation	  s    
zLRGeneratedTable.dr_relationc                 C   sr   g }|\}}|  || |}| jt|d}|D ]:}	|	j|	jd k r2|	j|	jd  }
|
|v r2|||
f q2|S )Nr   rs   )rD  r8  r   r%   r   r"   r   rp   )r	   rE  rJ  emptyr/  rx   r)  rB  rR   r   r1  r
   r
   r   reads_relation	  s    zLRGeneratedTable.reads_relationc                 C   s  i }i }i }|D ]}d||< q|D ]\}}	g }
g }|| D ],}|j |	krNq<|j}|}||jd k r|d }|j| }||f|v r|d }||jk r|j| | jjv rq|j| |vrq|d }q|||f | || |}| j	t
|d}qX|| D ]j}|j |j krq|j|jkr"qd}||jk rZ|j| |j|d  krNq|d }q&|
||f qq<|D ]*}||vrg ||< || ||	f qp|
|||	f< q"||fS )Nrs   r   r   )r   r   r"   r   r5  r   rp   rD  r8  r   r%   )r	   rE  rJ  rH  ZlookdictZincludedictZdtransr   rx   r)  ZlookbZincludesr   r   rR   ZlirB  r&   rQ   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   )rM  r  rE  rH  r	   r
   r   <lambda>	  rJ   z4LRGeneratedTable.compute_read_sets.<locals>.<lambda>c                    s     | S r   )rO  rQ  rR  r
   r   rS  	  rJ   r+  )r	   rE  ntransrH  r(  r'  r*  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  	  rJ   z6LRGeneratedTable.compute_follow_sets.<locals>.<lambda>c                    s     | g S r   )r   rQ  )inclsetsr
   r   rS  	  rJ   rT  )r	   rU  rW  rX  r(  r'  r*  r
   )rX  rW  r   compute_follow_sets	  s    z$LRGeneratedTable.compute_follow_setsc           	      C   sl   |  D ]^\}}|D ]P\}}||jvr0g |j|< ||g }|D ]"}||j| vr@|j| | q@qqd S r   )ru   r   r   rp   )	r	   Z	lookbacksZ	followsetrJ  Zlbrx   r   r   r1  r
   r
   r   add_lookaheads	  s    

zLRGeneratedTable.add_lookaheadsc                 C   sP   |   }| |}| |||}| |||\}}| |||}| || d S r   )rI  rK  rV  rP  rY  rZ  )r	   rE  rH  rJ  rW  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rd|d	< ||d	< q| jdkr|j| }n| j j|j }|D ]}|
||d
|j
|f f ||}|d ur|dkr*||d\}}||j
 j\}}||k s||kr|dkr|j
 ||< |||< |s|s|d| | j||df ||j
  jd7  _nB||kr|dkrd ||< n$|s|d| | j||df n|dk r||  }||j
 }|j|jkr|j
 ||< |||< || }}||j
  jd7  _||j
  jd8  _n
|| }}| j|||f |d||| j
||  ntd| n(|j
 ||< |||< ||j
  jd7  _qq|j}|j|d  }|| j jv r| |	|}| jt|d}|dkr|
||d| f ||}|d ur|dkr||krt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|||< |||< qi }|
D ]>\}}}||v r||| u r|d|| d|||f< q|d d}|
D ]P\}}}||v r ||| ur ||f|vr |d|| d}d|||f< q |rb|d i } |	D ]*}!|!jD ]}"|"| j jv rtd | |"< qtqj| D ]D}#| |	|#}| jt|d}|dkr|||#< |d|#| q|||< |||< |||< |d7 }qXd S )NzParsing method: %sr   r   r   zstate %dz    (%d) %srs   r   rm   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) r5  r   r   ri   rg   r6  r   r  rG  r[  r   r"   r   r   r   r   rp   r   r   r:  r   r   r;  r3  r   r   rD  r8  r%   r   r   r   )$r	   r   r   rj   rh   r6  ZactionprE  str?  ZactlistZ	st_actionZ
st_actionpZst_gotor   Zlaheadsr1  r&   ZsprecZslevelZrprecZrlevelZoldpZppZchosenpZrejectprQ   rB  rR   Z	_actprintr   Znot_usedZnkeysrF  rD   rM   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\}}||}|sg g f}|||< |d |	 |d | qqz|	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 |ri }| j D ]Z\}	}
|
 D ]F\}}||}|sg g f}|||< |d |	 |d | qʐq|	d | D ]h\}}|	d
|  |d D ]}|	d|  qF|	d |d D ]}|	d|  qn|	d q(|	d |	d nF|	d | j D ]&\}}|	d|d |d |f  q|	d |	d | jD ]Z}|jr:|	d|j|j|j|jtj
|j|jf  n|	dt||j|jf  q|	d |  W n( ty } z W Y d }~n
d }~0 0 d S )Nz"Won't overwrite existing tabmoduler   r   z.pywz
# %s
# This file is automatically generated. Do not edit.
# pylint: disable=W,C,R
_tabversion = %r

_lr_method = %r

_lr_signature = %r
    rs   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]
)rK   r  r  IOErrorsplitr  r  r   r  r   basenamer  r  rg   ru   r   rp   ri   re   r   r>   r   r"   r   r   r   )r	   	tabmodule	outputdirr"  Zbasemodulenamer!  r   Zsmallerru   rD   Zndr   rO   rQ   r  r   er
   r
   r   write_table
  s    
	





 




	
 



 
zLRGeneratedTable.write_tablec                 C   s  zdd l }W n ty&   dd l}Y n0 t|d}|t|t || j|t |||t || j|t || j	|t g }| j
D ]T}|jr||j|j|j|jtj|j|jf q|t||j|jd d d f q|||t W d    n1 s0    Y  d S )Nr   wb)r  r  r  r  dumpr  pickle_protocolr  rg   ri   re   r   rp   r>   r   r"   r  r  rb  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   rA  rD  rG  rI  rK  rM  rO  rP  rV  rY  rZ  r[  r<  rf  rj  r
   r
   r
   r   r4  5  s"   
%#8+P B
{r4  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
    

rp  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rtd||f ||||	|
f W q ty    Y q ty   td	||| f Y q0 q|S )
Nrs   r   |z%s:%d: Misplaced '|'   :z::=z!%s:%d: Syntax error. Expected ':'z%s:%d: Syntax error in rule %r)
splitlinesra  rb   rp   	Exceptionstrip)docr   r   r5  ZpstringsZlastpZdlineZpsr   r   r   Zassignr
   r
   r   parse_grammarQ  s6    rx  c                   @   s   e Zd Zd ddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )!ParserReflectNc                 C   sL   || _ d | _d | _d | _t | _g | _d| _|d u rBtt	j
| _n|| _d S )NF)r   r   
error_functokensr   r  r5  r   r   r}   r~   r6  )r	   r   r6  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y   Y n0 d|S )Nr   c                 S   s   g | ]}d  |qS )r   )r   )rH   r   r
   r
   r   rI     rJ   z+ParserReflect.signature.<locals>.<listcomp>r   r   )r   rp   r   r   r{  pfuncs	TypeError
ValueError)r	   partsr   r
   r
   r   r"    s    
zParserReflect.signaturec              	   C   s   t d}| jD ]}zt|\}}W n ty<   Y qY n0 i }t|D ]^\}}|d7 }||}|rJ|d}|	|}	|	s|||< qJt
|}
| jd|
|||	 qJqd S )Nz\s*def\s+(p_[a-zA-Z_0-9]*)\(rs   z;%s:%d: Function %s redefined. Previously defined on line %d)recompiler  inspectZgetsourcelinesr`  r   r   groupr   getsourcefiler6  r   )r	   Zfrer  linesZlinenZ	counthashr   r   r   prevr!  r
   r
   r   r    s&    







zParserReflect.validate_modulesc                 C   s   | j d| _d S )Nr   )r   r   r   r;   r
   r
   r   r|    s    zParserReflect.get_startc                 C   s&   | j d ur"t| j ts"| jd d S )Nz'start' must be a string)r   rK   string_typesr6  r   r;   r
   r
   r   r    s    
zParserReflect.validate_startc                 C   s   | j d| _d S )Np_error)r   r   rz  r;   r
   r
   r   r}    s    zParserReflect.get_error_funcc                 C   s   | j rt| 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   rs   z2'p_error' defined, but is not a function or methodTz$%s:%d: p_error() requires 1 argument)rz  rK   r  FunctionType
MethodTyper6  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   r6  r   rK   rv   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 rF| jd| || q,d S )Nr   z.Illegal token name 'error'. Is a reserved wordTzToken %r multiply defined)r{  r6  r   r   r   r   )r	   r   rM   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 qq<|| _
d S )
Nz"precedence must be a list or tupleTzBad precedence tablerr  z?Malformed precedence entry %s. Must be (assoc, term, ..., term)r   z)precedence associativity must be a stringrs   z precedence items must be strings)r   rK   rv   r   r6  r   r   r"   r  rp   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   rs   rr  r   r=   )Z
p_functionr
   r
   r   rS  F  s
    
z.ParserReflect.get_pfunctions.<locals>.<lambda>)key)r   ru   
startswithrK   r  r  r  rW   r  r  r  r  rp   __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 qW n< ty6 } z"| jt| d| _W Y d }~n
d }~0 0 | j| q.| j D ]\}}|d	r|t|tjtj	fr|qP|d
rqP|d	r|dkr| jd| t|tjr|j
jdkst|tj	rP|jj
jdkrP|jrPz8|jd}|d dkr(| jd|j
j|j
j| W n ty>   Y n0 qP|| _d S )Nr   z+no rules of the form p_rulename are definedTrr  rs   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   rs  z9%s:%d: Possible grammar rule %r defined without p_ prefix)r"   r  r6  r   r  r  r   rK   r  r  r  r  r   r  r   rx  rp   rb   r>   r  r   ru   r  r  __func__ra  r  r  r   r5  )r	   r5  r   r  r   rw  r   r   ZreqargsZparsed_grB  re  rM   rO   r
   r
   r   r  N  sf    

 

z!ParserReflect.validate_pfunctions)N)r   r   r   r   r  r  r"  r  r|  r  r}  r  r~  r  r  r  r  r  r
   r
   r
   r   ry  z  s   

ry  c           <         s	  |d u rt }|rd}|d u r&ttj} r fddt D }t|}d|vrdtj|d  j|d< d|vrd|v rttj|d  drtj|d  j	|d< nt
d}|	d u rt|tjr|j}nLd|vr|d }n:|d}d|d d	 }td
|  ttj| dd}tj|}	|d}|rNt|trNd|vrN|d | }|d ur`||d< t||d}|  |jrtd| }zt }|r||}n
||}|s||krz&||j  t!||j"}|j#a#|W W S  t$y } z|%d| W Y d }~n
d }~0 0 W nF t&yP } z|%t| W Y d }~nd }~0  t'yb   Y n0 |
d u r|rztt(tj|	|d}
W n> t)y } z$|%d||f  t* }
W Y d }~n
d }~0 0 nt* }
|
+dt, d}|- rtd|j"s|%d t.|j/}|j0D ]R\}}}z|1||| W n2 t2yj } z|%d| W Y d }~n
d }~0 0 q|j3D ]d\}}|\} }!}"}#z|4|"|#|| |! W n6 t2y } z|d| d}W Y d }~n
d }~0 0 qvz&|d u r|5|j6 n
|5| W n8 t2y: } z|t| d}W Y d }~n
d }~0 0 |rJtd|7 }$|$D ]"\}%}&|d|&j8|&j9|% d}qV|: }'|'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rT|%d t?|'dkrr|%d t?|' t?|*dkr|%d! t?|*dkr|%d"t?|* |rx|
+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  qB|
+d |r|D }.|.D ]}/|%d)|/ q|E }0|0D ]}1|d*|1 d}q|F }2|2D ]\}}|d+|| d}q|rtd|r|Gd,|  tH|| |
}|rt?|jI}3|3dkr>|%d- n|3dkrT|%d.|3 t?|jJ}4|4dkrt|%d/ n|4dkr|%d0|4 |r|jIs|jJr|
%d |
%d1 |
%d |jID ]\}5}6}7|
%d2|6|5|7 qtK }8|jJD ]x\}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sr|:|;vrr|
%d5|: |%d5|: |;O|: qr|	rz&|P||	| |tjv rtj|= W n8 t)	y } z|%d6||f  W Y d }~n
d }~0 0 |	rjz|Q|| W n8 t)	yh } z|%d6||f  W Y d }~n
d }~0 0 ||j  t!||j"}|j#a#|S )7Nr   c                    s   g | ]}|t  |fqS r
   )rW   )rH   r  r  r
   r   rI     rJ   zyacc.<locals>.<listcomp>__file__r   __package__rr  r   r   r  r   r   )r6  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 usedrs   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  rJ   z*Nonterminals, with rules where they appearc                 S   s   g | ]}t |qS r
   r=   rG   r
   r
   r   rI   U  rJ   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  rp  rK   r  r  ra  r   r  rW   r  r  dirnamer   r>   ry  r  r   r   r"  r  r#  r  r$  r   rc   rz  r   ru  r   r  r  r  r`  r   r   __version__r  r   r{  r  r   r   r5  r   r   r   r   r   r   r   r   r   r   r   r"   rv   r   r  r   r   r   r   r   r4  r:  r;  r   r%   r   r   rp   rf  rj  )<r=  r   r  rc  r   Zcheck_recursionoptimizeZwrite_tablesZ	debugfilerd  ZdebuglogZerrorlogZ
picklefileZ_itemsr   Zsrcfiler  ZpkgnamepkgZpinfor"  ZlrZread_signaturer7   re  errorsr5  r   r   r   funcnameZgramr   r   r   r   r   rq   r   r   rM   r   r   rL  ZnontermsZnontermZunreachableur   infZunused_precZnum_srZnum_rrrx   r   Z
resolutionZalready_reportedZruleZrejectedZwarned_neverr
   r  r   yacc  s   







&"



&












(



(









((r  );r  r  r}   os.pathr  r  r,   r  r  Z	yaccdebugZ
debug_filer  Z
default_lrr   r{   r#   ri  version_infoZ
basestringr  r>   maxsizer-  objectr   r   ru  r   r)   r+   r/   r3   r1   r.   r0   r2   r4   r8   r9   r@   rc   r  r   r   r   r   r   r   r   r  r  r+  r%  r3  r4  rp  rx  ry  r  r
   r
   r
   r   <module>>   s   
7       m
H.   rT
      )  
