o
    V۷i                     @   s   d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZmZmZ g dZG dd	 d	eZG d
d deZedZdd ZG dd dee eZdS )zU
A small util to simplify the creation of Parsers for simple context-free-grammars.

    )ABCabstractmethod)defaultdictwraps)FunctionType
MethodType)GenericTypeVarOptionalList)nomatchNoMatchSimpleParserc                   @   s   e Zd Zdd ZdS )r   c                 C   s   d S N selfr   r   U/home/ubuntu/vllm_env/lib/python3.10/site-packages/interegular/utils/simple_parser.py__init__   s   znomatch.__init__N)__name__
__module____qualname__r   r   r   r   r   r      s    r   c                       s.   e Zd Zdededee f fddZ  ZS )r   dataindexexpectedc                    sZ   || _ || _|| _tt| d| d|||d  d| d||d |d   d S )NzCan not match at index z. Got    z, expected any of z.
Context(data[-10:+10]): 
   )r   r   r   superr   r   )r   r   r   r   	__class__r   r   r      s   $zNoMatch.__init__)r   r   r   strintr   r   __classcell__r   r   r   r   r      s    &r   Tc                    s   t   fdd}|S )Nc                    s6   | j }z | g|R i |W S  ty   || _  w r   )r   r   )r   argskwargspmr   r   w"   s   z_wrap_reset.<locals>.wr   )r)   r*   r   r(   r   _wrap_reset!   s   r+   c                   @   s   e Zd ZdefddZdd ZdefddZedefd	d
Z	dede
fddZdefddZdede
fddZdedefddZdede
fddZd$dedefddZdddedefddZdeded ee defd!d"Zd#S )%r   r   c                 C   s   || _ d| _tt| _d S )Nr   )r   r   r   list	_expected)r   r   r   r   r   r   /   s   zSimpleParser.__init__c                 K   s<   | j  D ]\}}t|tr|dst| |t| qd S )N_)__dict__items
isinstancer   
startswithsetattrr+   )clsr&   nvr   r   r   __init_subclass__4   s
   zSimpleParser.__init_subclass__returnc              	   C   sr   z|   }W n ty   t| jt| j| jt| j d w | jt| jk r7t| jt| j| jt| j |S r   )startr   r   r   maxr-   r   len)r   resultr   r   r   parse9   s   " zSimpleParser.parsec                 C   s   t r   )NotImplementedErrorr   r   r   r   r9   B   s   zSimpleParser.startr   c                 C   s<   t |}| j| j| j|  |krdS | j| j | dS NTFr;   r   r   r-   appendr   r   lr   r   r   peek_staticF   s
   zSimpleParser.peek_staticc                 C   sJ   t |}| j| j| j|  |kr|  j|7  _d S | j| j | tr   )r;   r   r   r-   rA   r   )r   r   lengthr   r   r   staticN   s
   zSimpleParser.staticc                 C   sJ   t |}| j| j| j|  |kr|  j|7  _dS | j| j | dS r?   r@   rB   r   r   r   static_bV   s   zSimpleParser.static_bstringsc                 G   s    |D ]}|  |r|  S qtr   )rG   r   r   rH   sr   r   r   anyof_   s
   
zSimpleParser.anyofc                 G   s   |D ]
}|  |r dS qdS r?   )rG   rI   r   r   r   anyof_bf   s
   
zSimpleParser.anyof_b   rE   c                 C   sZ   | j | t| jkr| j| j | j |  }|  j |7  _ |S | j| j  d| d t)N<Any >r   r;   r   r-   rA   r   )r   rE   resr   r   r   anym   s   zSimpleParser.any)rE   c                G   s   | j | t| jkr4| j| j | j |  }||vr"|  j |7  _ |S | j| j  d| d| d t| j| j  d| d| d t)NrN   z except rO   rP   )r   rE   rH   rQ   r   r   r   any_butv   s     zSimpleParser.any_butcharsmimac                 C   s^  g }z+t |D ]$}| j| j|  |v r|| j| j|   q| j| j|  | tW n	 ty6   tw |  j|7  _|d u rsz'	 | j| j |v r]|| j| j  |  jd7  _n
| j| j | nqDW n@ tyr   Y n8w z-t || D ]$}| j| j |v r|| j| j  |  jd7  _qz| j| j |  W n	 ty   Y nw d|S )NTrM    )	ranger   r   rA   r-   extendr   
IndexErrorjoin)r   rT   rU   rV   r<   offr.   r   r   r   multiple   sJ   
zSimpleParser.multipleN)rM   )r   r   r   r!   r   r7   r$   r=   r   r9   boolrD   rF   rG   rK   rL   r"   rR   rS   r   r]   r   r   r   r   r   .   s    			"r   N)__doc__abcr   r   collectionsr   	functoolsr   typesr   r   typingr	   r
   r   r   __all__BaseExceptionr   
ValueErrorr   r$   r+   r   r   r   r   r   <module>   s    
