o
    JPZp.                  
   @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlmZ dZ	dZ
dd ejd	D ZG d
d deZG dd deZejejejgg g g g g g g g d	Zdd ZdS )    N)AbstractLexer)error)debugl    l    c                 C   s   g | ]}t |qS  )int).0xr   r   1/usr/lib/python3/dist-packages/pysmi/lexer/smi.py
<listcomp>   s    r
   .c                   @   sZ  e Zd Zg dZi ZeD ]Zedd ee< edkr!dee< qedkr)dee< qg dZe	e
g d	e	e  Zd
ZdZdZdZdZdCd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!d0d1 Z"d2d3 Z#d4d5 Z$d6d7 Z%d8d9 Z&d:d; Z'd<d= Z(d>d? Z)d@dA Z*dBS )D
SmiV2Lexer)OACCESSAGENT-CAPABILITIESAPPLICATIONAUGMENTSBEGINBITSCONTACT-INFOCREATION-REQUIRESCounter	Counter32	Counter64DEFINITIONSDEFVALDESCRIPTIONDISPLAY-HINTEND
ENTERPRISEEXTENDSFROMGROUPGaugeGauge32
IDENTIFIERIMPLICITIMPLIEDIMPORTSINCLUDESINDEXINSTALL-ERRORSINTEGER	Integer32	IpAddressLAST-UPDATEDMANDATORY-GROUPS
MAX-ACCESS
MIN-ACCESSMODULEMODULE-COMPLIANCEMODULE-IDENTITYNOTIFICATION-GROUPNOTIFICATION-TYPENOTIFICATIONSOBJECTOBJECT-GROUPOBJECT-IDENTITYOBJECT-TYPEOBJECTSOCTETOFORGANIZATIONOpaque
PIB-ACCESSPIB-DEFINITIONS	PIB-INDEXPIB-MIN-ACCESSPIB-REFERENCESPIB-TAGPOLICY-ACCESSPRODUCT-RELEASE	REFERENCEREVISIONSEQUENCESIZESTATUSSTRINGSUBJECT-CATEGORIESSUPPORTSSYNTAXTEXTUAL-CONVENTION	TimeTicks	TRAP-TYPE
UNIQUENESSUNITS	UNIVERSAL
Unsigned32VALUE	VARIABLES	VARIATIONWRITE-SYNTAX-_r   	COUNTER32r!   GAUGE32)ABSENTANYBITBOOLEANBY	COMPONENT
COMPONENTSDEFAULTDEFINED
ENUMERATEDEXPLICITEXTERNALFALSEMAXMINMINUS-INFINITYNULLOPTIONALPLUS-INFINITYPRESENTPRIVATEREALSETTAGSTRUEWITHZ
BIN_STRINGCHOICEZCOLON_COLON_EQUALZDOT_DOTEXPORTSZ
HEX_STRINGZLOWERCASE_IDENTIFIERMACRONEGATIVENUMBERNEGATIVENUMBER64NUMBERNUMBER64ZQUOTED_STRINGUPPERCASE_IDENTIFIER))macro	exclusive)choicer   )exportsr   )commentr   z[]{}():;,-.|z\.\.z::=z 	 c                 C   s   || _ d | _|   d S )N)_tempdirlexerreset)selfZtempdirr   r   r	   __init__Y   s   zSmiV2Lexer.__init__c                 C   s   t ddgk rtj| tj| jdd| _d S tjtj@ r tj	 }nt
 }tjtj@ r0tj	 }nd }tj| tj| j||d| _d S )N   r   F)modulereflags	outputdirr   )r   r   r   ZdebuglogZerrorlog)LEX_VERSIONlexreDOTALLr   r   r   loggerZ	flagLexerZgetCurrentLoggerZ
