o
    Ni                 	   @   s`  d dl Z d dlZd dlZd dlZdZdZdZd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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dd ZG dd deZG dd  d e
Zd!d" Zd#d$ ZG d%d& d&eZG d'd( d(Zd)d* Zd+d, Z G d-d. d.e
Z!eddd/deddd0d1d2Z"dS )3    NFz
parser.out   (   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   Q/home/ubuntu/.local/lib/python3.10/site-packages/indic_unified_parser/ply/yacc.py__init__[      
zPlyLogger.__init__c                 O   s   | j || d  d S )N
r   writer   msgargskwargsr   r   r	   debug^      zPlyLogger.debugc                 O      | j d||  d  d S )Nz	WARNING: r   r   r   r   r   r	   warningc      zPlyLogger.warningc                 O   r   )NzERROR: r   r   r   r   r   r	   errorf   r   zPlyLogger.errorN)	__name__
__module____qualname__r
   r   infor   r   criticalr   r   r   r	   r   Z   s    r   c                   @      e Zd Zdd Zdd ZdS )
NullLoggerc                 C      | S r   r   )r   namer   r   r	   __getattribute__m      zNullLogger.__getattribute__c                 O   r    r   r   )r   r   r   r   r   r	   __call__p   r#   zNullLogger.__call__N)r   r   r   r"   r$   r   r   r   r	   r   l       r   c                   @      e Zd ZdS )	YaccErrorNr   r   r   r   r   r   r	   r'   t       r'   c                 C   sP   t | }d|v rt |}t|tkr|d t d }dt| jt| |f }|S )Nr   z ...z<%s @ 0x%x> (%s))reprlenresultlimittyper   id)rrepr_strresultr   r   r	   format_resultx   s   r2   c                 C   s>   t | }d|v rt |}t|dk r|S dt| jt| f S )Nr      z<%s @ 0x%x>)r*   r+   r-   r   r.   )r/   r0   r   r   r	   format_stack_entry   s   r4   c                   @   r   )
YaccSymbolc                 C      | j S r   r-   r   r   r   r	   __str__      zYaccSymbol.__str__c                 C   s   t | S r   strr8   r   r   r	   __repr__   s   zYaccSymbol.__repr__N)r   r   r   r9   r=   r   r   r   r	   r5      r%   r5   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lexerparser)r   sr@   r   r   r	   r
      s   
zYaccProduction.__init__c                 C   s>   t |trdd | j| D S |dkr| j| jS | j| jS )Nc                 S      g | ]}|j qS r   value.0rC   r   r   r	   
<listcomp>       z.YaccProduction.__getitem__.<locals>.<listcomp>r   )
isinstancer?   rF   r@   r   nr   r   r	   __getitem__   s
   
zYaccProduction.__getitem__c                 C      || j | _d S r   )r?   rF   )r   rM   vr   r   r	   __setitem__      zYaccProduction.__setitem__c                 C   s   dd | j || D S )Nc                 S   rD   r   rE   rG   r   r   r	   rI      rJ   z/YaccProduction.__getslice__.<locals>.<listcomp>)r?   )r   ijr   r   r	   __getslice__   r   zYaccProduction.__getslice__c                 C   
   t | jS r   )r+   r?   r8   r   r   r	   __len__   r   zYaccProduction.__len__c                 C      t | j| ddS )Nlinenor   getattrr?   rL   r   r   r	   rY         zYaccProduction.linenoc                 C   rO   r   )r?   rY   )r   rM   rY   r   r   r	   
set_lineno   rR   zYaccProduction.set_linenoc                 C   ,   t | j| dd}t | j| d|}||fS )NrY   r   	endlinenorZ   )r   rM   	startlineendliner   r   r	   linespan      zYaccProduction.linespanc                 C   rX   )Nlexposr   rZ   rL   r   r   r	   rd      r\   zYaccProduction.lexposc                 C   rO   r   )r?   rd   )r   rM   rd   r   r   r	   
set_lexpos   rR   zYaccProduction.set_lexposc                 C   r^   )Nrd   r   	endlexposrZ   )r   rM   startposendposr   r   r	   lexspan   rc   zYaccProduction.lexspanc                 C   s   t r   )SyntaxErrorr8   r   r   r	   r      r#   zYaccProduction.errorr   )r   r   r   r
   rN   rQ   rU   rW   rY   r]   rb   rd   re   ri   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S )LRParserc                 C   s0   |j | _|j| _|j| _|| _|   d| _d S NT)	lr_productionsproductions	lr_actionactionlr_gotogoto	errorfuncset_defaulted_stateserrorok)r   lrtaberrorfr   r   r	   r
      s   
zLRParser.__init__c                 C   s
   d| _ d S rl   )ru   r8   r   r   r	   errok   r   zLRParser.errokc                 C   s@   | j d d = | jd d = t }d|_| j| | j d d S )N$endr   )
statestacksymstackr5   r-   append)r   symr   r   r	   restart   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_statesrp   itemslistvaluesr+   )r   stateactionsrulesr   r   r	   rt      s   zLRParser.set_defaulted_statesc                 C   s
   i | _ d S r   )r   r8   r   r   r	   disable_defaulted_states  r   z!LRParser.disable_defaulted_statesNFc                 C   s  t |tr|rttj}d }g }| j}| j}| j}	| j}
t	d }d}|r)|
d |s4ddlm} |j}||_| |_|d urC|| |j }| _g  }| _g  }| _||_d }|d t }d|_|| d}	 |rs|d| ||
vr|s|s| }n| }|st }d|_|j}|| |}n|
| }|r|d||  |r|d	d
ddd |D dd  t|f   |d urR|dkr|| |}|r|d| || d }|r|d8 }qj|dk r1|	|  }|j}|j}t }||_d |_|r7|r(|
d|jdddd || d  D  d ||d|   |  n|
d|jg ||d  |  |r|| d d  }||d< |rj|d }|j |_ |j!|_!|d }t"|d|j |_#t"|d|j!|_$||_%z5|| d = || _&|'| || d = |r|
dt(|d  || ||d  | }|| W n- t)y   || |*|dd  |  |d }d|_d|_|}t+}d| _,Y nw qj|r|j |_ |j!|_!|g}||_%z)|| _&|'| |r|
dt(|d  || ||d  | }|| W n$ t)y/   || |  |d }d|_d|_|}t+}d| _,Y nw qj|dkrR|d }t"|dd }|rP|
dt(| |
d |S |d u rj|rt|-dd
ddd |D dd  t|f   |dks}| j,rt+}d| _,|}|jdkrd }| j.r|rt/|ds||_|| _&| .|}| j,r|}d }qjn2|rt/|d r|j }nd}|rtj0d!||jf  ntj0d"|j  n
tj0d# d S t+}t|dkr|jdkrd }d }d}|d d = qj|jdkrd S |jdkrR|d }|jdkr'|r$t"|d |j |_#t"|d$|j!|_$d }qjt }d|_t/|d r:|j  |_ |_#t/|d$rG|j! |_!|_$||_|| |}n| }|ra|j |_ |j!|_!|  |d }qjt1d%)&Nr   zPLY: PARSE DEBUG STARTr   )lexry   TzState  : %sz#Defaulted state %s: Reduce using %dzStack  : %sz%s . %s c                 S   rD   r   r7   rH   xxr   r   r	   rI   [  rJ   z"LRParser.parse.<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   )r4   rF   )rH   _vr   r   r	   rI   |      ]r_   rf   zResult : %sr   FrF   zDone   : Returning %szPLY: PARSE DEBUG ENDzError  : %sc                 S   rD   r   r7   r   r   r   r	   rI     rJ   rA   rY   z(yacc: Syntax error at line %d, token=%s
zyacc: Syntax error, token=%sz yacc: Parse error in input. EOF
rd   zyacc: internal parser error!!!
)2rK   intr   sysstderrrp   rr   rn   r   r>   r    r   rA   rB   inputtokenrz   r{   r@   r|   r5   r-   r   popgetjoinr<   lstripr!   r+   rF   rY   rd   r[   r_   rf   r?   r   callabler2   rj   extenderror_countru   r   rs   hasattrr   RuntimeError)r   r   rA   r   tracking	lookaheadlookaheadstackr   rr   prodr   pslice
errorcountr   	get_tokenrz   r{   errtokenr}   r   ltypetppnameplentargt1rM   r1   tokrY   r   r   r	   parse  s  






*





$










*


zLRParser.parse)NNFF)	r   r   r   r
   rx   r~   rt   r   r   r   r   r   r	   rk      s    rk   z^[a-zA-Z0-9_-]+$c                   @   sR   e Zd ZdZdddZdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dd ZdS )
Productionr   rightr   Nr   c           	      C   s   || _ t|| _|| _|| _d | _|| _|| _|| _t	| j| _	g | _
| jD ]}|| j
vr3| j
| q&g | _d | _| jrKd| j d| jf | _d S d| j  | _d S N%s -> %sr   z%s -> <empty>)r!   tupler   numberfuncr   filelineprecr+   usymsr|   lr_itemslr_nextr   r<   )	r   r   r!   r   
precedencer   r   r   rC   r   r   r	   r
   k  s&   


zProduction.__init__c                 C   r6   r   r;   r8   r   r   r	   r9     r:   zProduction.__str__c                 C      dt |  d S )NzProduction()r;   r8   r   r   r	   r=     rR   zProduction.__repr__c                 C   rV   r   )r+   r   r8   r   r   r	   rW     r   zProduction.__len__c                 C   s   dS Nr   r   r8   r   r   r	   __nonzero__  r#   zProduction.__nonzero__c                 C   
   | j | S r   )r   r   indexr   r   r	   rN     r   zProduction.__getitem__c              	   C   s   |t | jkr	d S t| |}z| j|j|d   |_W n ttfy)   g |_Y nw z|j|d  |_W |S  tyB   d |_Y |S w r   )r+   r   LRItem	Prodnameslr_after
IndexErrorKeyError	lr_before)r   rM   r   r   r   r	   lr_item  s   

zProduction.lr_itemc                 C   s   | j r|| j  | _d S d S r   )r   r   )r   pdictr   r   r	   bind  s   zProduction.bind)r   Nr   r   )r   r   r   reducedr
   r9   r=   rW   r   rN   r   r   r   r   r   r	   r   i  s    
r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r   c                 C   sZ   |j | _ t|j| _|j| _|| _i | _| j|d t| j| _t| j| _|j	| _	d S )N.)
r!   r   r   r   lr_index
lookaheadsinsertr   r+   r   )r   r   rM   r   r   r	   r
     s   zLRItem.__init__c                 C   s.   | j rd| jd| j f }|S d| j }|S r   )r   r!   r   )r   rC   r   r   r	   r9     s
   
zLRItem.__str__c                 C   r   )NzLRItem(r   r;   r8   r   r   r	   r=     rR   zLRItem.__repr__N)r   r   r   r
   r9   r=   r   r   r   r	   r     s    r   c                 C   s<   t | d }|dkr| | |v r| | S |d8 }|dks
d S r   )r+   )symbols	terminalsrS   r   r   r	   rightmost_terminal  s   r   c                   @   r&   )GrammarErrorNr(   r   r   r   r	   r     r)   r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd$ddZd%ddZdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zd%d d!Zd"d# Zd	S )&Grammarc                 C   sb   d g| _ i | _i | _i | _|D ]}g | j|< qg | jd< i | _i | _i | _i | _t | _	d | _
d S Nr   )Productionsr   Prodmap	TerminalsNonterminalsFirstFollow
PrecedencesetUsedPrecedenceStart)r   r   termr   r   r	   r
     s   

zGrammar.__init__c                 C   rV   r   )r+   r   r8   r   r   r	   rW     r   zGrammar.__len__c                 C   r   r   )r   r   r   r   r	   rN     r   zGrammar.__getitem__c                 C   sL   | j d gks
J d|| jv rtd| |dvrtd||f| j|< d S )Nz2Must call set_precedence() before add_production()z,Precedence already specified for terminal %r)leftr   nonassocz:Associativity must be one of 'left','right', or 'nonassoc')r   r   r   )r   r   assoclevelr   r   r	   set_precedence&  s   
zGrammar.set_precedenceNr   r   c              	   C   s  || j v rtd|||f |dkrtd|||f t|s)td|||f t|D ]K\}}|d dv rez$t|}t|dkrLtd||||f || j vrVg | j |< |||< W q- tyd   Y nw t|sx|d	krxtd
||||f q-d	|v r|d d	krtd||f |d d	krtd||f |d }	| j	|	}
|
std|||	f | j
|	 |dd = nt|| j }	| j	|	d}
d||f }|| jv r| j| }td|||f d|j|jf  t| j}|| jvrg | j|< |D ]$}|| j v r
| j | | q|| jvrg | j|< | j| | qt||||
|||}| j| || j|< z| j| | W d S  tyO   |g| j|< Y d S w )Nz7%s:%d: Illegal rule name %r. Already defined as a tokenr   z5%s:%d: Illegal rule name %r. error is a reserved wordz%s:%d: Illegal rule name %rr   z'"r   zA%s:%d: Literal token %s in rule %r may only be a single characterz%precz!%s:%d: Illegal name %r in rule %rr   z+%s:%d: Syntax error. Nothing follows %%preczH%s:%d: Syntax error. %%prec can only appear at the end of a grammar rulez/%s:%d: Nothing known about the precedence of %rr   r   z%s:%d: Duplicate rule %s. zPrevious definition at %s:%d)r   r   _is_identifiermatch	enumerateevalr+   rj   r   r   r   addr   r   r   r   r   r   r|   r   r   r   )r   prodnamesymsr   r   r   rM   rC   cprecnameprodprecmapmpnumberr   r   r   r   r	   add_production?  s|   











zGrammar.add_productionc                 C   sT   |s| j d j}|| jvrtd| tdd|g| j d< | j| d || _d S )Nr   zstart symbol %s undefinedr   S')r   r!   r   r   r   r|   r   )r   startr   r   r	   	set_start  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   )rC   r   r/   mark_reachable_from	reachabler   r   r	   r     s   


z5Grammar.find_unreachable.<locals>.mark_reachable_fromr   c                    s   g | ]}| vr|qS r   r   rG   )r  r   r	   rI     s    z,Grammar.find_unreachable.<locals>.<listcomp>)r   r   r   r   r8   r   r   r	   find_unreachable  s   zGrammar.find_unreachablec                 C   s   i }| j D ]}d||< qd|d< | jD ]}d||< q	 d}| j D ]'\}}|D ] }|jD ]
}|| s7d} nq-d}|rH|| sFd||< d} nq(q"|sMnqg }	| D ]\}}
|
sn|| jvri|| j vri|dkriqT|	| qT|	S )NTry   Fr   )r   r   r   r   r   r|   )r   
terminatesr   rM   some_changeplr   rC   p_terminatesinfiniter   r   r   r	   infinite_cycles  sD   




	
zGrammar.infinite_cyclesc                 C   sP   g }| j D ] }|s
q|jD ]}|| jvr$|| jvr$|dkr$|||f qq|S r   )r   r   r   r   r|   )r   r1   r   rC   r   r   r	   undefined_symbols  s   

zGrammar.undefined_symbolsc                 C   s2   g }| j  D ]\}}|dkr|s|| q|S r   )r   r   r|   )r   
unused_tokrC   rP   r   r   r	   unused_terminals  s   
zGrammar.unused_terminalsc                 C   s8   g }| j  D ]\}}|s| j| d }|| q|S Nr   )r   r   r   r|   )r   unused_prodrC   rP   r   r   r   r	   unused_rules  s   
zGrammar.unused_rulesc                 C   s@   g }| j D ]}|| jv s|| jv s||| j | d f q|S r  )r   r   r   r|   )r   unusedtermnamer   r   r	   unused_precedence+  s   
zGrammar.unused_precedencec                 C   sZ   g }|D ]!}d}| j | D ]}|dkrd}q||vr|| q|r#q |S |d |S )NF<empty>T)r   r|   )r   betar1   xx_produces_emptyr   r   r   r	   _first;  s   

zGrammar._firstc                 C   s   | j r| j S | jD ]}|g| j |< q	dg| j d< | jD ]}g | j |< q	 d}| jD ]$}| j| D ]}| |jD ]}|| j | vrK| j | | d}q8q0q)|sT	 | j S q$)Nry   TF)r   r   r   r   r  r   r|   )r   r   rM   r  r   r   r   r   r	   compute_first^  s,   


zGrammar.compute_firstc           
      C   s8  | j r| j S | js|   | jD ]}g | j |< q|s | jd j}dg| j |< 	 d}| jdd  D ]d}t|jD ]\\}}|| jv r| |j|d d  }d}|D ]}	|	dkrg|	| j | vrg| j | 	|	 d}|	dkrmd}qP|sy|t
|jd kr| j |j D ]}	|	| j | vr| j | 	|	 d}qq7q0|s	 | j S q')Nr   ry   TFr  )r   r   r  r   r   r!   r   r   r  r|   r+   )
r   r   kdidaddr   rS   Bfsthasemptyr   r   r   r	   compute_follow  sD   

zGrammar.compute_followc              
   C   s   | j D ]_}|}d}g }	 |t|krd }n8t||}z| j|j|d   |_W n ttfy5   g |_Y nw z
|j|d  |_W n tyL   d |_Y nw ||_	|sSn|
| |}|d7 }q||_qd S Nr   Tr   )r   r+   r   r   r   r   r   r   r   r   r|   r   )r   r   lastlrirS   r   lrir   r   r	   build_lritems  s6   




zGrammar.build_lritems)Nr   r   r   )r   r   r   r
   rW   rN   r   r   r   r  r  r	  r  r  r  r  r  r  r!  r   r   r   r	   r     s"    $

T@#
%;r   c              	   C   sL   i }| D ]}d||< qg }i }| D ]}|| dkr#t ||||| || q|S r  )traverse)XRFPNr  r@   Fr   r   r	   digraph  s   
r(  c              	   C   s
  | |  t|}||| < || || < || }|D ]3}	||	 dkr+t|	|||||| t||  ||	 || < ||	g D ]}
|
||  vrK||   |
 q<q||  |krt||d < ||  ||d < | }|| krt||d < ||  ||d < | }|| ksid S d S d S )Nr   r   )r|   r+   r"  minr   MAXINTr   )r  r&  r@   r'  r#  r$  r%  drelyaelementr   r   r	   r"    s2   
r"  c                   @   r&   )	LALRErrorNr(   r   r   r   r	   r0    r)   r0  c                   @      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 )!LRTableNc                 C   s   || _ |st }|| _i | _i | _|j| _i | _i | _d| _	d| _
d| _g | _g | _g | _| j   | j   | j   |   d S r  )grammarr   logro   rq   r   rm   lr_goto_cachelr0_cidhash
_add_countsr_conflictrr_conflict	conflictssr_conflictsrr_conflictsr!  r  r  lr_parse_table)r   r3  r4  r   r   r	   r
      s&   


zLRTable.__init__c                 C   s   | j D ]}|| qd S r   )rm   r   )r   r   r   r   r   r	   bind_callables@  s   
zLRTable.bind_callablesc                 C   sp   |  j d7  _ |d d  }d}|r6d}|D ]}|jD ]}t|dd| j kr&q||j | j |_d}qq|s|S )Nr   TF	lr0_addedr   )r7  r   r[   r|   r   r?  )r   IJr  rT   r  r   r   r	   lr0_closureF  s   
zLRTable.lr0_closurec           	      C   s   | j t||f}|r|S | j |}|si }|| j |< g }|D ]$}|j}|rE|j|krE|t|}|s>i }||t|< || |}q!|d}|s]|rY| |}||d< n||d< || j t||f< |S )Nry   )r5  r   r.   r   r   r|   rB  )	r   r@  r  grC   gsr   rM   s1r   r   r	   lr0_goto`  s4   




