3
+:X                 @   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yejej	fZ
W n ek
rd   eefZ
Y nX ej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Zd%d d!Zd"d# Z e Z!dS )&z3.8    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   Q/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/pycparser/ply/lex.py__init__:   s    zLexError.__init__N)__name__
__module____qualname__r
   r   r   r   r	   r   9   s   r   c               @   s   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   s    zLexToken.__str__c             C   s   t | S )N)str)r   r   r   r	   __repr__D   s    zLexToken.__repr__N)r   r   r   r   r   r   r   r   r	   r   @   s   r   c               @   s4   e Zd Zdd Zdd Zdd Zdd ZeZeZd	S )
	PlyLoggerc             C   s
   || _ d S )N)f)r   r   r   r   r	   r
   L   s    zPlyLogger.__init__c             O   s   | j j|| d  d S )N
)r   write)r   msgr   kwargsr   r   r	   criticalO   s    zPlyLogger.criticalc             O   s   | j jd||  d  d S )Nz	WARNING: r   )r   r   )r   r   r   r   r   r   r	   warningR   s    zPlyLogger.warningc             O   s   | j jd||  d  d S )NzERROR: r   )r   r   )r   r   r   r   r   r   r	   errorU   s    zPlyLogger.errorN)	r   r   r   r
   r   r   r   infodebugr   r   r   r	   r   K   s   r   c               @   s   e Zd Zdd Zdd ZdS )
NullLoggerc             C   s   | S )Nr   )r   namer   r   r	   __getattribute__^   s    zNullLogger.__getattribute__c             O   s   | S )Nr   )r   r   r   r   r   r	   __call__a   s    zNullLogger.__call__N)r   r   r   r#   r$   r   r   r   r	   r!   ]   s   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   lexoptimize)r   r   r   r	   r
   t   s.    zLexer.__init__Nc             C   s   t j | }|ri }x| jj D ]\}}g }x\|D ]T\}}g }	xF|D ]>}
|
 sV|
d  rb|	j|
 qB|	jt||
d j|
d f qBW q0W |j||	f |||< qW ||_i |_x(| jj D ]\}}t||j|j|< qW ||_|S )Nr   r(   )copyr+   itemsappendgetattrr   r2   r<   )r   objectcZnewtabkeyZritemZnewreZcreZfindexZ	newfindexr   efr   r   r	   clone   s(    


&zLexer.cloner'   c             C   s  t |tjrtd|jdd }tjj||d }t|d}|j	d|t
f  |j	dtt  |j	dt| j  |j	d	t| j  |j	d
t| j  |j	dt| j  i }xb| jj D ]T\}}g }	x>t|| j| | j| D ]"\\}
}}}|	j|t||f qW |	||< qW |j	dt|  |j	dt| j  i }x,| jj D ]\}}|rh|jnd ||< qTW |j	dt|  i }x,| jj D ]\}}|r|jnd ||< qW |j	dt|  W d Q R X d S )Nz&Won't overwrite existing lextab module.r(   z.pywzJ# %s.py. This file automatically created by PLY (version %s). Don't edit!
z_tabversion   = %s
z_lextokens    = %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__r9   r4   r;   r0   r+   r?   zipr,   r-   r@   _funcs_to_namesr1   r2   r   r3   )r   lextab	outputdirZbasetabmodulefilenameZtfZtabre	statenamelretitempatfuncZretextrenamesZtaberrrE   Ztabeofr   r   r	   writetab   s6    (zLexer.writetabc             C   sZ  t |tjr|}ntd|  tj| }t|ddtkr@td|j	| _
|j| _|j| _| j
t| jB | _|j| _|j| _i | _i | _xh|jj D ]Z\}}g }g }x4|D ],\}}	|jtj||jtjB t|	|f qW || j|< || j|< qW i | _x&|jj D ]\}}
||
 | j|< qW i | _ x&|j!j D ]\}}
