U
    dH                    @   s>  d dl mZ d dlZddlmZmZmZmZ dZd Z	dZ
dZdZdZdZd	d
 Zdd Zdd Zdd Zdd ZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd  d eZG d!d" d"eZG d#d$ d$eZG d%d& d&eZG d'd( d(eZG d)d* d*eZ G d+d, d,e Z!G d-d. d.eZ"G d/d0 d0e#Z$e$e	d1d2e$_%e&d3kre'd4 e$j%Z(e'e( G d5d6 d6e$Z)e&d3kr(e) Z(e'e( e)d7dd8d9d:Z(e'e( e) Z(e(*d+d7,d8-d9 e'e( e'e(.  e'e(/  e'e(0  e'e(1  G d;d< d<e)Z2G d=d> d>e#Z3G d?d@ d@e#Z4G dAdB dBe4Z5G dCdD dDe#Z6G dEdF dFe#Z7G dGdH dHe#Z8G dIdJ dJe7Z9G dKdL dLe7Z:G dMdN dNe:Z;G dOdP dPZ<G dQdR dRe#Z=G dSdT dTe7Z>G dUdV dVZ?G dWdX dXe#Z@dYdZ ZAd[d\ ZBG d]d^ d^e#ZCG d_d` d`e#ZDG dadb dbe#ZEG dcdd ddeEZFG dedf dfe#ZGG dgdh dhe#ZHdidj ZIdkdl ZJG dmdn dne#ZKG dodp dpeKZLG dqdr dreKZMG dsdt dteMZNG dudv dveNZOG dwdx dxe#ZPG dydz dze#ZQG d{d| d|e#ZReL ZSd}d~ ZTdd ZUdd ZVdd ZWdS )    )print_functionN   )long
basestring	int_typesxrange       c                  C   s   dddddd} | S )N275r   z2.7.5)majorminormicropatchversion )rr   r   ./tmp/pip-unpacked-wheel-xnx7fvnv/xlwt/antlr.pyr   G   s    r   c                 G   s   | rt d| t|  d S )Nerror: )printtuple)fmtargsr   r   r   errorR   s    r   c                 C   s   | r
|}n|}|S Nr   )ZcondZ_thenZ_elser   r   r   r   ifelseV   s    r   c                 C   s   t tS r   )
isinstancer   xr   r   r   is_string_type]   s    r"   c                 C   s   t | std S r   )r"   AssertionErrorr    r   r   r   assert_string_typeb   s    r$   c                   @   s   e Zd Zdd ZdS )ANTLRExceptionc                 G   s   t j| f|  d S r   )	Exception__init__selfr   r   r   r   r'   l   s    zANTLRException.__init__N__name__
__module____qualname__r'   r   r   r   r   r%   j   s   r%   c                   @   s    e Zd Zdd Zdd ZeZdS )RecognitionExceptionc                 G   sh   t j| f|  d | _d| _d| _t|dkr8|d | _t|dkrN|d | _t|dkrd|d | _d S )Nr      r   r	   r
   )r%   r'   fileNamelinecolumnlenr(   r   r   r   r'   r   s    

zRecognitionException.__init__c                 C   s   dg}| j r|| j d  | jdkrn| j s6|d |t| j | jdkrd|dt| j  |d |d td|S )Nr   :r   zline  )r0   appendr1   strr2   join)r)   bufr   r   r   __str__~   s    




zRecognitionException.__str__Nr+   r,   r-   r'   r:   __repr__r   r   r   r   r.   p   s   r.   c                   @   s    e Zd Zdd Zdd ZeZdS )NoViableAltExceptionc                 G   s\   t j| f|  d | _d | _t|d tr6|d | _n"t|d trP|d | _ntdd S )Nr   z3NoViableAltException requires Token or AST argument)r.   r'   tokennoder   ASTToken	TypeErrorr(   r   r   r   r'      s    zNoViableAltException.__init__c                 C   sX   | j r2| j  }| j  }| j  }d|||f S | jtkr@dS | jsJtd| j  S )Nz.unexpected symbol at line %s (column %s): "%s"zunexpected end of subtreezunexpected node: %s)r>   getLine	getColumngetTextr?   ASTNULLr#   )r)   r1   coltextr   r   r   r:      s    




zNoViableAltException.__str__Nr;   r   r   r   r   r=      s   r=   c                   @   s    e Zd Zdd Zdd ZeZdS )NoViableAltForCharExceptionc                 G   s   d | _ t|dkrD|d | _ |d }t| d| | |  nTt|dkr|d | _ |d }|d }|d }t| d||| nt| dddd d S )	Nr/   r   r   ZNoViableAltr
   r	   r   r   )	foundCharr3   r.   r'   getFilenamerC   rD   )r)   r   scannerr0   r1   r2   r   r   r   r'      s0    

    z$NoViableAltForCharException.__init__c                 C   sb   d}| j dkr,| j dkr,|d| j  d 7 }n2| j rV|dtt| j  dd   7 }n|d7 }|S )Nzunexpected char: r5   ~'0xr/   z<None>)rJ   hexordupper)r)   Zmesgr   r   r   r:      s    $z#NoViableAltForCharException.__str__Nr;   r   r   r   r   rI      s   
rI   c                   @   s   e Zd Zdd ZdS )SemanticExceptionc                 G   s   t j| f|  d S r   )r.   r'   r(   r   r   r   r'      s    zSemanticException.__init__Nr*   r   r   r   r   rS      s   rS   c                   @   sD   e Zd ZdZdZdZdZdZdZdZ	dd	 Z
d
d Zdd ZeZdS )MismatchedCharExceptionr   r   r/   r	   r
         c                 G   s  || _ t|dkr||d r$tj| _ntj| _|d | _|d | _|d | _|d | _	t
| d| j	 | j	 | j	  nt|dkrt|d r|d rtj| _ntj| _|d | _|d | _|d | _	t
| d| j	 | j	 | j	  nt|dkrpt|d trp|d r$tj| _ntj| _|d | _|d | _|d | _	t
| d	| j	 | j	 | j	  ntj| _t
| d d S )
NrU   r	   r   r   r/   r
   zMismatched char rangezMismatched charzMismatched char set)r   r3   rT   	NOT_RANGEmismatchTypeRANGErJ   	expectingrR   rL   r.   r'   rK   rC   rD   r"   NOT_CHARCHARr   BitSetNOT_SETSETsetNONEr(   r   r   r   r'      sP    













z MismatchedCharException.__init__c                 C   sj   |r|dkr| d nN|dkr,| d n:|dkr@| d n&|dkrT| d n| d	| d	  d S )
Ni  z'<EOF>'
z'\n'z'\r'	z'\t'rN   )r6   )r)   sbcr   r   r   appendCharName  s    z&MismatchedCharException.appendCharNamec                 C   s  dg}| t|  | jtjkrV| d | || j | d | || j n.| jtj	kr| d | || j | d n| jtj
tjfkr| d | jtjkr| d | d | || j | d	 | || j | d | || j n| jtjtjfkr| d | jtjkr:| d | d
 tt| jD ]}| || j|  qR| d | || j t | S )Nr   
expecting , found expecting anything but ''; got it anywayzexpecting char NOT 
in range: ..one of (	), found )r6   r.   r:   rX   rT   r\   rg   rZ   rJ   r[   rY   rW   rR   r_   r^   ranger3   r`   r7   r8   stripr)   re   ir   r   r   r:     s>    











zMismatchedCharException.__str__N)r+   r,   r-   ra   r\   r[   rY   rW   r_   r^   r'   rg   r:   r<   r   r   r   r   rT      s   1#rT   c                   @   sD   e Zd ZdZdZdZdZdZdZdZ	dd	 Z
d
d Zdd ZeZdS )MismatchedTokenExceptionr   r   r/   r	   r
   rU   rV   c                 G   s  || _ g | _d | _d| _d | _t|dkrn|d r<tj| _ntj	| _|d | _|d | _
|d | _|d | _nt|dkrt|d tr|d rtj| _ntj| _|d | _|d | _
nht|dkrt|d tr|d rtj| _ntj| _|d | _|d | _ntj| _t| dd	d
d
 t|dkrt|d trv|d | _| j | _t| d| j| j | j  n^t|d tr|d | _t| j| _t| dd	| j | j  nd| _t| dd	d
d
 d S )Nr   rV   r	   r   r/   rU   r
   z(Mismatched Token: expecting any AST nodez<AST>r   r   zMismatched Tokenz<empty tree>)r   
tokenNamesr>   	tokenTextr?   r3   ru   rW   rX   rY   rZ   rR   r0   r   int	NOT_TOKENTOKENr]   r^   r_   r`   ra   r.   r'   rA   rE   rC   rD   r@   r7   r(   r   r   r   r'   O  sd    









  z!MismatchedTokenException.__init__c                 C   sV   |t kr|d n>|dk s*|t| jkrB|dt| d  n|| j|  d S )Nz<Set of tokens>r   <>)INVALID_TYPEr6   r3   rv   r7   )r)   re   	tokenTyper   r   r   appendTokenName  s
    z(MismatchedTokenException.appendTokenNamec                 C   sz  dg}| t|  | jtjkrN| d | || j | d| j  n| jtj	kr~| d | || j | d n| jtj
