B
    0ӛYH                @   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microZpatchversion )rr   r   )lib/python3.7/site-packages/xlwt/antlr.pyr   G   s    r   c             G   s   | rt d| t|  d S )Nz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 )N)
isinstancer   )xr   r   r   is_string_type]   s    r   c             C   s   t | std S )N)r   AssertionError)r   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 )N)	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len)r$   r   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  )r*   appendr+   strr,   join)r$   bufr   r   r   __str__~   s    




zRecognitionException.__str__N)r%   r&   r'   r#   r4   __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	TypeError)r$   r   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)r7   getLine	getColumngetTextr8   ASTNULLr   )r$   r+   coltextr   r   r   r4      s    




zNoViableAltException.__str__N)r%   r&   r'   r#   r4   r5   r   r   r   r   r6      s   r6   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   )	foundCharr-   r(   r#   getFilenamer<   r=   )r$   r   scannerr*   r+   r,   r   r   r   r#      s"    

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: r/   ~'Z0xr)   z<None>)rC   hexordupper)r$   Zmesgr   r   r   r4      s    $z#NoViableAltForCharException.__str__N)r%   r&   r'   r#   r4   r5   r   r   r   r   rB      s   
rB   c               @   s   e Zd Zdd ZdS )SemanticExceptionc             G   s   t j| f|  d S )N)r(   r#   )r$   r   r   r   r   r#      s    zSemanticException.__init__N)r%   r&   r'   r#   r   r   r   r   rK      s   rK   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 )
NrM   r	   r   r   r)   r
   zMismatched char rangezMismatched charzMismatched char set)r   r-   rL   	NOT_RANGEmismatchTypeRANGErC   	expectingrJ   rE   r(   r#   rD   r<   r=   r   NOT_CHARCHARr   BitSetNOT_SETSETsetNONE)r$   r   r   r   r   r#      sJ    













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'rG   )r0   )r$   sbcr   r   r   appendCharName  s    z&MismatchedCharException.appendCharNamec             C   s  dg}| t|  | jtjkrV| d | || j | d | || j n4| jtj	kr| d | || j | d n| jtj
tjgkr| d | jtjkr| d | d | || j | d	 | || j | d | || j n| jtjtjgkr| d | jtjkr<| d | d
 x*tt| jD ]}| || j|  qVW | d | || j t | S )Nr   z
expecting z, found zexpecting anything but 'z'; got it anywayzexpecting char zNOT z
in range: z..zone of (z	), found )r0   r(   r4   rP   rL   rT   r_   rR   rC   rS   rQ   rO   rJ   rW   rV   ranger-   rX   r1   r2   strip)r$   r]   ir   r   r   r4     s>    











zMismatchedCharException.__str__N)r%   r&   r'   rY   rT   rS   rQ   rO   rW   rV   r#   r_   r4   r5   r   r   r   r   rL      s   1#rL   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
   rM   rN   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   rN   r	   r   r)   rM   r
   z(Mismatched Token: expecting any AST nodez<AST>r   r   zMismatched Tokenz<empty tree>)r   
tokenNamesr7   	tokenTextr8   r-   rc   rO   rP   rQ   rR   rJ   r*   r   int	NOT_TOKENTOKENrU   rV   rW   rX   rY   r(   r#   r:   r>   r<   r=   r9   r1   )r$   r   r   r   r   r#   O  sZ    









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_TYPEr0   r-   rd   r1   )r$   r]   	tokenTyper   r   r   appendTokenName  s
    z(MismatchedTokenException.appendTokenNamec             C   s~  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gkr| d | jtjkr| d | d | || j | d	 | || j | d| j  n|| jtjtjgkrn| d | jtjkr(| d | d
 x*tt| jD ]}| || j|  qBW | d| j  t | S )Nr   z
