3
+:X}                @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZdZdZ	dZ
dZdZdZdZdZd	Zd Zejd  dk rteZneZejZG d
d deZG dd deZG dd deZdd Zdd Zdada da!dZ"dd Z#dd Z$dd Z%dd Z&G dd dZ'G dd  d Z(G d!d" d"Z)e j*d#Z+G d$d% d%eZ,G d&d' d'eZ-G d(d) d)eZ.d*d+ Z/G d,d- d-eZ0G d.d/ d/eZ1G d0d1 d1eZ2G d2d3 d3eZ3d4d5 Z4d6d7 Z5G d8d9 d9eZ6G d:d; d;e3Z7d<d= Z8d>d? Z9G d@dA dAeZ:de
deddddeddddfdBdCZ;dS )D    Nz3.8Tz
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	   R/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/pycparser/ply/yacc.py__init__n   s    zPlyLogger.__init__c             O   s   | j j|| d  d S )N
)r   write)r   msgargskwargsr	   r	   r
   debugq   s    zPlyLogger.debugc             O   s   | j jd||  d  d S )Nz	WARNING: r   )r   r   )r   r   r   r   r	   r	   r
   warningv   s    zPlyLogger.warningc             O   s   | j jd||  d  d S )NzERROR: r   )r   r   )r   r   r   r   r	   r	   r
   errory   s    zPlyLogger.errorN)	__name__
__module____qualname__r   r   infor   r   criticalr	   r	   r	   r
   r   m   s   r   c               @   s   e Zd Zdd Zdd ZdS )
NullLoggerc             C   s   | S )Nr	   )r   namer	   r	   r
   __getattribute__   s    zNullLogger.__getattribute__c             O   s   | S )Nr	   )r   r   r   r	   r	   r
   __call__   s    zNullLogger.__call__N)r   r   r   r   r   r	   r	   r	   r
   r      s   r   c               @   s   e Zd ZdS )	YaccErrorN)r   r   r   r	   r	   r	   r
   r      s   r   c             C   sP   t | }d|krt |}t|tkr4|d t d }dt| jt| |f }|S )Nr   z ...z<%s @ 0x%x> (%s))reprlenresultlimittyper   id)rrepr_strresultr	   r	   r
   format_result   s    r&   c             C   sB   t | }d|krt |}t|dk r(|S dt| jt| f S d S )Nr      z<%s @ 0x%x>)r   r   r!   r   r"   )r#   r$   r	   r	   r
   format_stack_entry   s    r(   a  PLY: Don't use global functions errok(), token(), and restart() in p_error().
Instead, invoke the methods on the associated parser instance:

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

    parser = yacc.yacc()
c               C   s   t jt t S )N)warningswarn_warnmsg_errokr	   r	   r	   r
   errok   s    
r-   c               C   s   t jt t S )N)r)   r*   r+   _restartr	   r	   r	   r
   restart   s    
r/   c               C   s   t jt t S )N)r)   r*   r+   _tokenr	   r	   r	   r
   token   s    
r1   c             C   s>   |j a|ja|ja| |}y
bbbW n tk
r8   Y nX |S )N)r-   r,   r1   r0   r/   r.   	NameError)	errorfuncr1   parserr#   r	   r	   r
   call_errorfunc   s    
r5   c               @   s   e Zd Zdd Zdd ZdS )
YaccSymbolc             C   s   | j S )N)r!   )r   r	   r	   r
   __str__   s    zYaccSymbol.__str__c             C   s   t | S )N)str)r   r	   r	   r
   __repr__   s    zYaccSymbol.__repr__N)r   r   r   r7   r9   r	   r	   r	   r
   r6      s   r6   c               @   sf   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )YaccProductionNc             C   s   || _ || _d | _d | _d S )N)slicestacklexerr4   )r   sr<   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).0r>   r	   r	   r
   
<listcomp>   s    z.YaccProduction.__getitem__.<locals>.<listcomp>r   )
isinstancer;   r?   r<   )r   nr	   r	   r
   __getitem__   s
    
zYaccProduction.__getitem__c             C   s   || j | _d S )N)r;   r?   )r   rC   vr	   r	   r
   __setitem__   s    zYaccProduction.__setitem__c             C   s   dd | j || D S )Nc             S   s   g | ]
}|j qS r	   )r?   )r@   r>   r	   r	   r
   rA      s    z/YaccProduction.__getslice__.<locals>.<listcomp>)r;   )r   ijr	   r	   r
   __getslice__   s    zYaccProduction.__getslice__c             C   s
   t | jS )N)r   r;   )r   r	   r	   r
   __len__   s    zYaccProduction.__len__c             C   s   t | j| ddS )Nlinenor   )getattrr;   )r   rC   r	   r	   r
   rK     s    zYaccProduction.linenoc             C   s   || j | _d S )N)r;   rK   )r   rC   rK   r	   r	   r
   
set_lineno  s    zYaccProduction.set_linenoc             C   s,   t | j| dd}t | j| d|}||fS )NrK   r   	endlineno)rL   r;   )r   rC   	startlineZendliner	   r	   r
   linespan  s    zYaccProduction.linespanc             C   s   t | j| ddS )Nlexposr   )rL   r;   )r   rC   r	   r	   r
   rQ     s    zYaccProduction.lexposc             C   s,   t | j| dd}t | j| d|}||fS )NrQ   r   	endlexpos)rL   r;   )r   rC   startposendposr	   r	   r
   lexspan  s    zYaccProduction.lexspanc             C   s   t d S )N)SyntaxError)r   r	   r	   r
   r     s    zYaccProduction.error)N)r   r   r   r   rD   rF   rI   rJ   rK   rM   rP   rQ   rU   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| _|| _| j  d| _d S )NT)	lr_productionsproductions	lr_actionactionlr_gotogotor3   set_defaulted_stateserrorok)r   ZlrtabZerrorfr	   r	   r
   r     s    zLRParser.__init__c             C   s
   d| _ d S )NT)r_   )r   r	   r	   r
   r-   &  s    zLRParser.errokc             C   s@   | j d d = | jd d = t }d|_| jj| | j jd d S )Nz$endr   )
statestacksymstackr6   r!   append)r   symr	   r	   r
   r/   )  s    zLRParser.restartc             C   sT   i | _ xH| jj D ]:\}}t|j }t|dkr|d dk r|d | j |< qW d S )N   r   )defaulted_statesr[   itemslistvaluesr   )r   stateactionsZrulesr	   r	   r
   r^   9  s
    zLRParser.set_defaulted_statesc             C   s
   i | _ d S )N)re   )r   r	   r	   r
   disable_defaulted_states@  s    z!LRParser.disable_defaulted_statesNFc             C   sZ   |st r.t|trttj}| j|||||S |rD| j|||||S | j|||||S d S )N)		yaccdevelrB   intr   sysstderr
