o
    狏aϨ                  
   @   s:  d Z dZddlZddlZddlZddlZddlZddlZzejej	fZ
W n ey1   eefZ
Y nw e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Zdd Zdd Zdd Zdd Zdd Zdd ZG dd deZdddddeejddddf
dd Z d%d!d"Z!d#d$ Z"e"Z#dS )&z3.11z3.10    Nz^[a-zA-Z0-9_]+$c                   @   s   e Zd Zdd ZdS )LexErrorc                 C   s   |f| _ || _d S N)argstext)selfmessages r	   )/usr/lib/python3/dist-packages/ply/lex.py__init__:   s   
zLexError.__init__N)__name__
__module____qualname__r   r	   r	   r	   r
   r   9   s    r   c                   @      e Zd Zdd Zdd ZdS )LexTokenc                 C   s   d| j | j| j| jf S )NzLexToken(%s,%r,%d,%d))typevaluelinenolexposr   r	   r	   r
   __str__A      zLexToken.__str__c                 C   s   t | S r   )strr   r	   r	   r
   __repr__D   s   zLexToken.__repr__N)r   r   r   r   r   r	   r	   r	   r
   r   @       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 )
	PlyLoggerc                 C   s
   || _ d S r   f)r   r   r	   r	   r
   r   L   s   
zPlyLogger.__init__c                 O   s   | j || d  d S )N
r   writer   msgr   kwargsr	   r	   r
   criticalO   r   zPlyLogger.criticalc                 O      | j d||  d  d S )Nz	WARNING: r   r   r!   r	   r	   r
   warningR      zPlyLogger.warningc                 O   r%   )NzERROR: r   r   r!   r	   r	   r
   errorU   r'   zPlyLogger.errorN)	r   r   r   r   r$   r&   r(   infodebugr	   r	   r	   r
   r   K   s    r   c                   @   r   )
NullLoggerc                 C      | S r   r	   )r   namer	   r	   r
   __getattribute__^      zNullLogger.__getattribute__c                 O   r,   r   r	   )r   r   r#   r	   r	   r
   __call__a   r/   zNullLogger.__call__N)r   r   r   r.   r0   r	   r	   r	   r
   r+   ]   r   r+   c                   @   s|   e Zd Zdd ZdddZdddZd	d
 Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZeZdS )Lexerc                 C   s   d | _ d | _i | _i | _i | _d| _g | _d | _i | _i | _	i | _
d| _d | _d| _d| _d | _d | _d | _d| _d| _d | _d| _d| _d S )NINITIALr       F)lexre	lexretext
lexstaterelexstateretextlexstaterenameslexstatelexstatestacklexstateinfolexstateignorelexstateerrorflexstateeoff
lexreflagslexdatar   lexlen	lexerrorflexeoff	lextokens	lexignorelexliterals	lexmoduler   lexoptimizer   r	   r	   r
   r   t   s.   
zLexer.__init__Nc              	   C   s   t  | }|rei }| j D ]:\}}g }|D ]&\}}g }	|D ]}
|
r&|
d s,|	|
 q|	t||
d j|
d f qq|||	f |||< q||_i |_| j D ]\}}t||j|j|< qT||_|S Nr   r4   )copyr7   itemsappendgetattrr   r>   rH   )r   objectcZnewtabkeyZritemZnewreZcreZfindexZ	newfindexr   efr	   r	   r
   clone   s*   

 
zLexer.cloner3   c              	   C   s  t |tjr
td|dd }tj||d }t|d}|	d|t
f  |	dtt  |	dttt| j  |	d	tt| j  |	d
t| j  |	dt| j  i }| j D ](\}}g }	t|| j| | j| D ]\\}
}}}|	|t||f qy|	||< qg|	dt|  |	dt| j  i }| j D ]\}}|r|jnd ||< q|	dt|  i }| j D ]\}}|r|jnd ||< q|	dt|  W d    d S 1 sw   Y  d S )Nz&Won't overwrite existing lextab module.z.pywzJ# %s.py. This file automatically created by PLY (version %s). Don't edit!
z_tabversion   = %s
z_lextokens    = set(%s)
z_lexreflags   = %s
z_lexliterals  = %s
z_lexstateinfo = %s
z_lexstatere   = %s
z_lexstateignore = %s
z_lexstateerrorf = %s
z_lexstateeoff = %s
)
isinstancetypes
ModuleTypeIOErrorsplitospathjoinopenr    __version__repr__tabversion__tuplesortedrE   intr@   rG   r<   r7   rL   zipr8   r9   rM   _funcs_to_namesr=   r>   r   r?   )r   lextab	outputdirZbasetabmodulefilenameZtfZtabre	statenamelretitempatfuncZretextrenamesZtaberrrR   Ztabeofr	   r	   r
   writetab   s8   &