NullLoggerZflagGrammar)r   r   Zdebugloggerr   r   r	   r   ^   s$   zSmiV2Lexer.resetc                 C      |j  jd7  _dS 
\r\n|\n|\r   Nr   linenor   tr   r   r	   	t_newlineu      zSmiV2Lexer.t_newlinec                 C      |j d |S )r}   r   r   beginr   r   r   r	   t_MACROz      zSmiV2Lexer.t_MACROc                 C   r   r   r   r   r   r   r	   t_macro_newline   r   zSmiV2Lexer.t_macro_newlinec                 C   r   )r   INITIALr   r   r   r   r	   t_macro_END   r   zSmiV2Lexer.t_macro_ENDc                 C      dS )z
.+?(?=END)Nr   r   r   r   r	   t_macro_body      zSmiV2Lexer.t_macro_bodyc                 C   r   )r|   r   r   r   r   r   r	   	t_EXPORTS   r   zSmiV2Lexer.t_EXPORTSc                 C   r   r   r   r   r   r   r	   t_exports_newline   r   zSmiV2Lexer.t_exports_newlinec                 C      |j d dS );r   Nr   r   r   r   r	   t_exports_end      zSmiV2Lexer.t_exports_endc                 C   r   )z[^;]+Nr   r   r   r   r	   t_exports_body   r   zSmiV2Lexer.t_exports_bodyc                 C   r   )r{   r   r   r   r   r   r	   t_CHOICE   r   zSmiV2Lexer.t_CHOICEc                 C   r   r   r   r   r   r   r	   t_choice_newline   r   zSmiV2Lexer.t_choice_newlinec                 C   r   )z\}r   Nr   r   r   r   r	   t_choice_end   r   zSmiV2Lexer.t_choice_endc                 C   r   )z[^\}]+Nr   r   r   r   r	   t_choice_body   r   zSmiV2Lexer.t_choice_bodyc                 C   r   )z--r   Nr   r   r   r   r	   t_begin_comment   r   zSmiV2Lexer.t_begin_commentc                 C   s    |j  jd7  _|j d dS )r   r   r   N)r   r   r   r   r   r   r	   t_comment_newline   s   zSmiV2Lexer.t_comment_newlinec                 C   r   )z[^\r\n]+Nr   r   r   r   r	   t_comment_body   r   zSmiV2Lexer.t_comment_bodyc                 C   s\   |j | jv rtjd|j  |jd|j d dkr#tjd|j  |jd| j|j d|_|S )z[A-Z][-a-zA-z0-9]*z%s is forbiddenr   r\   &Identifier should not end with '-': %sr   )valueforbidden_wordsr   PySmiLexerErrorr   reservedgettyper   r   r   r	   t_UPPERCASE_IDENTIFIER   s   z!SmiV2Lexer.t_UPPERCASE_IDENTIFIERc                 C   s(   |j d dkrtjd|j  |jd|S )z[0-9]*[a-z][-a-zA-z0-9]*r   r\   r   r   )r   r   r   r   r   r   r   r	   t_LOWERCASE_IDENTIFIER   s   z!SmiV2Lexer.t_LOWERCASE_IDENTIFIERc                 C   st   t |j|_d}|jdk rd}t|j}|tkr|rd|_|S |tkr/|r*d|_|S d|_|S tjd|j |jd)z-?[0-9]+r   r   r~   r   r   zNumber %s is too bigr   )	r   r   absUNSIGNED32_MAXr   UNSIGNED64_MAXr   r   r   )r   r   negvalr   r   r	   t_NUMBER   s    

zSmiV2Lexer.t_NUMBERc                 C   V   |j dd }|r)|d dkr)t|d r)|dd }|r)|d dkr)t|d s|S )z\'[01]*\'[bB]r   r   0   Nr   lenr   r   r   r   r   r	   t_BIN_STRING   
   zSmiV2Lexer.t_BIN_STRINGc                 C   r   )z\'[0-9a-fA-F]*\'[hH]r   r   r   r      Nr   r   r   r   r	   t_HEX_STRING   r   zSmiV2Lexer.t_HEX_STRINGc                 C   s"   |j  jttd|j7  _|S )z
\"[^\"]*\"r   )r   r   r   r   findallr   r   r   r   r	   t_QUOTED_STRING   s   zSmiV2Lexer.t_QUOTED_STRINGc                 C   s(   t jd|jd t|jd f |jd)NzAIllegal character '%s', %s characters left unparsed at this stager   r   r   )r   r   r   r   r   r   r   r   r	   t_error  s   zSmiV2Lexer.t_errorN)r   )+__name__
__module____qualname__reserved_wordsr   wreplaceupperr   listsetvaluestokensZstatesliteralsZ	t_DOT_DOTZt_COLON_COLON_EQUALZt_ignorer   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   r   r   r	   r      sX    



	

r   c                   @   s0   e Zd Zedd Zedd Zedd ZdS )SupportSmiV1Keywordsc                  C   sP   g d} i }| D ]}| dd ||< |dkrd||< q|dkr%d||< q|S )N)Qr   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&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   rm   r3   ZNetworkAddressr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r   r^   r!   r_   )r   r   )r   r   r   r   r   r	   r     s   
zSupportSmiV1Keywords.reservedc                   C   s   g dS )N)r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   r   r   r   r   r	   r   -  s   z$SupportSmiV1Keywords.forbidden_wordsc                  C   s(   g d} | t t  7 } t t| S )Nrz   )r   r   r   r   r   )r   r   r   r	   r   6  s   zSupportSmiV1Keywords.tokensN)r   r   r   staticmethodr   r   r   r   r   r   r	   r     s    

r   )	ZsupportSmiV1KeywordsZsupportIndexZcommaAtTheEndOfImportZcommaAtTheEndOfSequenceZmixOfCommasAndSpacesZuppercaseIdentifierZlowcaseIdentifierZ!curlyBracesAroundEnterpriseInTrapZnoCellsc                  K   sp   i }| D ],}| | r0|t vrtd| t | D ]}tjd dkr)| ||j< q| ||j< qqtdtf|S )Nz#Unknown lexer relaxation option: %sr   r   ZSmiLexer)	relaxedGrammarr   Z
PySmiErrorsysversion_infor   Z	func_namer   r   )ZgrammarOptionsZ	classAttroptionfuncr   r   r	   lexerFactory^  s   r   )r   r   Zply.lexr   Zpysmi.lexer.baser   Zpysmir   r   r   r   __version__splitr   r   objectr   r   r   r   r   r   r   r   r   r	   <module>   s4    yC