parsedebugparseoptparseopt_notrack)r   inputr=   r   tracking	tokenfuncr	   r	   r
   parseC  s    

zLRParser.parsec              C   s  d }g }| j }| j}	| j}
| j}td }d}|jd |sLddlm} |j}||_| |_	|d k	rj|j
| |d krz|j}n|}|| _g }|| _g }|| _||_d }|jd t }d|_|j| d}x|jd |jd| ||kr.|s| s| }n|j }|st }d|_|j}|| j|}n|| }|jd||  |jd	d
djdd |D dd  t|f j  |d k	rp|dkr|j| |}|jd| |j| d }|r|d8 }q|dk r4|
|  }|j}|j}t }||_d |_|rB|jd|jddjdd || d  D  d |	|d%|   |  n|jd|jg |	|d&  |  |r||| d d  }||d< |r|d }|j|_|j|_|d' }t|d|j|_t|d|j|_||_ y^|| d = || d = |j!| |jdt"|d  |j| |	|d(  | }|j| W q t#k
rv   |j| |j  |j  |d) }d|_|}t$}d| _%Y qX qn|r|j|_|j|_|g}||_ yF|j!| |jdt"|d  |j| |	|d*  | }|j| W q t#k
r0   |j| |j  |j  |d+ }d|_|}t$}d| _%Y qX q|dkrp|d, }t|dd }|jdt"| |jd |S |d kr|j&dd
djdd |D dd  t|f j  |dks| j%rt$}d| _%|}|jdkrd }| j'r"|r t(|d r ||_t)| j'|| }| j%r|}d }qn`|rrt(|dr<|j}nd}|r^t*j+j,d ||jf  nt*j+j,d!|j  nt*j+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rl|d- }|jdkr|rt|d|j|_t|d#|j|_d }qt }d|_t(|dr<|j |_|_t(|d#rV|j |_|_||_|j| |}q|j }|r|j|_|j|_|j  |d. }qt-d$qW d S )/Nr   zPLY: PARSE DEBUG STARTrd   )lexz$end zState  : %sz#Defaulted state %s: Reduce using %dzStack  : %sz%s . %s c             S   s   g | ]
}|j qS r	   )r!   )r@   xxr	   r	   r
   rA     s    z'LRParser.parsedebug.<locals>.<listcomp>z Action : Shift and goto state %sz3Action : Reduce rule [%s] with %s and goto state %d[,c             S   s   g | ]}t |jqS r	   )r(   r?   )r@   Z_vr	   r	   r
   rA     s    ]rN   rR   zResult : %sr   Fr?   zDone   : Returning %szPLY: PARSE DEBUG ENDzError  : %sc             S   s   g | ]
}|j qS r	   )r!   )r@   rz   r	   r	   r
   rA   =  s    r=   rK   z(yacc: Syntax error at line %d, token=%s
zyacc: Syntax error, token=%sz yacc: Parse error in input. EOF
rQ   zyacc: internal parser error!!!
r~   r~   r~   r~   r~   r~   r~   r~   r~   ).r[   r]   rY   re   r:   r   rx   rw   r=   r4   rs   r1   r`   ra   r<   rb   r6   r!   r   popgetjoinr8   lstripr   r   r?   rK   rQ   rL   rN   rR   r;   callabler&   rV   error_countr_   r   r3   hasattrr5   rn   ro   r   RuntimeError) r   rs   r=   r   rt   ru   	lookaheadlookaheadstackrj   r]   prodre   pslice
errorcountrw   	get_tokenr`   ra   errtokenrc   ri   ltypetppnameplentargt1rC   r%   tokrK   r	   r	   r
   rp   \  sv   





.






$








.

zLRParser.parsedebugc              C   sV  d }g }| j }| j}	| j}
| j}td }d}|sBddlm} |j}||_| |_|d k	r`|j	| |d krp|j
}n|}|| _
g }|| _g }|| _||_d }|jd t }d|_|j| d}x||kr|s|s| }n|j }|st }d|_|j}|| j|}n|| }|d k	rN|dkrN|j| |}|j| 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|_||_yJ|| d = || d = |j| |j| |	|d  | }|j| W q tk
r   |j| |j  |j  |d }d|_|}t}d| _Y qX qn|r|j|_|j|_|g}||_y2|j| |j| |	|d  | }|j| W q tk
r(   |j| |j  |j  |d }d|_|}t}d| _Y qX q|dkrN|d }t|d	d }|S |d krF|dksj| jr.t}d| _|}|jdkrd }| j r|rt!|d
 r||_t"| j || }| jr,|}d }qn`|rt!|dr|j}nd}|rt#j$j%d||jf  nt#j$j%d|j  nt#j$j%d d S nt}t|dkrd|jdkrdd }d }d}|d d = q|jdkrtd 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 |_|_||_|j| |}q|j }|r4|j|_|j|_|j  |d }qt&dqW d S )Nr   rd   )rw   z$endrN   rR   r   Fr?   r=   rK   z(yacc: Syntax error at line %d, token=%s
zyacc: Syntax error, token=%sz yacc: Parse error in input. EOF
rQ   zyacc: internal parser error!!!
r~   r~   r~   r~   r~   r~   r~   r~   )'r[   r]   rY   re   r:   rx   rw   r=   r4   rs   r1   r`   ra   r<   rb   r6   r!   r   r   r   r   r?   rK   rQ   rL   rN   rR   r;   r   rV   r   r_   r3   r   r5   rn   ro   r   r   ) r   rs   r=   r   rt   ru   r   r   rj   r]   r   re   r   r   rw   r   r`   ra   r   rc   ri   r   r   r   r   r   r   r   rC   r%   r   rK   r	   r	   r
   rq     sP   



















