0
我试图让一个算法,将录制某些输入,如:翻译正常代码3AC - 三个地址码
(a * b)/(c * d)
,并打印出这样的输入3AC:
t1: a * b
t2: c * d
t3= t1/t2
有没有人有任何建议?
我试图让一个算法,将录制某些输入,如:翻译正常代码3AC - 三个地址码
(a * b)/(c * d)
,并打印出这样的输入3AC:
t1: a * b
t2: c * d
t3= t1/t2
有没有人有任何建议?
转录这些方程的算法非常简单。
显然,第一项任务是将给定的公式转换为reverse polish notation。从这里你已经有完美定义的执行顺序。
您现在必须为操作数准备堆栈。此时,您只需像普通的RPN那样执行它,除了不需要执行操作并将结果放回操作数堆栈,您必须用新的数字打印新的TAC指令,并将该符号放回堆栈而不是结果。
在您的例子RPN将是:a b * c d * /
所以a
和b
进入堆叠。当我们遇到*
时,我们从堆栈中弹出2个项目,打印t1 := a * b
并将t1
堆叠起来。现在我们更多地遍历RPN,并将c
和d
放在堆栈上。现在我们又碰到另外一个*
,所以我们再次从堆栈中弹出2个项目,用新的TAC符号t2 := c * d
打印它们,并将我们的新符号t2
重新放回堆栈。
最后我们遇到/
所以我们再次从堆栈中弹出2个项目,创建新的符号并打印它:) t3 := t1/t2
。
这比标准的RPN计算器简单得多。