MINI MINI MANI MO
3
  \2                 @   s   d Z ddlZddlZddlZddlmZ ddlmZ dddgZG dd dZ	dddZ
ejdejj
Zd
d Zdd Zedkreejdkree	  n,ejd ZeeZee	ee W dQ R X dS )z8A lexical analyzer class for simple shell-like syntaxes.    N)deque)StringIOshlexsplitquotec               @   sf   e Zd ZdZdddZdd Zddd	Zd
d Zdd
 Zdd Z	dd Z
dddZdd Zdd Z
dS )r   z8A lexical analyzer class for simple shell-like syntaxes.NFc             C   s  t |trt|}|d k	r(|| _|| _ntj| _d | _|| _|rHd | _nd| _d| _	d| _
| jrn|  j
d7  _
d| _d| _d| _
d| _d	| _d
| _t | _d| _d| _d| _t | _d | _|sd}n|d
krd}|| _|rt | _|  j
d7  _
| j
jtj|}| j
j|| _
d S )N #Z?abcdfeghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_u|   ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞz 	
Fz'"\"    r   Tz();<>|&z~-./*?=)
isinstancestrr   instreaminfilesysstdinposixeof
commenters	wordchars
whitespacewhitespace_splitquotesescape
escapedquotesstater   pushbacklinenodebugtoken	filestacksourcepunctuation_chars_pushback_chars	maketransdictfromkeys	translate)selfr   r   r   r#   t r+   /usr/lib64/python3.6/shlex.py__init__   sJ    
zshlex.__init__c             C   s*   | j dkrtdt|  | jj| dS )z:Push a token onto the stack popped by the get_token methodr   zshlex: pushing token N)r   printreprr   
appendleft)r)   tokr+   r+   r,   
push_tokenD   s    
zshlex.push_tokenc             C   sp   t |trt|}| jj| j| j| jf || _|| _d| _| jrl|dk	r\t	d| jf  nt	d| jf  dS )z9Push an input source onto the lexer's input source stack.r   Nzshlex: pushing to file %szshlex: pushing to stream %s)
r
   r   r   r!   r0   r   r   r   r   r.   )r)   	newstreamnewfiler+   r+   r,   push_sourceJ   s    
zshlex.push_sourcec             C   sD   | j j  | jj \| _| _ | _| jr:td| j | jf  d| _dS )zPop the input source stack.zshlex: popping to %s, line %dr   N)	r   closer!   popleftr   r   r   r.   r   )r)   r+   r+   r,   
pop_sourceX   s    
zshlex.pop_sourcec             C   s   | j r.| j j }| jdkr*tdt|  |S | j }| jdk	r~x<|| jkr|| j| j }|rr|\}}| j|| | j	 }qBW x*|| j
kr| js| j
S | j  | j	 }qW | jdkr|| j
krtdt|  ntd |S )zBGet a token from the input stream (or from stack if it's nonempty)r   zshlex: popping token Nz
shlex: token=zshlex: token=EOF)
r   r7   r   r.   r/   
read_tokenr"