o
    회h7                     @   s  d dl mZ d dlZd dlZd dlZd dlZddlT eeZ	ej
ejd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eZdd Zdd Zdd Zdd Zedededededededed iZ d!d" Z!eeeeeee"e#e$h	Z%G d#d$ d$e&Z'dS )%    )OrderedDictN   )*utf-8)encodingc                   @   s   e Zd ZdS )ParserErrorN)__name__
__module____qualname__ r   r   J/var/www/Befach/backend/venv/lib/python3.10/site-packages/config/parser.pyr      s    r   c                   @   s   e Zd ZdZdd ZdS )ODictze
    This class preserves insertion order for display purposes but is
    otherwise just a dict.
    c                 C   s6   g }|   D ]\}}|d||f  qdd| S )Nz%r: %rz{%s}z, )itemsappendjoin)selfresultkvr   r   r   __repr__   s   zODict.__repr__N)r   r	   r
   __doc__r   r   r   r   r   r      s    r   c                   @      e Zd Zd ZZdS )ASTNodeNr   r	   r
   startendr   r   r   r   r   $       r   c                   @   r   )MappingBodyNr   r   r   r   r   r   (   r   r   c                   @   r   )ListBodyNr   r   r   r   r   r   ,   r   r   c                 C   s   || _ || _d S N)r   r   )noder   r   r   r   r   set_positions0   s   
r!   c                 C   s&   t  }t| |td< ||td< |S )z@
    This function makes an AST node for a unary expression
    opoperandr   str)r"   r#   r   r   r   r   make_unary_expr5   s   r&   c                 C   s2   t  }t| |td< ||td< ||td< |S )zA
    This function makes an AST node for a binary expression
    r"   lhsrhsr$   )r"   r'   r(   r   r   r   r   make_binary_expr@   s
   r)   c                 C   s   t d|| f )Nz4Invalid index at %s: expected 1 expression, found %d)r   )nposr   r   r   invalid_indexL   s   
r,   
identifiernewlineintegerzfloating-point valuezcomplex valuestringzbacktick-stringEOFc                 C   s.   | t v rt |  S tjd dkrd|  S d|  S )Nr      z'%s'z%r)TOKEN_REPRSsysversion_info)kindr   r   r   
token_repr^   s
   r7   c                   @   s  e Zd ZdCddZdd Zedd Ze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d0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"e"Z#dDdAdBZ$dS )EParserNc                 C   s&   || _ |rt|| _nd | _d | _d S r   )stream	Tokenizer	tokenizertoken)r   r9   r   r   r   __init__j   s
   
zParser.__init__c                 C   s6   t |ts
|d}t|| _t| j| _d | _d S )Nr   )	
isinstance	text_typedecodeioStringIOr9   r:   r;   r<   )r   textr   r   r   _make_streamr   s
   


zParser._make_streamc                 C   s   | j jtkS r   )r<   r6   r1   r   r   r   r   at_endy   s   zParser.at_endc                 C   s   | j jS r   )r;   	remainingrE   r   r   r   rG   }   s   zParser.remainingc                 C   s   | j  | _| jjS r   )r;   	get_tokenr<   r6   rE   r   r   r   advance   s   zParser.advancec                 C   sN   | j j|krtdt|t| j j| j jf }| j j|_|| j }|   |S )NzExpected %s, got %s at %s)r<   r6   r   r7   r   locationrI   )r   ttper   r   r   r   expect   s   
zParser.expectc                 C   s$   | j j}|tkr|  }|tks|S r   )r<   r6   NEWLINErI   )r   rK   r   r   r   consume_newlines   s
   zParser.consume_newlinesc                 C   s*   | j jtkr|  }|S | j }|   |S r   )r<   r6   STRINGstringsrI   r   r   r   r   r   
object_key   s   zParser.object_keyc                 C   sP  t  }| jj}|  }|ttfv r| jj}t||| |S |tt	fvr8t
dt| jj| jjf }| jj|_||tt	fv r|  }| jjttfvr_t
dt| jj| jjf }| jj|_||   |   |  }|||f | jj}|ttfv r|   |  }n|ttfvrt
dt| jj| jjf }| jj|_||tt	fv s>|S NzUnexpected %s at %s)r   r<   r   rO   RCURLYr1   r   r!   WORDrP   r   r7   r6   rJ   rS   COLONASSIGNrI   exprr   rN   COMMA)r   r   r   rK   r   rL   keyvaluer   r   r   mapping_body   sR   



zParser.mapping_bodyc                 C   s~   | j }|j}|j}|  tkr=g }	 || | j j}| j j}|  tkr&nq|| d|}tt||}||_||_|S )NT )	r<   r   r\   rI   rP   r   r   r   Token)r   r   r   sall_textr   r   r   r   rQ      s$   


zParser.stringsc                 C   s   t  }| jj}| jj}|  }|ttttt	t
ttttttttttttfv r[|  }| jj}|| | jj}|ttfvr=n|   |  }|ttttt	t
ttttttttttttfv s%t||| |S r   )r   r<   r   r   rO   LCURLYLBRACKLPARENATDOLLARBACKTICKPLUSMINUSBITNOTINTEGERFLOATCOMPLEXTRUEFALSENONENOTrP   rV   rY   r   r6   rN   rZ   rI   r!   )r   r   r   r   rK   r\   r   r   r   	list_body   sl   
zParser.list_bodyc                 C   s    |  t |  }|  t |S r   )rM   rc   rr   RBRACKrR   r   r   r   list   s   

