
nR\H             	   @   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 Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd  d!   d! e  Z Gd" d#   d# e  Z Gd$ d%   d% e  Z Gd& d'   d' e  Z Gd( d)   d) e  Z  Gd* d+   d+ e   Z! Gd, d-   d- e  Z" Gd. d/   d/ e#  Z$ e$ d0 e	 d1 d2  e$ _% e& d3 k r3e' d4  e$ j% Z( e' e(  n  Gd5 d6   d6 e$  Z) e& d3 k re)   Z( e' e(  e) d7 d8 d9 d d1 d: d0 d;  Z( e' e(  e)   Z( e( j* d  j+ d8  j, d:  j- d;  e' e(  e' e( j.    e' e( j/    e' e( j0    e' e( j1    n  Gd< d=   d= e)  Z2 Gd> d?   d? e#  Z3 Gd@ dA   dA e#  Z4 GdB dC   dC e4  Z5 GdD dE   dE e#  Z6 GdF dG   dG e#  Z7 GdH dI   dI e#  Z8 GdJ dK   dK e7  Z9 GdL dM   dM e7  Z: GdN dO   dO e:  Z; GdP dQ   dQ  Z< GdR dS   dS e#  Z= GdT dU   dU e7  Z> GdV dW   dW  Z? GdX dY   dY e#  Z@ dZ d[   ZA d\ d]   ZB Gd^ d_   d_ e#  ZC Gd` da   da e#  ZD Gdb dc   dc e#  ZE Gdd de   de eE  ZF Gdf dg   dg e#  ZG Gdh di   di e#  ZH dj dk   ZI dl dm   ZJ Gdn do   do e#  ZK Gdp dq   dq eK  ZL Gdr ds   ds eK  ZM Gdt du   du eM  ZN Gdv dw   dw eN  ZO Gdx dy   dy e#  ZP Gdz d{   d{ e#  ZQ Gd| d}   d} e#  ZR eL   ZS d~ d   ZT d d   ZU d d   ZV d d   ZW d S)    )print_functionN   )long
basestring	int_typesxrange       c              C   s-   i d d 6d d 6d d 6d d 6d	 d
 6}  |  S)N2major7minor5micror
   patchz2.7.5version )rr   r   ./var/www/dbchiro/venv/build/xlwt/xlwt/antlr.pyr   G   s    
r   c             G   s$   |  r  t  d |  t |   n  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 |  |  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   s   t  j |  |  d  |  _ d |  _ d |  _ t |  d k rM | d |  _ n  t |  d k ro | d |  _ n  t |  d k r | d |  _ n  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 |  j  d  n  |  j d k r |  j  sQ | j d  n  | j t |  j   |  j d k r | j d t |  j   n  | j d  n  | j d  t d  j |  S)Nr
   :r   zline  r*   r*   )r+   appendr,   strr-   join)r$   bufr   r   r   __str__~   s    			zRecognitionException.__str__N)r%   r&   r'   r#   r5   __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   sx   t  j |  |  d  |  _ d  |  _ t | d t  rE | d |  _ n/ t | d t  rh | 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   sz   |  j  rG |  j  j   } |  j  j   } |  j  j   } d | | | f S|  j t k rZ d S|  j si t  d |  j j   S)Nz.unexpected symbol at line %s (column %s): "%s"zunexpected end of subtreezunexpected node: %s)r8   getLine	getColumngetTextr9   ASTNULLr   )r$   r,   coltextr   r   r   r5      s    	zNoViableAltException.__str__N)r%   r&   r'   r#   r5   r6   r   r   r   r   r7      s   r7   c               @   s.   e  Z d  Z d d   Z d d   Z e Z d S)NoViableAltForCharExceptionc             G   s   d  |  _  t |  d k r` | d |  _  | d } t j |  d | j   | j   | j    nr t |  d k r | d |  _  | d } | d } | d } t j |  d | | |  n t j |  d d d d	  d  S)
Nr)   r   r   ZNoViableAltr	   r   r
   r*   r*   )	foundCharr.   r(   r#   getFilenamer=   r>   )r$   r   scannerr+   r,   r-   r   r   r   r#      s"    	
		


z$NoViableAltForCharException.__init__c             C   s   d } |  j  d k r< |  j  d k r< | d |  j  d 7} nC |  j  ru | d t t |  j    j   d d   7} n
 | d 7} | S)Nzunexpected char: r0   ~'0xr)   z<None>)rD   hexordupper)r$   Zmesgr   r   r   r5      s    	0
z#NoViableAltForCharException.__str__N)r%   r&   r'   r#   r5   r6   r   r   r   r   rC      s   
rC   c               @   s   e  Z d  Z d d   Z d S)SemanticExceptionc             G   s   t  j |  |  d  S)N)r(   r#   )r$   r   r   r   r   r#      s    zSemanticException.__init__N)r%   r&   r'   r#   r   r   r   r   rM      s   rM   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 r4 t j |  _ n t j |  _ | d |  _ | d |  _ | d |  _ | d |  _	 t
 j |  d |  j	 j   |  j	 j   |  j	 j    nit |  d k rPt | d  rP| d r t j |  _ n t j |  _ | d |  _ | d |  _ | d |  _	 t
 j |  d |  j	 j   |  j	 j   |  j	 j    n t |  d k rt | d t  r| d rt j |  _ n t j |  _ | d |  _ | d |  _ | d |  _	 t
 j |  d	 |  j	 j   |  j	 j   |  j	 j    n t j |  _ t
 j |  d  d  S)
NrO   r   r   r   r)   r	   zMismatched char rangezMismatched charzMismatched char set)r   r.   rN   	NOT_RANGEmismatchTypeRANGErD   	expectingrL   rF   r(   r#   rE   r=   r>   r   NOT_CHARCHARr   BitSetNOT_SETSETsetNONE)r$   r   r   r   r   r#      sJ    	
"
%
z MismatchedCharException.__init__c             C   s   | s | d k r# | j  d  ni | d k r? | j  d  nM | d k r[ | j  d  n1 | d k rw | j  d  n | j  d	 | d	  d  S)
Ni  z'<EOF>'
z'\n'z'\r'	z'\t'rH   )r1   )r$   sbcr   r   r   appendCharName  s    z&MismatchedCharException.appendCharNamec             C   s*  d g } | j  t j |    |  j t j k rt | j  d  |  j | |  j  | j  d  |  j | |  j  n|  j t j	 k r | j  d  |  j | |  j  | j  d  n^|  j t j
 t j g k rc| j  d  |  j t j k r | j  d  n  | j  d  |  j | |  j  | j  d	  |  j | |  j  | j  d  |  j | |  j  n |  j t j t j g k r| j  d  |  j t j k r| j  d  n  | j  d
  x4 t t |  j   D] } |  j | |  j |  qW| j  d  |  j | |  j  n  t   j |  j   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 )r1   r(   r5   rR   rN   rV   ra   rT   rD   rU   rS   rQ   rL   rY   rX   ranger.   rZ   r2   r3   strip)r$   r_   ir   r   r   r5     s>    	zMismatchedCharException.__str__N)r%   r&   r'   r[   rV   rU   rS   rQ   rY   rX   r#   ra   r5   r6   r   r   r   r   rN      s   1#rN   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	   rO   rP   c             G   s  | |  _  g  |  _ d  |  _ d |  _ d  |  _ t |  d k r | d rX t j |  _ n t j	 |  _ | d |  _ | d |  _
 | d |  _ | d |  _ n t |  d k rt | d t  r| d r t j |  _ n t j |  _ | d |  _ | d |  _
 n t |  d k rit | d t  ri| d r@t j |  _ n t j |  _ | d |  _ | d |  _ n% t j |  _ t j |  d d	 d d  t |  d k rt | d
 t  r| d
 |  _ |  j j   |  _ t j |  d |  j |  j j   |  j j    qt | d
 t  rc| d
 |  _ t |  j  |  _ t j |  d d	 |  j j   |  j j    qd |  _ t j |  d d	 d d  n  d  S)Nr
   rP   r   r   r)   rO   r	   z(Mismatched Token: expecting any AST nodez<AST>r   zMismatched Tokenz<empty tree>r*   r*   r*   r*   )r   