tjfkr| d | jtjkr| d | d | || j | d	 | || j | d| j  nx| jtjtjfkrj| d | jtjkr(| d | d
 tt| jD ]}| || j|  q@| d| j  t | S )Nr   rh   ri   rj   rk   zexpecting token rl   rm   rn   ro   rp   )r6   r.   r:   rX   ru   rz   r   rZ   rw   ry   rY   rW   rR   r_   r^   rq   r3   r`   r7   r8   rr   rs   r   r   r   r:     s8    








z MismatchedTokenException.__str__N)r+   r,   r-   ra   rz   ry   rY   rW   r_   r^   r'   r   r:   r<   r   r   r   r   ru   E  s   ; ru   c                   @   s   e Zd Zdd ZdS )TokenStreamExceptionc                 G   s   t j| f|  d S r   r%   r'   r(   r   r   r   r'     s    zTokenStreamException.__init__Nr*   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TokenStreamIOExceptionc                 G   sL   |r2t |d tr2|d }t| t| || _ntj| f|  | | _d S Nr   )r   r&   r   r'   r7   ior)   r   r   r   r   r   r'     s    zTokenStreamIOException.__init__Nr*   r   r   r   r   r     s   r   c                   @   s    e Zd Zdd Zdd ZeZdS )TokenStreamRecognitionExceptionc                 G   s>   |r2t |d tr2|d }t| t| || _ntdd S )Nr   zFTokenStreamRecognitionException requires RecognitionException argument)r   r.   r   r'   r7   recogrB   )r)   r   r   r   r   r   r'     s
    z(TokenStreamRecognitionException.__init__c                 C   s
   t | jS r   )r7   r   r)   r   r   r   r:     s    z'TokenStreamRecognitionException.__str__Nr;   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TokenStreamRetryExceptionc                 G   s   t j| f|  d S r   )r   r'   r(   r   r   r   r'     s    z"TokenStreamRetryException.__init__Nr*   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )CharStreamExceptionc                 G   s   t j| f|  d S r   r   r(   r   r   r   r'     s    zCharStreamException.__init__Nr*   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )CharStreamIOExceptionc                 G   sL   |r2t |d tr2|d }t| t| || _ntj| f|  | | _d S r   )r   r&   r   r'   r7   r   r   r   r   r   r'     s    zCharStreamIOException.__init__Nr*   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )TryAgainN)r+   r,   r-   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdZdZ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eZeZd S )!rA   r   r   r   r	   r
   c                 K   sH   z|d | _ W n   t| _ Y nX z|d | _W n   d| _Y nX d S )NtyperH   	<no text>)r   r}   rH   r)   argvr   r   r   r'     s    zToken.__init__c                 C   s
   | j tkS r   )r   EOF_TYPEr   r   r   r   isEOF  s    zToken.isEOFc                 C   s   dS r   r   r   r   r   r   rD     s    zToken.getColumnc                 C   s   dS r   r   r   r   r   r   rC     s    zToken.getLinec                 C   s   d S r   r   r   r   r   r   rK     s    zToken.getFilenamec                 C   s   | S r   r   )r)   namer   r   r   setFilename  s    zToken.setFilenamec                 C   s   dS )Nr   r   r   r   r   r   rE     s    zToken.getTextc                 C   s   t |r
ntd| S )Nz&Token.setText requires string argument)r"   rB   r)   rH   r   r   r   setText!  s    zToken.setTextc                 C   s   | S r   r   )r)   r2   r   r   r   	setColumn(  s    zToken.setColumnc                 C   s   | S r   r   r)   r1   r   r   r   setLine+  s    zToken.setLinec                 C   s   | j S r   )r   r   r   r   r   getType.  s    zToken.getTypec                 C   s   t |tr|| _ntd| S )Nz'Token.setType requires integer argument)r   rx   r   rB   )r)   r   r   r   r   setType1  s    
zToken.setTypec                 C   sR   | j }|dkrd}n.|dkr"d}n |dkr0d}n|dkr>d}n|}d	|  |f S )
Nr	   NULL_TREE_LOOKAHEADr   r   r   r}   r   SKIPz["%s",<%s>])r   rE   )r)   type_tvalr   r   r   toString8  s    zToken.toStringN)r+   r,   r-   r   r}   r   EOFr   MIN_USER_TYPEr'   r   rD   rC   rK   r   rE   r   r   r   r   r   r   r:   r<   r   r   r   r   rA     s*   
rA   r   )r   rH   __main__z
testing ..c                   @   sT   e Z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
e
Ze
ZdS )CommonTokenc                 K   sV   t j| f| d| _d| _z|d | _W n   Y nX z|d | _W n   Y nX d S )Nr   r1   rG   )rA   r'   r1   rG   r   r   r   r   r'   X  s    zCommonToken.__init__c                 C   s   | j S r   r1   r   r   r   r   rC   e  s    zCommonToken.getLinec                 C   s   | j S r   rH   r   r   r   r   rE   h  s    zCommonToken.getTextc                 C   s   | j S r   rG   r   r   r   r   rD   k  s    zCommonToken.getColumnc                 C   s
   || _ | S r   r   r   r   r   r   r   n  s    zCommonToken.setLinec                 C   s
   || _ | S r   r   r   r   r   r   r   r  s    zCommonToken.setTextc                 C   s
   || _ | S r   r   )r)   rG   r   r   r   r   v  s    zCommonToken.setColumnc                 C   sb   | j }|dkrd}n.|dkr"d}n |dkr0d}n|dkr>d}n|}| j|| j| jd	}d
}|| S )Nr	   r   r   r   r   r}   r   r   )rH   r   r1   Zcolmz2["%(text)s",<%(type)s>,line=%(line)s,col=%(colm)s])r   rH   r1   rG   )r)   r   r   dr   r   r   r   r   z  s"    zCommonToken.toStringN)r+   r,   r-   r'   rC   rE   rD   r   r   r   r   r:   r<   r   r   r   r   r   V  s   r      z	some textrU   )rG   r1   rH   r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )CommonHiddenStreamTokenc                 G   s    t j| f|  d | _d | _d S r   )r   r'   hiddenBeforehiddenAfterr(   r   r   r   r'     s    z CommonHiddenStreamToken.__init__c                 C   s   | j S r   r   r   r   r   r   getHiddenAfter  s    z&CommonHiddenStreamToken.getHiddenAfterc                 C   s   | j S r   r   r   r   r   r   getHiddenBefore  s    z'CommonHiddenStreamToken.getHiddenBeforec                 C   s
   || _ d S r   r   r)   tr   r   r   setHiddenAfter  s    z&CommonHiddenStreamToken.setHiddenAfterc                 C   s
   || _ d S r   r   r   r   r   r   setHiddenBefore  s    z'CommonHiddenStreamToken.setHiddenBeforeN)r+   r,   r-   r'   r   r   r   r   r   r   r   r   r     s
   r   c                   @   sD   e Z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 )Queuec                 C   s
   g | _ d S r   bufferr   r   r   r   r'     s    zQueue.__init__c                 C   s   | j | d S r   )r   r6   r)   itemr   r   r   r6     s    zQueue.appendc                 C   s
   | j | S r   r   )r)   indexr   r   r   	elementAt  s    zQueue.elementAtc                 C   s
   g | _ d S r   r   r   r   r   r   reset  s    zQueue.resetc                 C   s   | j d d S r   )r   popr   r   r   r   removeFirst  s    zQueue.removeFirstc                 C   s
   t | jS r   )r3   r   r   r   r   r   length  s    zQueue.lengthc                 C   s
   t | jS r   )r7   r   r   r   r   r   r:     s    zQueue.__str__N)
r+   r,   r-   r'   r6   r   r   r   r   r:   r   r   r   r   r     s   r   c                   @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd 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 )InputBufferc                 C   s   d| _ d| _d| _t | _d S r   )nMarkersmarkerOffsetnumToConsumer   queuer   r   r   r   r'     s    zInputBuffer.__init__c                 C   s   d| j | j| j| jf S )Nz(%s,%s,%s,%s))r   r   r   r   r   r   r   r   r:     s    zInputBuffer.__str__c                 C   s   t | S r   r7   r   r   r   r   r<     s    zInputBuffer.__repr__c                 C   s   |  j d8  _ d S Nr   r   r   r   r   r   commit  s    zInputBuffer.commitc                 C   s   |  j d7  _ d S r   r   r   r   r   r   consume  s    zInputBuffer.consumec                 C   s2   | j }| j }d}||k r.|| j|7 }q|S Nr   )r   r   r   r   )r)   rt   nsr   r   r   
getLAChars  s    
zInputBuffer.getLACharsc                 C   s,   d}d}| j }||k r(|| j|7 }q|S )Nr   r   )r   r   r   )r)   r   rt   r   r   r   r   getMarkedChars  s    zInputBuffer.getMarkedCharsc                 C   s
   | j dkS r   r   r   r   r   r   isMarked  s    zInputBuffer.isMarkedc                 C   s
   t  d S r   NotImplementedErrorr)   kr   r   r   fill  s    zInputBuffer.fillc                 C   s    |  | | j| j| d S r   r   r   r   r   r   r   r   r   LA  s    
zInputBuffer.LAc                 C   s   |    |  jd7  _| jS r   syncConsumer   r   r   r   r   r   mark  s    zInputBuffer.markc                 C   s    |    || _|  jd8  _d S r   r   r   r   r)   r   r   r   r   rewind  s    zInputBuffer.rewindc                 C   s    d| _ d| _d| _| j  d S r   r   r   r   r   r   r   r   r   r   r     s    zInputBuffer.resetc                 C   sB   | j dkr>| jdkr$|  jd7  _n
| j  |  j d8  _ q d S Nr   r   r   r   r   r   r   r   r   r   r   r     s
    


zInputBuffer.syncConsumeN)r+   r,   r-   r'   r:   r<   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s   
r   c                       s0   e Zd Z fddZ fddZdd Z  ZS )
CharBufferc                    s   t t|   || _d S r   )superr   r'   input)r)   reader	__class__r   r   r'   .  s    zCharBuffer.__init__c                    s   t t|  }d|ttf S )NzCharBuffer{%s,%s)r   r   r:   r7   r   )r)   baser   r   r   r:   5  s    zCharBuffer.__str__c              
   C   s   zb|    | j || j k r`| jd}t|dksFt|dksFtt|sRt| j	| q