expecting z, found zexpecting anything but 'z'; got it anywayzexpecting token zNOT z
in range: z..zone of (z	), found )r0   r(   r4   rP   rc   rh   rm   rR   re   rg   rQ   rO   rJ   rW   rV   r`   r-   rX   r1   r2   ra   )r$   r]   rb   r   r   r   r4     s8    








z MismatchedTokenException.__str__N)r%   r&   r'   rY   rh   rg   rQ   rO   rW   rV   r#   rm   r4   r5   r   r   r   r   rc   E  s   ; rc   c               @   s   e Zd Zdd ZdS )TokenStreamExceptionc             G   s   t j| f|  d S )N)r!   r#   )r$   r   r   r   r   r#     s    zTokenStreamException.__init__N)r%   r&   r'   r#   r   r   r   r   rn     s   rn   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"   rn   r#   r1   io)r$   r   rp   r   r   r   r#     s    zTokenStreamIOException.__init__N)r%   r&   r'   r#   r   r   r   r   ro     s   ro   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(   rn   r#   r1   recogr;   )r$   r   rr   r   r   r   r#     s
    z(TokenStreamRecognitionException.__init__c             C   s
   t | jS )N)r1   rr   )r$   r   r   r   r4     s    z'TokenStreamRecognitionException.__str__N)r%   r&   r'   r#   r4   r5   r   r   r   r   rq     s   rq   c               @   s   e Zd Zdd ZdS )TokenStreamRetryExceptionc             G   s   t j| f|  d S )N)rn   r#   )r$   r   r   r   r   r#     s    z"TokenStreamRetryException.__init__N)r%   r&   r'   r#   r   r   r   r   rs     s   rs   c               @   s   e Zd Zdd ZdS )CharStreamExceptionc             G   s   t j| f|  d S )N)r!   r#   )r$   r   r   r   r   r#     s    zCharStreamException.__init__N)r%   r&   r'   r#   r   r   r   r   rt     s   rt   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 )Nr   )r   r"   rt   r#   r1   rp   )r$   r   rp   r   r   r   r#     s    zCharStreamIOException.__init__N)r%   r&   r'   r#   r   r   r   r   ru     s   ru   c               @   s   e Zd ZdS )TryAgainN)r%   r&   r'   r   r   r   r   rv     s   rv   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 )!r:   r   r   r   r	   r
   c             K   sH   y|d | _ W n   t| _ Y nX y|d | _W n   d| _Y nX d S )NtyperA   z	<no text>)rw   rk   rA   )r$   argvr   r   r   r#     s    zToken.__init__c             C   s
   | j tkS )N)rw   EOF_TYPE)r$   r   r   r   isEOF  s    zToken.isEOFc             C   s   dS )Nr   r   )r$   r   r   r   r=     s    zToken.getColumnc             C   s   dS )Nr   r   )r$   r   r   r   r<     s    zToken.getLinec             C   s   d S )Nr   )r$   r   r   r   rD     s    zToken.getFilenamec             C   s   | S )Nr   )r$   namer   r   r   setFilename  s    zToken.setFilenamec             C   s   dS )Nz	<no text>r   )r$   r   r   r   r>     s    zToken.getTextc             C   s   t |r
ntd| S )Nz&Token.setText requires string argument)r   r;   )r$   rA   r   r   r   setText!  s    zToken.setTextc             C   s   | S )Nr   )r$   r,   r   r   r   	setColumn(  s    zToken.setColumnc             C   s   | S )Nr   )r$   r+   r   r   r   setLine+  s    zToken.setLinec             C   s   | j S )N)rw   )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   rf   rw   r;   )r$   rw   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   ry   r   rk   r   SKIPz["%s",<%s>])rw   r>   )r$   type_tvalr   r   r   toString8  s    zToken.toStringN)r%   r&   r'   r   rk   ry   EOFr   MIN_USER_TYPEr#   rz   r=   r<   rD   r|   r>   r}   r~   r   r   r   r   r4   r5   r   r   r   r   r:     s*   
r:   z	<no text>)rw   rA   __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| _y|d | _W n   Y nX y|d | _W n   Y nX d S )Nr   r+   r@   )r:   r#   r+   r@   )r$   rx   r   r   r   r#   X  s    zCommonToken.__init__c             C   s   | j S )N)r+   )r$   r   r   r   r<   e  s    zCommonToken.getLinec             C   s   | j S )N)rA   )r$   r   r   r   r>   h  s    zCommonToken.getTextc             C   s   | j S )N)r@   )r$   r   r   r   r=   k  s    zCommonToken.getColumnc             C   s
   || _ | S )N)r+   )r$   r+   r   r   r   r   n  s    zCommonToken.setLinec             C   s
   || _ | S )N)rA   )r$   rA   r   r   r   r}   r  s    zCommonToken.setTextc             C   s
   || _ | S )N)r@   )r$   r@   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   ry   r   rk   r   r   )rA   rw   r+   Zcolmz2["%(text)s",<%(type)s>,line=%(line)s,col=%(colm)s])rw   rA   r+   r@   )r$   r   r   dr   r   r   r   r   z  s     
zCommonToken.toStringN)r%   r&   r'   r#   r<   r>   r=   r   r}   r~   r   r4   r5   r   r   r   r   r   V  s   r      z	some textrM   )r@   r+   rA   rw   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 )N)r   r#   hiddenBeforehiddenAfter)r$   r   r   r   r   r#     s    z CommonHiddenStreamToken.__init__c             C   s   | j S )N)r   )r$   r   r   r   getHiddenAfter  s    z&CommonHiddenStreamToken.getHiddenAfterc             C   s   | j S )N)r   )r$   r   r   r   getHiddenBefore  s    z'CommonHiddenStreamToken.getHiddenBeforec             C   s
   || _ d S )N)r   )r$   tr   r   r   setHiddenAfter  s    z&CommonHiddenStreamToken.setHiddenAfterc             C   s
   || _ d S )N)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 )N)buffer)r$   r   r   r   r#     s    zQueue.__init__c             C   s   | j | d S )N)r   r0   )r$   itemr   r   r   r0     s    zQueue.appendc             C   s
   | j | S )N)r   )r$   indexr   r   r   	elementAt  s    zQueue.elementAtc             C   s
   g | _ d S )N)r   )r$   r   r   r   reset  s    zQueue.resetc             C   s   | j d d S )Nr   )r   pop)r$   r   r   r   removeFirst  s    zQueue.removeFirstc             C   s
   t | jS )N)r-   r   )r$   r   r   r   length  s    zQueue.lengthc             C   s
   t | jS )N)r1   r   )r$   r   r   r   r4     s    zQueue.__str__N)
r%   r&   r'   r#   r0   r   r   r   r   r4   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 )Nr   )nMarkersmarkerOffsetnumToConsumer   queue)r$   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   r4     s
    zInputBuffer.__str__c             C   s   t | S )N)r1   )r$   r   r   r   r5     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 )Nr   )r   )r$   r   r   r   consume  s    zInputBuffer.consumec             C   s6   | j }| j }d}x||k r0|| j|7 }qW |S )Nr   )r   r   r   r   )r$   rb   nsr   r   r   
getLAChars  s    

zInputBuffer.getLACharsc             C   s0   d}d}| j }x||k r*|| j|7 }qW |S )Nr   r   )r   r   r   )r$   r   rb   r   r   r   r   getMarkedChars  s    
zInputBuffer.getMarkedCharsc             C   s
   | j dkS )Nr   )r   )r$   r   r   r   isMarked  s    zInputBuffer.isMarkedc             C   s
   t  d S )N)NotImplementedError)r$   kr   r   r   fill  s    zInputBuffer.fillc             C   s    |  | | j| j| d S )Nr   )r   r   r   r   )r$   r   r   r   r   LA  s    
zInputBuffer.LAc             C   s   |    |  jd7  _| jS )Nr   )syncConsumer   r   )r$   r   r   r   mark  s    zInputBuffer.markc             C   s    |    || _|  jd8  _d S )Nr   )r   r   r   )r$   r   r   r   r   rewind  s    zInputBuffer.rewindc             C   s    d| _ d| _d| _| j  d S )Nr   )r   r   r   r   r   )r$   r   r   r   r     s    zInputBuffer.resetc             C   sF   x@| j dkr@| jdkr&|  jd7  _n
| j  |  j d8  _ qW d S )Nr   r   )r   r   r   r   r   )r$   r   r   r   r     s
    

zInputBuffer.syncConsumeN)r%   r&   r'   r#   r4   r5   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 )N)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   r4   r1   r   )r$   base)r   r   r   r4   5  s    zCharBuffer.__str__c          
   C   s   yf|    xX| j || j k rb| jd}t|dksHt|dksHtt|sTt| j	| qW W n* t
k
r } zt|W d d }~X Y nX d S )Nr   r   )r   r   r   r   r   readr-   r   r   r0   r"   ru   )r$   amountr^   er   r   r   r   9  s    zCharBuffer.fill)r%   r&   r'   r#   r4   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 )Nr   r   )
r   r   r   r   r,   r+   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 )Nr   r   )r,   r+   r   r   r   r   r   r   )r$   r   r   r   r   i  s    zLexerSharedInputState.resetc             C   s   | j |S )N)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 )Nr   )r$   r   r   r   	nextTokenz  s    zTokenStream.nextTokenc             C   s   t | S )N)TokenStreamIterator)r$   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   instr;   )r$   r   r   r   r   r#     s    
zTokenStreamIterator.__init__c             C   s*   | j s
t| j  }|r | r&t |S )N)r   r   r   rz   StopIteration)r$   r   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 )N)_input_stmap_stack)r$   r   r   r   r#     s    zTokenStreamSelector.__init__c             C   s   || j |< d S )N)r   )r$   streamkeyr   r   r   addInputStream  s    z"TokenStreamSelector.addInputStreamc             C   s   | j S )N)r   )r$   r   r   r   getCurrentStream  s    z$TokenStreamSelector.getCurrentStreamc             C   s0   y| 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*   x$y
| j  S  tk
r    Y qX qW d S )N)r   r   rs   )r$   r   r   r   r     s
    
zTokenStreamSelector.nextTokenc             C   s   | j  }| | |S )N)r   r   select)r$   r   r   r   r   r     s    

zTokenStreamSelector.popc             C   s   | j | j | | d S )N)r   r0   r   r   )r$   argr   r   r   push  s    zTokenStreamSelector.pushc             C   s
   t  d S )N)rs   )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   r;   )r$   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 )N)r   rU   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   rf   r   addrU   ZdiscardMarkr;   )r$   r   r   r   r   discard  s    

zTokenStreamBasicFilter.discardc             C   s2   | j  }x"|r,| j| r,| j  }qW |S )N)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 )N)r   r#   rU   hideMasknextMonitoredTokenlastHiddenTokenfirstHidden)r$   r   r   r   r   r#     s
    z%TokenStreamHiddenTokenFilter.__init__c             C   s   | j  | _d S )N)r   r   r   )r$   r   r   r   r     s    z$TokenStreamHiddenTokenFilter.consumec             C   s   |    d }x| j| d s:| j| d r| j| d r|s`| d}n*|| d | d| | d}|| _| j	s|| _	|    qW d S )Nr   )
