【发布时间】:2017-05-17 15:26:45
【问题描述】:
我正在尝试构建一个任意精度的计算器。 我在链表中表示数字(一个节点是一个数字),我想将它们存储在堆栈中。 但是,我似乎无法弄清楚如何在保持正确的数学运算顺序的同时将作为字符串接收的数学表达式分开。
例如,如果插入的表达式是6*8-2+8-8*9/4,我将数字表示为链表并将它们插入堆栈,并将运算符插入不同的堆栈,然后我想弹出每个计算的参数并再次推送结果,以此类推,直到我得到最终结果。
我的问题是,我怎样才能实现这个并且仍然遵循数学运算顺序?
【问题讨论】:
-
一种常用的方法是首先使用 Dijkstra 的 Shunting-yard algorithm 将表达式转换为 RPN
-
首先使用标准库的shlex进行分词,然后提出语法,实现解析器。我发现 shift reduce 解析器是最容易理解和实现的。我最近在这方面做了一个玩具项目——github上的shreducers。
-
请看这个问题和好的回复。 stackoverflow.com/questions/28256/…
标签: python python-3.x math stack expression