W n* t
k
r } zt|W 5 d }~X Y nX d S Nr   r   )r   r   r   r   r   readr3   r#   r"   r6   r&   r   )r)   amountrf   er   r   r   r   9  s    zCharBuffer.fill)r+   r,   r-   r'   r:   r   __classcell__r   r   r   r   r   -  s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )LexerSharedInputStatec                 C   s<   t |tst|| _d| _d| _d| _d| _d| _d | _	d S r   )
r   r   r#   r   r2   r1   tokenStartColumntokenStartLineguessingfilename)r)   Zibufr   r   r   r'   _  s    zLexerSharedInputState.__init__c                 C   s2   d| _ d| _d| _d| _d| _d | _| j  d S r   )r2   r1   r   r   r   r   r   r   r   r   r   r   r   i  s    zLexerSharedInputState.resetc                 C   s   | j |S r   )r   r   r   r   r   r   r   r  s    zLexerSharedInputState.LAN)r+   r,   r-   r'   r   r   r   r   r   r   r   ^  s   
	r   c                   @   s   e Zd Zdd Zdd ZdS )TokenStreamc                 C   s   d S r   r   r   r   r   r   	nextTokenz  s    zTokenStream.nextTokenc                 C   s   t | S r   )TokenStreamIteratorr   r   r   r   __iter__}  s    zTokenStream.__iter__N)r+   r,   r-   r   r   r   r   r   r   r   y  s   r   c                   @   s   e Zd Zdd Zdd ZdS )r   c                 C   s    t |tr|| _d S tdd S )Nz/TokenStreamIterator requires TokenStream object)r   r   instrB   r)   r   r   r   r   r'     s    
zTokenStreamIterator.__init__c                 C   s*   | j s
t| j  }|r | r&t |S r   r   r#   r   r   StopIterationr   r   r   r   next  s
    

zTokenStreamIterator.nextNr+   r,   r-   r'   r   r   r   r   r   r     s   r   c                   @   sT   e Z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 )TokenStreamSelectorc                 C   s   d | _ i | _g | _d S r   )_input_stmap_stackr   r   r   r   r'     s    zTokenStreamSelector.__init__c                 C   s   || j |< d S r   )r   )r)   streamkeyr   r   r   addInputStream  s    z"TokenStreamSelector.addInputStreamc                 C   s   | j S r   )r   r   r   r   r   getCurrentStream  s    z$TokenStreamSelector.getCurrentStreamc                 C   s0   z| j | }W n   td| d Y nX |S )NzTokenStream z
 not found)r   
ValueError)r)   Zsnamer   r   r   r   	getStream  s
    zTokenStreamSelector.getStreamc                 C   s(   z| j  W S  tk
r    Y q X q d S r   )r   r   r   r   r   r   r   r     s    zTokenStreamSelector.nextTokenc                 C   s   | j  }| | |S r   )r   r   selectr)   r   r   r   r   r     s    

zTokenStreamSelector.popc                 C   s   | j | j | | d S r   )r   r6   r   r  r)   argr   r   r   push  s    zTokenStreamSelector.pushc                 C   s
   t  d S r   )r   r   r   r   r   retry  s    zTokenStreamSelector.retryc                 C   s8   t |tr|| _d S t|r,| || _d S tdd S )NzBTokenStreamSelector.select requires TokenStream or string argument)r   r   r   r"   r  rB   r  r   r   r   r    s    
zTokenStreamSelector.selectN)r+   r,   r-   r'   r  r  r  r   r   r
  r  r  r   r   r   r   r     s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TokenStreamBasicFilterc                 C   s   || _ t | _d S r   )r   r]   discardMaskr)   r   r   r   r   r'     s    zTokenStreamBasicFilter.__init__c                 C   s:   t |tr| j| d S t |tr.|| _d S tdd S )NzATokenStreamBasicFilter.discard requiresinteger or BitSet argument)r   rx   r  addr]   ZdiscardMarkrB   r  r   r   r   discard  s    

zTokenStreamBasicFilter.discardc                 C   s.   | j  }|r*| j| r*| j  }q
|S r   )r   r   r  memberr   )r)   tokr   r   r   r     s    
z TokenStreamBasicFilter.nextTokenN)r+   r,   r-   r'   r  r   r   r   r   r   r    s   
r  c                   @   sd   e Z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 )TokenStreamHiddenTokenFilterc                 C   s*   t | | t | _d | _d | _d | _d S r   )r  r'   r]   hideMasknextMonitoredTokenlastHiddenTokenfirstHiddenr  r   r   r   r'     s
    z%TokenStreamHiddenTokenFilter.__init__c                 C   s   | j  | _d S r   )r   r   r  r   r   r   r   r     s    z$TokenStreamHiddenTokenFilter.consumec                 C   s   |    d }| j| d s8| j| d r| j| d r|s^| d}n*|| d | d| | d}|| _| j	s|| _	|    qd S r   )
r   r  r  r   r   r  r   r   r  r  )r)   pr   r   r   consumeFirst  s    
z)TokenStreamHiddenTokenFilter.consumeFirstc                 C   s   | j S r   )r  r   r   r   r   getDiscardMask  s    z+TokenStreamHiddenTokenFilter.getDiscardMaskc                 C   s   |  S r   )r   r   r   r   r   r     s    z+TokenStreamHiddenTokenFilter.getHiddenAfterc                 C   s   |  S r   )r   r   r   r   r   r     s    z,TokenStreamHiddenTokenFilter.getHiddenBeforec                 C   s   | j S r   )r  r   r   r   r   getHideMask  s    z(TokenStreamHiddenTokenFilter.getHideMaskc                 C   s   | j S r   )r  r   r   r   r   getInitialHiddenToken  s    z2TokenStreamHiddenTokenFilter.getInitialHiddenTokenc                 C   s2   t |tr| j| d S t |jr.|| _d S d S r   )r   rx   r  r  ZBitMask)r)   mr   r   r   hide  s    

z!TokenStreamHiddenTokenFilter.hidec                 C   s   | j S r   )r  r)   rt   r   r   r   r     s    zTokenStreamHiddenTokenFilter.LAc                 C   s   |  ds|   |  d}|| j d | _|   |}| j|  d sf| j|  d r| j|  d r|	|  d ||kr|  d| |  d }| _|   q:|S r   )
r   r  r   r  r   r  r  r   r  r   )r)   Z	monitoredr  r   r   r   r     s"    


z&TokenStreamHiddenTokenFilter.nextTokenN)r+   r,   r-   r'   r   r  r  r   r   r  r  r  r   r   r   r   r   r   r    s   r  c                   @   sD   e Zd ZdddZdd Zdd Zdd	 Zdd
dZeZdd Z	dS )StringBufferNc                 C   s   |rt || _ng | _d S r   )listrH   )r)   stringr   r   r   r'   :  s    zStringBuffer.__init__c                 C   s>   |sg | _ d S |dkst||  kr*d S | j d| | _ d S r   )rH   r#   r   )r)   szr   r   r   	setLength@  s    zStringBuffer.setLengthc                 C   s
   t | jS r   )r3   rH   r   r   r   r   r   J  s    zStringBuffer.lengthc                 C   s   | j | d S r   )rH   r6   r)   rf   r   r   r   r6   M  s    zStringBuffer.appendc                 C   s   |sd}|dkst |t| jkr&dS |s:| j|d  }n,|| t| jksPt || }| j|| }d}|D ]}||7 }qn|S )Nr   r   )r#   r3   rH   )r)   ar   Lbr   r!   r   r   r   	getStringT  s     