zLRParser.parseoptc             C   s  d }g }| j }| j}	| j}
| j}td }d}|sBddlm} |j}||_| |_|d k	r`|j	| |d krp|j
}n|}|| _
g }|| _g }|| _||_d }|jd t }d|_|j| d}x||kr|s|s| }n|j }|st }d|_|j}|| j|}n|| }|d k	r|dkrN|j| |}|j| d }|r|d8 }q|dk r|
|  }|j}|j}t }||_d |_|rB|| d d  }||d< ||_yJ|| d = || d = |j| |j| |	|d  | }|j| W q tk
r<   |j| |j  |j  |d }d|_|}t}d| _Y qX qn|g}||_y2|j| |j| |	|d  | }|j| W q tk
r   |j| |j  |j  |d }d|_|}t}d| _Y qX q|dkr|d }t|dd }|S |d kr|dks| jrt}d| _|}|jdkr,d }| jrp|rNt|d rN||_t| j|| }| jr|}d }qn`|rt|d	r|j}nd}|rt j!j"d
||jf  nt j!j"d|j  nt j!j"d d S nt}t|dkr|jdkrd }d }d}|d d = q|jdkrd S |jdkr|d }|jdkr>d }qt }d|_t|d	rd|j |_|_#t|dr~|j$ |_$|_%||_|j| |}q|j }|j  |d }qt&dqW d S )Nr   rd   )rw   z$endr   Fr?   r=   rK   z(yacc: Syntax error at line %d, token=%s
zyacc: Syntax error, token=%sz yacc: Parse error in input. EOF
rQ   zyacc: internal parser error!!!
r~   r~   r~   r~   r~   r~   r~   )'r[   r]   rY   re   r:   rx   rw   r=   r4   rs   r1   r`   ra   r<   rb   r6   r!   r   r   r   r   r?   r;   r   rV   r   r_   rL   r3   r   r5   rK   rn   ro   r   rN   rQ   rR   r   )r   rs   r=   r   rt   ru   r   r   rj   r]   r   re   r   r   rw   r   r`   ra   r   rc   ri   r   r   r   r   r   r   rC   r%   r   rK   r	   r	   r
   rr     s0   



















zLRParser.parseopt_notrack)NNFFN)NNFFN)NNFFN)NNFFN)r   r   r   r   r-   r/   r^   rk   rv   rp   rq   rr   r	   r	   r	   r
   rW     s   

  W
  .rW   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   rightNrx   c       	      C   s   || _ t|| _|| _|| _d | _|| _|| _|| _t	| j| _	g | _
x$| jD ]}|| j
krN| j
j| qNW g | _d | _| jrd| j dj| jf | _nd| j  | _d S )Nz%s -> %sry   z%s -> <empty>)r   tupler   numberfuncr   filelineprecr   usymsrb   lr_itemslr_nextr   r8   )	r   r   r   r   
precedencer   r   r   r>   r	   r	   r
   r     s$    

zProduction.__init__c             C   s   | j S )N)r8   )r   r	   r	   r
   r7   +  s    zProduction.__str__c             C   s   dt |  d S )NzProduction())r8   )r   r	   r	   r
   r9   .  s    zProduction.__repr__c             C   s
   t | jS )N)r   r   )r   r	   r	   r
   rJ   1  s    zProduction.__len__c             C   s   dS )Nrd   r	   )r   r	   r	   r
   __nonzero__4  s    zProduction.__nonzero__c             C   s
   | j | S )N)r   )r   indexr	   r	   r
   rD   7  s    zProduction.__getitem__c             C   s   |t | jkrd S t| |}yt|j|d   |_W n ttfk
rR   g |_Y nX y|j|d  |_W n tk
r   d |_Y nX |S )Nrd   )r   r   LRItem	Prodnameslr_after
IndexErrorKeyError	lr_before)r   rC   r   r	   r	   r
   lr_item;  s    
zProduction.lr_itemc             C   s   | j r|| j  | _d S )N)r   r   )r   pdictr	   r	   r
   bindK  s    zProduction.bindr   r   )r   Nrx   r   )r   r   r   reducedr   r7   r9   rJ   r   rD   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 )N)r   r   r   r   r   r   r8   )r   r8   r   r   r   r   r   r	   r	   r
   r   T  s    zMiniProduction.__init__c             C   s   | j S )N)r8   )r   r	   r	   r
   r7   ]  s    zMiniProduction.__str__c             C   s
   d| j  S )NzMiniProduction(%s))r8   )r   r	   r	   r
   r9   `  s    zMiniProduction.__repr__c             C   s   | j r|| j  | _d S )N)r   r   )r   r   r	   r	   r
   r   d  s    zMiniProduction.bindN)r   r   r   r   r7   r9   r   r	   r	   r	   r
   r   S  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j|d t| j| _t| j| _|j	| _	d S )N.)
r   rg   r   r   lr_index
lookaheadsinsertr   r   r   )r   r   rC   r	   r	   r
   r     s    zLRItem.__init__c             C   s,   | j rd| jdj| j f }n
d| j }|S )Nz%s -> %sry   z%s -> <empty>)r   r   r   )r   r>   r	   r	   r
   r7     s    
zLRItem.__str__c             C   s   dt |  d S )NzLRItem(r   )r8   )r   r	   r	   r
   r9     s    zLRItem.__repr__N)r   r   r   r   r7   r9   r	   r	   r	   r
   r     s   r   c             C   s:   t | d }x(|dkr4| | |kr*| | S |d8 }qW d S )Nrd   r   )r   )symbols	terminalsrG   r	   r	   r
   rightmost_terminal  s    
r   c               @   s   e Zd ZdS )GrammarErrorN)r   r   r   r	   r	   r	   r
   r     s   r   c               @   s   e Zd Zdd Zdd Zdd Zdd Zd$d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   sf   d g| _ i | _i | _i | _x|D ]}g | j|< q W 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 )N)r   r   )r   r	   r	   r
   rJ     s    zGrammar.__len__c             C   s
   | j | S )N)r   )r   r   r	   r	   r
   rD     s    zGrammar.__getitem__c             C   sL   | j d gkstd|| jkr*td| |dkr:td||f| j|< d S )Nz2Must call set_precedence() before add_production()z,Precedence already specified for terminal %rleftr   nonassocz:Associativity must be one of 'left','right', or 'nonassoc')r   r   r   )r   AssertionErrorr   r   )r   r   assoclevelr	   r	   r
   set_precedence  s    
zGrammar.set_precedenceNrx   r   c             C   s  || j krtd|||f |dkr6td|||f tj|sRtd|||f xt|D ]\}}|d dkryJt|}t|dkrtd||||f || j krg | j |< |||< w\W n tk
r   Y nX tj| r\|d	kr\td
||||f q\W d	|kr|d d	kr$td||f |d d	krBtd||f |d }	| jj	|	}
|
sptd|||	f n| j
j|	 |dd = nt|| j }	| jj	|	d}
d||f }|| jkr| j| }td|||f d|j|jf  t| j}|| jkrg | j|< xR|D ]J}|| j kr.| j | j| n&|| jkrDg | j|< | j| j| qW t||||
|||}| jj| || j|< y| j| j| W n" tk
r   |g| j|< Y nX d S )Nz7%s:%d: Illegal rule name %r. Already defined as a tokenr   z5%s:%d: Illegal rule name %r. error is a reserved wordz%s:%d: Illegal rule name %rr   z'"rd   zA%s:%d: Literal token %s in rule %r may only be a single characterz%precz!%s:%d: Illegal name %r in rule %rz+%s:%d: Syntax error. Nothing follows %%prec   zH%s:%d: Syntax error. %%prec can only appear at the end of a grammar rulez/%s:%d: Nothing known about the precedence of %rr   z%s -> %sz%s:%d: Duplicate rule %s. zPrevious definition at %s:%dr~   r~   r   )r   r   )r   r   _is_identifiermatch	enumerateevalr   rV   r   r   r   addr   r   r   r   r   r   rb   r   r   r   )r   prodnamesymsr   r   r   rC   r>   cZprecnameZprodprecmapmZpnumberr   r   r	   r	   r
   add_production  sp    










zGrammar.add_productionc             C   sT   |s| j d j}|| jkr&td| tdd|g| j d< | j| jd || _d S )Nrd   zstart symbol %s undefinedr   zS')r   r   r   r   r   rb   r   )r   startr	   r	   r
   	set_startO  s    
zGrammar.set_startc                s>    fdd t   jd jd  fddjD S )Nc                sJ   | krd S j |  x.jj| g D ]}x|jD ]} | q2W q&W d S )N)r   r   r   r   )r>   r   r#   )mark_reachable_from	reachabler   r	   r
   r   b  s    
z5Grammar.find_unreachable.<locals>.mark_reachable_fromr   c                s   g | ]}| kr|qS r	   r	   )r@   r>   )r   r	   r
   rA   l  s    z,Grammar.find_unreachable.<locals>.<listcomp>)r   r   r   r   )r   r	   )r   r   r   r
   find_unreachable_  s    zGrammar.find_unreachablec             C   s   i }x| j D ]}d||< qW d|d< x| jD ]}d||< q,W xpd}x`| jj D ]R\}}xH|D ]@}x |jD ]}|| shd}P qhW d}|r\|| sd||< d}P q\W qNW |s>P q>W g }	x@|j D ]4\}}