tokenNamesr8   	tokenTextr9   r.   re   rQ   rR   rS   rT   rL   r+   r   int	NOT_TOKENTOKENrW   rX   rY   rZ   r[   r(   r#   r;   r?   r=   r>   r:   r2   )r$   r   r   r   r   r#   O  sZ    					
%
%
	z!MismatchedTokenException.__init__c             C   ss   | t  k r | j d  nS | d k  s= | t |  j  k r[ | j d t |  d  n | j |  j |  d  S)Nz<Set of tokens>r   <>)INVALID_TYPEr1   r.   rf   r2   )r$   r_   	tokenTyper   r   r   appendTokenName  s
    !z(MismatchedTokenException.appendTokenNamec             C   s  d g } | j  t j |    |  j t j k rh | j  d  |  j | |  j  | j  d |  j  n|  j t j	 k r | j  d  |  j | |  j  | j  d  nF|  j t j
 t j g k rK| j  d  |  j t j k r | j  d  n  | j  d  |  j | |  j  | j  d	  |  j | |  j  | j  d |  j  n |  j t j t j g k r| j  d  |  j t j k r| j  d  n  | j  d
  x4 t t |  j   D] } |  j | |  j |  qW| j  d |  j  n  t   j |  j   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 )r1   r(   r5   rR   re   rj   ro   rT   rg   ri   rS   rQ   rL   rY   rX   rb   r.   rZ   r2   r3   rc   )r$   r_   rd   r   r   r   r5     s8    	z MismatchedTokenException.__str__N)r%   r&   r'   r[   rj   ri   rS   rQ   rY   rX   r#   ro   r5   r6   r   r   r   r   re   E  s   ; re   c               @   s   e  Z d  Z d d   Z d S)TokenStreamExceptionc             G   s   t  j |  |  d  S)N)r!   r#   )r$   r   r   r   r   r#     s    zTokenStreamException.__init__N)r%   r&   r'   r#   r   r   r   r   rp     s   rp   c               @   s   e  Z d  Z d d   Z d S)TokenStreamIOExceptionc             G   sb   | rE t  | d t  rE | d } t j |  t |   | |  _ n t j |  |  |  |  _ d  S)Nr   )r   r"   rp   r#   r2   io)r$   r   rr   r   r   r   r#     s    
zTokenStreamIOException.__init__N)r%   r&   r'   r#   r   r   r   r   rq     s   rq   c               @   s.   e  Z d  Z d d   Z d d   Z e Z d S)TokenStreamRecognitionExceptionc             G   sU   | rE t  | d t  rE | d } t j |  t |   | |  _ n t d   d  S)Nr   zFTokenStreamRecognitionException requires RecognitionException argument)r   r(   rp   r#   r2   recogr<   )r$   r   rt   r   r   r   r#     s
    
z(TokenStreamRecognitionException.__init__c             C   s   t  |  j  S)N)r2   rt   )r$   r   r   r   r5     s    z'TokenStreamRecognitionException.__str__N)r%   r&   r'   r#   r5   r6   r   r   r   r   rs     s   rs   c               @   s   e  Z d  Z d d   Z d S)TokenStreamRetryExceptionc             G   s   t  j |  |  d  S)N)rp   r#   )r$   r   r   r   r   r#     s    z"TokenStreamRetryException.__init__N)r%   r&   r'   r#   r   r   r   r   ru     s   ru   c               @   s   e  Z d  Z d d   Z d S)CharStreamExceptionc             G   s   t  j |  |  d  S)N)r!   r#   )r$   r   r   r   r   r#     s    zCharStreamException.__init__N)r%   r&   r'   r#   r   r   r   r   rv     s   rv   c               @   s   e  Z d  Z d d   Z d S)CharStreamIOExceptionc             G   sb   | rE t  | d t  rE | d } t j |  t |   | |  _ n t j |  |  |  |  _ d  S)Nr   )r   r"   rv   r#   r2   rr   )r$   r   rr   r   r   r   r#     s    
zCharStreamIOException.__init__N)r%   r&   r'   r#   r   r   r   r   rw     s   rw   c               @   s   e  Z d  Z d S)TryAgainN)r%   r&   r'   r   r   r   r   rx     s   rx   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	   c             K   sN   y | d |  _  Wn t |  _  Yn Xy | d |  _ Wn d |  _ Yn Xd  S)NtyperB   z	<no text>)ry   rm   rB   )r$   argvr   r   r   r#     s    zToken.__init__c             C   s   |  j  t k S)N)ry   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   rE     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$   rB   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)ry   )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   rh   ry   r<   )r$   ry   r   r   r   setType1  s    zToken.setTypec             C   sw   |  j  } | d k r d } nE | d k r3 d } n0 | d k rH d } n | d	 k r] d } n | } d |  j   | f S)
Nr   NULL_TREE_LOOKAHEADr   r{   r   rm   SKIPz["%s",<%s>]r*   )ry   r?   )r$   type_tvalr   r   r   toString8  s    					zToken.toStringNr*   )r%   r&   r'   r   rm   r{   EOFr   MIN_USER_TYPEr#   r|   r>   r=   rE   r~   r?   r   r   r   r   r   r   r5   r6   r   r   r   r   r;     s*   
r;   ry   rB   z	<no text>__main__z
testing ..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
 e
 Z e
 Z d S)CommonTokenc             K   s^   t  j |  |  d |  _ d |  _ y | d |  _ Wn Yn Xy | d |  _ Wn Yn Xd  S)Nr   r,   rA   )r;   r#   r,   rA   )r$   rz   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)rB   )r$   r   r   r   r?   h  s    zCommonToken.getTextc             C   s   |  j  S)N)rA   )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)rB   )r$   rB   r   r   r   r   r  s    	zCommonToken.setTextc             C   s   | |  _  |  S)N)rA   )r$   rA   r   r   r   r   v  s    	zCommonToken.setColumnc             C   s   |  j  } | d k r d } nE | d k r3 d } n0 | d k rH d } n | d k r] d } n | } i |  j d 6| d	 6|  j d
 6|  j d 6} d } | | S)Nr   r   r   r{   r   rm   r   rB   ry   r,   Zcolmz2["%(text)s",<%(type)s>,line=%(line)s,col=%(colm)s]r*   )ry   rB   r,   rA   )r$   r   r   dr   r   r   r   r   z  s"    					

