我试图构建一个任意精度计算器。 我代表链接列表中的数字(一个节点是一个数字),我想将它们存储在一个堆栈中。 但是,我似乎无法弄清楚如何在保持正确的数学运算顺序的同时将接收到的数学表达式拆分为一个字符串。例如,如果插入的表达式是6*8-2+8-8*9/4
,我会将数字表示为链接列表并将它们插入到堆栈中,然后将这些操作符插入到不同的堆栈中,然后我想弹出每个计算的参数,然后再次推算结果,等等,直到我得到最终结果。从字符串评估数学表达式并将其插入到堆栈中
我的问题是,我该如何实现这一点,仍然遵循数学运算的顺序?
一个常见的方法是首先将表达式转换为[RPN](https://en.wikipedia .org/wiki/Reverse_Polish_notation)使用Dijkstra的[Shunting-yard算法](https://en.wikipedia.org/wiki/Shunting-yard_algorithm) –
首先,使用标准库的shlex来标记,然后提出语法并实现一个解析器。我发现shift减少了解析器最容易理解和实现的地方。我最近在github上做了一个玩具项目 - 缩节器。 – jbasko
请看这个问题和很好的答复。 http://stackoverflow.com/questions/28256/equation-expression-parser-with-precedence – rajah9