2016-12-01 26 views

回答

1

转录这些方程的算法非常简单。

显然,第一项任务是将给定的公式转换为reverse polish notation。从这里你已经有完美定义的执行顺序。

您现在必须为操作数准备堆栈。此时,您只需像普通的RPN那样执行它,除了不需要执行操作并将结果放回操作数堆栈,您必须用新的数字打印新的TAC指令,并将该符号放回堆栈而不是结果。

在您的例子RPN将是:a b * c d * /

所以ab进入堆叠。当我们遇到*时,我们从堆栈中弹出2个项目,打印t1 := a * b并将t1堆叠起来。现在我们更多地遍历RPN,并将cd放在堆栈上。现在我们又碰到另外一个*,所以我们再次从堆栈中弹出2个项目,用新的TAC符号t2 := c * d打印它们,并将我们的新符号t2重新放回堆栈。

最后我们遇到/所以我们再次从堆栈中弹出2个项目,创建新的符号并打印它:) t3 := t1/t2

这比标准的RPN计算器简单得多。