zStringBuffer.getStringc                 C   s
   t | jS r   r7   rH   r   r   r   r   r:   h  s    zStringBuffer.__str__)N)NN)
r+   r,   r-   r'   r$  r   r6   r)  r   r:   r   r   r   r   r   9  s   


r   c                   @   s   e Zd Zdd Zdd ZdS )Readerc                 C   s   || _ g | _d S r   )cinr9   r  r   r   r   r'   x  s    zReader.__init__c                 C   sp   |dkst t| jr | j S | jd}|r<t|dkr@|S t|}|  |D ]}| j| qT| dS r   )	r#   r3   r9   r   r,  r   r!  reverser6   )r)   numrf   r'  r!   r   r   r   r   |  s    

zReader.readN)r+   r,   r-   r'   r   r   r   r   r   r+  w  s   r+  c                       s  e Zd ZdZdZ f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!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Z d;d< Z!d=d> Z"d?d@ Z#dAdB Z$dpdCdDZ%dEdF Z&dGdH Z'dIdJ Z(dKdL Z)dMdN Z*dOdP Z+dQdR Z,dSdT Z-dUdV Z.dWdX Z/dYdZ Z0d[d\ Z1d]d^ Z2d_d` Z3dadb Z4dcdd Z5dedf Z6dgdh Z7didj Z8dqdldmZ9dndo Z:  Z;S )rCharScannerr   r   c                    sn   t t|   d| _d | _d| _d| _d | _d| _d | _	d| _
d| _t | _t| | _| t | j|  d S )NT   Fr   )r   r/  r'   saveConsumedInput
tokenClasscaseSensitivecaseSensitiveLiteralsliteralstabsize_returnTokencommitToPath
traceDepthr   rH   hashZ
hashStringsetTokenObjectClassr   setInput)r)   r   kwargsr   r   r   r'     s    

zCharScanner.__init__c                 C   s   t | S r   )CharScannerIteratorr   r   r   r   r     s    zCharScanner.__iter__c                 G   s   |sdd l }| |j d S |d }t|rNt|d}| | | | d S t|trj| t| d S t|t	r~|| _
d S t|tr| t	| d S z*|jrt|}t|}t	|}|| _
W d S    Y nX t|d S )Nr   rb)sysr<  stdinr"   openr   r   filer   r   
inputStater   r   r+  rB   )r)   r   r@  arg1frdcbssr   r   r   r<    s:    





zCharScanner.setInputc                 C   s
   || _ d S r   r6  )r)   sizer   r   r   
setTabSize  s    zCharScanner.setTabSizec                 C   s   | j S r   rJ  r   r   r   r   
getTabSize  s    zCharScanner.getTabSizec                 C   s
   || _ d S r   r3  r   r   r   r   setCaseSensitive  s    zCharScanner.setCaseSensitivec                 C   s
   || _ d S r   r8  )r)   r   r   r   r   setCommitToPath  s    zCharScanner.setCommitToPathc                 C   s   || j _d S r   rD  r   r)   rF  r   r   r   r     s    zCharScanner.setFilenamec                 C   s   || j _d S r   rD  r1   r   r   r   r   r     s    zCharScanner.setLinec                 C   s   |    | j| d S r   )	resetTextrH   r6   r)   r   r   r   r   r     s    zCharScanner.setTextc                 C   s   | j S r   rN  r   r   r   r   getCaseSensitive  s    zCharScanner.getCaseSensitivec                 C   s   | j S r   )r4  r   r   r   r   getCaseSensitiveLiterals  s    z$CharScanner.getCaseSensitiveLiteralsc                 C   s   | j jS r   rD  r2   r   r   r   r   rD     s    zCharScanner.getColumnc                 C   s   || j _d S r   rY  r%  r   r   r   r     s    zCharScanner.setColumnc                 C   s   | j S r   rP  r   r   r   r   getCommitToPath  s    zCharScanner.getCommitToPathc                 C   s   | j jS r   rR  r   r   r   r   rK     s    zCharScanner.getFilenamec                 C   s   | j jS r   rD  r   r   r   r   r   getInputBuffer  s    zCharScanner.getInputBufferc                 C   s   | j S r   rD  r   r   r   r   getInputState  s    zCharScanner.getInputStatec                 C   s   t |tst|| _d S r   )r   r   r#   rD  r)   stater   r   r   setInputState  s    zCharScanner.setInputStatec                 C   s   | j jS r   rT  r   r   r   r   rC     s    zCharScanner.getLinec                 C   s
   t | jS r   r*  r   r   r   r   rE   !  s    zCharScanner.getTextc                 C   s   | j S r   )r7  r   r   r   r   getTokenObject$  s    zCharScanner.getTokenObjectc                 C   s$   | j j|}| js |j|}|S r   )rD  r   r   r3  r   lower)r)   rt   rf   r   r   r   r   '  s    zCharScanner.LAc                 C   s\   z>| j st|   }|| || jj || jj |W S    | d Y nX t	j
S )Nzunable to create new token)r2  r#   r   r   rD  r   r   r   panicrA   badToken)r)   r   r  r   r   r   	makeToken.  s    

zCharScanner.makeTokenc                 C   s   | j j S r   rD  r   r   r   r   r   r   r   ;  s    zCharScanner.markc                 C   s2   | | dr|   nt| d|d| d S Nr   F)r  r   r   rT   r)   r(  r   r   r   _match_bitset>  s    
zCharScanner._match_bitsetc                 C   s:   |D ]0}|  d|kr |   qt|  d|d| qd S rh  r   r   rT   )r)   r   rf   r   r   r   _match_stringD  s    
zCharScanner._match_stringc                 C   s    t |r| |S | |S d S r   )r"   rl  rj  r   r   r   r   matchK  s    
zCharScanner.matchc                 C   s0   |  d|kr|   nt|  d|d| d S Nr   Trk  r%  r   r   r   matchNotQ  s    
zCharScanner.matchNotc                 C   s@   |  d|k s|  d|kr4t|  d||d| n|   d S rh  )r   rT   r   )r)   c1c2r   r   r   
matchRangeW  s    zCharScanner.matchRangec                 C   s   | j  jd7  _d| j _d S r   )rD  r1   r2   r   r   r   r   newline]  s    zCharScanner.newlinec                 C   s2   |   }|d | j d | j d }| | d S r   )rD   r6  r   )r)   rf   Zncr   r   r   taba  s    zCharScanner.tabc                 C   s   t d|  td d S )NzCharScanner: panic: r   )r   r@  exitrV  r   r   r   rd  f  s    zCharScanner.panicc                 C   s6   |   stdt|  nt|   d t|  d S )Nr   z	: error: rK   r   r7   rV  r   r   r   reportErrorj  s    zCharScanner.reportErrorc                 C   s6   |   stdt|  nt|   d t|  d S )Nz	warning: z: warning: rv  rV  r   r   r   reportWarningp  s    zCharScanner.reportWarningc                 C   s(   | j d | jj| j_| jj| j_d S r   )rH   r$  rD  r2   r   r1   r   r   r   r   r   rU  v  s    zCharScanner.resetTextc                 C   s   | j j| d S r   rD  r   r   r)   posr   r   r   r   {  s    zCharScanner.rewindc                 C   s
   || _ d S r   )r2  r)   Zclr   r   r   r;  ~  s    zCharScanner.setTokenObjectClassc                 C   sh   |sd S t |tst| }|ttttfkr2d S | }|sBd S t	|sNt| 
||}|| |S r   )r   rA   r#   r   r   r}   r   r   rE   r"   testLiteralsTabler   )r)   r>   _typeZ_textr   r   r   testForLiteral  s    
zCharScanner.testForLiteralc                 G   s   t |d r|d }|d }n| j }|d }t|tsHt|tsHtt| jtsXtz | jsl|j	
|}| j| }W n   Y nX |S r   )r"   rH   r)  r   rx   r#   r5  dictr4  r   rc  )r)   r   r   rt   r   r   r   r}    s    


zCharScanner.testLiteralsTablec                 C   s
   |j  S r   )r   rc  r%  r   r   r   toLower  s    zCharScanner.toLowerc                 C   s   t d| j  d S Nr5   r   r9  r   r   r   r   traceIndent  s    zCharScanner.traceIndentc                 C   s0   |  j d7  _ |   td|| df  d S )Nr   z> lexer %s c== %s)r9  r  r   r   r)   rnamer   r   r   traceIn  s    zCharScanner.traceInc                 C   s0   |    td|| df  |  jd8  _d S )Nz< lexer %s c== %sr   )r  r   r   r9  r  r   r   r   traceOut  s    zCharScanner.traceOutc                 C   s   d S r   r   r   r   r   r   uponEOF  s    zCharScanner.uponEOFc                 C   s   | j r| j| d S r   )r1  rH   r6   r%  r   r   r   r6     s    zCharScanner.appendc                 C   s   | j j  d S r   )rD  r   r   r   r   r   r   r     s    zCharScanner.commitc                 C   sr   | j jsb| d}| jr$| | n| j jd}| | |rR|dkrR|   n| j  jd7  _| j j  d S )Nr   rd   )	rD  r   r   r3  r6   r   rt  r2   r   r%  r   r   r   r     s    


zCharScanner.consumec                 C   s*   |  dtkr&|  d|kr&|   q d S r   )r   EOF_CHARr   r%  r   r   r   consumeUntil_char  s    zCharScanner.consumeUntil_charc                 C   s.   |  dtkr*| j|  ds*|   q d S r   )r   r  r`   r  r   )r)   Zbitsetr   r   r   consumeUntil_bitset  s     zCharScanner.consumeUntil_bitsetc                 C   s(   |s|    | t| _n
| | d S r   )r  rf  r   r7  raise_NoViableAlt)r)   la1r   r   r   default  s    zCharScanner.defaultc              
   G   s   |s|    | t| _d S |s0|   t n`|   z|d }||dd    W n4 tk
r } z| | |   W 5 d }~X Y nX t d S r   )	r  rf  r   r7  r   r   r   r.   rw  )r)   r  r   funcr   r   r   r   filterdefault  s    
zCharScanner.filterdefaultNc                 C   s8   |s|  d}|  }|  }|  }t||||d S r   )r   rK   rC   rD   rI   )r)   r  fnamer1   rG   r   r   r   r    s     
zCharScanner.raise_NoViableAltc                 C   s:   |r0|s0|t ks0| j|}| |}|| || _|S r   )r   rH   r)  rf  r   r7  )r)   _create_tokenZ_ttype_offsetr"  r   r   r   set_return_token  s    

zCharScanner.set_return_token)r   )N)<r+   r,   r-   ZNO_CHARr  r'   r   r<  rL  rM  rO  rQ  r   r   r   rW  rX  rD   r   rZ  rK   r\  r^  ra  rC   rE   rb  r   rf  r   rj  rl  rm  ro  rr  rs  rt  rd  rw  rx  rU  r   r;  r  r}  r  r  r  r  r  r6   r   r   r  r  r  r  r  r  r   r   r   r   r   r/    sp   ?

r/  c                   @   s   e Zd Zdd Zdd ZdS )r>  c                 C   s    t |tr|| _d S tdd S )Nz/CharScannerIterator requires CharScanner object)r   r/  r   rB   r   r   r   r   r'     s    
zCharScannerIterator.__init__c                 C   s*   | j s
t| j  }|r | r&t |S r   r   r   r   r   r   r     s
    

zCharScannerIterator.nextNr   r   r   r   r   r>    s   r>  c                   @   sr   e Zd ZdZdZdZed ZdddZdd	 Zd
d Z	dd Z
dd Zdd ZdddZeZdddZdd ZdS )r]   @   r
   rV   r   Nc                 C   s   |st | tdg d S t|tr:t | t|g d S t|trVt | |g d S t|tshtd|D ] }t|tslt| dd|  ql|| _d S )Nr   z/BitSet requires integer, long, or list argumentzList argument item is znot a long: %s)	r]   r'   r   r   rx   r!  rB   r   data)r)   r  r!   r   r   r   r'   /  s"    



zBitSet.__init__c                 C   s`   t | jtj }d}td|D ]<}| |r6|d7 }n|d7 }|d d s|d|d  7 }q|S )Nr   r   1or   
   z|%s|)r3   r  r]   BITSr   at)r)   bitsr   rt   r   r   r   r:   B  s    