||
 | j |< q0W | j"d d S )Nz	import %sZ_tabversionz0.0zInconsistent PLY versionr&   )#rJ   rK   rL   execsysmodulesrA   rU   ImportErrorZ
_lextokensr9   Z_lexreflagsr4   Z_lexliteralsr;   setlextokens_allZ_lexstateinfor0   Z_lexstateignorer1   r+   r,   Z_lexstaterer?   r@   recompileVERBOSE_names_to_funcsr2   Z_lexstateerrorfr3   Z_lexstateeoffbegin)r   ZtabfilefdictrX   r[   r\   r]   Ztxtitemr^   	func_namerE   r   r   r	   readtab   s8    
(
zLexer.readtabc             C   s8   |d d }t |tstd|| _d| _t|| _d S )Nr(   zExpected a stringr   )rJ   StringTypes
ValueErrorr5   r   lenr6   )r   r   rC   r   r   r	   input   s    
zLexer.inputc             C   sd   || j krtd| j | | _| j| | _| jj|d| _| jj|d | _	| j
j|d | _|| _d S )NzUndefined stater'   )r+   rq   r)   r,   r*   r1   getr:   r2   r7   r3   r8   r.   )r   stater   r   r	   rl     s    
zLexer.beginc             C   s   | j j| j | j| d S )N)r/   r@   r.   rl   )r   ru   r   r   r	   
push_state  s    zLexer.push_statec             C   s   | j | jj  d S )N)rl   r/   pop)r   r   r   r	   	pop_state  s    zLexer.pop_statec             C   s   | j S )N)r.   )r   r   r   r	   current_state!  s    zLexer.current_statec             C   s   |  j |7  _ d S )N)r   )r   nr   r   r	   skip'  s    z
Lexer.skipc             C   s~  | j }| j}| j}| j}x||k r|| |kr<|d7 }qx| jD ]\}}|j||}|s`qFt }|j |_| j	|_	||_ |j
}	||	 \}
|_|
s|jr|j | _ |S |j }P |j }| |_|| _|| _ |
|}|s| j }| j}P | js(|j| jkr(td|
jj|
jj|
j|jf ||d  |S W || | jkrrt }|| |_| j	|_	|j|_||_ |d | _ |S | jrt }| j|d  |_| j	|_	d|_| |_||_ || _ | j|}|| j krtd||  ||d  | j }|sq|S || _ td|| |f ||d  qW | jr\t }d|_d|_| j	|_	||_ | |_|| _ | j|}|S |d | _ | jd krztdd S )	Nr(   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eofr'   z"No input string given with input())r   r6   r:   r5   r)   matchr   groupr   r   	lastindexr   endlexerZlexmatchr=   rg   r   __code__co_filenameco_firstlinenor   r;   r7   r8   RuntimeError)r   r   r6   r:   r5   r)   lexindexfuncmtokir_   Znewtokr   r   r	   token1  s    




"

zLexer.tokenc             C   s   | S )Nr   )r   r   r   r	   __iter__  s    zLexer.__iter__c             C   s   | j  }|d krt|S )N)r   StopIteration)r   tr   r   r	   next  s    z
Lexer.next)N)r'   )r   r   r   r
   rF   ra   ro   rs   rl   rv   rx   ry   r{   r   r   r   __next__r   r   r   r	   r%   s   s   

%(
nr%   c             C   s   t | d| jS )Nregex)rA   __doc__)r_   r   r   r	   
_get_regex  s    r   c             C   s0   t j| }|jj }|j|jkr,|j|j |S )N)rc   	_getframe	f_globalsr>   f_localsupdate)Zlevelsr   ldictr   r   r	   get_caller_module_dict  s
    

r   c             C   sJ   g }x@t | |D ]2\}}|r8|d r8|j||d f q|j| qW |S )Nr   r(   )rV   r@   )Zfunclistnamelistresultr   r"   r   r   r	   rW     s    rW   c             C   sH   g }x>| D ]6}|r6|d r6|j ||d  |d f q
|j | q
W |S )Nr   r(   )r@   )r   rm   r   rz   r   r   r	   rk     s    
rk   c             C   sj  | sg S dj | }ytj|tj|B }d gt|jj d  }|d d  }x|jj D ]z\}}	|j|d }
t	|
t
jt
jfkr|
|| f||	< |||	< qV|
d k	rV|||	< |jddkrd||	< qVd || f||	< qVW ||fg|g|gfS  tk
rd   tt| d }|dkrd}t| d | |||\}}}t| |d  |||\}}}|| || || fS X d S )N|r(   ignore_r      )NN)rQ   rh   ri   rj   max
groupindexvaluesr?   rt   r   rK   FunctionType
MethodTypefind	Exceptionintrr   _form_master_re)Zrelistreflagsr   toknamesr   r)   r   Zlexindexnamesr   r   handler   Zllistr\   ZlnamesZrlistZrreZrnamesr   r   r	   r     s2    



r   c             C   s   d}| j d}x0t|dd  dD ]\}}||kr"|dkr"P q"W |dkrZt|d| }nd}d|krnt|}dj||d  }||fS )Nr(   _ANYr&   )r&   )rN   	enumeratetuplerQ   )r   namesZnonstate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   sL   || _ d | _g | _|| _ddi| _t | _d| _|d krBtt	j
n|| _d S )Nr&   	inclusiveF)r   Z
error_functokensr   	stateinforf   rd   r   r   rc   stderrlog)r   r   r   r   r   r   r	   r
   /  s    
zLexerReflect.__init__c             C   s$   | j   | j  | j  | j  d S )N)
get_tokensget_literals
get_states	get_rules)r   r   r   r	   get_all:  s    zLexerReflect.get_allc             C   s   | j   | j  | j  | jS )N)validate_tokensvalidate_literalsvalidate_rulesr   )r   r   r   r	   validate_allA  s    zLexerReflect.validate_allc             C   sp   | j jdd }|s(| jjd d| _d S t|ttfsL| jjd d| _d S |sf| j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   rt   r   r   rJ   listr   r   )r   r   r   r   r	   r   H  s    zLexerReflect.get_tokensc             C   sT   i }xJ| j D ]@}tj|s.| jjd| d| _||krD| jjd| d||< qW d S )NzBad token name '%s'TzToken '%s' multiply definedr(   )r   _is_identifierr}   r   r   r   )r   Z	terminalsrz   r   r   r	   r   \  s    
zLexerReflect.validate_tokensc             C   s    | j jdd| _| jsd| _d S )Nliteralsr'   )r   rt   r   )r   r   r   r	   r   g  s    zLexerReflect.get_literalsc             C   sp   yDx>| j D ]4}t|t s&t|dkr
| jjdt| d| _q
W W n& tk
rj   | jjd d| _Y nX d S )Nr(   z.Invalid literal %s. Must be a single characterTzIInvalid literals specification. literals must be a sequence of characters)r   rJ   rp   rr   r   r   rT   	TypeError)r   rC   r   r   r	   r   m  s    zLexerReflect.validate_literalsc             C   s   | j jdd | _| jrt| jttfs:| jjd d| _nx| jD ]}t|t s^t|dkrx| jjdt	| d| _qB|\}}t|t
s| jjdt	| d| _qB|dkp|dks| jjd	| d| _qB|| jkr| jjd
| d| _qB|| j|< qBW 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   rt   r   rJ   r   r   r   r   rr   rT   rp   r   )r   r   r"   Z	statetyper   r   r	   r   x  s0    

zLexerReflect.get_statesc       	      C   sR  dd | j D }i | _i | _i | _i | _i | _i | _x"| jD ]}g | j|< g | j|< q<W t|dkrz| j	j
d d| _
d S x|D ]x}| j | }t|| j\}}|| j|< t|drX|dkrx|D ]}|| j|< qW n||dkrxr|D ]}|| j|< qW nZ|d	kr2|jj}|jj}| j	j
d
|||j d| _
n$x|D ]}| j| j||f q8W qt|tr|d	krx|D ]}|| j|< qtW d|kr| j	jd| nD|dkr| j	j
d| d| _
n$x8|D ]}| j| j||f qW q| j	j
d| d| _
qW x$| jj D ]}|jdd d qW x&| jj D ]}|jdd dd q2W d 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 definedTr$   r   r|   ignorez,%s:%d: Rule '%s' must be defined as a string\z#%s contains a literal backslash '\'z'Rule '%s' must be defined as a functionz&%s not defined as a function or stringc             S   s   | d j jS )Nr(   )r   r   )xr   r   r	   <lambda>  s    z(LexerReflect.get_rules.<locals>.<lambda>)rD   c             S   s   t | d S )Nr(   )rr   )r   r   r   r	   r     s    )rD   reverse)r   r   funcsymstrsymr   errorfeoffr   rr   r   r   r   hasattrr   r   r   r   r@   rJ   rp   r   r   sort)	r   Ztsymbolsr   r   r   r   toknamelinefiler   r   r	   r     sb    












zLexerReflect.get_rulesc             C   s  x~| j D ]r}x| j| D ]r\}}|jj}|jj}tj|}| jj| | j	| }t
|tjrjd}nd}|jj}	|	|kr| jjd|||j d| _q|	|k r| jjd|||j d| _qt|s| jjd|||j d| _qyJtjd|t|f tj| jB }
|
jdr*| jjd	|||j d| _W q tjk
r } zD| jjd
|||j| dt|krz| jjd|||j d| _W Y d d }~X qX qW x| j| D ]\}}| j	| }|dkr| jjd| d| _q|| jkr|jddk r| jjd|| d| _qy@tjd||f tj| jB }
|
jdrN| jjd| d| _W nT tjk
r } z4| jjd|| d|kr| jjd| d| _W Y d d }~X nX qW | j|  r| j|  r| jjd| d| _| jj|d }|r
|}|jj}|jj}tj|}| jj| t
|tjr,d}nd}|jj}	|	|kr\| jjd|||j d| _|	|k r
| jjd|||j d| _q
W x| jD ]}| j| qW d S )Nr   r(   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'z
(?P<%s>%s)r'   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   z'Rule '%s' must be defined as a functionr   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   inspect	getmodulerd   addr   rJ   rK   r   co_argcountr   r   r   r   rh   ri   rj   r   r}   r   r   r   r   rt   validate_module)r   ru   fnamer   r   r   moduler   ZreqargsnargsrC   er"   rZefuncr   r   r	   r     s    

 







zLexerReflect.validate_rulesc             C   s   t j|\}}tjd}tjd}i }|d7 }xv|D ]n}|j|}|sP|j|}|r|jd}	|j|	}
|
sv|||	< n$t j|}| jj	d|||	|
 d| _	|d7 }q4W d S )Nz\s*def\s+(t_[a-zA-Z_0-9]*)\(z\s*(t_[a-zA-Z_0-9]*)\s*=r(   z7%s:%d: Rule %s redefined. Previously defined on line %dT)
r   getsourcelinesrh   ri   r}   r~   rt   getsourcefiler   r   )r   r   linesZlinenZfreZsreZ	counthashr   r   r"   prevrZ   r   r   r	   r   @  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   .  s   
Bgr   FrX   c
       %         s  |d krd}d }
ddi}t  }||_|	d kr6ttj}	|rL|d krLttj}|rT|  r fddt D }t|}
d|
krtj|
d  j|
d< nt	d}
|
j
d	}|rt|trd
|kr|d
 | }t|
|	|d}|j  |s|j rtd|o|r4y |j||
 |ja|ja|a|S  tk
r2   Y nX |rd|jd|j |jd|j |jd|j t |_x|jD ]}|jj| qtW t|jttfrt|jd  j |j|_!n|j|_!|jt|j!B |_"|j}i }x|D ]}g }xX|j#| D ]J\}}|j$j%}|j$j&}|j'd|t(|f  |r|jd|t(|| qW x@|j)| D ]2\}}|j'd||f  |rP|jd||| qPW |||< qW |r|jd xt|D ]l}t*|| ||
|j+\}}}||j,|< ||j-|< ||j.|< |rx&t/|D ]\}}|jd||| qW qW xl|j0 D ]`\}}|dkr$|dkr$|j,| j1|j,d  |j-| j1|j-d  |j.| j1|j.d  q$W ||_2|j,d |_3|j-d |_4||_5|j6|_7|j7j
dd|_8|j9|_:|j9j
dd |_;|j;s|	j<d |j=|_>|j=j
dd |_?x|j0 D ]\} }|dkr\| |j9kr:|	j<d|  | |j6kr|j8r|	j<d|  nJ|dkr| |j9kr|j9j
dd |j9| < | |j6kr|j6j
dd|j6| < qW |ja|ja|a|r|r|d krBt|t@jAr|j}!nNd
|kr|
d }!n:|jBd
}"d
j |"d d }#tCd|#  tDtj|# dd}!tEjFjG|!}y|jH|| W n6 tIk
r }$ z|	j<d||$f  W Y d d }$~$X nX |S )NrX   r&   r   c                s   g | ]}|t  |fqS r   )rA   )r   k)r   r   r	   r   w  s    zlex.<locals>.<listcomp>__file__r   r   __package__rG   )r   r   zCan't build lexerzlex: tokens   = %rzlex: literals = %rzlex: states   = %rr   z
(?P<%s>%s)z(lex: Adding rule %s -> '%s' (state '%s')z#lex: ==== MASTER REGEXS FOLLOW ====z"lex: state '%s' : regex[%d] = '%s'r'   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'r(   z	import %sz#Couldn't write lextab module %r. %srI   )Jr%   r=   r   rc   r   dirdictrd   r   r   rt   rJ   r   r   r   r   SyntaxErrorro   r   rs   r   re   r   r   r   r   rf   r9   r   r   r   r   rQ   r;   rg   r   r   r   r   r@   r   r   r   r   r+   r,   r-   r   r?   extendr0   r)   r*   r4   r   r1   r:   r   r2   r7   r   r   r3   r8   rK   rL   rN   rb   rA   rO   rP   dirnamera   rM   )%r   rB   r    optimizerX   r   ZnowarnrY   ZdebuglogZerrorlogr   r   ZlexobjZ_itemspkgZlinforz   Zregexsru   Z
regex_listr   r   r   r   r"   r   r)   Zre_textZre_namesr   r   styper   srcfiler   pkgnamer   r   )r   r	   lex\  s    
















$r   c             C   s   |sVy&t jd }t|}|j }|j  W n* tk
rT   t jjd t jj }Y nX | rb| j	}nt	}|| | rz| j
}nt
}x0| }|sP t jjd|j|j|j|jf  qW d S )Nr(   z/Reading from standard input (type EOF to end):
z(%s,%r,%d,%d)
)rc   argvrR   readclose
IndexErrorstdoutr   stdinrs   r   r   r   r   r   )r   datarZ   r   _input_tokenr   r   r   r	   runmain  s*    
r   c                s    fdd}|S )Nc                s    t  drt | _n | _| S )Nr$   )r   r   r   )r   )r   r   r	   	set_regex?  s    
zTOKEN.<locals>.set_regexr   )r   r   r   )r   r	   TOKEN>  s    r   )
NNFFrX   r   FNNN)NN)"rS   rU   rh   rc   rK   r>   rO   r   Z
StringTypeZUnicodeTyperp   AttributeErrorr   bytesri   r   r   r   rB   r   r   r!   r%   r   r   rW   rk   r   r   r   r   r   r   Tokenr   r   r   r	   <module>"   sD   
  F
(  0 
 @
"