zCommonToken.toStringN)r%   r&   r'   r#   r=   r?   r>   r   r   r   r   r5   r6   r   r   r   r   r   V  s   r   rA      r,   z	some textrO   c               @   sL   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 |  |  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  j |  d  S)N)r   r1   )r$   itemr   r   r   r1     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  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)r2   r   )r$   r   r   r   r5     s    zQueue.__str__N)
r%   r&   r'   r#   r1   r   r   r   r   r5   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   r5     s
    zInputBuffer.__str__c             C   s
   t  |   S)N)r2   )r$   r   r   r   r6     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   sK   |  j  } |  j j   } d } x& | | k  rF | |  j j |  7} q! W| S)Nr
   )r   r   r   r   )r$   rd   nsr   r   r   
getLAChars  s    	zInputBuffer.getLACharsc             C   sB   d } d } |  j  } x& | | k  r= | |  j j |  7} q W| S)Nr
   r   )r   r   r   )r$   r   rd   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 j |  j | d  S)Nr   )r   r   r   r   )r$   r   r   r   r   LA  s    zInputBuffer.LAc             C   s    |  j    |  j d 7_ |  j S)Nr   )syncConsumer   r   )r$   r   r   r   mark  s    
zInputBuffer.markc             C   s&   |  j    | |  _ |  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 j   d  S)Nr   )r   r   r   r   r   )r$   r   r   r   r     s    			zInputBuffer.resetc             C   sW   xP |  j  d k rR |  j d k r3 |  j d 7_ n |  j j   |  j  d 8_  q Wd  S)Nr   r   )r   r   r   r   r   )r$   r   r   r   r     s
    zInputBuffer.syncConsumeN)r%   r&   r'   r#   r5   r6   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s   
r   c                   s@   e  Z d  Z   f d d   Z   f d d   Z d d   Z   S)
CharBufferc                s    t  t |   j   | |  _ d  S)N)superr   r#   input)r$   reader)	__class__r   r   r#   .  s    zCharBuffer.__init__c                s)   t  t |   j   } d | t t  f S)NzCharBuffer{%s,%s)r   r   r5   r2   r   )r$   base)r   r   r   r5   5  s    zCharBuffer.__str__c             C   s   y |  j    x~ |  j j   | |  j k  r |  j j d  } t |  d k sh t |  d k sh t  t |  sz t  |  j j	 |  q WWn1 t
 k
 r } z t |   WYd  d  } ~ Xn Xd  S)Nr   r   )r   r   r   r   r   readr.   r   r   r1   r"   rw   )r$   amountr`   er   r   r   r   9  s    
*zCharBuffer.fill)r%   r&   r'   r#   r5   r   r   r   )r   r   r   -  s   r   c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)LexerSharedInputStatec             C   sX   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   sG   d |  _  d |  _ d |  _ d |  _ d |  _ d  |  _ |  j 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  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  St d   d  S)Nz/TokenStreamIterator requires TokenStream object)r   r   instr<   )r$   r   r   r   r   r#     s    	zTokenStreamIterator.__init__c             C   sA   |  j  s t  |  j  j   } | s1 | j   r= t    n  | S)N)r   r   r   r|   StopIteration)r$   r   r   r   r   next  s
    zTokenStreamIterator.nextN)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 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   s4   y |  j  | } Wn t d | d   Yn X| S)NzTokenStream z
 not found)r   
ValueError)r$   Zsnamer   r   r   r   	getStream  s
    zTokenStreamSelector.getStreamc             C   s1   x* y |  j  j   SWq t k
 r( Yq Xq Wd  S)N)r   r   ru   )r$   r   r   r   r     s
    zTokenStreamSelector.nextTokenc             C   s    |  j  j   } |  j |  | S)N)r   r   select)r$   r   r   r   r   r     s    zTokenStreamSelector.popc             C   s$   |  j  j |  j  |  j |  d  S)N)r   r1   r   r   )r$   argr   r   r   push  s    zTokenStreamSelector.pushc             C   s   t     d  S)N)ru   )r$   r   r   r   retry  s    zTokenStreamSelector.retryc             C   sR   t  | t  r | |  _ d  St |  r> |  j |  |  _ d  St d d   d  S)Nz$TokenStreamSelector.select requires z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               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)TokenStreamBasicFilterc             C   s   | |  _  t   |  _ d  S)N)r   rW   discardMask)r$   r   r   r   r   r#     s    	zTokenStreamBasicFilter.__init__c             C   sS   t  | t  r# |  j j |  d  St  | t  r? | |  _ d  St d d   d  S)Nz'TokenStreamBasicFilter.discard requireszinteger or BitSet argument)r   rh   r   addrW   ZdiscardMarkr<   )r$   r   r   r   r   discard  s    	zTokenStreamBasicFilter.discardc             C   sG   |  j  j   } x1 | rB |  j j | j    rB |  j  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               @   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 S)TokenStreamHiddenTokenFilterc             C   s;   t  j |  |  t   |  _ d  |  _ d  |  _ d  |  _ d  S)N)r   r#   rW   hideMasknextMonitoredTokenlastHiddenTokenfirstHidden)r$   r   r   r   r   r#     s
    		z%TokenStreamHiddenTokenFilter.__init__c             C   s   |  j  j   |  _ d  S)N)r   r   r   )r$   r   r   r   r     s    z$TokenStreamHiddenTokenFilter.consumec             C   s   |  j    d  } x |  j j |  j d  j    sU |  j j |  j d  j    r |  j j |  j d  j    r | s |  j d  } n; | j |  j d   |  j d  j |  |  j d  } | |  _ |  j	 s | |  _	 q n  |  j    q Wd  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
   | j    S)N)r   )r$   r   r   r   r   r     s    z+TokenStreamHiddenTokenFilter.getHiddenAfterc             C   s
   | j    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   sC   t  | t  r# |  j j |  d  St  | j  r? | |  _ d  Sd  S)N)r   rh   r   r   ZBitMask)r$   mr   r   r   hide  s    	z!TokenStreamHiddenTokenFilter.hidec             C   s   |  j  S)N)r   )r$   rd   r   r   r   r     s    zTokenStreamHiddenTokenFilter.LAc             C   s   |  j  d  s |  j   n  |  j  d  } | j |  j  d  |  _ |  j   | } x |  j j |  j  d  j    s |  j j |  j  d  j    r|  j j |  j  d  j    r| j	 |  j  d   | | k r |  j  d  j |  n  |  j  d  } |  _ n  |  j   qW 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               @   sg   e  Z d  Z d d d  Z d d   Z d d   Z d d	   Z d d d
 d  Z e Z d d   Z	 d S)StringBufferNc             C   s%   | r t  |  |  _ n	 g  |  _ d  S)N)listrB   )r$   stringr   r   r   r#   :  s    zStringBuffer.__init__c             C   sU   | s g  |  _  d  S| d k s% t  | |  j   k r; d  S|  j  d |  |  _  d  S)Nr   )rB   r   r   )r$   szr   r   r   	setLength@  s    	zStringBuffer.setLengthc             C   s   t  |  j  S)N)r.   rB   )r$   r   r   r   r   J  s    zStringBuffer.lengthc             C   s   |  j  j |  d  S)N)rB   r1   )r$   r`   r   r   r   r1   M  s    zStringBuffer.appendc             C   s   | s d } n  | d k s! t   | t |  j  k r: d S| sV |  j | d   } n< | | t |  j  k su t   | | } |  j | |  } d } x | D] } | | 7} q W| S)Nr   r
   )r   r.   rB   )r$   ar   Lbr   r   r   r   r   	getStringT  s    	
 zStringBuffer.getStringc             C   s   t  |  j  S)N)r2   rB   )r$   r   r   r   r5   h  s    zStringBuffer.__str__)