zParser.listc                 C   s\   | j j}|tvrtdt|| j jf }| j j|_||tkr%|  }|S | j }| 	  |S )Nz(Unexpected %s when looking for value: %s)
r<   r6   VALUE_STARTERSr   r7   r   rJ   rP   rQ   rI   )r   rK   rL   r<   r   r   r   r\     s   
zParser.valuec                 C   s0   |  tj}|  }|  tj}t||| |S r   )rM   rb   r   r]   rU   r   r!   )r   r   r   r   r   r   r   mapping  s
   zParser.mappingc                 C   s   |    |  }|tkr|  }n*|tkr|  }n!|tttfv r&| 	 }nt
dt| jj| jjf }| jj|_||   |S rT   )rI   rO   rb   rv   rc   rt   rV   rP   r1   r]   r   r7   r<   r6   r   rJ   )r   r   r   rL   r   r   r   	container  s   



zParser.containerc                 C   s   | j j}|tkr|  }|S |tkr|  }|S |tv r"|  }|S |tkr?| 	  | 
t |  }| 
t t||}|S |tkrR| 	  |  }| 
t |S tdt| j j| j jf }| j j|_|rT   )r<   r6   rb   rv   rc   rt   ru   r\   rf   rI   rM   primaryrU   r&   rd   rY   RPARENr   r7   r   rJ   )r   rK   r   rL   r   r   r   atom.  s6   




zParser.atomc           	         s   j j}|tkr t  t}||fS  fdd}  }d}|tkr+d }d}n| } j j}|tkr9|}n|}d}|sBt}n9d  }}  }|tkrZ  }|tkrY| }n|tkrt| } j j}|tkrt  }|tkrt| }|||f}t} t ||fS )Nc                     s,      } t| }|dkrt|| j | d S )Nr   r   )rr   lenr,   r   )lbr*   rE   r   r   get_slice_elementQ  s
   z)Parser.trailer.<locals>.get_slice_elementFT)	r<   r6   rc   rM   DOTrV   rI   rW   rs   )	r   rK   r   r}   is_slicer   elemstepstopr   rE   r   trailerJ  sJ   

.

zParser.trailerc                 C   sD   |   }| jjttfv r |  \}}t|||}| jjttfv s|S r   )rz   r<   r6   rc   r~   r   r)   r   r   r"   r(   r   r   r   rx   ~  s   zParser.primaryc                 C   s4   |   }| jjtkr|   |  }tt||}|S r   )rx   r<   r6   POWERrI   u_exprr)   r   r   r(   r   r   r   power  s   zParser.powerc                 C   s>   | j j}|ttttfvr|  }|S |   t|| 	 }|S r   )
r<   r6   rh   ri   rj   re   r   rI   r&   r   )r   rK   r   r   r   r   r     s   zParser.u_exprc                 C   sX   |   }| jjttttfv r*| jj}|   |   }t|||}| jjttttfv s|S r   )	r   r<   r6   STARSLASH
SLASHSLASHMODULOrI   r)   r   r   r   r   mul_expr  s   zParser.mul_exprc                 C   P   |   }| jjttfv r&| jj}|   |   }t|||}| jjttfv s|S r   )r   r<   r6   rh   ri   rI   r)   r   r   r   r   add_expr     zParser.add_exprc                 C   r   r   )r   r<   r6   LSHIFTRSHIFTrI   r)   r   r   r   r   
shift_expr  r   zParser.shift_exprc                 C   @   |   }| jjtkr|   |   }tt||}| jjtks
|S r   )r   r<   r6   BITANDrI   r)   r   r   r   r   bitand_expr     zParser.bitand_exprc                 C   r   r   )r   r<   r6   BITXORrI   r)   r   r   r   r   bitxor_expr  r   zParser.bitxor_exprc                 C   r   r   )r   r<   r6   BITORrI   r)   r   r   r   r   
bitor_expr  r   zParser.bitor_exprc                 C   sV   | j j}|  }d}|tkr|tkrd}d}n|tkr#|tkr#d}d}|r)|   |S )NFzis notTznot in)r<   r6   rI   ISrq   IN)r   r   rK   rI   r   r   r   comp_op  s   zParser.comp_opc                 C   sh   |   }| jjttttttt	t
ttf
v r2|  }|   }t|||}| jjttttttt	t
ttf
v s|S r   )r   r<   r6   LELTGEGTEQNEQALT_NEQr   r   rq   r   r)   r   r   r   r   
comparison  s     zParser.comparisonc                 C   s2   | j jtkr|  }|S |   tt|  }|S r   )r<   r6   rq   r   rI   r&   not_exprrR   r   r   r   r     s   zParser.not_exprc                 C   r   r   )r   r<   r6   ANDrI   r)   r   r   r   r   and_expr  r   zParser.and_exprc                 C   r   r   )r   r<   r6   ORrI   r)   r   r   r   r   or_expr  r   zParser.or_exprr]   c                 C   s4   |  | |   t| |d }|std| | S )Nzno such rule: %s)rD   rI   getattr
ValueError)r   rC   rulemethodr   r   r   parse  s   
zParser.parser   )r]   )%r   r	   r
   r=   rD   propertyrF   rG   rI   rM   rO   rS   r]   rQ   rr   rt   r\   rv   rw   rz   r   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   rY   r   r   r   r   r   r8   i   sH    


($4				r8   )(collectionsr   	functoolsrA   loggingr4   tokens	getLoggerr   loggerpartialopen	open_fileRecognizerErrorr   r   r   rt   r   r   r!   r&   r)   r,   rV   rN   rk   rl   rm   rP   rg   r1   r3   r7   rn   ro   rp   ru   objectr8   r   r   r   r   <module>   s:   
