o
    6d                     @   s   d dl Z d dlZd dlmZmZ dZerd dl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dZdS )    N)lexyaccFc                   @   s   e Zd ZdZed7 Zed7 Zed7 ZdZdZdZdZ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"S )$FilterExprLexer)IDLPARRPAR)ANDOR)ZNEQZEQ)BOOLEANFLOATZINTEGERNULLSTRINGz\(z\)!== r   r	   )andorFc                 C   s   t j | |d| _g | _d S )N)moduledebug)r   lexererrorsselfr    r   hC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\site-packages\stone/cli_helpers.py__init__4   s   
zFilterExprLexer.__init__c                 C   s   | j S N)r   r   r   r   r   get_yacc_compat_lexer8   s   z%FilterExprLexer.get_yacc_compat_lexerc                 C   s   |j dk|_ |S )z\btrue\b|\bfalse\btruevaluer   tokenr   r   r   	t_BOOLEAN;      zFilterExprLexer.t_BOOLEANc                 C   s
   d|_ |S )z\bnull\bNr    r"   r   r   r   t_NULL@   s   zFilterExprLexer.t_NULLc                 C      t |j|_|S )z-?\d+(\.\d*(e-?\d+)?|e-?\d+))floatr!   r"   r   r   r   t_FLOATE   r%   zFilterExprLexer.t_FLOATc                 C   r'   )z-?\d+)intr!   r"   r   r   r   	t_INTEGERJ   r%   zFilterExprLexer.t_INTEGERc                 C   s   |j dd |_ |S )z\"([^\\"]|(\\.))*\"   r    r"   r   r   r   t_STRINGO   s   zFilterExprLexer.t_STRINGc                 C   s"   |j | jv r| j|j  |_|S |S )z[a-zA-Z_][a-zA-Z0-9_-]*)r!   KEYWORDStyper"   r   r   r   t_IDT   s   zFilterExprLexer.t_IDc                 C   s0   | j dt|jd d  |jd d S )NzIllegal character %s.r   ur,   )r   appendreprr!   lstripr   skipr"   r   r   r   t_error]   s   zFilterExprLexer.t_errorc                 C   s*   | j | 	 | j  }|sd S t| qr   )r   inputr#   print)r   datatokr   r   r   testc   s   
zFilterExprLexer.testNF)__name__
__module____qualname__tokensZt_LPARZt_RPARZt_NEQZt_EQZt_ignorer/   r   r   r$   r&   r)   r+   r.   r1   r7   r<   r   r   r   r   r      s.    
	r   c                   @   sh   e Zd ZejZed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S )FilterExprParserexpr))leftr	   )rD   r   Fc                 C   s,   || _ tj| ||d| _t|| _g | _d S )N)r   r   Zwrite_tables)r   r   r   r   r   r   r   r   r   r   {   s   

zFilterExprParser.__init__c                 C   s4   | j j|| j | jd}| jj| j | _|| jfS )zF
        Args:
            data (str): Raw filter expression.
        )r   r   )r   parser   r   r   r   )r   r:   Zparsed_datar   r   r   rE      s
   
zFilterExprParser.parsec                 C      |d |d< dS )zexpr : predr,   r   Nr   r   pr   r   r   p_expr      zFilterExprParser.p_exprc                 C   rF   )zexpr : LPAR expr RPAR   r   Nr   rG   r   r   r   p_expr_parens   rJ   zFilterExprParser.p_expr_parensc                 C       t |d |d |d |d< dS )z3expr : expr OR expr
                | expr AND exprrK   r,      r   N)FilterExprConjunctionrG   r   r   r   p_expr_group   s    zFilterExprParser.p_expr_groupc                 C   rM   )zpred : ID op primitiverK   r,   rN   r   N)FilterExprPredicaterG   r   r   r   p_pred   s    zFilterExprParser.p_predc                 C   rF   )zop : NEQ
              | EQr,   r   Nr   rG   r   r   r   p_op   s   zFilterExprParser.p_opc                 C   rF   )zprimitive : BOOLEAN
                     | FLOAT
                     | INTEGER
                     | NULL
                     | STRINGr,   r   Nr   rG   r   r   r   p_primitive   s   zFilterExprParser.p_primitivec                 C   s:   |r| j d|jt|jdf  d S | j d d S )NzUnexpected %s with value %s.r2   zUnexpected end of expression.)r   r3   r0   r4   r!   r5   r"   r   r   r   p_error   s   zFilterExprParser.p_errorNr=   )r>   r?   r@   r   rA   strstart
precedencer   rE   rI   rL   rP   rR   rS   rT   rU   r   r   r   r   rB   l   s    

rB   c                   @   s    e Zd ZejZejdd ZdS )
FilterExprc                 C   s   d S r   r   r   router   r   r   eval   s   zFilterExpr.evalN)r>   r?   r@   abcABCMeta__metaclass__abstractmethodr\   r   r   r   r   rY      s    rY   c                   @   $   e Zd Zdd Zdd Zdd ZdS )rO   c                 C      || _ || _|| _d S r   conjlhsrhs)r   rd   re   rf   r   r   r   r         
zFilterExprConjunction.__init__c                 C   sH   | j dkr| j|o| j|S | j dkr"| j|p!| j|S J )Nr   r   )rd   re   r\   rf   rZ   r   r   r   r\      s
   

zFilterExprConjunction.evalc                 C      d| j | j| jf S )NzEvalConj(%r, %r, %r)rc   r   r   r   r   __repr__      zFilterExprConjunction.__repr__Nr>   r?   r@   r   r\   ri   r   r   r   r   rO      s    rO   c                   @   ra   )rQ   c                 C   rb   r   opre   rf   )r   rm   re   rf   r   r   r   r      rg   zFilterExprPredicate.__init__c                 C   s<   |j | jd }| jdkr|| jkS | jdkr|| jkS J )Nr   r   )attrsgetre   rm   rf   )r   r[   valr   r   r   r\      s   



zFilterExprPredicate.evalc                 C   rh   )NzEvalPred(%r, %r, %r)rl   r   r   r   r   ri      rj   zFilterExprPredicate.__repr__Nrk   r   r   r   r   rQ      s    	rQ   c                 C   s*   t | tjsJ t| t|}|| S )z
    Args:
        route_attr_filter (str): The raw command-line input of the route
            filter.

    Returns:
        Tuple[FilterExpr, List[str]]: The second element is a list of errors.
    )
isinstancesix	text_typer0   rB   rE   )Zroute_attr_filterr   parserr   r   r   parse_route_attr_filter   s   	
ru   r=   )r]   rr   Zplyr   r   Z_MYPYtypingobjectr   rB   rY   rO   rQ   ru   r   r   r   r   <module>   s    aF	