zBitSet.__str__c                 C   s   t | S r   r   r   r   r   r   r<   N  s    zBitSet.__repr__c                 C   s^   |sdS t |tr| |S t|s2t| d| t|dkrLt| d| t|}| |S )NFzchar or unichar expected: %sr   zchar expected: %s)r   rx   r  r"   rB   r3   rQ   )r)   r   r.  r   r   r   r  Q  s    

zBitSet.memberc                 C   s
   |t j? S r   )r]   LOG_BITS)r)   bitr   r   r   
wordNumberg  s    zBitSet.wordNumberc                 C   s   |t j@ }d|> S r   )r]   MOD_MASK)r)   r  r{  r   r   r   bitMaskj  s    
zBitSet.bitMaskTc                 C   s   |  |}| |}|t| jkrf|t| j d }td|D ]}| jd q>t| j|d ksft|r~| j|  |O  < n| j|  | M  < d S r   )r  r  r3   r  r   r6   r#   )r)   r  onrt   maskr   r!   r   r   r   r`   n  s    

z
BitSet.setc                 C   s   |  ||  d S r   )r`   )r)   r  offr   r   r   r    s    z
BitSet.offc                 C   s&   |  |}| j| }| |}||@ S r   )r  r  r  )r)   r  rt   vr  r   r   r   r    s    


z	BitSet.at)N)T)T)r+   r,   r-   r  ZNIBBLEr  r  r'   r:   r<   r  r  r  r`   r  r  r  r   r   r   r   r]   )  s   


r]   c                 C   s   t d| j d S Nz1%s is only valid if parser is built for debugging)r  	func_namer  r   r   r   illegalarg_ex  s
    r  c                 C   s   t d| j d S r  )RuntimeErrorr  r  r   r   r   
runtime_ex  s
    r  c                   @   sl   e Z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 )TokenBufferc                 C   s$   || _ d| _d| _d| _t | _d S r   )r   r   r   r   r   r   r  r   r   r   r'     s
    zTokenBuffer.__init__c                 C   s    d| _ d| _d| _| j  d S r   r   r   r   r   r   r     s    zTokenBuffer.resetc                 C   s   |  j d7  _ d S r   r   r   r   r   r   r     s    zTokenBuffer.consumec                 C   s4   |    | j || j k r0| j| j  qd S r   )r   r   r   r   r6   r   r   )r)   r   r   r   r   r     s    zTokenBuffer.fillc                 C   s   | j S r   )r   r   r   r   r   getInput  s    zTokenBuffer.getInputc                 C   s"   |  | | j| j| d jS r   )r   r   r   r   r   r   r   r   r   r     s    
zTokenBuffer.LAc                 C   s    |  | | j| j| d S r   r   r   r   r   r   LT  s    
zTokenBuffer.LTc                 C   s   |    |  jd7  _| jS r   r   r   r   r   r   r     s    zTokenBuffer.markc                 C   s    |    || _|  jd8  _d S r   r   r   r   r   r   r     s    zTokenBuffer.rewindc                 C   sB   | j dkr>| jdkr$|  jd7  _n
| j  |  j d8  _ q d S r   r   r   r   r   r   r     s
    


zTokenBuffer.syncConsumec                 C   s   d| j | j| j| j| jf S )Nz(%s,%s,%s,%s,%s))r   r   r   r   r   r   r   r   r   r:     s    zTokenBuffer.__str__c                 C   s   t | S r   r   r   r   r   r   r<     s    zTokenBuffer.__repr__N)r+   r,   r-   r'   r   r   r   r  r   r  r   r   r   r:   r<   r   r   r   r   r    s   
r  c                   @   s   e Zd Zdd Zdd ZdS )ParserSharedInputStatec                 C   s   d | _ |   d S r   )r   r   r   r   r   r   r'     s    zParserSharedInputState.__init__c                 C   s    d| _ d | _| jr| j  d S r   )r   r   r   r   r   r   r   r   r     s    zParserSharedInputState.resetN)r+   r,   r-   r'   r   r   r   r   r   r    s   r  c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd 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)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgS )hParserc                 O   sT   d | _ d | _d | _i | _d| _d| _|s4t | _d S |d }t|tsJt	|| _d S )NFr   )
rv   	returnAST
astFactorytokenTypeToASTClassMapignoreInvalidDebugCallsr9  r  rD  r   r#   )r)   r   r=  arg0r   r   r   r'     s    zParser.__init__c                 C   s   | j S r   )r  r   r   r   r   getTokenTypeToASTClassMap   s    z Parser.getTokenTypeToASTClassMapc                 C   s   | j st| j d S r   )r  r  addMessageListenerr)   lr   r   r   r    s    zParser.addMessageListenerc                 C   s   | j st| j d S r   )r  r  addParserListenerr  r   r   r   r    s    zParser.addParserListenerc                 C   s   | j st| j d S r   )r  r  addParserMatchListenerr  r   r   r   r    s    zParser.addParserMatchListenerc                 C   s   | j st| j d S r   )r  r  addParserTokenListenerr  r   r   r   r    s    zParser.addParserTokenListenerc                 C   s   | j st| j d S r   )r  r  addSemanticPredicateListenerr  r   r   r   r    s    z#Parser.addSemanticPredicateListenerc                 C   s   | j st| j d S r   )r  r  addSyntacticPredicateListenerr  r   r   r   r    s    z$Parser.addSyntacticPredicateListenerc                 C   s   | j st| j d S r   )r  r  addTraceListenerr  r   r   r   r    s    zParser.addTraceListenerc                 C   s
   t  d S r   r   r   r   r   r   r      s    zParser.consumec                 C   s*   |  dtkr&|  d|kr&|   q d S r   )r   r   r   )r)   r~   r   r   r   _consumeUntil_type#  s    zParser._consumeUntil_typec                 C   s,   |  dtkr(||  ds(|   q d S r   )r   r   r  r   r)   r`   r   r   r   _consumeUntil_bitset'  s    zParser._consumeUntil_bitsetc                 C   s$   t |tr| | n
