�
L�g~! � �N � d dl Z d dlZd dlmZ d dlmZmZ G d� de� � ZdS )� N)�loads)�
LexerError�EmptyExpressionErrorc �� � e Zd Z eej dz � � Z eej ej z dz � � Z eej � � Z ed� � Z
ddddddd d
ddd
�
Zd� Zd� Z
d� Zd� Zd� Zd� Zd� Zd� Zd� ZdS )�Lexer�_z
�dot�star�rbracket�comma�colon�current�lparen�rparen�lbrace�rbrace)
�.�*�]�,�:�@�(�)�{�}c # �f K � | � |� � | j ���| j | j v rA| j | j | j | j | j dz d�V � | � � � �n�| j | j v ri| j }| j }| � � � | j v r%|| j z
}| � � � | j v �%d|||t |� � z d�V � �n0| j | j v r| � � � �n| j dk ry| j }| � � � }|dk r"| � � � dd||dz d�V � �n�|d k r"| � � � d
d||dz d�V � �n�dd||dz d�V � �n�| j d
k r| � � � V � �ne| j dk r| �
ddd� � V � �n?| j dk r| �
ddd� � V � �n| j dk r| � � � V � �n�| j | j v rC| j }| �
� � }dt |� � ||t |� � z d�V � �n�| j dk rk| j }| �
� � }t |� � dk r(dt |� � ||t |� � z d�V � �nDt ||d|z �� � �| j dk r| � � � V � �n| j dk r| �
ddd� � V � n�| j dk r| �
ddd � � V � n�| j d!k r| �
dd"d#� � V � n�| j dk rn| � � � dk r+d$d%| j dz
| j d�V � | � � � nO| j �| j }n
| j dz
}t |dd&�� � �t | j | j d'| j z �� � �| j ���d(d)| j | j d�V � d S )*N� ��type�value�start�end�unquoted_identifier�[r �flattenz[]� �?�filterz[?�lbracket�'�|�or�pipe�&�and�expref�`�number�-zUnknown token '%s'��lexer_position�lexer_value�message�"�<�=�lte�lt�>�gte�gt�!�ne�not�eqz==zUnknown token '='zUnknown token %s�eof� )�_initialize_for_expression�_current�
SIMPLE_TOKENS� _position�_next�START_IDENTIFIER�VALID_IDENTIFIER�len�
WHITESPACE�_consume_raw_string_literal�_match_or_else�_consume_literal�VALID_NUMBER�_consume_number�intr �_consume_quoted_identifier�_length)�self�
expressionr"