今天,我在大学里完成了我的编译器建设期末论文。期末论文包括一个问题,要求我把一个for循环转换成3地址代码。它要求我转换的功能是:
for(i=1;i<=10;i++) x=y+z因此,我进行了循环展开,并将给定的语句转换为等效表达式:
x=(y+z)^10然后,我对转换后的代码做了三地址码:

如果是正确的,请告诉我。
发布于 2022-06-29 16:36:10
你的转换代码错了。
在最初的版本中,x不依赖于x的过去版本,这使得for循环死代码和循环展开无用,就像@Peter所说的那样。如果您正在寻找正确的答案,则正确的非优化答案将是:
(0) i=1
(1) if(i > 10) goto 5
(2) x=y+z
(3) i=i+1
(4) goto 1
(5) end然而,正确的优化答案是:
(0) x=y+z
(1) endhttps://stackoverflow.com/questions/72774942
复制相似问题