Алгоритм парсинга выражений в python?
У меня есть следующий алгоритм парсинга выражений в Python:
def parse(strinput):
for operator in ["+-", "*/"]:
depth = 0
for p in range(len(strinput) - 1, -1, -1):
if strinput[p] == ')': depth += 1
elif strinput[p] == '(': depth -= 1
elif depth==0 and strinput[p] in operator:
# strinput is a compound expression
return (strinput[p], parse(strinput[:p]), parse(strinput[p+1:]))
strinput = strinput.strip()
if strinput[0] == '(':
# strinput is a parenthesized expression?
return parse(strinput[1:-1])
# strinput is an atom!
return strinput
(его можно найти здесь: http://news.ycombinator.com/item?id=284842)
Мне трудно это понять, так как я не считаю документы Python очень полезными для этой ситуации. Может кто-нибудь сказать мне, что строка: for operator in ["+-", "*/"]:
средства? Я знаю, что это структура для каждой строковой переменной, которая является оператором в массиве этих двух элементов, но почему она написана так ["+-, */"]? Как Python разделяет это? В первой итерации оператор "+-"?
Любая помощь будет много значить. Спасибо
1 ответ
Вы правы; for operator in ["+-", "*/"]:
значит оператор будет "+-"
первый раз и "*/"
второй раз через цикл.
Обратите внимание, как позже он проверяет, если strinput[p] in operator
, Python рассматривает строку как список символов, поэтому это выражение будет истинным, только если strinput[p]
равно "+"
или же "-"
в первый раз и "*"
или же "/"
второй раз до конца.
(Причина, по которой они делают это для порядка операций "+"
а также "-"
получить равный, но более низкий приоритет "*"
а также "/"
)