r%   r&   r'   r#   r   r   r1   r   r   r5   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)cinr4   )r$   r   r   r   r   r#   x  s    	zReader.__init__c             C   s   | d k s t   t |  j  r. |  j j   S|  j j d  } | sY t |  d k r] | St |  } | j   x | D] } |  j j |  qz W|  j d  S)Nr   )	r   r.   r4   r   r   r   r   reverser1   )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 d1 d2   Z d3 d4   Z d5 d6   Z d7 d8   Z d9 d:   Z  d; d<   Z! d= d>   Z" d? d@   Z# dA dB   Z$ d dC dD  Z% dE dF   Z& dG dH   Z' dI dJ   Z( dK dL   Z) dM dN   Z* dO dP   Z+ dQ dR   Z, dS dT   Z- dU dV   Z. dW dX   Z/ dY dZ   Z0 d[ d\   Z1 d] d^   Z2 d_ d`   Z3 da db   Z4 dc dd   Z5 de df   Z6 dg dh   Z7 di dj   Z8 dk dl dm  Z9 dn do   Z:   S)pCharScannerr   r
   c                s   t  t |   j   d |  _ d  |  _ d |  _ d |  _ d  |  _ d |  _ d  |  _	 d |  _
 d |  _ t   |  _ t |   |  _ |  j t  |  j |   d  S)NT   Fr   )r   r   r#   saveConsumedInput
tokenClasscaseSensitivecaseSensitiveLiteralsliteralstabsize_returnTokencommitToPath
traceDepthr   rB   hashZ
hashStringsetTokenObjectClassr   setInput)r$   rz   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 | j  d  S| d } t |  ri t | d  } |  j |  |  j |  d  St | t  r |  j t |   d  St | t	  r | |  _
 d  St | t  r |  j t	 |   d  SyA | j rt |  } t |  } t	 |  } | |  _
 n  d  SWn Yn Xt |   d  S)Nr   rb)sysr  stdinr   openr~   r   filer   r   
inputStater   r   r   r<   )r$   rz   r  arg1frdcb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    |  j j |  d  S)N)	resetTextrB   r1   )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   rE     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)r2   rB   )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   s7   |  j  j j |  } |  j s3 | j j |  } n  | S)N)r
  r   r   r   r   lower)r$   rd   r`   r   r   r   r   '  s    	zCharScanner.LAc          	   C   su   yV |  j  s t  |  j    } | j |  | j |  j j  | j |  j j  | SWn |  j d  Yn Xt	 j
 S)Nzunable to create new token)r   r   r   r   r
  r   r   r   panicr;   badToken)r$   ry   r   r   r   r   	makeToken.  s    zCharScanner.makeTokenc             C   s   |  j  j j   S)N)r
  r   r   )r$   r   r   r   r   ;  s    zCharScanner.markc             C   sG   | j  |  j d   r% |  j   n t |  j d  | d |    d  S)Nr   F)r   r   r   rN   )r$   r   r   r   r   _match_bitset>  s    zCharScanner._match_bitsetc             C   sU   xN | D]F } |  j  d  | k r/ |  j   q t |  j  d  | d |    q Wd  S)Nr   F)r   r   rN   )r$   r   r`   r   r   r   _match_stringD  s    zCharScanner._match_stringc             C   s*   t  |  r |  j |  S|  j |  Sd  S)N)r   r#  r"  )r$   r   r   r   r   matchK  s    zCharScanner.matchc             C   sD   |  j  d  | k r" |  j   n t |  j  d  | d |    d  S)Nr   T)r   r   rN   )r$   r`   r   r   r   matchNotQ  s    zCharScanner.matchNotc             C   s\   |  j  d  | k  s* |  j  d  | k rN t |  j  d  | | d |    n
 |  j   d  S)Nr   F)r   rN   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   s=   |  j    } | d |  j d |  j d } |  j |  d  S)Nr   )r>   r   r   )r$   r`   Zncr   r   r   taba  s     zCharScanner.tabc             C   s   t  d |  t j d  d  S)NzCharScanner: panic: r   )r   r  exit)r$   r   r   r   r   r  f  s    zCharScanner.panicc             C   sE   |  j    s# t d t |   n t |  j    d t |   d  S)Nzerror: z	: error: )rE   r   r2   )r$   r   r   r   r   reportErrorj  s    zCharScanner.reportErrorc             C   sE   |  j    s# t d t |   n t |  j    d t |   d  S)Nz	warning: z: warning: )rE   r   r2   )r$   r   r   r   r   reportWarningp  s    zCharScanner.reportWarningc             C   s8   |  j  j d  |  j j |  j _ |  j j |  j _ d  S)Nr   )rB   r   r
  r-   r   r,   r   )r$   r   r   r   r  v  s    zCharScanner.resetTextc             C   s   |  j  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   s   | s
 d  St  | t  s t  | j   } | t t t t g k rG d  S| j   } | s] d  St	 |  so t  |  j
 | |  } | j |  | S)N)r   r;   r   r   r   rm   r{   r   r?   r   testLiteralsTabler   )r$   r8   _typeZ_textr   r   r   testForLiteral  s    zCharScanner.testForLiteralc          	   G   s   t  | d  r' | d } | d } n |  j j   } | d } t | t  sg t | t  sg t  n  t |  j t  s t  y/ |  j s | j	 j
 |  } n  |  j | } Wn Yn X| S)Nr   r   )r   rB   r   r   rh   r   r   dictr   r   r  )r$   r   r   rd   r   r   r   r0    s    

	zCharScanner.testLiteralsTablec             C   s   | j  j   S)N)r   r  )r$   r`   r   r   r   toLower  s    zCharScanner.toLowerc             C   s   t  d |  j  d  S)Nr0   )r   r   )r$   r   r   r   traceIndent  s    zCharScanner.traceIndentc             C   s:   |  j  d 7_  |  j   t d | |  j d  f  d  S)Nr   z> lexer %s c== %s)r   r5  r   r   )r$   rnamer   r   r   traceIn  s    
