gpt4 book ai didi

python - 涵盖 C 程序的更多运算符(例如 <、<= 等)的 Python 中前缀到前缀的良好实现?

转载 作者:太空宇宙 更新时间:2023-11-04 00:08:49 24 4
gpt4 key购买 nike

我一直在寻找 Python 的实现,但运气不佳,该实现将中缀转换为前缀,范围内有足够数量的算术和逻辑运算符,并关心其在良好 Python 实现上的属性。 更具体地说,我对出现在 C 程序的条件子句中的运算符感兴趣。 (例如,它将在前缀中转换 a > 0 && b > 1

由于我仍然是 Python 的新手,如果有人可以向我提供实现或一些有关此的提示,我将不胜感激。

我在互联网上找到了一个我失去了引用的实现(如下),但它只关心更简单的运算符。我对如何在这个版本上执行此操作一无所知,如果有人知道已经包含所有运算符的版本,我将不胜感激,以避免任何运算符被意外忽略。

这样的实现也应该考虑括号。

如果您需要更多详细信息,请发表评论!

谢谢。

def parse(s):
for operator in ["+-", "*/"]:
depth = 0
for p in xrange(len(s) - 1, -1, -1):
if s[p] == ')': depth += 1
if s[p] == '(': depth -= 1
if not depth and s[p] in operator:
return [s[p]] + parse(s[:p]) + parse(s[p+1:])
s = s.strip()
if s[0] == '(':
return parse(s[1:-1])
return [s]

最佳答案

我现在没有时间编写实现,但这是我编写的一个实现,它将中缀转换为后缀(反向抛光)表示法(引用:Shunting-yard algorithm)。修改此算法以改为执行前​​缀应该不会太难:

  • ops 是运算符标记的 set()
  • prec 是一个 dict()包含操作数标记作为键和运算符的整数值的优先级(例如 { "+": 0, "-": 0, "*": 1, "/": 1})
  • 使用正则表达式将字符串解析为标记列表。

(真的,opsprec 可以结合使用)

def infix_postfix(tokens):
output = []
stack = []
for item in tokens:
#pop elements while elements have lower precedence
if item in ops:
while stack and prec[stack[-1]] >= prec[item]:
output.append(stack.pop())
stack.append(item)
#delay precedence. append to stack
elif item == "(":
stack.append("(")
#flush output until "(" is reached
elif item == ")":
while stack and stack[-1] != "(":
output.append(stack.pop())
#should be "("
print stack.pop()
#operand. append to output stream
else:
output.append(item)
#flush stack to output
while stack:
output.append(stack.pop())
return output

关于python - 涵盖 C 程序的更多运算符(例如 <、<= 等)的 Python 中前缀到前缀的良好实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11714582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com