Current File : //usr/lib/python3/dist-packages/jmespath/__pycache__/parser.cpython-312.pyc |
�
���b�J � � � d Z ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ G d� d e � Z
e G d
� de � � Zy)a� Top down operator precedence parser.
This is an implementation of Vaughan R. Pratt's
"Top Down Operator Precedence" parser.
(http://dl.acm.org/citation.cfm?doid=512927.512931).
These are some additional resources that help explain the
general idea behind a Pratt parser:
* http://effbot.org/zone/simple-top-down-parsing.htm
* http://javascript.crockford.com/tdop/tdop.html
A few notes on the implementation.
* All the nud/led tokens are on the Parser class itself, and are dispatched
using getattr(). This keeps all the parsing logic contained to a single
class.
* We use two passes through the data. One to create a list of token,
then one pass through the tokens to create the AST. While the lexer actually
yields tokens, we convert it to a list so we can easily implement two tokens
of lookahead. A previous implementation used a fixed circular buffer, but it
was significantly slower. Also, the average jmespath expression typically
does not have a large amount of token so this is not an issue. And
interestingly enough, creating a token list first is actually faster than
consuming from the token iterator one token at a time.
� N)�lexer)�with_repr_method)�ast)�
exceptions)�visitorc �� � e Zd Zi dd�dd�dd�dd�dd�dd�dd�d d�d
d�dd�dd�d
d�dd�dd�dd�dd�dd�ddddddddddddd��Zd Zi Zd!ZdVd"�Zd#� Zd$� Z d%� Z
dWd&�Zd'� Zd(� Z
d)� Zd*� Zd+� Zd,� Zd-� Zd.� Zd/� Zd0� Zd1� Zd2� Zd3� Zd4� Zd5� Zd6� Zd7� Zd8� Zd9� Zd:� Zd;� Z d<� Z!d=� Z"d>� Z#d?� Z$d@� Z%dA� Z&dB� Z'dC� Z(dD� Z)dE� Z*dF� Z+dG� Z,dH� Z-dI� Z.dJ� Z/dXdL�Z0dM� Z1dN� Z2dO� Z3dP� Z4dQ� Z5dR� Z6dS� Z7dT� Z8e9dU� � Z:yK)Y�Parser�eofr �unquoted_identifier�quoted_identifier�literal�rbracket�rparen�comma�rbrace�number�current�expref�colon�pipe� �or� �and� �eq� �gt� � � �( �- �2 �7 �<