File: //usr/lib/python3/dist-packages/mercurial/__pycache__/parser.cpython-310.pyc
o
�]Lb�f � @ s� d dl mZmZ ddlmZ ddlmZmZ ddlm Z G dd� de
�Zdd � Zd
d� Z
dd
� Zdd� Zdd� Zdd� Zdd� Zdd� Zdd� Zd$dd�Zdd� ZG d d!� d!e
�ZG d"d#� d#e
�ZdS )%� )�absolute_import�print_function� )�_)�error�util)�
stringutilc @ sZ e Zd Zddd�Zdd� Zdd� Zdd � Zdd
d�Zdd
d�Zdd� Z dd� Z
dd� ZdS )�parserNc C s || _ || _d | _d S �N)� _elements�_methods�current)�self�elements�methods� r �2/usr/lib/python3/dist-packages/mercurial/parser.py�__init__ s
zparser.__init__c C s | j }t| jd�| _ |S )zadvance the tokenizerN)r
�next�_iter)r �tr r r �_advance# s zparser._advancec C s t | j| jd dd� �S )z%True if next token may start new termr r � )�anyr r
�r r r r �_hasnewterm) s zparser._hasnewtermc C s: | j d |krt�td�| j d | j d ��| �� dS )z0make sure the tokenizer matches an end conditionr s unexpected token: %s� N)r
r �
ParseErrorr r )r �mr r r �_match- s
�z
parser._matchc C s4 |r| j d |krd}n| �|�}|r| �|� |S )zLgather right-hand-side operand until an end condition or binding
metr N)r
�_parser )r �bindr �exprr r r �
_parseoperand5 s
zparser._parseoperandr c
C s | � � \}}}| j| dd� \}}|r|r| �� s||f}n|r/|d | j|dd � � f}n
t�td�| |��|| j| jd d k r�| � � \}}}| j| dd � \}} | rd|r_| �� sd| |f}n|ru|d || j|dd � � f}n
t�td�| |��|| j| jd d k sE|S )Nr r r s not a prefix: %ss not an infix: %s)r r r r# r r r r
)
r r! �token�value�pos�primary�prefixr"