Алгоритм парсинга выражений в 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] равно "+" или же "-" в первый раз и "*" или же "/" второй раз до конца.

(Причина, по которой они делают это для порядка операций "+" а также "-" получить равный, но более низкий приоритет "*" а также "/")

Другие вопросы по тегам