r   r   r   r   r   r   r   r   r   r   )r$   pr   r   r   consumeFirst  s    
z)TokenStreamHiddenTokenFilter.consumeFirstc             C   s   | j S )N)r   )r$   r   r   r   getDiscardMask  s    z+TokenStreamHiddenTokenFilter.getDiscardMaskc             C   s   |  S )N)r   )r$   r   r   r   r   r     s    z+TokenStreamHiddenTokenFilter.getHiddenAfterc             C   s   |  S )N)r   )r$   r   r   r   r   r     s    z,TokenStreamHiddenTokenFilter.getHiddenBeforec             C   s   | j S )N)r   )r$   r   r   r   getHideMask  s    z(TokenStreamHiddenTokenFilter.getHideMaskc             C   s   | j S )N)r   )r$   r   r   r   getInitialHiddenToken  s    z2TokenStreamHiddenTokenFilter.getInitialHiddenTokenc             C   s2   t |tr| j| d S t |jr.|| _d S d S )N)r   rf   r   r   ZBitMask)r$   mr   r   r   hide  s    

z!TokenStreamHiddenTokenFilter.hidec             C   s   | j S )N)r   )r$   rb   r   r   r   r     s    zTokenStreamHiddenTokenFilter.LAc             C   s   |  ds|   |  d}|| j d | _|   |}x| j|  d sh| j|  d r| j|  d r|	|  d ||kr|  d| |  d }| _|   q<W |S )Nr   )
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 )N)listrA   )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 )Nr   )rA   r   r   )r$   Zszr   r   r   	setLength@  s    zStringBuffer.setLengthc             C   s
   t | jS )N)r-   rA   )r$   r   r   r   r   J  s    zStringBuffer.lengthc             C   s   | j | d S )N)rA   r0   )r$   r^   r   r   r   r0   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}x|D ]}||7 }qpW |S )Nr   r   )r   r-   rA   )r$   ar   Lbr   r   r   r   r   	getStringT  s    
 zStringBuffer.getStringc             C   s
   t | jS )N)r1   rA   )r$   r   r   r   r4   h  s    zStringBuffer.__str__)N)NN)
r%   r&   r'   r#   r   r   r0   r   r   r4   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 )N)cinr3   )r$   r   r   r   r   r#   x  s    zReader.__init__c             C   st   |dkst t| jr | j S | jd}|r<t|dkr@|S t|}|  x|D ]}| j| qVW | dS )Nr   )	r   r-   r3   r   r   r   r   reverser0   )r$   numr^   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   rA   hashZ
hashStringsetTokenObjectClassr   setInput)r$   rx   kwargs)r   r   r   r#     s    

zCharScanner.__init__c             C   s   t | S )N)CharScannerIterator)r$   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 y(|jrt|}t|}t	|}|| _
d S    Y nX t|d S )Nr   rb)sysr   stdinr   openr|   r   filer   r   
inputStater   r   r   r;   )r$   rx   r  arg1fZrdcbZssr   r   r   r     s:    





zCharScanner.setInputc             C   s
   || _ d S )N)r   )r$   sizer   r   r   
setTabSize  s    zCharScanner.setTabSizec             C   s   | j S )N)r   )r$   r   r   r   
getTabSize  s    zCharScanner.getTabSizec             C   s
   || _ d S )N)r   )r$   r   r   r   r   setCaseSensitive  s    zCharScanner.setCaseSensitivec             C   s
   || _ d S )N)r   )r$   r   r   r   r   setCommitToPath  s    zCharScanner.setCommitToPathc             C   s   || j _d S )N)r  r   )r$   r
  r   r   r   r|     s    zCharScanner.setFilenamec             C   s   || j _d S )N)r  r+   )r$   r+   r   r   r   r     s    zCharScanner.setLinec             C   s   |    | j| d S )N)	resetTextrA   r0   )r$   r   r   r   r   r}     s    zCharScanner.setTextc             C   s   | j S )N)r   )r$   r   r   r   getCaseSensitive  s    zCharScanner.getCaseSensitivec             C   s   | j S )N)r   )r$   r   r   r   getCaseSensitiveLiterals  s    z$CharScanner.getCaseSensitiveLiteralsc             C   s   | j jS )N)r  r,   )r$   r   r   r   r=     s    zCharScanner.getColumnc             C   s   || j _d S )N)r  r,   )r$   r^   r   r   r   r~     s    zCharScanner.setColumnc             C   s   | j S )N)r   )r$   r   r   r   getCommitToPath  s    zCharScanner.getCommitToPathc             C   s   | j jS )N)r  r   )r$   r   r   r   rD     s    zCharScanner.getFilenamec             C   s   | j jS )N)r  r   )r$   r   r   r   getInputBuffer  s    zCharScanner.getInputBufferc             C   s   | j S )N)r  )r$   r   r   r   getInputState  s    zCharScanner.getInputStatec             C   s   t |tst|| _d S )N)r   r   r   r  )r$   stater   r   r   setInputState  s    zCharScanner.setInputStatec             C   s   | j jS )N)r  r+   )r$   r   r   r   r<     s    zCharScanner.getLinec             C   s
   t | jS )N)r1   rA   )r$   r   r   r   r>   !  s    zCharScanner.getTextc             C   s   | j S )N)r   )r$   r   r   r   getTokenObject$  s    zCharScanner.getTokenObjectc             C   s$   | j j|}| js |j|}|S )N)r  r   r   r   r   lower)r$   rb   r^   r   r   r   r   '  s    zCharScanner.LAc             C   sZ   y<| j st|   }|| || jj || jj |S    | d Y nX t	j