zCharScanner.traceInc             C   s:   |  j    t d | |  j d  f  |  j d 8_ d  S)Nz< lexer %s c== %sr   )r5  r   r   r   )r$   r6  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 j |  n  d  S)N)r   rB   r1   )r$   r`   r   r   r   r1     s    	zCharScanner.appendc             C   s   |  j  j j   d  S)N)r
  r   r   )r$   r   r   r   r     s    zCharScanner.commitc             C   s   |  j  j s |  j d  } |  j r4 |  j |  n" |  j  j j d  } |  j |  | ru | d k ru |  j   q |  j  j d 7_ n  |  j  j j   d  S)Nr   r^   )	r
  r   r   r   r1   r   r*  r-   r   )r$   r`   r   r   r   r     s    	zCharScanner.consumec             C   s?   x8 |  j  d  t k r: |  j  d  | k r: |  j   q Wd  S)Nr   )r   EOF_CHARr   )r$   r`   r   r   r   consumeUntil_char  s    -zCharScanner.consumeUntil_charc             C   sF   x? |  j  d  t k rA |  j j |  j  d   rA |  j   q Wd  S)Nr   )r   r:  rZ   r   r   )r$   Zbitsetr   r   r   consumeUntil_bitset  s    4zCharScanner.consumeUntil_bitsetc             C   s6   | s% |  j    |  j t  |  _ n |  j |  d  S)N)r9  r!  r{   r   raise_NoViableAlt)r$   la1r   r   r   default  s    
zCharScanner.defaultc             G   s   | s& |  j    |  j t  |  _ d  S| sB |  j   t    nt |  j   y" | d } | | d d     Wn< t k
 r } z |  j |  |  j   WYd  d  } ~ Xn Xt    d  S)Nr   r   )	r9  r!  r{   r   r   rx   r   r(   r,  )r$   r>  r   funcr   r   r   r   filterdefault  s    



zCharScanner.filterdefaultNc             C   sU   | s |  j  d  } n  |  j   } |  j   } |  j   } t | | | |   d  S)Nr   )r   rE   r=   r>   rC   )r$   r>  fnamer,   rA   r   r   r   r=    s     zCharScanner.raise_NoViableAltc             C   sX   | rK | rK | t  k rK |  j j |  } |  j |  } | j |  n  | |  _ | S)N)r   rB   r   r!  r   r   )r$   _createZ_tokenZ_ttype_offsetr   r   r   r   set_return_token  s    	zCharScanner.set_return_token);r%   r&   r'   ZNO_CHARr:  r#   r   r  r  r  r  r  r~   r   r   r  r  r>   r   r  rE   r  r  r  r=   r?   r  r   r!  r   r"  r#  r$  r%  r(  r)  r*  r  r,  r-  r  r   r  r2  r0  r4  r5  r7  r8  r9  r1   r   r   r;  r<  r?  rA  r=  rE  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  St d   d  S)Nz/CharScannerIterator requires CharScanner object)r   r   r   r<   )r$   r   r   r   r   r#     s    	zCharScannerIterator.__init__c             C   sA   |  j  s t  |  j  j   } | s1 | j   r= t    n  | S)N)r   r   r   r|   r   )r$   r   r   r   r   r     s
    zCharScannerIterator.nextN)r%   r&   r'   r#   r   r   r   r   r   r    s   r  c               @   s   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)rW   @   r	   rP   r   Nc             C   s   | s# t  j |  t d  g  d  St | t  rO t  j |  t |  g  d  St | t  ru t  j |  | g  d  St | t  s t d d   n  x7 | D]/ } t | t  s t |  d d |   q q W| |  _ d  S)Nr   z"BitSet requires integer, long, or zlist argumentzList argument item is znot a long: %s)	rW   r#   r   r   rh   r   r<   r   data)r$   rG  r   r   r   r   r#   /  s"    	zBitSet.__init__c             C   s   t  |  j  t j } d } x` t d |  D]O } |  j |  rN | d 7} n
 | d 7} | d d s, | d | d 7} q, q, W| S)Nr
   r   1or   
   z|%s|)r.   rG  rW   BITSr   at)r$   bitsr   rd   r   r   r   r5   B  s    
zBitSet.__str__c             C   s
   t  |   S)N)r2   )r$   r   r   r   r6   N  s    zBitSet.__repr__c             C   s   | s
 d St  | t  r& |  j |  St |  sH t |  d |   n  t |  d k rp t |  d |   n  t |  } |  j |  S)NFzchar or unichar expected: %sr   zchar expected: %s)r   rh   rL  r   r<   r.   rK   )r$   r   r   r   r   r   r   Q  s    zBitSet.memberc             C   s   | t  j ?S)N)rW   LOG_BITS)r$   bitr   r   r   