|
s|| jkr|| j kr|dkrq|	j| qW |	S )NTz$endFr   )r   r   r   rf   r   rb   )r   Z
terminatesr   rC   some_changeplr   r>   Zp_terminatesinfiniter   r	   r	   r
   infinite_cyclesv  s:    

zGrammar.infinite_cyclesc             C   sX   g }xN| j D ]D}|sqx8|jD ].}|| jkr|| jkr|dkr|j||f qW qW |S )Nr   )r   r   r   r   rb   )r   r%   r   r>   r	   r	   r
   undefined_symbols  s    zGrammar.undefined_symbolsc             C   s8   g }x.| j j D ] \}}|dkr| r|j| qW |S )Nr   )r   rf   rb   )r   Z
unused_tokr>   rE   r	   r	   r
   unused_terminals  s
    zGrammar.unused_terminalsc             C   s<   g }x2| j j D ]$\}}|s| j| d }|j| qW |S )Nr   )r   rf   r   rb   )r   Zunused_prodr>   rE   r   r	   r	   r
   unused_rules  s    zGrammar.unused_rulesc             C   sD   g }x:| j D ]0}|| jkp"|| jks|j|| j | d f qW |S )Nr   )r   r   r   rb   )r   ZunusedZtermnamer	   r	   r
   unused_precedence  s
    zGrammar.unused_precedencec             C   s`   g }xV|D ]D}d}x2| j | D ]$}|dkr0d}q||kr|j| qW |rLq
P q
W |jd |S )NFz<empty>T)r   rb   )r   betar%   xZx_produces_emptyr   r	   r	   r
   _first  s    

zGrammar._firstc             C   s   | j r| j S x| jD ]}|g| j |< qW dg| j d< x| jD ]}g | j |< q<W xjd}xZ| jD ]P}xJ| j| D ]<}x6| j|jD ]&}|| j | kr~| j | j| d}q~W qlW q\W |sPP qPW | j S )Nz$endFT)r   r   r   r   r   r   rb   )r   r   rC   r   r   r   r	   r	   r
   compute_first  s$    zGrammar.compute_firstc       
      C   sV  | j r| j S | js| j  x| jD ]}g | j |< q"W |sD| jd j}dg| j |<  xd}x| jdd  D ]}xt|jD ]\}}|| jkrx| j|j|d d  }d}xB|D ]:}	|	dkr|	| j | kr| j | j	|	 d}|	dkrd}qW |s|t
|jd krxx:| j |j D ]*}	|	| j | kr| j | j	|	 d}qW qxW qhW |sTP qTW | j S )Nrd   z$endFz<empty>T)r   r   r   r   r   r   r   r   r   rb   r   )
r   r   kdidaddr   rG   BZfstZhasemptyr   r	   r	   r
   compute_follow?  s<    

zGrammar.compute_followc             C   s   x| j D ]}|}d}g }x|t|kr,d }ntt||}y| j|j|d   |_W n ttfk
rn   g |_Y nX y|j|d  |_W n tk
r   d |_Y nX ||_	|sP |j
| |}|d7 }qW ||_qW d S )Nr   rd   )r   r   r   r   r   r   r   r   r   r   rb   r   )r   r   ZlastlrirG   r   Zlrir	   r	   r
   build_lritemsz  s.    

zGrammar.build_lritems)Nrx   r   )N)N)r   r   r   r   rJ   rD   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 )VersionErrorN)r   r   r   r	   r	   r	   r
   r     s   r   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
LRTablec             C   s   d | _ d | _d | _d | _d S )N)rZ   r\   rX   	lr_method)r   r	   r	   r
   r     s    zLRTable.__init__c             C   s~   t |tjr|}ntd|  tj| }|jtkr:td|j	| _
|j| _g | _x|jD ]}| jjt|  qXW |j| _|jS )Nz	import %sz&yacc table file version is out of date)rB   types
ModuleTypeexecrn   modulesZ_tabversion__tabversion__r   Z
_lr_actionrZ   Z_lr_gotor\   rX   Z_lr_productionsrb   r   Z
_lr_methodr   Z_lr_signature)r   moduler   r   r	   r	   r
   
read_table  s    

zLRTable.read_tablec             C   s   ydd l }W n tk
r(   dd l}Y nX tjj|s:tt|d}|j|}|tkr^t	d|j|| _
|j|}|j|| _|j|| _|j|}g | _x|D ]}| jjt|  qW |j  |S )Nr   rbz&yacc table file version is out of date)cPickleImportErrorpickleospathexistsopenloadr   r   r   rZ   r\   rX   rb   r   close)r   filenamer   Zin_fZ
tabversion	signaturerY   r   r	   r	   r
   read_pickle  s(    




zLRTable.read_picklec             C   s   x| j D ]}|j| qW d S )N)rX   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   sT   i }x| D ]}d||< q
W g }i }x,| D ]$}|| dkr(t ||||| || q(W |S )Nr   )traverse)XRFPNr   r<   Fr	   r	   r
   digraph  s    

r  c          	   C   s  |j |  t|}||| < || || < || }xr|D ]j}	||	 dkrXt|	|||||| t||  ||	 || < x.|j|	g D ]}
|
||  kr|||  j |
 q|W q4W ||  |krt||d < ||  ||d < |j }x2|| krt||d < ||  ||d < |j }qW d S )Nr   rd   r~   r~   r~   r~   )rb   r   r  minr   MAXINTr   )r   r
  r<   r  r  r  r	  drelyaelementr	   r	   r
   r     s(    

r  c               @   s   e Zd ZdS )	LALRErrorN)r   r   r   r	   r	   r	   r
   r    s   r  c               @   s   e Zd Zd$ddZdd Zdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zd%d d!Zd&d"d#ZdS )'LRGeneratedTabler   Nc             C   s   |dkrt d| || _|| _|s*t }|| _i | _i | _|j| _i | _	i | _
d| _d| _d| _g | _g | _g | _| jj  | jj  | jj  | j  d S )NSLRr   zUnsupported method %sr   )r  r   )r  grammarr   r   logrZ   r\   r   rX   lr_goto_cachelr0_cidhash
_add_countZsr_conflictZrr_conflictZ	conflictssr_conflictsrr_conflictsr   r   r   lr_parse_table)r   r  methodr  r	   r	   r
   r   "  s,    


zLRGeneratedTable.__init__c             C   sz   |  j d7  _ |d d  }d}xV|rtd}xH|D ]@}x:|jD ]0}t|dd| j krRq:|j|j | j |_d}q:W q.W q W |S )Nrd   TF	lr0_addedr   )r  r   rL   rb   r   r   )r   IJr   rH   r   r	   r	   r
   lr0_closureG  s    
zLRGeneratedTable.lr0_closurec       	      C   s   | j jt||f}|r|S | j j|}|s:i }|| j |< g }xP|D ]H}|j}|rD|j|krD|jt|}|s~i }||t|< |j| |}qDW |jd}|s|r| j|}||d< n||d< || j t||f< |S )Nz$end)r  r   r"   r   r   rb   r#  )	r   r!  r   gr>   Zgsr   rC   s1r	   r	   r
   lr0_gotoa  s2    





zLRGeneratedTable.lr0_gotoc       	      C   s   | j | jjd jgg}d}x"|D ]}|| jt|< |d7 }q"W d}x|t|k r|| }|d7 }i }x$|D ]}x|jD ]}d ||< qxW qlW xJ|D ]B}| j||}| st|| jkrqt|| jt|< |j	| qW qFW |S )Nr   rd   )
r#  r  r   r   r  r"   r   r   r&  rb   )	r   CrG   r!  Zasymsiir>   r   r$  r	   r	   r
   	lr0_items  s(    


zLRGeneratedTable.lr0_itemsc             C   s   t  }d}xrxV| jjdd  D ]B}|jdkr:|j|j qx$|jD ]}||krBP qBW |j|j qW t||krrP t|}qW |S )Nr   rd   )r   r  r   r   r   r   r   )r   nullableZnum_nullabler   r   r	   r	   r
   compute_nullable_nonterminals  s    
z.LRGeneratedTable.compute_nullable_nonterminalsc             C   sr   g }xht |D ]\\}}xR|D ]J}|j|jd k r||j|jd  f}|d | jjkr||kr|j| qW qW |S )Nrd   )r   r   r   r   r  r   rb   )r   r'  transZstatenori   r   r   r	   r	   r
   find_nonterminal_transitions  s    
z-LRGeneratedTable.find_nonterminal_transitionsc             C   s   i }|\}}g }| j || |}xJ|D ]B}	|	j|	jd k r&|	j|	jd  }
|
| jjkr&|
|kr&|j|
 q&W |dkr|| jjd jd kr|jd |S )Nrd   r   z$end)r&  r   r   r   r  r   rb   r   )r   r'  r,  r*  Zdr_setri   r
  termsr$  r   r  r	   r	   r
   dr_relation  s    

zLRGeneratedTable.dr_relationc             C   sv   g }|\}}| j || |}| jjt|d}xB|D ]:}	|	j|	jd k r4|	j|	jd  }
|
|kr4|j||
f q4W |S )Nrd   r~   )r&  r  r   r"   r   r   r   rb   )r   r'  r,  emptyr  ri   r
  r$  rH   r   r  r	   r	   r
   reads_relation	  s    
zLRGeneratedTable.reads_relationc             C   s  i }i }i }x|D ]}d||< qW x|D ]\}}	g }
g }xR|| D ]D}|j |	krZqH|j}|}x||jd k r
|d }|j| }||f|kr|d }xH||jk r|j| | jjkrP |j| |krP |d }qW |j||f | j|| |}| jj	t
|d}qfW x|| D ]t}|j |j kr,q|j|jkr>qd}xD||jk rx|j| |j|d  krlP |d }qDW |
j||f qW qHW x2|D ]*}||krg ||< || j||	f qW |
|||	f< q*W ||fS )Nrd   r   r~   )r   r   r   r   r  r   rb   r&  r  r   r"   )r   r'  r,  r*  ZlookdictZincludedictZdtransr   ri   r
  Zlookbincludesr   r   rH   Zlir$  r#   rG   r	   r	   r
   compute_lookback_includes1	  sX    




z*LRGeneratedTable.compute_lookback_includesc                s0    fdd} fdd}t |||}|S )Nc                s   j  | S )N)r/  )r   )r'  r*  r   r	   r
   <lambda>	  s    z4LRGeneratedTable.compute_read_sets.<locals>.<lambda>c                s   j  | S )N)r1  )r   )r'  r*  r   r	   r
   r4  	  s    )r  )r   r'  ntransr*  r	  r  r  r	   )r'  r*  r   r
   compute_read_sets	  s    z"LRGeneratedTable.compute_read_setsc                s(   fdd} fdd}t |||}|S )Nc                s    |  S )Nr	   )r   )readsetsr	   r
   r4  	  s    z6LRGeneratedTable.compute_follow_sets.<locals>.<lambda>c                s    j | g S )N)r   )r   )inclsetsr	   r
   r4  	  s    )r  )r   r5  r7  r8  r	  r  r  r	   )r8  r7  r
   compute_follow_sets	  s    z$LRGeneratedTable.compute_follow_setsc       	      C   sx   xr|j  D ]f\}}x\|D ]T\}}||jkr4g |j|< |j|g }x*|D ]"}||j| krF|j| j| qFW qW q
W d S )N)rf   r   r   rb   )	r   Z	lookbacksZ	followsetr,  Zlbri   r   r   r  r	   r	   r
   add_lookaheads	  s    


zLRGeneratedTable.add_lookaheadsc             C   sP   | j  }| j|}| j|||}| j|||\}}| j|||}| j|| d S )N)r+  r-  r6  r3  r9  r:  )r   r'  r*  r,  r7  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 }|jd| j | j }| jdkrP| j	| d}x|D ]}	g }
i }i }i }|jd |jd| |jd x|	D ]}|jd|j
| qW |jd x|	D ]}|j|jd kr,|jdkrd|d	< ||d	< q| jdkr|j| }n| j j|j }x|D ]}|
j||d
|j
|f f |j|}|d k	r|dkrB||| j
 j\}}|j|d\}}||k s||kr|dkr|j
 ||< |||< | r| r|jd| | jj||df ||j
  jd7  _nB||kr|dkrd ||< n$|s|jd| | jj||df n|dk r||  }||j
 }|j|jkr|j
 ||< |||< || }}||j
  jd7  _||j
  jd8  _n
|| }}| jj|||f |jd||| j
||  ntd| n(|j
 ||< |||< ||j
  jd7  _q&W q|j}|j|d  }|| j jkr| j|	|}| jjt|d}|dkr|
j||d| f |j|}|d k	r|dkr||krtd| n|dk r||| j
 j\}}|j|d\}}||ks||krV|dkrV||| j
  jd8  _|||< |||< |s|jd| | jj||df nL||krt|dkrtd ||< n.| r| r|jd| | jj||df ntd| q|||< |||< qW i }xF|
D ]>\}}}||kr||| kr|jd|| d|||f< qW |jd d}xX|
D ]P\}}}||kr&||| k	r&||f|kr&|jd|| d}d|||f< q&W |r|jd i } x6|	D ].}!x&|!jD ]}"|"| j jkrd | |"< qW qW xL| D ]D}#| j|	|#}| jjt|d}|dkr|||#< |jd|#| qW |||< |||< |||< |d7 }q\W d S )NzParsing method: %sr   r   rx   zstate %dz    (%d) %srd   zS'z$endz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 %dzshift and go to state %dz Shift/shift conflict in state %dz    %-15s %sz  ! %-15s [ %s ]z"    %-30s shift and go to state %d)r   r   r~   )r   r   r~   ) r  r   r   r\   rZ   r  r   r   r)  r;  r   r   r   r   r   r   rb   r   r   r  r   r   r  r  r   r   r&  r  r"   r   r   r   )$r   r   r   r]   r[   r  Zactionpr'  str!  ZactlistZ	st_actionZ
st_actionpZst_gotor   Zlaheadsr  r#   ZsprecZslevelZrprecZrlevelZoldpppZchosenpZrejectprG   r$  rH   Z	_actprintr   Znot_usedZnkeysr(  r>   rC   r	   r	   r
   r  	  s    




























zLRGeneratedTable.lr_parse_tablerx   c             C   s  t |tjrtd|jdd }tjj||d }ylt|d}|j	dtjj
|t| j|f  d}|rti }xf| jj D ]X\}	}
xN|
j D ]B\}}|j|}|sg g f}|||< |d j|	 |d j| qW q|W |j	d xz|j D ]n\}}|j	d	|  x |d D ]}|j	d
|  qW |j	d x |d D ]}|j	d
|  q8W |j	d qW |j	d |j	d nJ|j	d x4| jj D ]&\}}|j	d|d |d |f  qW |j	d |ri }xl| jj D ]^\}	}
xR|
j D ]F\}}|j|}|sg g f}|||< |d j|	 |d j| qW qW |j	d x||j D ]p\}}|j	d	|  x |d D ]}|j	d
|  qjW |j	d x |d D ]}|j	d
|  qW |j	d qJW |j	d |j	d nJ|j	d x4| jj D ]&\}}|j	d|d |d |f  qW |j	d |j	d xd| jD ]Z}|jrl|j	d|j|j|j|jtjj
|j|jf  n|j	dt||j|jf  q0W |j	d |j  W n& tk
r } z W Y d d }~X nX d S )Nz"Won't overwrite existing tabmoduler   rd   z.pywzu
# %s
# This file is automatically generated. Do not edit.
_tabversion = %r

_lr_method = %r

_lr_signature = %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~   )rB   r   r   IOErrorsplitr   r   r   r   r   basenamer   r   rZ   rf   r   rb   r\   rX   r   r8   r   r   r   r   r  )r   	tabmodule	outputdirr  Zbasemodulenamer  r   Zsmallerrf   r>   Zndr   rE   rG   r   r   er	   r	   r
   write_table
  s    





"





"

"
zLRGeneratedTable.write_tablec             C   s  ydd l }W n tk
r(   dd l}Y nX t|d}|jt|t |j| j|t |j||t |j| j|t |j| j	|t g }x^| j
D ]T}|jr|j|j|j|j|jtjj|j|jf q|jt||j|jd d d f qW |j||t W d Q R X d S )Nr   wb)r   r   r   r   dumpr   pickle_protocolr   rZ   r\   rX   r   rb   r8   r   r   r   r   rC  r   r   )r   r  r  r   outfZoutpr   r	   r	   r
   pickle_table  s     ,"zLRGeneratedTable.pickle_table)r   N)rx   rx   )rx   )r   r   r   r   r#  r&  r)  r+  r-  r/  r1  r3  r6  r9  r:  r;  r  rG  rL  r	   r	   r	   r
   r  !  s"   
%#8+P 8
zr  c             C   s0   t j| }|jj }|j|jkr,|j|j |S )N)rn   	_getframe	f_globalscopyf_localsupdate)Zlevelsr   Zldictr	   r	   r
   get_caller_module_dict'  s
    

rR  c             C   s  g }| j  }d }|}x|D ]}|d7 }|j }|s4qy|d dkrh|sVtd||f |}	|dd  }
n@|d }	|	}|dd  }
|d }|dkr|dkrtd||f |j|||	|
f W q tk
r    Y q tk
r   td	|||j f Y qX qW |S )
Nrd   r   |z%s:%d: Misplaced '|'r   :z::=z!%s:%d: Syntax error. Expected ':'z%s:%d: Syntax error in rule %r)
splitlinesrB  rV   rb   	Exceptionstrip)docr   r   r  ZpstringsZlastpZdlineZpsr   r   r   Zassignr	   r	   r
   parse_grammar3  s6    
 rY  c               @   s   e Zd Zd ddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )!ParserReflectNc             C   sL   || _ d | _d | _d | _t | _g | _d| _|d krBtt	j
| _n|| _d S )NF)r   r   
error_functokensr   r   r  r   r   rn   ro   r  )r   r   r  r	   r	   r
   r   ]  s    zParserReflect.__init__c             C   s,   | j   | j  | j  | j  | j  d S )N)	get_startget_error_func
get_tokensget_precedenceget_pfunctions)r   r	   r	   r
   get_alll  s
    zParserReflect.get_allc             C   s6   | j   | j  | j  | j  | j  | j  | jS )N)validate_startvalidate_error_funcvalidate_tokensvalidate_precedencevalidate_pfunctionsvalidate_modulesr   )r   r	   r	   r
   validate_allt  s    zParserReflect.validate_allc             C   s  yddl m} W n  tk
r0   ddlm} Y nX y| }| jrR|j| jjd | jrz|jdjdd | jD jd | jr|jdj| jjd x*| j	D ] }|d r|j|d jd qW W n t
tfk
r   Y nX tj|j }tjd dkr|jd}|S )	Nr   )md5zlatin-1rx   c             S   s   g | ]}d j |qS )rx   )r   )r@   r   r	   r	   r
   rA     s    z+ParserReflect.signature.<locals>.<listcomp>ry   r   )hashlibrj  r   r   rQ  encoder   r   r\  pfuncs	TypeError
ValueErrorbase64	b16encodedigestrn   version_infodecode)r   rj  sigr   rr  r	   r	   r
   r  ~  s*    "
zParserReflect.signaturec             C   s   t jd}x| jD ]}tj|\}}i }xjt|D ]^\}}|d7 }|j|}|r2|jd}|j|}	|	sr|||< q2tj	|}
| j
jd|
|||	 q2W qW d S )Nz\s*def\s+(p_[a-zA-Z_0-9]*)\(rd   z;%s:%d: Function %s redefined. Previously defined on line %d)recompiler   inspectgetsourcelinesr   r   groupr   getsourcefiler  r   )r   Zfrer   linesZlinenZ	counthashr   r   r   prevr  r	   r	   r
   rh    s    





zParserReflect.validate_modulesc             C   s   | j jd| _d S )Nr   )r   r   r   )r   r	   r	   r
   r]    s    zParserReflect.get_startc             C   s&   | j d k	r"t| j ts"| jjd d S )Nz'start' must be a string)r   rB   string_typesr  r   )r   r	   r	   r
   rc    s    
zParserReflect.validate_startc             C   s   | j jd| _d S )Np_error)r   r   r[  )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jd d| _d S | j jj}| j jj	}t
j| j }| jj| | j jj| }|dkr| jjd|| d| _d S )Nr   rd   z2'p_error' defined, but is not a function or methodTz$%s:%d: p_error() requires 1 argument)r[  rB   r   FunctionType
MethodTyper  r   __code__co_firstlinenoco_filenamerx  	getmoduler   r   co_argcount)r   ismethodZelineZefiler   Zargcountr	   r	   r
   rd    s     

z!ParserReflect.validate_error_funcc             C   sn   | j jd}|s&| jjd d| _d S t|ttfsJ| jjd d| _d S |sd| jjd d| _d S || _d S )Nr\  zNo token list is definedTztokens must be a list or tupleztokens is empty)r   r   r  r   rB   rg   r   r\  )r   r\  r	   r	   r
   r_    s    zParserReflect.get_tokensc             C   sZ   d| j kr | jjd d| _d S t }x.| j D ]$}||krH| jjd| |j| q.W d S )Nr   z.Illegal token name 'error'. Is a reserved wordTzToken %r multiply defined)r\  r  r   r   r   r   )r   r   rC   r	   r	   r
   re    s    
zParserReflect.validate_tokensc             C   s   | j 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jd d| _d S xt| j D ]\}}t|ttfsj| jjd d| _d S t|dk r| jjd| d| _d S |d }t|ts| jjd d| _d S xH|dd  D ]8}t|ts| jjd	 d| _d S |j	|||d f qW q>W || _
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 stringrd   z precedence items must be strings)r   rB   rg   r   r  r   r   r   r~  rb   preclist)r   r  r   r   r   r   r	   r	   r
   rf    s6    

z!ParserReflect.validate_precedencec             C   s   g }xd| j j D ]V\}}|jd s|dkr.qt|tjtjfr|jj}t	j
|}|j||||jf qW |jdd d || _d S )Np_r  c             S   s    | d t | d | d | d fS )Nr   rd   r   r   )r8   )Z
p_functionr	   r	   r
   r4  -  s    
z.ParserReflect.get_pfunctions.<locals>.<lambda>)key)r   rf   
startswithrB   r   r  r  r  r  rx  r  rb   __doc__sortrm  )r   Zp_functionsr   itemr   r   r	   r	   r
   ra     s    
zParserReflect.get_pfunctionsc             C   s^  g }t | jdkr(| jjd d| _d S x"| jD ]\}}}}tj|}| j| }t|tj	rfd}nd}|j
j|kr| jjd|||j d| _q2|j
j|k r| jjd|||j d| _q2|js| jjd|||j q2y,t|||}	x|	D ]}
|j||
f qW W n: tk
r< } z| jjt| d| _W Y d d }~X nX | jj| q2W x| jj D ]\}}|jd	rt|tjtj	frq\|jd
rq\|jd	r|dkr| jjd| t|tjr|j
jdkst|tj	r\|jj
jdkr\|jr\y8|jjd}|d dkr4| jjd|j
j|j
j| W n tk
rL   Y nX q\W || _d S )Nr   z+no rules of the form p_rulename are definedTr   rd   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 functionry   rT  z9%s:%d: Possible grammar rule %r defined without p_ prefix)r   rm  r  r   rx  r{  r   rB   r   r  r  r  r   r  r   rY  rb   rV   r8   r   r   rf   r  r  __func__rB  r  r  r   r  )r   r  r   r   r   rX  r   r   ZreqargsZparsed_gr$  rF  rC   rE   r	   r	   r
   rg  5  s\    


 z!ParserReflect.validate_pfunctions)N)r   r   r   r   rb  ri  r  rh  r]  rc  r^  rd  r_  re  r`  rf  ra  rg  r	   r	   r	   r
   rZ  \  s   