S )Nzunable to create new token)r   r   r   r~   r  r   r   r   panicr:   badToken)r$   rw   r   r   r   r   	makeToken.  s    

zCharScanner.makeTokenc             C   s   | j j S )N)r  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   rL   )r$   r   r   r   r   _match_bitset>  s    
zCharScanner._match_bitsetc             C   s>   x8|D ]0}|  d|kr"|   qt|  d|d| qW d S )Nr   F)r   r   rL   )r$   r   r^   r   r   r   _match_stringD  s    

zCharScanner._match_stringc             C   s    t |r| |S | |S d S )N)r   r  r  )r$   r   r   r   r   matchK  s    
zCharScanner.matchc             C   s0   |  d|kr|   nt|  d|d| d S )Nr   T)r   r   rL   )r$   r^   r   r   r   matchNotQ  s    
zCharScanner.matchNotc             C   s@   |  d|k s|  d|kr4t|  d||d| n|   d S )Nr   F)r   rL   r   )r$   c1c2r   r   r   
matchRangeW  s    zCharScanner.matchRangec             C   s   | j  jd7  _d| j _d S )Nr   )r  r+   r,   )r$   r   r   r   newline]  s    zCharScanner.newlinec             C   s2   |   }|d | j d | j d }| | d S )Nr   )r=   r   r~   )r$   r^   Zncr   r   r   taba  s    zCharScanner.tabc             C   s   t d|  td d S )NzCharScanner: panic: r   )r   r  exit)r$   r   r   r   r   r  f  s    zCharScanner.panicc             C   s6   |   stdt|  nt|   d t|  d S )Nzerror: z	: error: )rD   r   r1   )r$   r   r   r   r   reportErrorj  s    zCharScanner.reportErrorc             C   s6   |   stdt|  nt|   d t|  d S )Nz	warning: z: warning: )rD   r   r1   )r$   r   r   r   r   reportWarningp  s    zCharScanner.reportWarningc             C   s(   | j d | jj| j_| jj| j_d S )Nr   )rA   r   r  r,   r   r+   r   )r$   r   r   r   r  v  s    zCharScanner.resetTextc             C   s   | j j| d S )N)r  r   r   )r$   posr   r   r   r   {  s    zCharScanner.rewindc             C   s
   || _ d S )N)r   )r$   clr   r   r   r   ~  s    zCharScanner.setTokenObjectClassc             C   sh   |sd S t |tst| }|ttttgkr2d S | }|sBd S t	|sNt| 
||}|| |S )N)r   r:   r   r   r   rk   ry   r   r>   r   testLiteralsTabler   )r$   r7   Z_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y | jsl|j	
|}| j| }W n   Y nX |S )Nr   r   )r   rA   r   r   rf   r   r   dictr   r   r  )r$   r   r   rb   r   r   r   r,    s    


zCharScanner.testLiteralsTablec             C   s
   |j  S )N)r   r  )r$   r^   r   r   r   toLower  s    zCharScanner.toLowerc             C   s   t d| j  d S )Nr/   )r   r   )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)r   r0  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   )r0  r   r   r   )r$   r1  r   r   r   traceOut  s    zCharScanner.traceOutc             C   s   d S )Nr   )r$   r   r   r   uponEOF  s    zCharScanner.uponEOFc             C   s   | j r| j| d S )N)r   rA   r0   )r$   r^   r   r   r   r0     s    zCharScanner.appendc             C   s   | j j  d S )N)r  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   r\   )	r  r   r   r   r0   r   r&  r,   r   )r$   r^   r   r   r   r     s    


