o
    i                     @   s   d dl Z d dlZd dlZddlmZ ddlmZ ddlT ddl	m
Z
 e eZdd	 ZG d
d dZG dd dZedkrRe   eddZeeej  dS dS )    N   )yacc   )JsonPathParserError)*)JsonPathLexerc                 C   s   t  | S N)JsonPathParserparse)string r   U/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/vendor/jsonpath_ng/parser.pyr
      s   r
   c                   @   s   e Zd ZdZejZd3ddZd4ddZdd	 Zg 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/d0 Zd1d2 ZdS )5r	   z%
    An LALR-parser for JsonPath
    FNc              	   C   s   | j d u r	td|| _|pt| _tjt}ztj	tj
td d }W n   t}Y d}d||dg}t| | j||d|td| _d S )NzDocstrings have been removed! By design of PLY, jsonpath-rw requires docstrings. You must not use PYTHONOPTIMIZE=2 or python -OO.r   r   jsonpath_parsetab)moduledebug	tabmodule	outputdirwrite_tablesstarterrorlog)__doc__r   r   r   lexer_classospathdirname__file__splitextsplit__name__joinr   loggerparser)selfr   r   output_directorymodule_namestart_symbolparsing_table_moduler   r   r   __init__   s*   

 zJsonPathParser.__init__c                 C   s   |p|   }| ||S r   )r   parse_token_streamtokenize)r$   r   lexerr   r   r   r
   8   s   zJsonPathParser.parsec                 C   s   | j jt|dS )N)r,   )r#   r
   IteratorToTokenStream)r$   token_iteratorr   r   r   r*   <   s   z!JsonPathParser.parse_token_stream))left,)r/   	DOUBLEDOT)r/   .)r/   |)r/   &)r/   WHEREc                 C   s,   |d u rt dt d|j|j|j|jf )Nz#Parse error near the end of string!z'Parse error at %s:%s near token %s (%s))r   linenocolvaluetype)r$   tr   r   r   p_errorJ   s
   zJsonPathParser.p_errorc                 C   s   |d }|dkrt |d |d |d< d
S |dkr&t|d |d |d< d
S |dkr7t|d |d |d< d
S |dkrHt|d |d |d< d
S |d	krYt|d |d |d< d
S d
S )zjsonpath : jsonpath '.' jsonpath
                    | jsonpath DOUBLEDOT jsonpath
                    | jsonpath WHERE jsonpath
                    | jsonpath '|' jsonpath
                    | jsonpath '&' jsonpathr   r2   r      r   z..wherer3   r4   N)ChildDescendantsWhereUnion	Intersect)r$   popr   r   r   p_jsonpath_binopP   s   zJsonPathParser.p_jsonpath_binopc                 C      t |d  |d< dS )zjsonpath : fields_or_anyr   r   NFieldsr$   rC   r   r   r   p_jsonpath_fieldsc      z JsonPathParser.p_jsonpath_fieldsc                 C   sV   |d dkrt  |d< dS |d dkrt |d< dS td|d |d|df )zjsonpath : NAMED_OPERATORr   thisr   parentz$Unknown named operator `%s` at %s:%sN)ThisParentr   r6   lexposrI   r   r   r   p_jsonpath_named_operatorg   s   z(JsonPathParser.p_jsonpath_named_operatorc                 C      t  |d< dS )zjsonpath : '$'r   N)RootrI   r   r   r   p_jsonpath_rootq      zJsonPathParser.p_jsonpath_rootc                 C      |d |d< dS )zjsonpath : '[' idx ']'r   r   Nr   rI   r   r   r   p_jsonpath_idxu      zJsonPathParser.p_jsonpath_idxc                 C   rV   )zjsonpath : '[' slice ']'r   r   Nr   rI   r   r   r   p_jsonpath_slicey   rX   zJsonPathParser.p_jsonpath_slicec                 C   rF   )zjsonpath : '[' fields ']'r   r   NrG   rI   r   r   r   p_jsonpath_fieldbrackets}   rK   z'JsonPathParser.p_jsonpath_fieldbracketsc                 C   s   t |d t|d  |d< dS )z"jsonpath : jsonpath '[' fields ']'r   r<   r   N)r>   rH   rI   r   r   r   p_jsonpath_child_fieldbrackets   s   z-JsonPathParser.p_jsonpath_child_fieldbracketsc                 C      t |d |d |d< dS )zjsonpath : jsonpath '[' idx ']'r   r<   r   Nr>   rI   r   r   r   p_jsonpath_child_idxbrackets      z+JsonPathParser.p_jsonpath_child_idxbracketsc                 C   r\   )z!jsonpath : jsonpath '[' slice ']'r   r<   r   Nr]   rI   r   r   r   p_jsonpath_child_slicebrackets   r_   z-JsonPathParser.p_jsonpath_child_slicebracketsc                 C   rV   )zjsonpath : '(' jsonpath ')'r   r   Nr   rI   r   r   r   p_jsonpath_parens   rX   z JsonPathParser.p_jsonpath_parensc                 C   s*   |d dkrdg|d< dS |d |d< dS )z9fields_or_any : fields
                         | '*'    r   r   r   Nr   rI   r   r   r   p_fields_or_any   s   zJsonPathParser.p_fields_or_anyc                 C   s   |d g|d< dS )zfields : IDr   r   Nr   rI   r   r   r   p_fields_id   s   zJsonPathParser.p_fields_idc                 C   s   |d |d  |d< dS )zfields : fields ',' fieldsr   r<   r   Nr   rI   r   r   r   p_fields_comma   s   zJsonPathParser.p_fields_commac                 C   s   t |d |d< dS )zidx : NUMBERr   r   N)IndexrI   r   r   r   p_idx   rK   zJsonPathParser.p_idxc                 C   rR   )zslice : '*'r   NSlicerI   r   r   r   p_slice_any   rU   zJsonPathParser.p_slice_anyc                 C   s   t |ddd  |d< dS )zYslice : maybe_int ':' maybe_int
                 | maybe_int ':' maybe_int ':' maybe_int r   Nr   r   rg   rI   r   r   r   p_slice   s   zJsonPathParser.p_slicec                 C   rV   )z/maybe_int : NUMBER
                     | emptyr   r   Nr   rI   r   r   r   p_maybe_int   s   zJsonPathParser.p_maybe_intc                 C   s   d|d< dS )zempty :Nr   r   rI   r   r   r   p_empty   s   zJsonPathParser.p_empty)FNr   )r    
__module____qualname__r   r   tokensr)   r
   r*   
precedencer;   rE   rJ   rQ   rT   rW   rY   rZ   r[   r^   r`   ra   rb   rc   rd   rf   ri   rj   rk   rl   r   r   r   r   r	      s6    

	
r	   c                   @   s   e Zd Zdd Zdd ZdS )r-   c                 C   s
   || _ d S r   )iterator)r$   rq   r   r   r   r)      s   
zIteratorToTokenStream.__init__c                 C   s"   zt | jW S  ty   Y d S w r   )nextrq   StopIteration)r$   r   r   r   token   s
   zIteratorToTokenStream.tokenN)r    rm   rn   r)   rt   r   r   r   r   r-      s    r-   __main__T)r   )loggingsysos.pathr   ply.yaccr   
exceptionsr   r   r,   r   	getLoggerr    r"   r
   r	   r-   basicConfigr#   printstdinreadr   r   r   r   <module>   s"    
 '