#rZ  c       <   O      sd	  |d krt }|rd}|d kr&ttj} rf fddt D }t|}d|krntj|d  j|d< ntd}|	d krt	|t
jr|j}nLd|kr|d }n:|jd}dj|d d6 }td	|  ttj| dd
}tjj|}	|jd}|ot	|trd|kr|d | }|d k	r$||d< t||d}|j  |jrHtd|j }yt }|rj|j|}n
|j|}|s||kry"|j|j t||j }|j!a!|S  t"k
r } z|j#d| W Y d d }~X nX W nF t$k
r } z|j#t| W Y d d }~X n t%k
r    Y nX |
d kr|rytt&tjj|	|d}
W n< t'k
r } z|j#d||f  t( }
W Y d d }~X nX nt( }
|
j)dt* d}|j+ rtd|j s|j#d t,|j-}xZ|j.D ]P\}}}y|j/||| W n0 t0k
r& } z|j#d| W Y d d }~X nX qW xl|j1D ]b\}}|\} }!}"}#y|j2|"|#|| |! W n4 t0k
r } z|jd| d}W Y d d }~X nX q6W y&|d kr|j3|j4 n
|j3| W n6 t0k
r } z|jt| d}W Y d d }~X nX |rtd|j5 }$x*|$D ]"\}%}&|jd|&j6|&j7|% d}qW |j8 }'|'r|
j)d
 |