"zLexer.writetabc                 C   sP  t |tjr	|}ntd|  tj| }t|dd}|dv r d}|tkr(td|j	| _
|j| _|j| _| j
t| jB | _|j| _|j| _i | _i | _|j D ](\}}g }g }|D ]\}	}
|t|	|jt|
|f qZ|| j|< || j|< qPi | _|j D ]\}}|| | j|< qi | _|j  D ]\}}|| | j|< q| !d d S )N	import %sZ_tabversionz0.0)z3.3z3.4z3.2zInconsistent PLY versionr2   )"rW   rX   rY   execsysmodulesrN   rb   ImportErrorZ
_lextokensrE   Z_lexreflagsr@   Z_lexliteralsrG   setlextokens_allZ_lexstateinfor<   Z_lexstateignorer=   r7   r8   Z_lexstatererL   rM   recompile_names_to_funcsr>   Z_lexstateerrorfr?   Z_lexstateeoffbegin)r   Ztabfilefdictrh   Zactual_tabversionrk   rl   rm   Ztxtitemrn   Z	func_namerR   r	   r	   r
   readtab   s>   
 
zLexer.readtabc                 C   s8   |d d }t |tstd|| _d| _t|| _d S )Nr4   zExpected a stringr   )rW   StringTypes
ValueErrorrA   r   lenrB   )r   r   rP   r	   r	   r
   input  s   
zLexer.inputc                 C   sd   || j vr	td| j | | _| j| | _| j|d| _| j|d | _	| j
|d | _|| _d S )NzUndefined stater3   )r7   r   r5   r8   r6   r=   getrF   r>   rC   r?   rD   r:   r   stater	   r	   r
   r|     s   

zLexer.beginc                 C   s   | j | j | | d S r   )r;   rM   r:   r|   r   r	   r	   r
   
push_state  s   zLexer.push_statec                 C   s   |  | j  d S r   )r|   r;   popr   r	   r	   r
   	pop_state"  s   zLexer.pop_statec                 C   s   | j S r   )r:   r   r	   r	   r
   current_state(  s   zLexer.current_statec                 C   s   |  j |7  _ d S r   )r   )r   nr	   r	   r
   skip.  s   z
Lexer.skipc                 C   sx  | j }| j}| j}| j}||k r
|| |v r|d7 }q| jD ]v\}}|||}|s,qt }| |_| j	|_	||_ |j
}	||	 \}
|_|
sY|jrS| | _ |  S | } n| }| |_|| _|| _ |
|}|st| j }| j} n| js|j| jvrtd|
jj|
jj|
j|jf ||d  |  S || | jv rt }|| |_| j	|_	|j|_||_ |d | _ |S | jrt }| j|d  |_| j	|_	d|_| |_||_ || _ | |}|| j krtd||  ||d  | j }|sq|S || _ td|| |f ||d  ||k s| jr+t }d|_d|_| j	|_	||_ | |_|| _ | |}|S |d | _ | jd u r:tdd S )	Nr4   z4%s:%d: Rule '%s' returned an unknown token type '%s'r(   z&Scanning error. Illegal character '%s'z"Illegal character '%s' at index %deofr3   z"No input string given with input())r   rB   rF   rA   r5   matchr   groupr   r   	lastindexr   endlexerZlexmatchrI   rx   r   __code__co_filenameco_firstlinenor   rG   rC   rD   RuntimeError)r   r   rB   rF   rA   r5   lexindexfuncmtokiro   Znewtokr	   r	   r
   token8  s   







V

zLexer.tokenc                 C   r,   r   r	   r   r	   r	   r
   __iter__  r/   zLexer.__iter__c                 C   s   |   }|d u r
t|S r   )r   StopIteration)r   tr	   r	   r
   next  s   z
Lexer.nextr   )r3   )r   r   r   r   rS   rq   r~   r   r|   r   r   r   r   r   r   r   __next__r	   r	   r	   r
   r1   s   s    

%/
nr1   c                 C   s   t | d| jS )Nregex)rN   __doc__)ro   r	   r	   r
   