zCharScanner.consumec             C   s.   x(|  dtkr(|  d|kr(|   qW d S )Nr   )r   EOF_CHARr   )r$   r^   r   r   r   consumeUntil_char  s    zCharScanner.consumeUntil_charc             C   s2   x,|  dtkr,| j|  ds,|   qW d S )Nr   )r   r5  rX   r   r   )r$   Zbitsetr   r   r   consumeUntil_bitset  s    "zCharScanner.consumeUntil_bitsetc             C   s(   |s|    | t| _n
| | d S )N)r4  r  ry   r   raise_NoViableAlt)r$   la1r   r   r   default  s    zCharScanner.defaultc          
   G   s   |s|    | t| _d S |s0|   t n`|   y|d }||dd    W n4 tk
r } z| | |   W d d }~X Y nX t d S )Nr   r   )	r4  r  ry   r   r   rv   r   r(   r(  )r$   r9  r   funcr   r   r   r   filterdefault  s    
zCharScanner.filterdefaultNc             C   s8   |s|  d}|  }|  }|  }t||||d S )Nr   )r   rD   r<   r=   rB   )r$   r9  fnamer+   r@   r   r   r   r8    s     
zCharScanner.raise_NoViableAltc             C   s:   |r0|s0|t ks0| j|}| |}|| || _|S )N)r   rA   r   r  r}   r   )r$   Z_createZ_tokenZ_ttypeZ_offsetr   r   r   r   set_return_token  s    

zCharScanner.set_return_token)r   )N)<r%   r&   r'   ZNO_CHARr5  r#   r   r   r  r  r  r  r|   r   r}   r  r  r=   r~   r  rD   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/  r0  r2  r3  r4  r0   r   r   r6  r7  r:  r<  r8  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   r;   )r$   r   r   r   r   r#     s    
zCharScannerIterator.__init__c             C   s*   | j s
t| j  }|r | r&t |S )N)r   r   r   rz   r   )r$   r   r   r   r   r     s
    

zCharScannerIterator.nextN)r%   r&   r'   r#   r   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 )rU   @   r
   rN   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x(|D ] }t|tsnt| dd|  qnW || _d S )Nr   z/BitSet requires integer, long, or list argumentzList argument item is znot a long: %s)	rU   r#   r   r   rf   r   r;   r   data)r$   r@  r   r   r   r   r#   /  s     




zBitSet.__init__c             C   sd   t | jtj }d}xJtd|D ]<}| |r8|d7 }n|d7 }|d d s |d|d  7 }q W |S )Nr   r   1or   
   z|%s|)r-   r@  rU   BITSr   at)r$   bitsr   rb   r   r   r   r4   B  s    

zBitSet.__str__c             C   s   t | S )N)r1   )r$   r   r   r   r5   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   rf   rE  r   r;   r-   rI   )r$   r   r   r   r   r   r   Q  s    

zBitSet.memberc             C   s
   |t j? S )N)rU   LOG_BITS)r$   bitr   r   r   
wordNumberg  s    zBitSet.wordNumberc             C   s   |t j@ }d|> S )Nr   )rU   MOD_MASK)r$   rH  r*  r   r   r   bitMaskj  s    
zBitSet.bitMaskTc             C   s   |  |}| |}|t| jkrj|t| j d }xtd|D ]}| jd q@W t| j|d ksjt|r| j|  |O  < n| j|  | M  < d S )Nr   r   )rI  rK  r-   r@  r   r0   r   )r$   rH  Zonrb   maskr   r   r   r   r   rX   n  s    

z
BitSet.setc             C   s   |  ||  d S )N)rX   )r$   rH  offr   r   r   rM    s    z
BitSet.offc             C   s&   |  |}| j| }| |}||@ S )N)rI  r@  rK  )r$   rH  rb   vr   r   r   r   rE    s    


z	BitSet.at)N)T)T)r%   r&   r'   rD  ZNIBBLErG  rJ  r#   r4   r5   r   rI  rK  rX   r   rM  rE  r   r   r   r   rU   )  s   


rU   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    rP  c             C   s   t d| j d S )Nz1%s is only valid if parser is built for debugging)RuntimeErrorrO  )r;  r   r   r   
runtime_ex  s    rR  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 )Nr   )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 )Nr   )r   r   r   r   r   )r$   r   r   r   r     s    zTokenBuffer.resetc             C   s   |  j d7  _ d S )Nr   )r   )r$   r   r   r   r     s    zTokenBuffer.consumec             C   s8   |    x*| j || j k r2| j| j  q
W d S )N)r   r   r   r   r0   r   r   )r$   r   r   r   r   r     s    zTokenBuffer.fillc             C   s   | j S )N)r   )r$   r   r   r   getInput  s    zTokenBuffer.getInputc             C   s"   |  | | j| j| d jS )Nr   )r   r   r   r   rw   )r$   r   r   r   r   r     s    
zTokenBuffer.LAc             C   s    |  | | j| j| d S )Nr   )r   r   r   r   )r$   r   r   r   r   LT  s    
zTokenBuffer.LTc             C   s   |    |  jd7  _| jS )Nr   )r   r   r   )r$   r   r   r   r     s    zTokenBuffer.markc             C   s    |    || _|  jd8  _d S )Nr   )r   r   r   )r$   r   r   r   r   r     s    zTokenBuffer.rewindc             C   sF   x@| j dkr@| jdkr&|  jd7  _n
| j  |  j d8  _ qW d S )Nr   r   )r   r   r   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   r4     s    zTokenBuffer.__str__c             C   s   t | S )N)r1   )r$   r   r   r   r5     s    zTokenBuffer.__repr__N)r%   r&   r'   r#   r   r   r   rT  r   rU  r   r   r   r4   r5   r   r   r   r   rS    s   
rS  c               @   s   e Zd Zdd Zdd ZdS )ParserSharedInputStatec             C   s   d | _ |   d S )N)r   r   )r$   r   r   r   r#     s    zParserSharedInputState.__init__c             C   s    d| _ d | _| jr| j  d S )Nr   )r   r   r   r   )r$   r   r   r   r     s    zParserSharedInputState.resetN)r%   r&   r'   r#   r   r   r   r   r   rV    s   rV  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   )
rd   	returnAST
astFactorytokenTypeToASTClassMapignoreInvalidDebugCallsr   rV  r  r   r   )r$   r   r  arg0r   r   r   r#     s    zParser.__init__c             C   s   | j S )N)rZ  )r$   r   r   r   getTokenTypeToASTClassMap   s    z Parser.getTokenTypeToASTClassMapc             C   s   | j st| j d S )N)r[  rP  addMessageListener)r$   lr   r   r   r^    s    zParser.addMessageListenerc             C   s   | j st| j d S )N)r[  rP  addParserListener)r$   r_  r   r   r   r`    s    zParser.addParserListenerc             C   s   | j st| j d S )N)r[  rP  addParserMatchListener)r$   r_  r   r   r   ra    s    zParser.addParserMatchListenerc             C   s   | j st| j d S )N)r[  rP  addParserTokenListener)r$   r_  r   r   r   rb    s    zParser.addParserTokenListenerc             C   s   | j st| j d S )N)r[  rP  addSemanticPredicateListener)r$   r_  r   r   r   rc    s    z#Parser.addSemanticPredicateListenerc             C   s   | j st| j d S )N)r[  rP  addSyntacticPredicateListener)r$   r_  r   r   r   rd    s    z$Parser.addSyntacticPredicateListenerc             C   s   | j st| j d S )N)r[  rP  addTraceListener)r$   r_  r   r   r   re    s    zParser.addTraceListenerc             C   s
   t  d S )N)r   )r$   r   r   r   r      s    zParser.consumec             C   s.   x(|  dtkr(|  d|kr(|   qW d S )Nr   )r   ry   r   )r$   rl   r   r   r   _consumeUntil_type#  s    zParser._consumeUntil_typec             C   s0   x*|  dtkr*||  ds*|   qW d S )Nr   )r   ry   r   r   )r$   rX   r   r   r   _consumeUntil_bitset'  s     zParser._consumeUntil_bitsetc             C   s$   t |tr| | n
| | d S )N)r   rf   rf  rg  )r$   r   r   r   r   consumeUntil+  s    
zParser.consumeUntilc             C   s   d S )Nr   )r$   r   r   r   defaultDebuggingSetup1  s    zParser.defaultDebuggingSetupc             C   s   | j S )N)rX  )r$   r   r   r   getAST4  s    zParser.getASTc             C   s   | j S )N)rY  )r$   r   r   r   getASTFactory7  s    zParser.getASTFactoryc             C   s   | j jS )N)r  r   )r$   r   r   r   rD   :  s    zParser.getFilenamec             C   s   | j S )N)r  )r$   r   r   r   r  =  s    zParser.getInputStatec             C   s
   || _ d S )N)r  )r$   r  r   r   r   r  @  s    zParser.setInputStatec             C   s
   | j | S )N)rd   )r$   r   r   r   r   getTokenNameC  s    zParser.getTokenNamec             C   s   | j S )N)rd   )r$   r   r   r   getTokenNamesF  s    zParser.getTokenNamesc             C   s   | j S )N)Zfalse)r$   r   r   r   isDebugModeI  s    zParser.isDebugModec             C   s
   t  d S )N)r   )r$   rb   r   r   r   r   L  s    z	Parser.LAc             C   s
   t  d S )N)r   )r$   rb   r   r   r   rU  O  s    z	Parser.LTc             C   s   | j j S )N)r  r   r   )r$   r   r   r   r   R  s    zParser.markc             C   s8   |  d|kr,t| j| d|d|  n|   d S )Nr   F)r   rc   rd   rU  rD   r   )r$   r   r   r   r   
_match_intU  s    zParser._match_intc             C   s:   | | ds.t| j| d|d|  n|   d S )Nr   F)r   r   rc   rd   rU  rD   r   )r$   r   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   rf   ro  rU   rp  r;   )r$   rX   r   r   r   r   c  s    