| | d S r   )r   rx   r  r  r  r   r   r   consumeUntil+  s    
zParser.consumeUntilc                 C   s   d S r   r   r   r   r   r   defaultDebuggingSetup1  s    zParser.defaultDebuggingSetupc                 C   s   | j S r   r  r   r   r   r   getAST4  s    zParser.getASTc                 C   s   | j S r   r  r   r   r   r   getASTFactory7  s    zParser.getASTFactoryc                 C   s   | j jS r   rR  r   r   r   r   rK   :  s    zParser.getFilenamec                 C   s   | j S r   r]  r   r   r   r   r^  =  s    zParser.getInputStatec                 C   s
   || _ d S r   r]  r_  r   r   r   ra  @  s    zParser.setInputStatec                 C   s
   | j | S r   rv   r)   r.  r   r   r   getTokenNameC  s    zParser.getTokenNamec                 C   s   | j S r   r  r   r   r   r   getTokenNamesF  s    zParser.getTokenNamesc                 C   s   | j S r   )falser   r   r   r   isDebugModeI  s    zParser.isDebugModec                 C   s
   t  d S r   r   r  r   r   r   r   L  s    z	Parser.LAc                 C   s
   t  d S r   r   r  r   r   r   r  O  s    z	Parser.LTc                 C   s   | j j S r   rg  r   r   r   r   r   R  s    zParser.markc                 C   s8   |  d|kr,t| j| d|d|  n|   d S rh  r   ru   rv   r  rK   r   r   r   r   r   
_match_intU  s        zParser._match_intc                 C   s:   | | ds.t| j| d|d|  n|   d S rh  )r  r   ru   rv   r  rK   r   ri  r   r   r   
_match_set\  s        zParser._match_setc                 C   s<   t |tr| | d S t |tr0| | d S tdd S )Nz0Parser.match requires integer ot BitSet argument)r   rx   r  r]   r  rB   r  r   r   r   rm  c  s    



zParser.matchc                 C   s8   |  d|kr,t| j| d|d|  n|   d S rn  r  r   r   r   r   ro  l  s        zParser.matchNotc                 C   s   | j st| j d S r   )r  r  removeMessageListenerr  r   r   r   r  s  s    zParser.removeMessageListenerc                 C   s   | j st| j d S r   )r  r  removeParserListenerr  r   r   r   r  w  s    zParser.removeParserListenerc                 C   s   | j st| j d S r   )r  r  removeParserMatchListenerr  r   r   r   r  {  s    z Parser.removeParserMatchListenerc                 C   s   | j st| j d S r   )r  r  removeParserTokenListenerr  r   r   r   r    s    z Parser.removeParserTokenListenerc                 C   s   | j st| j d S r   )r  r  removeSemanticPredicateListenerr  r   r   r   r    s    z&Parser.removeSemanticPredicateListenerc                 C   s   | j st| j d S r   )r  r   removeSyntacticPredicateListenerr  r   r   r   r    s    z'Parser.removeSyntacticPredicateListenerc                 C   s   | j st| j d S r   )r  r  removeTraceListenerr  r   r   r   r    s    zParser.removeTraceListenerc                 C   sx   d}|   }|rd| | }t|tr`| }| }| }|d }t||||f tjd nt|t	|tjd d S )Nzsyntax error:z%s:z/unexpected symbol at line %s (column %s) : "%s"rC  )
rK   r   rA   rD   rC   rE   r   r@  stderrr7   )r)   r!   r   rF  r1   rG   rH   r   r   r   rw    s    
zParser.reportErrorc                 C   s6   |   }|r"td|t|f  ntdt|  d S )Nz%s:warning: %szwarning: %srv  )r)   r   rF  r   r   r   rx    s    zParser.reportWarningc                 C   s   | j j| d S r   ry  rz  r   r   r   r     s    zParser.rewindc                 C   s
   || _ d S r   r  rS  r   r   r   setASTFactory  s    zParser.setASTFactoryc                 C   s   | j | d S r   r  setASTNodeTyper|  r   r   r   setASTNodeClass  s    zParser.setASTNodeClassc                 C   s   |  | d S r   r  r)   ZnodeTyper   r   r   r    s    zParser.setASTNodeTypec                 C   s   | j st| j d S r   )r  r  setDebugMode)r)   Z	debugModer   r   r   r    s    zParser.setDebugModec                 C   s   || j _d S r   rR  rS  r   r   r   r     s    zParser.setFilenamec                 C   s
   || _ d S r   )r  )r)   valuer   r   r   setIgnoreInvalidDebugCalls  s    z!Parser.setIgnoreInvalidDebugCallsc                 C   s   || j _d S r   r[  r   r   r   r   setTokenBuffer  s    zParser.setTokenBufferc                 C   s   t d| j  d S r  r  r   r   r   r   r    s    zParser.traceIndentc                 C   s   |  j d7  _ | d| d S Nr   > r9  tracer  r   r   r   r    s    zParser.traceInc                 C   s   |  d| |  jd8  _d S N< r   r  r9  r  r   r   r   r    s    zParser.traceOutc                 C   sH   |sd S |j s||_ n |js*|j | n|j| ||_|  d S r   rootchildsetFirstChildsetNextSiblingadvanceChildToEndr)   
currentASTr  r   r   r   addASTChild  s    zParser.addASTChildc                 C   s*   |r&| |j |j|_|  ||_d S r   addChildr  r  r  r)   r  r  r   r   r   makeASTRoot  s
    zParser.makeASTRootN)6r+   r,   r-   r'   r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  rK   r^  ra  r  r  r  r   r  r   r  r  rm  ro  r  r  r  r  r  r  r  rw  rx  r   r  r  r  r  r   r  r  r  r  r  r  r  r   r   r   r   r    sf   	r  c                       sT   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
  ZS )	LLkParserc                    s   z|d }W n   d}Y nX t |tr@tt|   || _d S t |trltt| | | jd|  d S t |trtt|   | 	| | jd|  d S t |t
rtt|   t|}| 	| | jd|  d S tdd S )Nr   r   zKLLkParser requires integer, ParserSharedInputStream or TokenStream argument)r   )r   )r   )r   rx   r   r  r'   r   r  set_kr  r  r   rB   )r)   r   r=  rE  ZtokenBufr   r   r   r'     s0    






zLLkParser.__init__c                 C   s   | j j  d S r   )rD  r   r   r   r   r   r   r     s    zLLkParser.consumec                 C   s   | j j|S r   )rD  r   r   r  r   r   r   r   
  s    zLLkParser.LAc                 C   s   | j j|S r   )rD  r   r  r  r   r   r   r    s    zLLkParser.LTc                 G   s&   z|| | _ W n   d| _ Y nX d S r   )r   )r)   r   r   r   r   r   r    s    zLLkParser.set_kc                 C   s   t t|  |   d}| jjdkr(d}t || |  td| jd D ]B}|dkr\t d | |rv| | }nd}t d||f  qHt d d S )	Nr   r   z [guessing]r   z, nullzLA(%s) == %srb   )	r   r   r  rD  r   r   r   r  rE   )r)   eer  guessrt   r  r   r   r   r    s    
zLLkParser.tracec                 C   s   |  j d7  _ | d| d S r  r  r  r   r   r   r  '  s    zLLkParser.traceInc                 C   s   |  d| |  jd8  _d S r  r  r  r   r   r   r  +  s    zLLkParser.traceOut)r+   r,   r-   r'   r   r   r  r  r  r  r  r   r   r   r   r   r    s   !r  c                   @   s   e Zd Zdd ZdS )TreeParserSharedInputStatec                 C   s
   d| _ d S r   )r   r   r   r   r   r'   4  s    z#TreeParserSharedInputState.__init__Nr*   r   r   r   r   r   3  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 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 )$
