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"