0

我正在制作一种基本语言。嗯,不完全是,但你会看到的。现在,我执行了 echo 和 exit 命令,但我需要帮助。

如果我给它一个字符串'echo "hello bob"',我希望它把它分开,然后给我一个像这样的数组 [echo, Hello Bob]。现在,我有回声工作,但只有一个字。所以我可以做-->'echo bob',它会输出'bob'。但是,如果我执行“echo hi bob”,它将输出“hi”。我一直希望它这样做。如果我有一个命令 foo,我想做 'foo "bar face" boo' 并得到 [foo, bar face, boo]。所以基本上我想做 myArr.split(' ') 除了引号之间的任何内容。我怎样才能做到这一点?

4

2 回答 2

4

这是一个简单的答案:

>>> import shlex
>>> shlex.split('echo "hello bob"')
['echo', 'hello bob']

shlex是一个帮助解析类 shell 语言的模块。

可以在此处找到文档(谢谢,JIStone):http ://docs.python.org/library/shlex.html

于 2012-05-31T22:12:58.500 回答
1

这是一个简单的标记器

import re

def s_ident(scanner, token): return token
def s_operator(scanner, token): return "op%s" % token
def s_float(scanner, token): return float(token)
def s_int(scanner, token): return int(token)

scanner = re.Scanner([
    (r"[a-zA-Z_]\w*", s_ident),
    (r"\d+\.\d*", s_float),
    (r"\d+", s_int),
    (r"=|\+|-|\*|/", s_operator),
    (r"\s+", None),
    ])

print scanner.scan("sum = 3*foo + 312.50 + bar")

您将需要一个解析器来实际使用这个 lex 的内容

于 2012-05-31T22:07:14.297 回答