o
    
c                  
   @   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.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	   >/opt/certbot/lib/python3.10/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                   @      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cnewtabkeyritemnewrecrefindex	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| j  |	d	t| j  |	d
t| j  |	dt| j  i }| j D ](\}}g }	t|| j| | j| D ]\\}
}}}|	|t||f qu|	||< qc|	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__tuplerE   r@   rG   r<   r7   rL   zipr8   r9   rM   _funcs_to_namesr=   r>   r   r?   )r   lextab	outputdirbasetabmodulefilenametftabre	statenamelretitempatfuncretextrenamestaberrrX   tabeofr	   r	   r
   writetab   s8   &
"zLexer.writetabc                 C   s@  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 | _|j D ](\}}g }g }|D ]\}}	|t||jt|	|f qR|| j|< || j|< qHi | _|j D ]\}}
||
 | j|< qyi | _|j  D ]\}}
||
 | j|< q| !d d S )N	import %s_tabversionz0.0zInconsistent PLY versionr2   )"r]   r^   r_   execsysmodulesrN   rh   ImportError
_lextokensrE   _lexreflagsr@   _lexliteralsrG   setlextokens_all_lexstateinfor<   _lexstateignorer=   r7   r8   _lexstatererL   rM   recompile_names_to_funcsr>   _lexstateerrorfr?   _lexstateeoffbegin)r   tabfilefdictrl   rr   rs   rt   txtitemru   	func_namerX   r	   r	   r
   readtab   s8   
 
zLexer.readtabc                 C   s8   |d d }t |tstd|| _d| _t|| _d S )Nr4   zExpected a stringr   )r]   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lexerlexmatchrI   r   r   __code__co_filenameco_firstlinenor   rG   rC   rD   RuntimeError)r   r   rB   rF   rA   r5   lexindexfuncmtokirv   newtokr	   r	   r
   token1  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   rY   r{   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__)rv   r	   r	   r
   
_get_regex  s   r   c                 C   s0   t | }|j }|j|jkr||j |S r   )r   	_getframe	f_globalsrK   f_localsupdate)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   )rj   rM   )funclistnamelistresultr   r-   r	   r	   r
   rk     s   rk   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   )rd   r   r   max
groupindexvaluesrL   r   r   r^   FunctionType
MethodTypefind	Exceptionintr   _form_master_re)relistreflagsr   toknamesr   r5   r   lexindexnamesr   r   handler   llistrs   lnamesrlistrrernamesr	   r	   r
   r     s6   


r   c                 C   s   d}|  d}t|dd  dD ]\}}||vr|dkr nq|dkr,t|d| }nd}d|v r6t|}d||d  }||fS )Nr4   _ANY)r2   )ra   	enumerateri   rd   )r   namesnonstatepartsr   partstates	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   
error_functokensr   	stateinfor   r   r(   r   r   stderrlog)r   r   r   r   r	   r	   r
   r   /  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_allA  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(   r]   listri   r   )r   r   r	   r	   r
   r   H  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   	terminalsr   r	   r	   r
   r   \  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   g  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   r]   r   r   r   r(   rg   	TypeError)r   rP   r	   r	   r
   r   m  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   r]   ri   r   r   r(   r   rg   r   r   )r   r   r-   	statetyper	   r	   r
   r   x  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   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>)rR   c                 S   s   t | d S r  )r   r  r	   r	   r
   r    r  )rR   reverse)r   r   funcsymstrsymr   errorfeoffr   r   r   r(   r   hasattrr   r   r   r   rM   r]   r   r&   r   sort)	r   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   inspect	getmoduler   addr   r]   r^   r   co_argcountr   r(   r   r   r   r   r   r   r
  r   r   r  r   validate_module)r   r   fnamer   r  r  moduler  reqargsnargsrP   er-   r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  getsourcelinesr`   r   r   r   r   r   getsourcefiler   r(   )r   r  lineslinenfresre	counthashr  r   r-   prevro   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   Frl   c
           %   
      sh  |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 ]Q}g }|j#| D ]$\}}|j$j%}|j$j&}|'d|t(|f  |r|d|t(|| q|j)| D ]\}}|'d||f  |r4|d||| q|||< q|rC|d |D ]4}t*|| ||
|j+\}}}||j,|< ||j-|< ||j.|< |rxt/|D ]\}}|d||| qjqE|0 D ]0\}}|dkr|dkr|j,| 1|j,d  |j-| 1|j-d  |j.| 1|j.d  q~||_2|j,d |_3|j-d |_4||_5|j6|_7|j7
dd|_8|j9|_:|j9
dd |_;|j;s|	<d |j=|_>|j=
dd |_?|0 D ]M\} }|dkr| |j9vr|	<d|  | |j6vr|j8r|	<d|  q|dkr>| |j9vr.|j9
dd |j9| < | |j6vr>|j6
dd|j6| < q|ja|ja|a|r|r|d u rt|t@jAr^|j}!n'd
|vrh|
d }!n|Bd
}"d
 |"d d }#tCd|#  tDtj|# dd}!tEjFG|!}z	|H|| W |S  tIy }$ z|	<d||$f  W Y d }$~$|S d }$~$ww |S )Nrl   r2   r   c                    s   g | ]	}|t  |fqS r	   )rN   )r   kr  r	   r
   r   z  s    zlex.<locals>.<listcomp>__file__r   r   __package__rZ   )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'r[   r|   z#Couldn't write lextab module %r. %s)Jr1   rI   r   r   r   dirdictr   r+  r   r   r]   r   r   r   r   SyntaxErrorr   r   r   r   r   r)   r   r   r   r   rE   r  r   ri   r   rd   rG   r   r	  r   r   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   r^   r_   ra   r~   rN   rb   rc   dirnamer{   r`   )%r  rO   r*   optimizerl   r   nowarnrm   debuglogerrorlogr   r   lexobj_itemspkglinfor   regexsr   
regex_listr  r   r  r  r-   r  r5   re_textre_namesr   r   styper   srcfiler   pkgnamer  r	   r*  r
   lex_  s  















rA  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)
)r   argvre   readclose
IndexErrorstdoutr    stdinr   r   r   r   r   r   )r   dataro   r   _input_tokenr   r	   r	   r
   runmain  s.   
 rK  c                    s    fdd}|S )Nc                    s"   t  drt | _| S  | _| S )Nr0   )r  r   r   r   r  r	   r
   	set_regexB  s
   

zTOKEN.<locals>.set_regexr	   )r  rM  r	   rL  r
   TOKENA  s   rN  r   )$rf   rh   r   r   r^   rK   rb   r  
StringTypeUnicodeTyper   AttributeErrorr   bytesr   r   r   r   rO   r   r   r+   r1   r   r   rk   r   r   r   r   r   VERBOSErA  rK  rN  Tokenr	   r	   r	   r
   <module>   sJ   !
  F
(  
3
 
A"
