gpt4 book ai didi

python - 将普通代码转换为 3AC - 三地址代码

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:16:03 25 4
gpt4 key购买 nike

我正在尝试制作一种算法来转录某些输入,例如:

(a * b) / (c * d)

并会在 3AC 中打印出这样的输入:

t1: a * b
t2: c * d
t3= t1/t2

有人有什么建议吗?

最佳答案

转录此类方程式的算法非常简单。

显然首要任务是将给定方程式转换为 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 计算器简单得多。

关于python - 将普通代码转换为 3AC - 三地址代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40911238/

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