_get_regex  s   r   c                 C   s0   t | }|j }|j|jkr||j |S r   )rt   	_getframe	f_globalsrK   f_localsupdate)Zlevelsr   ldictr	   r	   r
   get_caller_module_dict  s
   

r   c                 C   sF   g }t | |D ]\}}|r|d r|||d f q|| q|S rJ   )rf   rM   )Zfunclistnamelistresultr   r-   r	   r	   r
   rg     s   rg   c                 C   sD   g }| D ]}|r|d r| ||d  |d f q| | q|S rJ   )rM   )r   r}   r   r   r	   r	   r
   r{     s   r{   c                 C   s\  | sg S d | }zft||}d gt|j d  }|d d  }|j D ]=\}}	||d }
t|
t	j
t	jfv rH|
|| f||	< |||	< q'|
d urd|||	< |ddkr\d||	< q'd || f||	< q'||fg|g|gfW S  ty   tt| d }|dkrd}t| d | |||\}}}t| |d  |||\}}}|| || || f Y S w )N|r4   ignore_r   NN   )r^   ry   rz   max
groupindexvaluesrL   r   r   rX   FunctionType
MethodTypefind	Exceptionre   r   _form_master_re)Zrelistreflagsr   toknamesr   r5   r   Zlexindexnamesr   r   Zhandler   Zllistrl   ZlnamesZrlistZrreZrnamesr	   r	   r
   r     s6   


r   c                 C   s   |  d}t|dd  dD ]\}}||vr|dkr nq|dkr*t|d| }nd}d|v r4t|}d||d  }||fS )N_r4   ANY)r2   )r[   	enumeraterc   r^   )r   namespartsr   partstatesZ	tokennamer	   r	   r
   _statetoken  s   
r   c                   @   sf   e Zd ZdddZdd Zdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )LexerReflectNr   c                 C   sR   || _ d | _g | _|| _ddi| _t | _d| _|d u r$tt	j
| _d S || _d S )Nr2   	inclusiveF)r   Z
error_functokensr   	stateinforw   ru   r(   r   rt   stderrlog)r   r   r   r   r	   r	   r
   r   5  s   
"zLexerReflect.__init__c                 C   s$   |    |   |   |   d S r   )
get_tokensget_literals
get_states	get_rulesr   r	   r	   r
   get_all@  s   zLexerReflect.get_allc                 C   s   |    |   |   | jS r   )validate_tokensvalidate_literalsvalidate_rulesr(   r   r	   r	   r
   validate_allG  s   zLexerReflect.validate_allc                 C   sp   | j dd }|s| jd d| _d S t|ttfs&| jd d| _d S |s3| jd d| _d S || _d S )Nr   zNo token list is definedTztokens must be a list or tupleztokens is empty)r   r   r   r(   rW   listrc   r   )r   r   r	   r	   r
   r   N  s   
zLexerReflect.get_tokensc                 C   sP   i }| j D ] }t|s| jd| d| _||v r!| jd| d||< qd S )NzBad token name '%s'TzToken '%s' multiply definedr4   )r   _is_identifierr   r   r(   r&   )r   Z	terminalsr   r	   r	   r
   r   b  s   


zLexerReflect.validate_tokensc                 C   s$   | j dd| _| jsd| _d S d S )Nliteralsr3   )r   r   r   r   r	   r	   r
   r   m  s   
zLexerReflect.get_literalsc                 C   sh   z | j D ]}t|trt|dkr| jdt| d| _qW d S  ty3   | jd d| _Y d S w )Nr4   z.Invalid literal %s. Must be a single characterTzIInvalid literals specification. literals must be a sequence of characters)r   rW   r   r   r   r(   ra   	TypeError)r   rP   r	   r	   r
   r   s  s   
zLexerReflect.validate_literalsc                 C   s   | j dd | _| jrzt| jttfs| jd d| _d S | jD ]Z}t|tr.t|dkr;| jdt	| d| _q!|\}}t|t
sQ| jdt	| d| _q!|dksd|dksd| jd	| d| _q!|| jv rt| jd
| d| _q!|| j|< q!d S d S )Nr   z)states must be defined as a tuple or listTr   zMInvalid state specifier %s. Must be a tuple (statename,'exclusive|inclusive')zState name %s must be a stringr   	exclusivez:State type for state %s must be 'inclusive' or 'exclusive'zState '%s' already defined)r   r   r   rW   rc   r   r   r(   r   ra   r   r   )r   r   r-   Z	statetyper	   r	   r
   r   ~  s4   