zLRTable.lr0_gotoc           	      C   s   |  | jjd jgg}d}|D ]}|| jt|< |d7 }qd}|t|k rh|| }|d7 }i }|D ]}|jD ]}d ||< q7q2|D ] }| ||}|rRt|| jv rSqAt|| jt|< |	| qA|t|k s&|S )Nr   r   )
rB  r3  r   r   r6  r.   r+   r   rF  r|   )	r   CrS   r@  asymsiirC   r  rC  r   r   r	   	lr0_items  s,   


zLRTable.lr0_itemsc                 C   sz   t  }d}	 | jjdd  D ] }|jdkr||j q|jD ]}||vr' nq||j qt||kr8	 |S t|}qr  )r   r3  r   r+   r   r!   r   )r   nullablenum_nullabler   r   r   r   r	   compute_nullable_nonterminals  s$   

z%LRTable.compute_nullable_nonterminalsc                 C   sj   g }t |D ],\}}|D ]%}|j|jd k r1||j|jd  f}|d | jjv r1||vr1|| qq|S r   )r   r   r+   r   r3  r   r|   )r   rG  transstatenor   r   r   r   r   r	   find_nonterminal_transitions  s   
z$LRTable.find_nonterminal_transitionsc           
      C   s   |\}}g }|  || |}|D ]!}|j|jd k r1|j|jd  }	|	| jjv r1|	|vr1||	 q|dkrF|| jjd jd krF|d |S )Nr   r   ry   )rF  r   r+   r   r3  r   r|   r   )