j)d |
j)d
 x&|'D ]}|j#d| |
j)d| qnW |r|
j)d
 |
j)d |
j)d
 x&t9|j:D ]\}(})|
j)d|(|) qW |j; }*x$|*D ]}&|j#d|&j6|&j7|&j< qW t=|'dkr"|j#d t=|'dkr@|j#dt=|' t=|*dkrX|j#d  t=|*dkrv|j#d!t=|* |rN|
j)d
 |
j)d" |
j)d
 t>|j?}+|+j@  x2|+D ]*}|
j)d#|d$jd%d |j?| D  qW |
j)d
 |
j)d& |
j)d
 t>|jA},|,j@  x2|,D ]*}-|
j)d#|-d$jd'd |jA|- D  qW |
j)d
 |r|jB }.x|.D ]}/|j#d(|/ qbW |jC }0x|0D ]}1|jd)|1 d}qW |jD }2x$|2D ]\}}|jd*|| d}qW |rtd|r|jEd+|  tF|| |
}|rlt=|jG}3|3dkr |j#d, n|3dkr6|j#d-|3 t=|jH}4|4dkrV|j#d. n|4dkrl|j#d/|4 |r|jGs|jHr|
j#d
 |
j#d0 |
j#d
 x&|jGD ]\}5}6}7|