TreeParserc                 O   s,   t  | _d | _g | _d | _t | _d| _d S r   )r   rD  Z_retTreerv   r  
ASTFactoryr  r9  )r)   r   r=  r   r   r   r'   =  s    zTreeParser.__init__c                 C   s   | j S r   r  r   r   r   r   r  E  s    zTreeParser.getASTc                 C   s   | j S r   r  r   r   r   r   r  H  s    zTreeParser.getASTFactoryc                 C   s
   | j | S r   r  r  r   r   r   r  K  s    zTreeParser.getTokenNamec                 C   s   | j S r   r  r   r   r   r   r  N  s    zTreeParser.getTokenNamesc                 C   s   t |tst |tst|r$|tkr6t|  ||dt |tr^| |kr^t|  ||dt |tr||jst|  ||dd S NF)	r   rx   r]   r#   rF   ru   r  r   r  )r)   r   r`   r   r   r   rm  Q  s    zTreeParser.matchc                 C   s.   |r|t ks| |kr*t|  ||dd S NT)rF   r   ru   r  )r)   r   ttyper   r   r   ro  \  s    zTreeParser.matchNotc                 C   s   t d|tjd d S )Nzerror:r  )r   r@  r  )r)   exr   r   r   rw  `  s    zTreeParser.reportErrorc                 C   s   t d| d S )Nzwarning:)r   rV  r   r   r   rx  c  s    zTreeParser.reportWarningc                 C   s
   || _ d S r   r  rS  r   r   r   r  f  s    zTreeParser.setASTFactoryc                 C   s   |  | d S r   r  r  r   r   r   r  i  s    zTreeParser.setASTNodeTypec                 C   s   | j | d S r   r  r  r   r   r   r  l  s    zTreeParser.setASTNodeClassc                 C   s   t d| j  d S r  r  r   r   r   r   r  o  s    zTreeParser.traceIndentc                 C   sR   |  j d7  _ |   td| d t|t|d d t| jjdkdd  d S )	Nr   r  (r  )r   
[guessing]r   )r9  r  r   r   r7   rD  r   r)   r  r   r   r   r   r  r  s    zTreeParser.traceInc                 C   sR   |    td| d t|t|d d t| jjdkdd  |  jd8  _d S )	Nr  r  r  r  r   r	  r   r   )r  r   r   r7   rD  r   r9  r
  r   r   r   r  y  s    zTreeParser.traceOutc                 C   sH   |sd S |j s||_ n |js*|j | n|j| ||_|  d S r   r  r  r   r   r   r    s    zTreeParser.addASTChildc                 C   s*   |r&| |j |j|_|  ||_d S r   r  r  r   r   r   r    s
    zTreeParser.makeASTRootN)r+   r,   r-   r'   r  r  r  r  rm  ro  rw  rx  r  r  r  r  r  r  r  r  r   r   r   r   r  ;  s"   r  c                 C   s   | r| j r| j } q| S r   right)astr   r   r   	rightmost  s    r  c                 C   sZ   | r@|r@|  |sdS t|  | |s.dS |  } | }q t|| |  oR| }|S r  )equalscmptreegetFirstChildgetNextSiblingr   )r   r   partialr   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 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)d* Zd+d, ZeZd-d. Zd/d0 Zd1S )2r@   c                 C   s   d S r   r   r   r   r   r   r'     s    zAST.__init__c                 C   s   d S r   r   r%  r   r   r   r    s    zAST.addChildc                 C   s   dS r  r   r   r   r   r   r    s    z
AST.equalsc                 C   s   dS r  r   r   r   r   r   
equalsList  s    zAST.equalsListc                 C   s   dS r  r   r   r   r   r   equalsListPartial  s    zAST.equalsListPartialc                 C   s   dS r  r   r   r   r   r   
equalsTree  s    zAST.equalsTreec                 C   s   dS r  r   r   r   r   r   equalsTreePartial  s    zAST.equalsTreePartialc                 C   s   d S r   r   )r)   treer   r   r   findAll  s    zAST.findAllc                 C   s   d S r   r   )r)   Zsubtreer   r   r   findAllPartial  s    zAST.findAllPartialc                 C   s   | S r   r   r   r   r   r   r    s    zAST.getFirstChildc                 C   s   | S r   r   r   r   r   r   r    s    zAST.getNextSiblingc                 C   s   dS r   r   r   r   r   r   rE     s    zAST.getTextc                 C   s   t S r   )r}   r   r   r   r   r     s    zAST.getTypec                 C   s   dS r   r   r   r   r   r   rC     s    zAST.getLinec                 C   s   dS r   r   r   r   r   r   rD     s    zAST.getColumnc                 C   s   dS r   r   r   r   r   r   getNumberOfChildren  s    zAST.getNumberOfChildrenc                 C   s   d S r   r   r   r   r   r   
initialize  s    zAST.initializec                 C   s   d S r   r   r%  r   r   r   r    s    zAST.setFirstChildc                 C   s   d S r   r   r)   r   r   r   r   r    s    zAST.setNextSiblingc                 C   s   d S r   r   r   r   r   r   r     s    zAST.setTextc                 C   s   d S r   r   r)   r  r   r   r   r     s    zAST.setTypec                 C   s   |    d S r   rE   r   r   r   r   r     s    zAST.toStringc                 C   s   |   S r   r  r   r   r   r   toStringList  s    zAST.toStringListc                 C   s   |   S r   r  r   r   r   r   toStringTree  s    zAST.toStringTreeN)r+   r,   r-   r'   r  r  r  r  r  r  r  r  r  r  rE   r   rC   rD   r  r  r  r  r   r   r   r:   r   r!  r   r   r   r   r@     s2   r@   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )ASTNULLTypec                 C   s   t |  d S r   )r@   r'   r   r   r   r   r'   	  s    
zASTNULLType.__init__c                 C   s   dS )Nz	<ASTNULL>r   r   r   r   r   rE   	  s    zASTNULLType.getTextc                 C   s   t S r   )r   r   r   r   r   r   	  s    zASTNULLType.getTypeN)r+   r,   r-   r'   rE   r   r   r   r   r   r"  	  s   r"  c                   @   s   e Zd ZdZ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d  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 ZeeZd1d2 Zd3d4 Zd5d6 ZeZ d7d8 Z!dS )9BaseASTFNc                 C   s   d | _ d | _d S r   downr  r   r   r   r   r'   	  s    zBaseAST.__init__c                 C   s.   |r*t | j}|r||_n| jr$t|| _d S r   )r  r%  r  r#   )r)   r?   r   r   r   r   r  	  s    

zBaseAST.addChildc                 C   s"   | j }d}|r|d7 }|j}q
|S r   r$  )r)   r   r   r   r   r   r  (	  s    zBaseAST.getNumberOfChildrenc                 C   sl   | }|rh|o| |}|r&|| n| o4||}|rD|| | r^| ||| | }qd S r   )r  r6   r  r  doWorkForFindAllr  )r)   r  targetZpartialMatchZsiblingrp  rq  r   r   r   r&  0	  s    
zBaseAST.doWorkForFindAllc                 C   s(   |sdS |   |  ko&|  | kS r  )rE   r   r   r   r   r   r  C	  s    zBaseAST.equalsc                 C   s   t | |ddS NFr  r  r   r   r   r   r  K	  s    zBaseAST.equalsListc                 C   s   t | |ddS NTr)  r*  r   r   r   r   r  Q	  s    zBaseAST.equalsListPartialc                 C   s    |  |ot|  | ddS r(  r  r  r  r   r   r   r   r  W	  s    
zBaseAST.equalsTreec                 C   s(   |sdS |  |o&t|  | ddS r+  r,  r   r   r   r   r  ^	  s      zBaseAST.equalsTreePartialc                 C   s   g }|sd S |  ||d |S r  r&  )r)   r'  rootsr   r   r   r  g	  s
    zBaseAST.findAllc                 C   s   g }|sd S |  ||d |S r  r-  )r)   subr.  r   r   r   r  t	  s
    zBaseAST.findAllPartialc                 C   s   | j S r   r%  r   r   r   r   r  	  s    zBaseAST.getFirstChildc                 C   s   | j S r   r  r   r   r   r   r  	  s    zBaseAST.getNextSiblingc                 C   s   dS r   r   r   r   r   r   rE   	  s    zBaseAST.getTextc                 C   s   dS r   r   r   r   r   r   r   	  s    zBaseAST.getTypec                 C   s   dS r   r   r   r   r   r   rC   	  s    zBaseAST.getLinec                 C   s   dS r   r   r   r   r   r   rD   	  s    zBaseAST.getColumnc                 C   s
   d | _ d S r   r0  r   r   r   r   removeChildren	  s    zBaseAST.removeChildrenc                 C   s
   || _ d S r   r0  r%  r   r   r   r  	  s    zBaseAST.setFirstChildc                 C   s
   || _ d S r   r  r  r   r   r   r  	  s    zBaseAST.setNextSiblingc                 C   s   d S r   r   r   r   r   r   r   	  s    zBaseAST.setTextc                 C   s   d S r   r   r  r   r   r   r   	  s    zBaseAST.setTypec                 C   s   | }|}d S r   r   )verbosenamesverboseStringConversionrv   r   r   r   setVerboseStringConversion	  s    z"BaseAST.setVerboseStringConversionc                   C   s   t S r   r  r   r   r   r   r  	  s    zBaseAST.getTokenNamesc                 C   s   |   S r   r  r   r   r   r   r   	  s    zBaseAST.toStringc                 C   s$   |   }|  }|r || 7 }|S r   )r!  r  r   )r)   tsZsibr   r   r   r   	  s
    zBaseAST.toStringListc                 C   sD   d}|   }|r|d7 }|d|   7 }|r@|| 7 }|d7 }|S )Nr   z (r5   z ))r  r   r   )r)   r6  Zkidr   r   r   r!  	  s    zBaseAST.toStringTree)"r+   r,   r-   r4  rv   r'   r  r  r&  r  r  r  r  r  r  r  r  r  rE   r   rC   rD   r1  r  r  r   r   r5  staticmethodr  r   r   r:   r!  r   r   r   r   r#  	  s>   		r#  c                       sV   e Zd Zd fdd	Zdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
  ZS )	CommonASTNc                    s4   t t|   t| _d| _d| _d| _| | d S )Nr   r   )	r   r8  r'   r}   r  rH   r1   r2   r  )r)   r>   r   r   r   r'   	  s    zCommonAST.__init__c                 C   s   | j S r   r   r   r   r   r   rE   	  s    zCommonAST.getTextc                 C   s   | j S r   )r  r   r   r   r   r   	  s    zCommonAST.getTypec                 C   s   | j S r   r   r   r   r   r   rC   	  s    zCommonAST.getLinec                 C   s   | j S r   )r2   r   r   r   r   rD   	  s    zCommonAST.getColumnc                 G   s   |sd S |d }t |tr:|d }| | | | d S t |tsNt |tr| |  | |  | | _	|
 | _d S d S r   )r   rx   r   r   r@   rA   rE   r   rC   r1   rD   r2   )r)   r   r  rE  r   r   r   r  	  s    