zParser.matchc             C   s8   |  d|kr,t| j| d|d|  n|   d S )Nr   T)r   rc   rd   rU  rD   r   )r$   r   r   r   r   r!  l  s    zParser.matchNotc             C   s   | j st| j d S )N)r[  rR  removeMessageListener)r$   r_  r   r   r   rq  s  s    zParser.removeMessageListenerc             C   s   | j st| j d S )N)r[  rR  removeParserListener)r$   r_  r   r   r   rr  w  s    zParser.removeParserListenerc             C   s   | j st| j d S )N)r[  rR  removeParserMatchListener)r$   r_  r   r   r   rs  {  s    z Parser.removeParserMatchListenerc             C   s   | j st| j d S )N)r[  rR  removeParserTokenListener)r$   r_  r   r   r   rt    s    z Parser.removeParserTokenListenerc             C   s   | j st| j d S )N)r[  rR  removeSemanticPredicateListener)r$   r_  r   r   r   ru    s    z&Parser.removeSemanticPredicateListenerc             C   s   | j st| j d S )N)r[  rR   removeSyntacticPredicateListener)r$   r_  r   r   r   rv    s    z'Parser.removeSyntacticPredicateListenerc             C   s   | j st| j d S )N)r[  rR  removeTraceListener)r$   r_  r   r   r   rw    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")r  )
rD   r   r:   r=   r<   r>   r   r  stderrr1   )r$   r   r   r
  r+   r@   rA   r   r   r   r(    s    
zParser.reportErrorc             C   s6   |   }|r"td|t|f  ntdt|  d S )Nz%s:warning: %szwarning: %s)rD   r   r1   )r$   r   r
  r   r   r   r)    s    zParser.reportWarningc             C   s   | j j| d S )N)r  r   r   )r$   r*  r   r   r   r     s    zParser.rewindc             C   s
   || _ d S )N)rY  )r$   r
  r   r   r   setASTFactory  s    zParser.setASTFactoryc             C   s   | j | d S )N)rY  setASTNodeType)r$   r+  r   r   r   setASTNodeClass  s    zParser.setASTNodeClassc             C   s   |  | d S )N)r{  )r$   nodeTyper   r   r   rz    s    zParser.setASTNodeTypec             C   s   | j st| j d S )N)r[  rR  setDebugMode)r$   Z	debugModer   r   r   r}    s    zParser.setDebugModec             C   s   || j _d S )N)r  r   )r$   r
  r   r   r   r|     s    zParser.setFilenamec             C   s
   || _ d S )N)r[  )r$   valuer   r   r   setIgnoreInvalidDebugCalls  s    z!Parser.setIgnoreInvalidDebugCallsc             C   s   || j _d S )N)r  r   )r$   r   r   r   r   setTokenBuffer  s    zParser.setTokenBufferc             C   s   t d| j  d S )Nr/   )r   r   )r$   r   r   r   r0    s    zParser.traceIndentc             C   s   |  j d7  _ | d| d S )Nr   z> )r   trace)r$   r1  r   r   r   r2    s    zParser.traceInc             C   s   |  d| |  jd8  _d S )Nz< r   )r  r   )r$   r1  r   r   r   r3    s    zParser.traceOutc             C   sH   |sd S |j s||_ n |js*|j | n|j| ||_|  d S )N)rootchildsetFirstChildsetNextSiblingadvanceChildToEnd)r$   
currentASTr  r   r   r   addASTChild  s    zParser.addASTChildc             C   s*   |r&| |j |j|_|  ||_d S )N)addChildr  r  r  )r$   r  r  r   r   r   makeASTRoot  s
    zParser.makeASTRootN)6r%   r&   r'   r#   r]  r^  r`  ra  rb  rc  rd  re  r   rf  rg  rh  ri  rj  rk  rD   r  r  rl  rm  rn  r   rU  r   ro  rp  r   r!  rq  rr  rs  rt  ru  rv  rw  r(  r)  r   ry  r{  rz  r}  r|   r  r  r0  r2  r3  r  r  r   r   r   r   rW    sf   	rW  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   y|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   rf   r   r  r#   r   rV  set_krS  r  r   r;   )r$   r   r  r	  ZtokenBuf)r   r   r   r#     s0    






zLLkParser.__init__c             C   s   | j j  d S )N)r  r   r   )r$   r   r   r   r     s    zLLkParser.consumec             C   s   | j j|S )N)r  r   r   )r$   rb   r   r   r   r   
  s    zLLkParser.LAc             C   s   | j j|S )N)r  r   rU  )r$   rb   r   r   r   rU    s    zLLkParser.LTc             G   s&   y|| | _ W n   d| _ Y nX d S )Nr   )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 || |  xVtd| jd D ]B}|dkr^t d | |rx| | }nd}t d||f  qJW t d d S )	Nr   r   z [guessing]r   z, nullzLA(%s) == %srZ   )	r   rw   r0  r  r   r   r   rU  r>   )r$   Zeer1  Zguessrb   rN  r   r   r   r    s    