j#d1|6|5|7 qW tI }8x|jHD ]x\}5}9}:|5tJ|9tJ|:f|8krq|
j#d2|5|9 |
j#d3|:|5 |j#d2|5|9 |j#d3|:|5 |8jK|5tJ|9tJ|:f qW g };xL|jHD ]B\}5}9}:|:jL r^|:|;kr^|
j#d4|: |j#d4|: |;jM|: q^W |ry|jN||	| W n6 t'k
r } z|j#d5||f  W Y d d }~X nX |	rBy|jO|| W n6 t'k
	r@ } z|j#d5||f  W Y d d }~X nX |j|j t||j }|j!a!|S )7Nr   c                s   g | ]}|t  |fqS r	   )rL   )r@   r   )r   r	   r
   rA     s    zyacc.<locals>.<listcomp>__file__r   r   r   rd   z	import %srx   __package__r   )r  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 usedz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 : %sry   c             S   s   g | ]}t |qS r	   )r8   )r@   r>   r	   r	   r
   rA   0  s    z*Nonterminals, with rules where they appearc             S   s   g | ]}t |qS r	   )r8   )r@   r>   r	   r	   r
   rA   8  s    zSymbol %r is unreachablez)Infinite recursion detected for symbol %rz0Precedence rule %r defined for unknown symbol %rzGenerating %s tablesz1 shift/reduce conflictz%d shift/reduce conflictsz1 reduce/reduce conflictz%d reduce/reduce conflictsz