wordNumberg  s    zBitSet.wordNumberc             C   s   | t  j @} d | >S)Nr   )rW   MOD_MASK)r$   rO  r.  r   r   r   bitMaskj  s    zBitSet.bitMaskTc             C   s   |  j  |  } |  j |  } | t |  j  k r | t |  j  d } x' t d |  D] } |  j j d  qZ Wt |  j  | d k s t  n  | r |  j | | O<n |  j | | M<d  S)Nr   r   )rP  rR  r.   rG  r   r1   r   )r$   rO  onrd   maskr   r   r   r   r   rZ   n  s    "z
BitSet.setc             C   s   |  j  | |  d  S)N)rZ   )r$   rO  offr   r   r   rU    s    z
BitSet.offc             C   s3   |  j  |  } |  j | } |  j |  } | | @S)N)rP  rG  rR  )r$   rO  rd   vr   r   r   r   rL    s    z	BitSet.at)r%   r&   r'   rK  ZNIBBLErN  rQ  r#   r5   r6   r   rP  rR  rZ   r   rU  rL  r   r   r   r   rW   )  s   
rW   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    rX  c             C   s   t  d |  j   d  S)Nz1%s is only valid if parser is built for debugging)RuntimeErrorrW  )r@  r   r   r   
runtime_ex  s    rZ  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 S)TokenBufferc             C   s4   | |  _  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 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   sJ   |  j    x9 |  j j   | |  j k  rE |  j j |  j j    q Wd  S)N)r   r   r   r   r1   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 j |  j | d  j S)Nr   )r   r   r   r   ry   )r$   r   r   r   r   r     s    zTokenBuffer.LAc             C   s(   |  j  |  |  j j |  j | d  S)Nr   )r   r   r   r   )r$   r   r   r   r   LT  s    zTokenBuffer.LTc             C   s    |  j    |  j d 7_ |  j S)Nr   )r   r   r   )r$   r   r   r   r     s    
zTokenBuffer.markc             C   s&   |  j    | |  _ |  j d 8_ d  S)Nr   )r   r   r   )r$   r   r   r   r   r     s    
	zTokenBuffer.rewindc             C   sW   xP |  j  d k rR |  j d k r3 |  j d 7_ n |  j j   |  j  d 8_  q Wd  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   r5     s    zTokenBuffer.__str__c             C   s
   t  |   S)N)r2   )r$   r   r   r   r6     s    zTokenBuffer.__repr__N)r%   r&   r'   r#   r   r   r   r\  r   r]  r   r   r   r5   r6   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  |  _  |  j   d  S)N)r   r   )r$   r   r   r   r#     s    	zParserSharedInputState.__init__c             C   s/   d |  _  d  |  _ |  j r+ |  j j   n  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   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 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 d1 d2   Z d3 d4   Z d5 d6   Z d7 d8   Z d9 d:   Z d; d<   Z  d= d>   Z! d? d@   Z" dA dB   Z# dC dD   Z$ dE dF   Z% dG dH   Z& dI dJ   Z' dK dL   Z( dM dN   Z) dO dP   Z* dQ dR   Z+ dS dT   Z, dU dV   Z- dW dX   Z. dY dZ   Z/ d[ d\   Z0 d] d^   Z1 d_ d`   Z2 da db   Z3 dc dd   Z4 de df   Z5 dg S)hParserc             O   sx   d  |  _  d  |  _ d  |  _ i  |  _ d |  _ d |  _ | sL t   |  _ d  S| d } t | t  sk t	  | |  _ d  S)NFr   )
rf   	returnAST
astFactorytokenTypeToASTClassMapignoreInvalidDebugCallsr   r^  r
  r   r   )r$   r   r  arg0r   r   r   r#     s    						
	zParser.__init__c             C   s   |  j  S)N)rb  )r$   r   r   r   getTokenTypeToASTClassMap   s    z Parser.getTokenTypeToASTClassMapc             C   s   |  j  s t |  j  n  d  S)N)rc  rX  addMessageListener)r$   lr   r   r   rf    s    	zParser.addMessageListenerc             C   s   |  j  s t |  j  n  d  S)N)rc  rX  addParserListener)r$   rg  r   r   r   rh    s    	zParser.addParserListenerc             C   s   |  j  s t |  j  n  d  S)N)rc  rX  addParserMatchListener)r$   rg  r   r   r   ri    s    	zParser.addParserMatchListenerc             C   s   |  j  s t |  j  n  d  S)N)rc  rX  addParserTokenListener)r$   rg  r   r   r   rj    s    	zParser.addParserTokenListenerc             C   s   |  j  s t |  j  n  d  S)N)rc  rX  addSemanticPredicateListener)r$   rg  r   r   r   rk    s    	z#Parser.addSemanticPredicateListenerc             C   s   |  j  s t |  j  n  d  S)N)rc  rX  addSyntacticPredicateListener)r$   rg  r   r   r   rl    s    	z$Parser.addSyntacticPredicateListenerc             C   s   |  j  s t |  j  n  d  S)N)rc  rX  addTraceListener)r$   rg  r   r   r   rm    s    	zParser.addTraceListenerc             C   s   t     d  S)N)r   )r$   r   r   r   r      s    zParser.consumec             C   s?   x8 |  j  d  t k r: |  j  d  | k r: |  j   q Wd  S)Nr   )r   r{   r   )r$   rn   r   r   r   _consumeUntil_type#  s    -zParser._consumeUntil_typec             C   sC   x< |  j  d  t k r> | j |  j  d   r> |  j   q Wd  S)Nr   )r   r{   r   r   )r$   rZ   r   r   r   _consumeUntil_bitset'  s    1zParser._consumeUntil_bitsetc             C   s0   t  | t  r |  j |  n |  j |  d  S)N)r   rh   rn  ro  )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)r`  )r$   r   r   r   getAST4  s    zParser.getASTc             C   s   |  j  S)N)ra  )r$   r   r   r   getASTFactory7  s    zParser.getASTFactoryc             C   s
   |  j  j S)N)r
  r   )r$   r   r   r   rE   :  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)rf   )r$   r   r   r   r   getTokenNameC  s    zParser.getTokenNamec             C   s   |  j  S)N)rf   )r$   r   r   r   getTokenNamesF  s    zParser.getTokenNamesc             C   s   |  j  S)N)false)r$   r   r   r   isDebugModeI  s    zParser.isDebugModec             C   s   t     d  S)N)r   )r$   rd   r   r   r   r   L  s    z	Parser.LAc             C   s   t     d  S)N)r   )r$   rd   r   r   r   r]  O  s    z	Parser.LTc             C   s   |  j  j j   S)N)r
  r   r   )r$   r   r   r   r   R  s    zParser.markc             C   sP   |  j  d  | k rB t |  j |  j d  | d |  j     n
 |  j   d  S)Nr   F)r   re   rf   r]  rE   r   )r$   r   r   r   r   
_match_intU  s    *zParser._match_intc             C   sS   | j  |  j d   sE t |  j |  j d  | d |  j     n
 |  j   d  S)Nr   F)r   r   re   rf   r]  rE   r   )r$   r   r   r   r   
_match_set\  s    *zParser._match_setc             C   sP   t  | t  r  |  j |  d  St  | t  r@ |  j |  d  St d   d  S)Nz0Parser.match requires integer ot BitSet argument)r   rh   rx  rW   ry  r<   )r$   rZ   r   r   r   r$  c  s    zParser.matchc             C   sP   |  j  d  | k rB t |  j |  j d  | d |  j     n
 |  j   d  S)Nr   T)r   re   rf   r]  rE   r   )r$   r   r   r   r   r%  l  s    *zParser.matchNotc             C   s   |  j  s t |  j  n  d  S)N)rc  rZ  removeMessageListener)r$   rg  r   r   r   rz  s  s    	zParser.removeMessageListenerc             C   s   |  j  s t |  j  n  d  S)N)rc  rZ  removeParserListener)r$   rg  r   r   r   r{  w  s    	zParser.removeParserListenerc             C   s   |  j  s t |  j  n  d  S)N)rc  rZ  removeParserMatchListener)r$   rg  r   r   r   r|  {  s    	z Parser.removeParserMatchListenerc             C   s   |  j  s t |  j  n  d  S)N)rc  rZ  removeParserTokenListener)r$   rg  r   r   r   r}    s    	z Parser.removeParserTokenListenerc             C   s   |  j  s t |  j  n  d  S)N)rc  rZ  removeSemanticPredicateListener)r$   rg  r   r   r   r~    s    	z&Parser.removeSemanticPredicateListenerc             C   s   |  j  s t |  j  n  d  S)N)rc  rZ   removeSyntacticPredicateListener)r$   rg  r   r   r   r    s    	z'Parser.removeSyntacticPredicateListenerc             C   s   |  j  s t |  j  n  d  S)N)rc  rZ  removeTraceListener)r$   rg  r   r   r   r    s    	zParser.removeTraceListenerc             C   s   d } |  j    } | r) d | | } n  t | t  r | j   } | j   } | j   } | d } t | | | | f d t j n t | t	 |  d t j d  S)Nzsyntax error:z%s:z/unexpected symbol at line %s (column %s) : "%s"r	  )
rE   r   r;   r>   r=   r?   r   r  stderrr2   )r$   r   r   r  r,   rA   rB   r   r   r   r,    s    
#zParser.reportErrorc             C   sG   |  j    } | r/ t d | t |  f  n t d t |   d  S)Nz%s:warning: %szwarning: %s)rE   r   r2   )r$   r   r  r   r   r   r-    s    zParser.reportWarningc             C   s   |  j  j j |  d  S)N)r
  r   r   )r$   r.  r   r   r   r     s    zParser.rewindc             C   s   | |  _  d  S)N)ra  )r$   r  r   r   r   setASTFactory  s    zParser.setASTFactoryc             C   s   |  j  j |  d  S)N)ra  setASTNodeType)r$   r/  r   r   r   setASTNodeClass  s    zParser.setASTNodeClassc             C   s   |  j  |  d  S)N)r  )r$   nodeTyper   r   r   r    s    zParser.setASTNodeTypec             C   s   |  j  s t |  j  n  d  S)N)rc  rZ  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)rc  )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)Nr0   )r   r   )r$   r   r   r   r5    s    zParser.traceIndentc             C   s#   |  j  d 7_  |  j d |  d  S)Nr   z> )r   trace)r$   r6  r   r   r   r7    s    zParser.traceInc             C   s#   |  j  d |  |  j d 8_ d  S)Nz< r   )r  r   )r$   r6  r   r   r   r8    s    zParser.traceOutc             C   sb   | s
 d  S| j  s | | _  n, | j s; | j  j |  n | j j |  | | _ | j   d  S)N)rootchildsetFirstChildsetNextSiblingadvanceChildToEnd)r$   