r   rG  rN  rK  r   r&  termsrC  r   r.  r   r   r	   dr_relation  s   

zLRTable.dr_relationc                 C   sr   g }|\}}|  || |}| jt|d}|D ]}	|	j|	jd k r6|	j|	jd  }
|
|v r6|||
f q|S )Nr   r   )rF  r6  r   r.   r   r+   r   r|   )r   rG  rN  emptyr,  r   r&  rC  rT   r   r.  r   r   r	   reads_relation  s   zLRTable.reads_relationc                 C   s  i }i }i }|D ]}d||< q|D ]\}}	g }
g }|| D ]}|j |	kr%q|j}|}||jd k r|d }|j| }||f|v rk|d }||jk rd|j| | jjv rSn|j| |vr[n|d }||jk sI|||f | || |}| j	t
|d}||jd k s1|| D ]4}|j |j krq|j|jkrqd}||jk r|j| |j|d  krn|d }||jk s|
||f qq|D ]}||vrg ||< || ||	f q|
|||	f< q||fS )Nr   r   r   )r!   r   r+   r   r3  r   r|   rF  r6  r   r.   )r   rG  rN  rK  lookdictincludedictdtransr   r   r&  lookbincludesr   r   rT   lirC  r/   rS   r   r   r	   compute_lookback_includes/  sb   