Conflicts:z7shift/reduce conflict for %s in state %d resolved as %sz;reduce/reduce conflict in state %d resolved using rule (%s)zrejected rule (%s) in state %dzRule (%s) is never reducedzCouldn't create %r. %sr~   )P
tab_moduler   rn   ro   dirdictr   r  rR  rB   r   r   rB  r   r   rL   r   r   dirnamer   r8   rZ  rb  r   r   r  r   r  r   r  r   rW   r[  rv   rV  r   r   r   r   rA  r   r   __version__ri  r   r\  r  r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   rg   r   r  r   r   r   r   r   r  r  r  r   r"   r   r   rb   rG  rL  )<r  r   r   rD  r   Zcheck_recursionoptimizeZwrite_tablesZ	debugfilerE  ZdebuglogZerrorlogZ
picklefileZ_itemsr   srcfilepartspkgnamepkgZpinfor  ZlrZread_signaturer4   rF  errorsr  r   r   r   funcnameZgramr   r   r   r   r   rc   r   r   rC   r   r   r.  ZnontermsZnontermZunreachableur   infZunused_precZnum_srZnum_rrri   r   
resolutionZalready_reportedZruleZrejectedZwarned_neverr	   )r   r
   yaccw  s   






"



$
















*




*













$$r  )<rv  r   rn   os.pathr   rx  rp  r)   r  r   Z	yaccdebugZ
debug_filer  Z
default_lrr   rl   r    rJ  rs  
basestringr~  r8   maxsizer  objectr   r   rV  r   r&   r(   r,   r0   r.   r+   r-   r/   r1   r5   r6   r:   rW   rw  r   r   r   r   r   r   r   r   r   r  r  r  r  rR  rY  rZ  r  r	   r	   r	   r
   <module>>   s   

4       [
H.   rT
      )  