currentASTr  r   r   r   addASTChild  s    			zParser.addASTChildc             C   s<   | r8 | j  | j  | j | _ | j   | | _ n  d  S)N)addChildr  r  r  )r$   r  r  r   r   r   makeASTRoot  s
    
zParser.makeASTRootN)6r%   r&   r'   r#   re  rf  rh  ri  rj  rk  rl  rm  r   rn  ro  rp  rq  rr  rs  rE   r  r  rt  ru  rw  r   r]  r   rx  ry  r$  r%  rz  r{  r|  r}  r~  r  r  r,  r-  r   r  r  r  r  r~   r  r  r5  r7  r8  r  r  r   r   r   r   r_    sf   	r_  c                   sv   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
   S)	LLkParserc          	      s-  y | d } Wn d } Yn Xt  | t  rN t t |   j   | |  _ d  St  | t  r t t |   j |  |  j d |  d  St  | t  r t t |   j   |  j	 |  |  j d |  d  St  | t
  rt t |   j   t |  } |  j	 |  |  j d |  d  St d d   d  S)Nr   r   zLLkParser requires integer, z/ParserSharedInputStream or TokenStream argument)r   rh   r   r  r#   r   r^  set_kr[  r  r   r<   )r$   r   r  r  ZtokenBuf)r   r   r   r#     s2    	zLLkParser.__init__c             C   s   |  j  j j   d  S)N)r
  r   r   )r$   r   r   r   r     s    zLLkParser.consumec             C   s   |  j  j j |  S)N)r
  r   r   )r$   rd   r   r   r   r   
  s    zLLkParser.LAc             C   s   |  j  j j |  S)N)r
  r   r]  )r$   rd   r   r   r   r]    s    zLLkParser.LTc          	   G   s)   y | | |  _  Wn d |  _  Yn Xd  S)Nr   )r   )r$   r   r   r   r   r   r    s    zLLkParser.set_kc             C   s   t  t |    |  j   d } |  j j d k r; d } n  t  | | |  xx t d |  j d  D]` } | d k r t  d  n  |  j |  r |  j |  j   } n d } t  d | | f  qd Wt  d  d  S)	Nr
   r   z [guessing]r   z, nullzLA(%s) == %sr\   )	r   ry   r5  r
  r   r   r   r]  r?   )r$   eer6  guessrd   rV  r   r   r   r    s    
	zLLkParser.tracec             C   s#   |  j  d 7_  |  j d |  d  S)Nr   z> )r   r  )r$   r6  r   r   r   r7  '  s    zLLkParser.traceInc             C   s#   |  j  d |  |  j d 8_ d  S)Nz< r   )r  r   )r$   r6  r   r   r   r8  +  s    zLLkParser.traceOut)r%   r&   r'   r#   r   r   r]  r  r  r7  r8  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_retTreerf   r`  
ASTFactoryra  r   )r$   r   r  r   r   r   r#   =  s    			zTreeParser.__init__c             C   s   |  j  S)N)r`  )r$   r   r   r   rr  E  s    zTreeParser.getASTc             C   s   |  j  S)N)ra  )r$   r   r   r   rs  H  s    zTreeParser.getASTFactoryc             C   s   |  j  | S)N)rf   )r$   r   r   r   r   rt  K  s    zTreeParser.getTokenNamec             C   s   |  j  S)N)rf   )r$   r   r   r   ru  N  s    zTreeParser.getTokenNamesc             C   s   t  | t  s$ t  | t  s$ t  | s7 | t k rU t |  j   | | d   n  t  | t  r | j   | k r t |  j   | | d   n  t  | t  r | j | j  r t |  j   | | d   n  d  S)NF)	r   rh   rW   r   r@   re   ru  r   r   )r$   r   rZ   r   r   r   r$  Q  s    $!"zTreeParser.matchc             C   sG   | s% | t  k s% | j   | k rC t |  j   | | d   n  d  S)NT)r@   r   re   ru  )r$   r   ttyper   r   r   r%  \  s    %zTreeParser.matchNotc             C   s   t  d | d t j d  S)Nzerror:r	  )r   r  r  )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)ra  )r$   r  r   r   r   r  f  s    zTreeParser.setASTFactoryc             C   s   |  j  |  d  S)N)r  )r$   r  r   r   r   r  i  s    zTreeParser.setASTNodeTypec             C   s   |  j  j |  d  S)N)ra  r  )r$   r  r   r   r   r  l  s    zTreeParser.setASTNodeClassc             C   s   t  d |  j  d  S)Nr0   )r   r   )r$   r   r   r   r5  o  s    zTreeParser.traceIndentc             C   se   |  j  d 7_  |  j   t d | d t | t |  d  d t |  j j d k d d   d  S)	Nr   z> (r  )r   z
[guessing]r
   )r   r5  r   r   r2   r
  r   )r$   r6  r   r   r   r   r7  r  s
    
%zTreeParser.traceInc             C   se   |  j    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   )r5  r   r   r2   r
  r   r   )r$   r6  r   r   r   r   r8  y  s
    
% zTreeParser.traceOutc             C   sb   | s
 d  S| j  s | | _  n, | j s; | j  j |  n | j j |  | | _ | j   d  S)N)r  r  r  r  r  )r$   r  r  r   r   r   r    s    			zTreeParser.addASTChildc             C   s<   | r8 | j  | j  | j | _ | j   | | _ n  d  S)N)r  r  r  r  )r$   r  r  r   r   r   r    s
    
