在python中解析表达式的算法?

2024-10-02 16:33:39 发布

您现在位置: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如何将其分开?在第一次迭代中,运算符是“+-”?在

任何帮助都意义重大。谢谢


Tags: in算法forreturnifparseis表达式
1条回答
网友
1楼 · 发布于 2024-10-02 16:33:39

您是正确的;for operator in ["+-", "*/"]:表示运算符将是"+-"第一次通过,而{}将是第二次通过循环。在

请注意,稍后它会检查strinput[p] in operator。Python将字符串视为一个字符列表,因此只有在第一次通过时strinput[p]等于"+"或{},第二次通过时"*"或{}时,此表达式才为真。在

(他们这样做的原因是为了操作顺序-"+"和{}与"*""/"相等但优先级更低)

相关问题 更多 >