z!LRTable.compute_lookback_includesc                    s0    fdd} fdd}t |||}|S )Nc                         | S r   )rR  r  rG  rK  r   r   r	   <lambda>      z+LRTable.compute_read_sets.<locals>.<lambda>c                    r\  r   )rT  r]  r^  r   r	   r_    r`  r(  )r   rG  ntransrK  r%  r$  r'  r   r^  r	   compute_read_sets  s   zLRTable.compute_read_setsc                    s(   fdd} fdd}t |||}|S )Nc                    s    |  S r   r   r]  )readsetsr   r	   r_    s    z-LRTable.compute_follow_sets.<locals>.<lambda>c                    s     | g S r   )r   r]  )inclsetsr   r	   r_    s    ra  )r   rb  rd  re  r%  r$  r'  r   )re  rd  r	   compute_follow_sets  s   zLRTable.compute_follow_setsc           	      C   sl   |  D ]/\}}|D ](\}}||jvrg |j|< ||g }|D ]}||j| vr1|j| | q q
qd S r   )r   r   r   r|   )	r   	lookbacks	followsetrN  lbr   r   r   r.  r   r   r	   add_lookaheads  s   

zLRTable.add_lookaheadsc                 C   sP   |   }| |}| |||}| |||\}}| |||}| || d S r   )rM  rP  rc  r[  rf  rj  )r   rG  rK  rN  rd  lookdincluded
followsetsr   r   r	   add_lalr_lookaheads  s   
zLRTable.add_lalr_lookaheadsc           $   
   C   s  | j j}| j j}| j}| j}| j}i }|  }| | d}|D ]}	g }
i }i }i }|d |d| |d |	D ]
}|d|j	| q=|d |	D ]}|j
|jd krb|jdkrid|d< ||d< qO|j| }|D ]}|
||d|j	|f f ||}|d urL|dkr||d	\}}||j	 j\}}||k s||kr|d
kr|j	 ||< |||< |s|s|d| | j||df ||j	  jd7  _qp||kr|dkrd ||< qp|s|d| | j||df qp|dk rF||  }||j	 }|j|jkr*|j	 ||< |||< ||}}||j	  jd7  _||j	  jd8  _n||}}| j|||f |d||| j	||  qptd| |j	 ||< |||< ||j	  jd7  _qpqO|j}|j|d  }|| j jv r,| |	|}| jt|d}|dkr,|
||d| f ||}|d ur$|dkr||krtd| qO|dk r||d	\}}||| j	 j\}}||ks||kr|dkr||| j	  jd8  _|||< |||< |s|d| | j||df qO||kr|dkrd ||< qO|s|s|d| | j||df qOtd| |||< |||< qOi }|
D ]\}}}||v rO||| u rO|d|| d|||f< q1|d d}|
D ](\}}}||v r||| ur||f|vr|d|| d}d|||f< qZ|r|d i } |	D ]}!|!jD ]}"|"| j jv rd | |"< qq| D ]"}#| |	|#}| jt|d}|dkr|||#< |d|#| q|||< |||< |||< |d7 }q d S )Nr   r   zstate %dz    (%d) %sr   r   ry   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)r3  r   r   rq   ro   r4  rJ  rn  r   r   r+   r   r!   r   r|   r   r   r;  r   r   r<  r0  r   r   rF  r6  r.   r   r   r   )$r   r   r   rr   rp   r4  actionprG  str@  actlist	st_action
st_actionpst_gotor   laheadsr.  r/   sprecslevelrprecrleveloldpppchosenprejectprS   rC  rT   	_actprintr   not_usednkeysrI  rC   rM   r   r   r	   r=    s  
















6













 zLRTable.lr_parse_tabler   )r   r   r   r
   r>  rB  rF  rJ  rM  rP  rR  rT  r[  rc  rf  rj  rn  r=  r   r   r   r	   r2    s     
 #8+Pr2  c                 C   s0   t | }|j }|j|jkr||j |S r   )r   	_getframe	f_globalscopyf_localsupdate)levelsr   ldictr   r   r	   get_caller_module_dict  s
   

r  c              
   C   s   g }|   }d }|}|D ]j}|d7 }| }|sqzD|d dkr3|s*td||f |}	|dd  }
n |d }	|	}|dd  }
|d }|dkrS|dkrStd||f ||||	|
f W q tye     tyv   td	||| f w |S )
Nr   r   |z%s:%d: Misplaced '|'   :z::=z!%s:%d: Syntax error. Expected ':'z%s:%d: Syntax error in rule %r)
splitlinessplitrj   r|   	Exceptionstrip)docr   r   r3  pstringslastpdlinepsr   r   r   assignr   r   r	   parse_grammar  s8   r  c                   @   r1  )!ParserReflectNc                 C   sN   || _ d | _d | _d | _t | _g | _d| _|d u r"tt	j
| _d S || _d S )NF)r   r   
error_functokensr   modulesr3  r   r   r   r   r4  )r   r   r4  r   r   r	   r
     s   
zParserReflect.__init__c                 C   s,   |    |   |   |   |   d S r   )	get_startget_error_func
get_tokensget_precedenceget_pfunctionsr8   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   r8   r   r   r	   validate_all  s   zParserReflect.validate_allc              	   C   s   g }z9| j r|| j  | jr|ddd | jD  | jr)|d| j | jD ]}|d r9||d  q,W n ttfyF   Y nw d|S )Nr   c                 S   s   g | ]}d  |qS )r   )r   )rH   r   r   r   r	   rI     r   z+ParserReflect.signature.<locals>.<listcomp>r   r   )r   r|   r   r   r  pfuncs	TypeError
ValueError)r   partsr   r   r   r	   	signature  s"   

zParserReflect.signaturec              	   C   s   t d}| jD ]K}z	t|\}}W n	 ty   Y qw i }t|D ]/\}}|d7 }||}|rR|d}|	|}	|	sC|||< q#t
|}
| jd|
|||	 q#qd S )Nz\s*def\s+(p_[a-zA-Z_0-9]*)\(r   z;%s:%d: Function %s redefined. Previously defined on line %d)recompiler  inspectgetsourcelinesIOErrorr   r   groupr   getsourcefiler4  r   )r   fremodulelineslinen	counthashr   r   r!   prevfilenamer   r   r	   r    s.   






zParserReflect.validate_modulesc                 C      | j d| _d S )Nr   )r   r   r   r8   r   r   r	   r    r\   zParserReflect.get_startc                 C   s.   | j d urt| j ts| jd d S d S d S )Nz'start' must be a string)r   rK   r<   r4  r   r8   r   r   r	   r  #  s
   
zParserReflect.validate_startc                 C   r  )Np_error)r   r   r  r8   r   r   r	   r  )  r\   zParserReflect.get_error_funcc                 C   s   | j rPt| j tjrd}nt| j tjrd}n| jd d| _d S | j jj}| j jj	}t
| j }| j| | j jj| }|dkrR| jd|| d| _d S d S d S )Nr   r   z2'p_error' defined, but is not a function or methodTz$%s:%d: p_error() requires 1 argument)r  rK   typesFunctionType
MethodTyper4  r   __code__co_firstlinenoco_filenamer  	getmoduler  r   co_argcount)r   ismethodelineefiler  argcountr   r   r	   r  -  s$   


z!ParserReflect.validate_error_funcc                 C   sr   | j d}|s| jd d| _d S t|ttfs%| jd d| _d S |s2| jd d| _d S t|| _d S )Nr  zNo token list is definedTztokens must be a list or tupleztokens is empty)	r   r   r4  r   rK   r   r   sortedr  )r   r  r   r   r	   r  C  s   zParserReflect.get_tokensc                 C   sV   d| j v r| jd d| _d S t }| j D ]}||v r#| jd| || qd S )Nr   z.Illegal token name 'error'. Is a reserved wordTzToken %r multiply defined)r  r4  r   r   r   r   )r   r   rM   r   r   r	   r  W  s   

zParserReflect.validate_tokensc                 C   r  )Nr   )r   r   r   r8   r   r   r	   r  e  r\   zParserReflect.get_precedencec                 C   s  g }| j rt| j ttfs| jd d| _d S t| j D ]d\}}t|ttfs4| jd d| _ d S t|dk rG| jd| d| _ d S |d }t|ts\| jd d| _ d S |dd  D ]}t|tsv| jd	 d| _  d S |	|||d f qbq|| _
d S )
Nz"precedence must be a list or tupleTzBad precedence tabler  z?Malformed precedence entry %s. Must be (assoc, term, ..., term)r   z)precedence associativity must be a stringr   z precedence items must be strings)r   rK   r   r   r4  r   r   r+   r<   r|   preclist)r   r  r   r   r   r   r   r   r	   r  i  s8   


z!ParserReflect.validate_precedencec                 C   s   g }| j  D ].\}}|dr|dkrqt|tjtjfr5t|d|jj	}t
|}|||||jf q|jdd d || _d S )Np_r  r  c                 S   s    | d t | d | d | d fS )Nr   r   r  r   r;   )
p_functionr   r   r	   r_    s
   
z.ParserReflect.get_pfunctions.<locals>.<lambda>)key)r   r   
startswithrK   r  r  r  r[   r  r  r  r  r|   __doc__sortr  )r   p_functionsr!   itemr   r  r   r   r	   r    s   

zParserReflect.get_pfunctionsc                 C   s6  g }t | jdkr| jd d| _d S | jD ]\}}}}t|}| j| }t|tj	r0d}nd}|j
j|krF| jd|||j d| _q|j
j|k rZ| jd|||j d| _q|jsh| jd|||j qzt|||}	|	D ]	}
|||
f qqW n ty } z| jt| d| _W Y d }~nd }~ww | j| q| j D ]o\}}|d	rt|tjtj	frq|d
rq|d	r|dkr| jd| t|tjr|j
jdkst|tj	r|jj
jdkr|jrz|jd}|d dkr	| jd|j
j|j
j| W q ty   Y qw q|| _d S )Nr   z+no rules of the form p_rulename are definedTr  r   z%%s:%d: Rule %r has too many argumentsz#%s:%d: Rule %r requires an argumentzA%s:%d: No documentation string specified in function %r (ignored)r  t_r  z%r not defined as a functionr   r  z9%s:%d: Possible grammar rule %r defined without p_ prefix)r+   r  r4  r   r  r  r   rK   r  r  r  r  r   r  r   r  r|   rj   r<   r  r   r   r  r  __func__r  r  r  r   r3  )r   r3  r   r  r!   r  r   r   reqargsparsed_grC  erM   rP   r   r   r	   r    sp   




z!ParserReflect.validate_pfunctionsr   )r   r   r   r
   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r	   r    s     

r  T)r   r  r   check_recursionoptimize	debugfiledebuglogerrorlogc           1         s   |d u r	t tj} rE fddt D }t|}	d|	vr(tj|	d  j|	d< d|	vrDd|	v rDttj|	d  drDtj|	d  j|	d< nt	d}	|d urQ||	d< t
|	|d}
|
  |
jrbtd	|d u r| rz	t t|d
}W n! ty } z|d||f  t }W Y d }~nd }~ww t }|d d}|
 rtd	|
js|d t|
j}|
jD ]&\}}}z	|||| W q ty } z|d| W Y d }~qd }~ww |
jD ]0\}}|\}}}}z|||||| W q ty } z|d| d}W Y d }~qd }~ww z|d u r||
j n|| W n ty< } z|t| d}W Y d }~nd }~ww |rDtd	| }|D ]\}}|d|j |j!| d}qJ|" }|r|d |d |d |D ]}|d| |d| qt| r|d |d |d t#|j$D ]\}}|d|| q|% }|D ]}|d|j |j!|j& qt'|dkr|d t'|dkr|dt'| t'|dkr|d t'|dkr|dt'| | r[|d |d |d t(|j)}|*  |D ]}|d|d +d!d |j)| D  q|d |d" |d t(|j,}|*  |D ]} |d| d +d#d |j,|  D  q@|d |r|- }!|!D ]	}"|d$|" qd|. }#|#D ]}$|d%|$ d}qt|/ }%|%D ]\}}|d&|| d}q|rtd	t0||}&| rt'|&j1}'|'dkr|d' n|'dkr|d(|' t'|&j2}(|(dkr|d) n|(dkr|d*|( | ro|&j1s|&j2ro|d |d+ |d |&j1D ]\})}*}+|d,|*|)|+ qt3 },|&j2D ]<\})}-}.|)t4|-t4|.f|,v rq|d-|)|- |d.|.|) |d-|)|- |d.|.|) |,5|)t4|-t4|.f qg }/|&j2D ] \})}-}.|.j6sm|.|/vrm|d/|. |d/|. |/7|. qN|&8|
j9 t:|&|
j}0|0j;a;|0S )0Nc                    s   g | ]	}|t  |fqS r   )r[   )rH   r  r  r   r	   rI     s    zyacc.<locals>.<listcomp>__file__r   __package__r  r   )r4  zUnable to build parserwzCouldn't open %r. %sz*Created by PLY (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 ruler   zUnused terminals:zToken %r defined, but not usedz    %sr   zRule %-5d %sz$%s:%d: Rule %r defined, but not usedr   zThere is 1 unused tokenzThere are %d unused tokenszThere is 1 unused rulezThere are %d unused rulesz'Terminals, with rules where they appearz
%-20s : %sr   c                 S      g | ]}t |qS r   r;   rG   r   r   r	   rI   d	      z*Nonterminals, with rules where they appearc                 S   r  r   r;   rG   r   r   r	   rI   l	  r  zSymbol %r is unreachablez)Infinite recursion detected for symbol %rz0Precedence rule %r defined for unknown symbol %rz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 reduced)<r   r   r   dirdictr  r  r   r  r  r  r  r   r'   openr  r   r   r   r  r  r   r  r  r   r   r3  r   r   r   r<   r	  r   r   r  r   r   r  r!   r+   r   r   r  r   r   r  r  r  r2  r;  r<  r   r.   r   r   r|   r>  r   rk   r   )1r   r  r   r  r  r  r  r  _itemsr   pinfor  errorsr3  r   r   r   funcnamegramr   r   r   r   r	  r}   r   r  rM   r   r  rQ  nontermsnontermunreachableur  infunused_preclrnum_srnum_rrr   r   
resolutionalready_reportedrulerejectedwarned_neverrB   r   r  r	   yacc  s@  

















(



(











r  )#r  r  r   r  	yaccdebug
debug_filer   r,   maxsizer*  objectr   r   r  r'   r2   r4   r5   r>   rk   r  r   r   r   r   r   r   r(  r"  r0  r2  r  r  r  r  r   r   r   r	   <module>   s\   ?
7  
n\        y)  