zTreeParser.makeASTRootN)r%   r&   r'   r#   rr  rs  rt  ru  r$  r%  r,  r-  r  r  r  r5  r7  r8  r  r  r   r   r   r   r  ;  s"   r  c             C   s&   |  r" x |  j  r |  j  }  q	 Wn  |  S)N)right)astr   r   r   	rightmost  s    r  c             C   s   x] |  r_ | r_ |  j  |  s" d St |  j   | j   |  sD d S|  j   }  | j   } q Wt | | |  ou |  } | S)NF)equalscmptreegetFirstChildgetNextSiblingr   )r   r   partialr   r   r   r   r    s    r  c               @   s6  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 d1 S)2r:   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$   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)rm   )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$   rB   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   |  j    d  S)N)r?   )r$   r   r   r   r     s    zAST.toStringc             C   s
   |  j    S)N)r?   )r$   r   r   r   toStringList  s    zAST.toStringListc             C   s
   |  j    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   r5   r  r  r   r   r   r   r:     s2   r:   c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)ASTNULLTypec             C   s   t  j |   d  S)N)r:   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               @   sr  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 d1 d2   Z d3 d4   Z d5 d6   Z e Z  d7 d8   Z! d S)9BaseASTFNc             C   s   d  |  _  d  |  _ d  S)N)downr  )r$   r   r   r   r#   	  s    	zBaseAST.__init__c             C   sG   | rC t  |  j  } | r' | | _ qC |  j s7 t  | |  _ n  d  S)N)r  r  r  r   )r$   r9   r   r   r   r   r  	  s    zBaseAST.addChildc             C   s3   |  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   s   |  } x | r | o! | j  |  } | r: | j |  n, | oM | j |  } | rf | j |  n  | j   r | j   j | | |  n  | j   } q	 Wd  S)N)r  r1   r  r  doWorkForFindAllr  )r$   rV  targetZpartialMatchZsiblingr&  r'  r   r   r   r  0	  s    	zBaseAST.doWorkForFindAllc             C   s8   | s
 d S|  j    | j    k o7 |  j   | j   k S)NF)r?   r   )r$   r   r   r   r   r  C	  s    zBaseAST.equalsc             C   s   t  |  | d d S)Nr  F)r  )r$   r   r   r   r   r  K	  s    zBaseAST.equalsListc             C   s   t  |  | d d S)Nr  T)r  )r$   r   r   r   r   r  Q	  s    zBaseAST.equalsListPartialc             C   s.   |  j  |  o- t |  j   | j   d d S)Nr  F)r  r  r  )r$   r   r   r   r   r  W	  s    zBaseAST.equalsTreec             C   s8   | s
 d S|  j  |  o7 t |  j   | j   d d S)NTr  )r  r  r  )r$   r   r   r   r   r  ^	  s    zBaseAST.equalsTreePartialc             C   s'   g  } | s d  S|  j  | | d  | S)NF)r  )r$   r  rootsr   r   r   r  g	  s
    zBaseAST.findAllc             C   s'   g  } | s d  S|  j  | | 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$   rB   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verboseStringConversionrf   r   r   r   setVerboseStringConversion	  s    z"BaseAST.setVerboseStringConversionc               C   s   t  S)N)rf   r   r   r   r   ru  	  s    zBaseAST.getTokenNamesc             C   s
   |  j    S)N)r?   )r$   r   r   r   r   	  s    zBaseAST.toStringc             C   s5   |  j    } |  j   } | r1 | | j   7} n  | S)N)r  r  r  )r$   tsZsibr   r   r   r  	  s
    zBaseAST.toStringListc             C   s`   d } |  j    } | r% | d 7} n  | d |  j   7} | r\ | | j   7} | d 7} n  | S)Nr
   z (r0   z ))r  r   r  )r$   r  Zkidr   r   r   r  	  s    zBaseAST.toStringTree)"r%   r&   r'   r  rf   r#   r  r  r  r  r  r  r  r  r  r  r  r  r?   r   r=   r>   r  r  r  r   r   r  staticmethodru  r   r  r5   r  r   r   r   r   r  	  s>   		r  c                   sy   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
   S)	CommonASTNc                sH   t  t |   j   t |  _ d |  _ d |  _ d |  _ |  j |  d  S)Nz	<no text>r   )	r   r  r#   rm   r  rB   r,   r-   r  )r$   r8   )r   r   r   r#   	  s    				zCommonAST.__init__c             C   s   |  j  S)N)rB   )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  rK | d } |  j |  |  j |  d  St  | t  si t  | t  r |  j | j    |  j | j    | j   |  _	 | j
   |  _ d  Sd  S)Nr   r   )r   rh   r   r   r:   r;   r?   r   r=   r,   r>   r-   )r$   r   rd  r  r   r   r   r  	  s    

zCommonAST.initializec             C   s   t  |  s t  | |  _ d  S)N)r   r   rB   )r$   Ztext_r   r   r   r   	  s    zCommonAST.setTextc             C   s"   t  | t  s t  | |  _ d  S)N)r   rh   r   r  )r$   Zttype_r   r   r   r   
  s    zCommonAST.setType)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 |  |  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   so   t  j |  |  | rk t | d t  rk t | d t  sB t  | d j   |  _ | d j   |  _	 n  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               @   sL   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   s8   |  j  r4 x( |  j  j   r0 |  j  j   |  _  q Wn  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$   tmpr   r   r   copy.
  s    	zASTPair.copyc             C   sF   t  t d |  j j    } t  t d |  j 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   r5   r6   r   r   r   r   r  "
  s   r  c               @   s   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 |  j  t  S| d } d  } d  } y | d } | d } Wn Yn Xt | t  r | r |  j |  } |  j  |  } | r | j | t | | d   n  | St | t  r | r |  j  |  } | r | j | |  n  | St | t  r(|  j  | j    } | r$| j |  n  | St | t	  r| r| j   } t | t  s_t
  |  j  |  } | r| j |  n  | St | t	  r| rt | t  st
  t | t  st
  | |  } | rt | t  st
  | St | t  r#|   } t | t  st
  | Sd  S)Nr   r   r)   r
   )createrm   r   rh   getASTNodeTyper  r   r:   r   r;   r   ry   
issubclass)r$   r   rd  r  Zarg2r`   r   r  r   r   r   r  F
  sV    

	zASTFactory.createc             C   sA   | s
 d  St  | t  s t  t | t  s4 t  | |  _ d  S)N)r   ry   r   r  r:   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   re  
  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 | d | j d  S)Nr   r	  )r  r   r  )r$   r   r  r   r   r   r   
  s    zASTFactory.errorc          	   C   sr   |  j  s i  |  _  n  | s7 y |  j  | =Wqn Yqn Xn7 t | t  sL t  t | t  sa t  | |  j  | <d S)zK
        Specify a mapping between a token type and a (AST) class.
        N)r  r   ry   r   r  r:   )r$   rn   r  r   r   r   setTokenTypeASTNodeType
  s    	z"ASTFactory.setTokenTypeASTNodeTypec          	   C   sF   |  j  r2 y |  j  | } | r# | SWq2 Yq2 Xn  |  j rB |  j St 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$   rn   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)r%   r&   r'   r#   r  r  r  r  re  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  SxE t  d t |    D]. } |  | } | r  t | t  sN t  q  q  W|  d } d  } | rx | j d   n  x t  d t |    D] } |  | s q n  | s |  | } } nC | s | j |  |  | j   } n | j |  |  | j   } x | j   r| j   } qWq W| S)Nr   r   )	r   r.   r   r:   r   r  r  r  r  )Znodesrd   r9   r  tailr   r   r   make
  s.    


r  c             C   sB   |  s
 d  S| r% | j  |  j  } n t d   | j |   | S)Nz)dup function requires ASTFactory argument)r  r   r<   r  )r   factoryZdup_tr   r   r   r    s    r  c             C   sT   t  |  |  } | } x8 |  rO |  j   }  | j t  |  |   | j   } q W| S)N)r  r  r  )r   r  resultntr   r   r   r    s    	r  c             C   s8   t  |  |  } |  r4 | j t |  j   |   n  | S)N)r  r  r  r  )r   r  r  r   r   r   r  $  s    r  )X
__future__r   r  compatr   r   r   r   r   rm   r{   r   r   r   r:  r   r   r   r   r    r"   r!   r(   r7   rC   rM   rN   re   rp   rq   rs   ru   rv   rw   rx   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  rW   rX  rZ  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   <module>   s   ,"	#qsN
	?	
!
	(
U16R> ~d	DOaP;	