zLLkParser.tracec             C   s   |  j d7  _ | d| d S )Nr   z> )r   r  )r$   r1  r   r   r   r2  '  s    zLLkParser.traceInc             C   s   |  d| |  jd8  _d S )Nz< r   )r  r   )r$   r1  r   r   r   r3  +  s    zLLkParser.traceOut)r%   r&   r'   r#   r   r   rU  r  r  r2  r3  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 )Nr   )r   )r$   r   r   r   r#   4  s    z#TreeParserSharedInputState.__init__N)r%   r&   r'   r#   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 )Nr   )r  r  Z_retTreerd   rX  
ASTFactoryrY  r   )r$   r   r  r   r   r   r#   =  s    zTreeParser.__init__c             C   s   | j S )N)rX  )r$   r   r   r   rj  E  s    zTreeParser.getASTc             C   s   | j S )N)rY  )r$   r   r   r   rk  H  s    zTreeParser.getASTFactoryc             C   s
   | j | S )N)rd   )r$   r   r   r   r   rl  K  s    zTreeParser.getTokenNamec             C   s   | j S )N)rd   )r$   r   r   r   rm  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   rf   rU   r   r?   rc   rm  r   r   )r$   r   rX   r   r   r   r   Q  s    zTreeParser.matchc             C   s.   |r|t ks| |kr*t|  ||dd S )NT)r?   r   rc   rm  )r$   r   ttyper   r   r   r!  \  s    zTreeParser.matchNotc             C   s   t d|tjd d S )Nzerror:)r  )r   r  rx  )r$   exr   r   r   r(  `  s    zTreeParser.reportErrorc             C   s   t d| d S )Nzwarning:)r   )r$   r   r   r   r   r)  c  s    zTreeParser.reportWarningc             C   s
   || _ d S )N)rY  )r$   r
  r   r   r   ry  f  s    zTreeParser.setASTFactoryc             C   s   |  | d S )N)r{  )r$   r|  r   r   r   rz  i  s    zTreeParser.setASTNodeTypec             C   s   | j | d S )N)rY  rz  )r$   r|  r   r   r   r{  l  s    zTreeParser.setASTNodeClassc             C   s   t d| j  d S )Nr/   )r   r   )r$   r   r   r   r0  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   z> (r  )r   z
[guessing]r   )r   r0  r   r   r1   r  r   )r$   r1  r   r   r   r   r2  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 )	Nz< r  r  r  r   z
[guessing]r   r   )r0  r   r   r1   r  r   r   )r$   r1  r   r   r   r   r3  y  s
    zTreeParser.traceOutc             C   sH   |sd S |j s||_ n |js*|j | n|j| ||_|  d S )N)r  r  r  r  r  )r$   r  r  r   r   r   r    s    zTreeParser.addASTChildc             C   s*   |r&| |j |j|_|  ||_d S )N)r  r  r  r  )r$   r  r  r   r   r   r    s
    zTreeParser.makeASTRootN)r%   r&   r'   r#   rj  rk  rl  rm  r   r!  r(  r)  ry  rz  r{  r0  r2  r3  r  r  r   r   r   r   r  ;  s"   r  c             C   s   | rx| j r| j } qW | S )N)right)astr   r   r   	rightmost  s    
r  c             C   s^   xB| rB|rB|  |sdS t|  | |s0dS |  } | }qW t|| |  oV| }|S )NF)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 )2r9   c             C   s   d S )Nr   )r$   r   r   r   r#     s    zAST.__init__c             C   s   d S )Nr   )r$   r^   r   r   r   r    s    zAST.addChildc             C   s   dS )NFr   )r$   r   r   r   r   r    s    z
AST.equalsc             C   s   dS )NFr   )r$   r   r   r   r   
equalsList  s    zAST.equalsListc             C   s   dS )NFr   )r$   r   r   r   r   equalsListPartial  s    zAST.equalsListPartialc             C   s   dS )NFr   )r$   r   r   r   r   
equalsTree  s    zAST.equalsTreec             C   s   dS )NFr   )r$   r   r   r   r   equalsTreePartial  s    zAST.equalsTreePartialc             C   s   d S )Nr   )r$   Ztreer   r   r   findAll  s    zAST.findAllc             C   s   d S )Nr   )r$   Zsubtreer   r   r   findAllPartial  s    zAST.findAllPartialc             C   s   | S )Nr   )r$   r   r   r   r    s    zAST.getFirstChildc             C   s   | S )Nr   )r$   r   r   r   r    s    zAST.getNextSiblingc             C   s   dS )Nr   r   )r$   r   r   r   r>     s    zAST.getTextc             C   s   t S )N)rk   )r$   r   r   r   r     s    zAST.getTypec             C   s   dS )Nr   r   )r$   r   r   r   r<     s    zAST.getLinec             C   s   dS )Nr   r   )r$   r   r   r   r=     s    zAST.getColumnc             C   s   dS )Nr   r   )r$   r   r   r   getNumberOfChildren  s    zAST.getNumberOfChildrenc             C   s   d S )Nr   )r$   r   r   r   r   
initialize  s    zAST.initializec             C   s   d S )Nr   )r$   r^   r   r   r   r    s    zAST.setFirstChildc             C   s   d S )Nr   )r$   r   r   r   r   r    s    zAST.setNextSiblingc             C   s   d S )Nr   )r$   rA   r   r   r   r}     s    zAST.setTextc             C   s   d S )Nr   )r$   r  r   r   r   r     s    zAST.setTypec             C   s   |    d S )N)r>   )r$   r   r   r   r     s    zAST.toStringc             C   s   |   S )N)r>   )r$   r   r   r   toStringList  s    zAST.toStringListc             C   s   |   S )N)r>   )r$   r   r   r   toStringTree  s    zAST.toStringTreeN)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   r4   r  r  r   r   r   r   r9     s2   r9   c               @   s$   e Zd Zdd Zdd Zdd ZdS )ASTNULLTypec             C   s   t |  d S )N)r9   r#   )r$   r   r   r   r#   	  s    
zASTNULLType.__init__c             C   s   dS )Nz	<ASTNULL>r   )r$   r   r   r   r>   	  s    zASTNULLType.getTextc             C   s   t S )N)r   )r$   r   r   r   r   	  s    zASTNULLType.getTypeN)r%   r&   r'   r#   r>   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 )N)downr  )r$   r   r   r   r#   	  s    zBaseAST.__init__c             C   s.   |r*t | j}|r||_n| jr$t|| _d S )N)r  r  r  r   )r$   r8   r   r   r   r   r  	  s    

zBaseAST.addChildc             C   s&   | j }d}x|r |d7 }|j}qW |S )Nr   r   )r  r  )r$   r   r   r   r   r   r  (	  s    
zBaseAST.getNumberOfChildrenc             C   sp   | }xf|rj|o| |}|r(|| n| o6||}|rF|| | r`| ||| | }qW d S )N)r  r0   r  r  doWorkForFindAllr  )r$   rN  targetZpartialMatchZsiblingr"  r#  r   r   r   r  0	  s    
zBaseAST.doWorkForFindAllc             C   s(   |sdS |   |  ko&|  | kS )NF)r>   r   )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   r  K	  s    zBaseAST.equalsListc             C   s   t | |ddS )NT)r  )r  )r$   r   r   r   r   r  Q	  s    zBaseAST.equalsListPartialc             C   s    |  |ot|  | ddS )NF)r  )r  r  r  )r$   r   r   r   r   r  W	  s    
zBaseAST.equalsTreec             C   s(   |sdS |  |o&t|  | ddS )NT)r  )r  r  r  )r$   r   r   r   r   r  ^	  s    zBaseAST.equalsTreePartialc             C   s   g }|sd S |  ||d |S )NF)r  )r$   r  rootsr   r   r   r  g	  s
    zBaseAST.findAllc             C   s   g }|sd S |  ||d |S )NT)r  )r$   subr  r   r   r   r  t	  s
    zBaseAST.findAllPartialc             C   s   | j S )N)r  )r$   r   r   r   r  	  s    zBaseAST.getFirstChildc             C   s   | j S )N)r  )r$   r   r   r   r  	  s    zBaseAST.getNextSiblingc             C   s   dS )Nr   r   )r$   r   r   r   r>   	  s    zBaseAST.getTextc             C   s   dS )Nr   r   )r$   r   r   r   r   	  s    zBaseAST.getTypec             C   s   dS )Nr   r   )r$   r   r   r   r<   	  s    zBaseAST.getLinec             C   s   dS )Nr   r   )r$   r   r   r   r=   	  s    zBaseAST.getColumnc             C   s
   d | _ d S )N)r  )r$   r   r   r   removeChildren	  s    zBaseAST.removeChildrenc             C   s
   || _ d S )N)r  )r$   r^   r   r   r   r  	  s    zBaseAST.setFirstChildc             C   s
   || _ d S )N)r  )r$   r   r   r   r   r  	  s    zBaseAST.setNextSiblingc             C   s   d S )Nr   )r$   rA   r   r   r   r}   	  s    zBaseAST.setTextc             C   s   d S )Nr   )r$   r  r   r   r   r   	  s    zBaseAST.setTypec             C   s   | }|}d S )Nr   )verbosenamesverboseStringConversionrd   r   r   r   setVerboseStringConversion	  s    z"BaseAST.setVerboseStringConversionc               C   s   t S )N)rd   r   r   r   r   rm  	  s    zBaseAST.getTokenNamesc             C   s   |   S )N)r>   )r$   r   r   r   r   	  s    zBaseAST.toStringc             C   s$   |   }|  }|r || 7 }|S )N)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 (r/   z ))r  r   r  )r$   r  Zkidr   r   r   r  	  s    zBaseAST.toStringTree)"r%   r&   r'   r  rd   r#   r  r  r  r  r  r  r  r  r  r  r  r  r>   r   r<   r=   r  r  r  r}   r   r  staticmethodrm  r   r  r4   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 )Nz	<no text>r   )	r   r  r#   rk   r  rA   r+   r,   r  )r$   r7   )r   r   r   r#   	  s    zCommonAST.__init__c             C   s   | j S )N)rA   )r$   r   r   r   r>   	  s    zCommonAST.getTextc             C   s   | j S )N)r  )r$   r   r   r   r   	  s    zCommonAST.getTypec             C   s   | j S )N)r+   )r$   r   r   r   r<   	  s    zCommonAST.getLinec             C   s   | j S )N)r,   )r$   r   r   r   r=   	  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 )Nr   r   )r   rf   r   r}   r9   r:   r>   r   r<   r+   r=   r,   )r$   r   r\  r	  r   r   r   r  	  s    