zLexerReflect.get_statesc           	      C   s  dd | j D }i | _i | _i | _i | _i | _i | _| jD ]}g | j|< g | j|< qt|dkr;| j	
d d| _
d S |D ]}| j | }t|| j\}}|| j|< t|dr|dkre|D ]}|| j|< q\q=|dkrt|D ]}|| j|< qkq=|d	kr|jj}|jj}| j	
d
|||j d| _
q=|D ]}| j| ||f qq=t|tr|d	kr|D ]}|| j|< qd|v r| j	d| q=|dkr| j	
d| d| _
q=|D ]}| j| ||f qq=| j	
d| d| _
q=| j D ]
}|jdd d q| j D ]}|jdd dd qd S )Nc                 S   s    g | ]}|d d dkr|qS )Nr   Zt_r	   ).0r   r	   r	   r
   
<listcomp>  s     z*LexerReflect.get_rules.<locals>.<listcomp>r   z+No rules of the form t_rulename are definedTr0   r(   r   ignorez,%s:%d: Rule '%s' must be defined as a string\z#%s contains a literal backslash '\''Rule '%s' must be defined as a functionz&%s not defined as a function or stringc                 S   s   | d j jS Nr4   )r   r   xr	   r	   r
   <lambda>      z(LexerReflect.get_rules.<locals>.<lambda>)rQ   c                 S   s   t | d S r   )r   r   r	   r	   r
   r     r   )rQ   reverse)r   r   funcsymstrsymr   errorfeoffr   r   r   r(   r   hasattrr   r   r   r   rM   rW   r   r&   r   sort)	r   Ztsymbolsr   r   r   r   toknamelinefiler	   r	   r
   r     sn   





zLexerReflect.get_rulesc                 C   sj  | j D ]}| j| D ]\}}|jj}|jj}t|}| j| | j	| }t
|tjr0d}nd}|jj}	|	|krH| jd|||j d| _q|	|k rZ| jd|||j d| _qt|sl| jd|||j d| _qz!td|t|f | j}
|
dr| jd	|||j d| _W q tjy } z$| jd
|||j| dt|v r| jd|||j d| _W Y d }~qd }~ww | j| D ]x\}}| j	| }|dkr| jd| d| _q|| jvr|ddk r| jd|| d| _qztd||f | j}
|
dr| jd| d| _W q tjy< } z| jd|| d|v r/| jd| d| _W Y d }~qd }~ww | j| sS| j| sS| jd| d| _| j|d }|r|}|jj}|jj}t|}| j| t
|tjr|d}nd}|jj}	|	|kr| jd|||j d| _|	|k r| jd|||j d| _q| jD ]}| | qd S )Nr   r4   z'%s:%d: Rule '%s' has too many argumentsTz%%s:%d: Rule '%s' requires an argumentz2%s:%d: No regular expression defined for rule '%s'
(?P<%s>%s)r3   z<%s:%d: Regular expression for rule '%s' matches empty stringz3%s:%d: Invalid regular expression for rule '%s'. %s#z6%s:%d. Make sure '#' in rule '%s' is escaped with '\#'r(   r   r   r   z-Rule '%s' defined for an unspecified token %sz5Regular expression for rule '%s' matches empty stringz,Invalid regular expression for rule '%s'. %sz/Make sure '#' in rule '%s' is escaped with '\#'zNo rules defined for state '%s')r   r   r   r   r   inspectZ	getmoduleru   addr   rW   rX   r   co_argcountr   r(   r   r   ry   rz   r   r   r   r   r   r   r   validate_module)r   r   fnamer   r   r   moduler   ZreqargsnargsrP   er-   rZefuncr	   r	   r
   r     s   








zLexerReflect.validate_rulesc                 C   s   z	t |\}}W n
 ty   Y d S w td}td}i }|d7 }|D ]7}||}|s4||}|rY|d}	||	}
|
sG|||	< nt |}| j	
d|||	|
 d| _
|d7 }q&d S )Nz\s*def\s+(t_[a-zA-Z_0-9]*)\(z\s*(t_[a-zA-Z_0-9]*)\s*=r4   z7%s:%d: Rule %s redefined. Previously defined on line %dT)r   ZgetsourcelinesrZ   ry   rz   r   r   r   Zgetsourcefiler   r(   )r   r   linesZlinenZfreZsreZ	counthashr   r   r-   prevrj   r	   r	   r
   r   F  s.   