zCommonAST.initializec                 C   s   t |st|| _d S r   )r"   r#   rH   )r)   Ztext_r   r   r   r   	  s    zCommonAST.setTextc                 C   s   t |tst|| _d S r   )r   rx   r#   r  )r)   Zttype_r   r   r   r   
  s    zCommonAST.setType)N)r+   r,   r-   r'   rE   r   rC   rD   r  r   r   r   r   r   r   r   r8  	  s   
r8  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
CommonASTWithHiddenTokensc                 G   s    t j| f|  d | _d | _d S r   )r8  r'   r   r   r(   r   r   r   r'   
  s    z"CommonASTWithHiddenTokens.__init__c                 C   s   | j S r   r   r   r   r   r   r   
  s    z(CommonASTWithHiddenTokens.getHiddenAfterc                 C   s   | j S r   r   r   r   r   r   r   
  s    z)CommonASTWithHiddenTokens.getHiddenBeforec                 G   sT   t j| f|  |rPt|d trPt|d ts4t|d  | _|d  | _	d S r   )
r8  r  r   rA   r   r#   r   r   r   r   r(   r   r   r   r  
  s
    z$CommonASTWithHiddenTokens.initializeN)r+   r,   r-   r'   r   r   r  r   r   r   r   r9  

  s   r9  c                   @   s4   e Zd Zdd Zdd Zdd Zdd ZeZeZd	S )
ASTPairc                 C   s   d | _ d | _d S r   )r  r  r   r   r   r   r'   #
  s    zASTPair.__init__c                 C   s"   | j r| j  r| j  | _ qd S r   )r  r  r   r   r   r   r  (
  s    
zASTPair.advanceChildToEndc                 C   s   t  }| j|_| j|_|S r   )r:  r  r  )r)   tmpr   r   r   copy.
  s    zASTPair.copyc                 C   s4   t t d| j }t t d| j }d||f S )Nr  z[%s,%s])r   r  rE   r  )r)   r   rf   r   r   r   r   4
  s    zASTPair.toStringN)	r+   r,   r-   r'   r  r<  r   r:   r<   r   r   r   r   r:  "
  s   r:  c                   @   sx   e Zd ZdddZdd ZdddZe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eZdS )r  Nc                 C   s   d | _ t||d | _d S r   )_classr   	_classmap)r)   tabler   r   r   r'   B
  s    zASTFactory.__init__c                 G   s  |s|  tS |d }d }d }z|d }|d }W n   Y nX t|tr~|s~| |}|  |}|rz||t||d |S t|tr|r|  |}|r||| |S t|tr|  | }|r|| |S t|t	r|s| }t|tst
|  |}|r|| |S t|t	rn|rnt|ts<t
t|tsLt
||}|rft|tsjt
|S t|tr| }t|tst
|S d S )Nr   r   r/   r   )creater}   r   rx   getASTNodeTyper  r   r@   r   rA   r#   r   
issubclass)r)   r   r  rE  Zarg2rf   r   r  r   r   r   r@  F
  sV    







zASTFactory.createc                 C   s.   |sd S t |tstt|ts$t|| _d S r   )r   r   r#   rB  r@   r=  )r)   	classNamer   r   r   r  
  s
    zASTFactory.setASTNodeClassc                 C   s   | j S r   )r=  r   r   r   r   getASTNodeClass
  s    zASTFactory.getASTNodeClassc                 C   s   | j S r   r>  r   r   r   r   r  
  s    z$ASTFactory.getTokenTypeToASTClassMapc                 C   s
   || _ d S r   rE  )r)   Zamapr   r   r   setTokenTypeToASTClassMap
  s    z$ASTFactory.setTokenTypeToASTClassMapc                 C   s   dd l }t||jd d S )Nr   r  )r@  r   r  )r)   r   r@  r   r   r   r   
  s    zASTFactory.errorc                 C   sV   | j si | _ |s,z| j |= W qR   Y qRX n&t|ts:tt|tsHt|| j |< dS )zK
        Specify a mapping between a token type and a (AST) class.
        N)r>  r   r   r#   rB  r@   )r)   r~   rC  r   r   r   setTokenTypeASTNodeType
  s    z"ASTFactory.setTokenTypeASTNodeTypec                 C   s<   | j r,z| j | }|r|W S W n   Y nX | jr8| jS tS )z
        For a given token type return the AST node type. First we
        lookup a mapping table, second we try _class
        and finally we resolve to "antlr.CommonAST".
        )r>  r=  r8  )r)   r~   rf   r   r   r   rA  
  s    

zASTFactory.getASTNodeTypec                 C   s
   t || S r   )dupr   r   r   r   rH  
  s    zASTFactory.dupc                 C   s
   t || S r   )dupListr   r   r   r   rI  
  s    zASTFactory.dupListc                 C   s
   t || S r   )dupTreer   r   r   r   rJ  
  s    zASTFactory.dupTree)N)N)r+   r,   r-   r'   r@  r  r  rD  r  rF  r   rG  rA  rH  rI  rJ  Zmaptyper   r   r   r   r  A
  s   
@
r  c                   @   s   e Zd Zdd Zdd ZdS )
ASTVisitorc                 G   s   d S r   r   r(   r   r   r   r'   
  s    zASTVisitor.__init__c                 C   s   d S r   r   )r)   r  r   r   r   visit
  s    zASTVisitor.visitN)r+   r,   r-   r'   rL  r   r   r   r   rK  
  s   rK  c                  G   s   | sd S t dt| D ]}| | }|rt|tstq| d }d }|rP|d  t dt| D ]d}| | slq^|s~| |  }}n2|s|| |  | }n|| |  | }| r^| }qq^|S r   )	r   r3   r   r@   r#   r  r  r  r  )Znodesrt   r?   r  tailr   r   r   make
  s.    

rN  c                 C   s0   | sd S |r| | j}ntd||  |S )Nz)dup function requires ASTFactory argument)r@  r   rB   r  )r   factoryZdup_tr   r   r   rH    s    
rH  c                 C   s8   t | |}|}| r4|  } |t | | | }q|S r   )rJ  r  r  )r   rO  resultntr   r   r   rI    s    

rI  c                 C   s&   t | |}| r"|t|  | |S r   )rH  r  rI  r  )r   rO  rP  r   r   r   rJ  $  s    
rJ  )X
__future__r   r@  compatr   r   r   r   r   r}   r   r   r   r   r  r   r   r   r"   r$   r&   r%   r.   r=   rI   rS   rT   ru   r   r   r   r   r   r   r   objectrA   re  r+   r   Tr   r   r   r   r   rC   rD   rE   r   r   r   r   r   r   r   r   r   r  r  r   r+  r/  r>  r]   r  r  r  r  r  r  r   r  r  r  r@   r"  r#  r8  r9  r:  r  rK  rF   rN  rH  rI  rJ  r   r   r   r   <module>   s   ,	#qsN
?
U16R>    d	D vOaP :; !