zCommonAST.initializec             C   s   t |st|| _d S )N)r   r   rA   )r$   Ztext_r   r   r   r}   	  s    zCommonAST.setTextc             C   s   t |tst|| _d S )N)r   rf   r   r  )r$   Zttype_r   r   r   r   
  s    zCommonAST.setType)N)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d Zd	S )
CommonASTWithHiddenTokensc             G   s    t j| f|  d | _d | _d S )N)r  r#   r   r   )r$   r   r   r   r   r#   
  s    z"CommonASTWithHiddenTokens.__init__c             C   s   | j S )N)r   )r$   r   r   r   r   
  s    z(CommonASTWithHiddenTokens.getHiddenAfterc             C   s   | j S )N)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 )Nr   )
r  r  r   r:   r   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   r  

  s   r  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 )N)r  r  )r$   r   r   r   r#   #
  s    zASTPair.__init__c             C   s&   | j r"x| j  r | j  | _ qW d S )N)r  r  )r$   r   r   r   r  (
  s    zASTPair.advanceChildToEndc             C   s   t  }| j|_| j|_|S )N)r  r  r  )r$   Z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  r>   r  )r$   r   r^   r   r   r   r   4
  s    zASTPair.toStringN)	r%   r&   r'   r#   r  r  r   r4   r5   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 )N)_classr   	_classmap)r$   tabler   r   r   r#   B
  s    zASTFactory.__init__c             G   s  |s|  tS |d }d }d }y|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   )createrk   r   rf   getASTNodeTyper  r   r9   r   r:   r   rw   
issubclass)r$   r   r\  r	  Zarg2r^   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 )N)r   rw   r   r  r9   r  )r$   	classNamer   r   r   r{  
  s
    zASTFactory.setASTNodeClassc             C   s   | j S )N)r  )r$   r   r   r   getASTNodeClass
  s    zASTFactory.getASTNodeClassc             C   s   | j S )N)r  )r$   r   r   r   r]  
  s    z$ASTFactory.getTokenTypeToASTClassMapc             C   s
   || _ d S )N)r  )r$   Zamapr   r   r   setTokenTypeToASTClassMap
  s    z$ASTFactory.setTokenTypeToASTClassMapc             C   s   dd l }t||jd d S )Nr   )r  )r  r   rx  )r$   r   r  r   r   r   r   
  s    zASTFactory.errorc             C   sV   | j si | _ |s,y| 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   rw   r   r  r9   )r$   rl   r  r   r   r   setTokenTypeASTNodeType
  s    z"ASTFactory.setTokenTypeASTNodeTypec             C   s:   | j r*y| j | }|r|S W n   Y nX | jr6| 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  r  )r$   rl   r^   r   r   r   r  
  s    
zASTFactory.getASTNodeTypec             C   s
   t || S )N)dup)r$   r   r   r   r   r  
  s    zASTFactory.dupc             C   s
   t || S )N)dupList)r$   r   r   r   r   r  
  s    zASTFactory.dupListc             C   s
   t || S )N)dupTree)r$   r   r   r   r   r  
  s    zASTFactory.dupTree)N)N)r%   r&   r'   r#   r  r{  rz  r  r]  r  r   r  r  r  r  r  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 )Nr   )r$   r   r   r   r   r#   
  s    zASTVisitor.__init__c             C   s   d S )Nr   )r$   r  r   r   r   visit
  s    zASTVisitor.visitN)r%   r&   r'   r#   r  r   r   r   r   r  
  s   r  c              G   s   | sd S x0t dt| D ]}| | }|rt|tstqW | d }d }|rT|d  xzt dt| D ]h}| | srqd|s| |  }}n2|s|| |  | }n|| |  | }x| r| }qW qdW |S )Nr   r   )	r   r-   r   r9   r   r  r  r  r  )Znodesrb   r8   r  tailr   r   r   make
  s.    


r  c             C   s0   | sd S |r| | j}ntd||  |S )Nz)dup function requires ASTFactory argument)r  r   r;   r  )r   factoryZdup_tr   r   r   r    s    
r  c             C   s<   t | |}|}x(| r6|  } |t | | | }qW |S )N)r  r  r  )r   r  resultntr   r   r   r    s    
r  c             C   s&   t | |}| r"|t|  | |S )N)r  r  r  r  )r   r  r  r   r   r   r  $  s    
r  )XZ
__future__r   r  compatr   r   r   r   r   rk   ry   r   r   r   r5  r   r   r   r   r    r"   r!   r(   r6   rB   rK   rL   rc   rn   ro   rq   rs   rt   ru   rv   objectr:   r  r%   r   Tr   r   r~   r}   r   r<   r=   r>   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  rU   rP  rR  rS  rV  rW  r  r  r  r  r  r9   r  r  r  r  r  r  r  r?   r  r  r  r  r   r   r   r   <module>   s   ,	#qsN
?
U16R>    d	D vOaP :; !