zLexerReflect.validate_module)Nr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   r   4  s    
Bgr   Frh   c
           #   
      sr  |d u rd}d }
ddi}t  }||_|	d u rttj}	|r&|d u r&ttj}|r*|  rJ fddt D }t|}
d|
vrItj|
d  j|
d< nt	d}
|

d	}|rdt|trdd
|vrd|d
 | }t|
|	|d}|  |sy| rytd|r|rz|||
 |ja|ja|a|W S  ty   Y nw |r|d|j |d|j |d|j t |_|jD ]}|j| qt|jttfrt|jd   |j|_!n|j|_!|jt|j!B |_"|j}i }|D ]I}g }|j#| D ]\}}|$d|t%|f  |r|d|t%|| q|j&| D ]\}}|$d||f  |r,|d||| q|||< q|r;|d |D ]4}t'|| ||
|j(\}}}||j)|< ||j*|< ||j+|< |rpt,|D ]\}}|d||| qbq=|- D ]0\}}|dkr|dkr|j)| .|j)d  |j*| .|j*d  |j+| .|j+d  qv||_/|j)d |_0|j*d |_1||_2|j3|_4|j4
dd|_5|j6|_7|j6
dd |_8|j8s|	9d |j:|_;|j:
dd |_<|- D ]M\}}|dkr||j6vr|	9d| ||j3vr|j5r|	9d| q|dkr6||j6vr&|j6
dd |j6|< ||j3vr6|j3
dd|j3|< q|ja|ja|a|r|r|d u rt|t=j>rV|j}n'd
|vr`|
d }n|?d
} d
 | d d }!t@d|!  tAtj|! dd}tBjCD|}z|E|| |tjv rtj|= W |S W |S  tFy }" z|	9d||"f  W Y d }"~"|S d }"~"ww |S )Nrh   r2   r   c                    s   g | ]	}|t  |fqS r	   )rN   )r   kr   r	   r
   r     s    zlex.<locals>.<listcomp>__file__r   r   __package__rT   )r   r   zCan't build lexerzlex: tokens   = %rzlex: literals = %rzlex: states   = %rr   r   z(lex: Adding rule %s -> '%s' (state '%s')z#lex: ==== MASTER REGEXS FOLLOW ====z"lex: state '%s' : regex[%d] = '%s'r3   zNo t_error rule is definedr   z1No error rule is defined for exclusive state '%s'z2No ignore rule is defined for exclusive state '%s'rU   rr   z#Couldn't write lextab module %r. %s)Gr1   rI   r   rt   r   dirdictru   r   r   r   rW   r   r   r   r   SyntaxErrorr~   r   r   r   rv   r)   r   r   r   rw   rE   r   r   rc   r   r^   rG   rx   r   rM   r   r   r   r   r7   r8   r9   r   rL   extendr<   r5   r6   r@   r   r=   rF   r   r>   rC   r&   r   r?   rD   rX   rY   r[   rs   rN   r\   r]   dirnamerq   rZ   )#r   rO   r*   optimizerh   r   Znowarnri   ZdebuglogZerrorlogr   r   ZlexobjZ_itemsZpkgZlinfor   Zregexsr   Z
regex_listr   r   r-   r   r5   Zre_textZre_namesr   r   styper   Zsrcfiler   Zpkgnamer   r	   r   r
   lexe  s  
















r  c                 C   s   |s*zt jd }t|}| }|  W n ty)   t jd t j }Y nw | r0| j	}nt	}|| | r<| j
}nt
}	 | }|sFd S t jd|j|j|j|jf  q?)Nr4   z/Reading from standard input (type EOF to end):
Tz(%s,%r,%d,%d)
)rt   argvr_   readclose
IndexErrorstdoutr    stdinr   r   r   r   r   r   )r   datarj   r   Z_inputZ_tokenr   r	   r	   r
   runmain%  s.   
 r	  c                    s    fdd}|S )Nc                    s"   t  drt | _| S  | _| S )Nr0   )r   r   r   r   r   r	   r
   	set_regexH  s
   

zTOKEN.<locals>.set_regexr	   )r   r  r	   r
  r
   TOKENG  s   r  r   )$r`   rb   ry   rt   rX   rK   r\   r   Z
StringTypeZUnicodeTyper   AttributeErrorr   bytesrz   r   r   r   rO   r   r   r+   r1   r   r   rg   r{   r   r   r   re   VERBOSEr  r	  r  Tokenr	   r	   r	   r
   <module>   sJ   !
  M
(  
3
 
A"
