【正文】
)(11)(15)+(11)c(6)(15)(16)+(14)(15)(7)(16) 試構(gòu)造下面的程序的流圖,并找出其中所有回邊及循環(huán)。 read P x := 1 c := P * P if c 100 goto L1 B := P * P x := x + 1 B := B + x write x halt L1: B:= 10 x := x + 2 B := B + x write B if B 100 goto L2 halt L2: x := x + 1 goto L1解:程序的流圖如下 對本題中所示的流圖,求出其各結(jié)點(diǎn)n的控制結(jié)點(diǎn)集D(n)、回邊及循環(huán)(n0為首結(jié)點(diǎn))。解:各結(jié)點(diǎn)n的控制結(jié)點(diǎn)集D(n)如下: D(n0) = {n0} D(n1) = {n0, n1} D(n2) = {n0, n1, n2} D(n3) = {n0, n1, n2, n3} D(n4) = {n0, n1, n2, n4} D(n5) = {n0, n1, n2, n5} D(n6) = {n0, n1, n2, n5, n6} D(n7) = {n0, n1, n2, n5, n6, n7} 回邊和循環(huán): 因?yàn)?D(n5) = {n0, n1, n2, n5} ,且 n5 n2,所以 n5 n2為一條回邊。根據(jù)它求出的循環(huán) L1 = {n2, n5, n3, n4}。 因?yàn)镈(n6) = {n0, n1, n2, n5, n6} ,且 n6 n1,所以n6 n1為一條回邊。根據(jù)這條回邊,求出的循環(huán) L2 = {n6, n1, n5, n3, n4, n2}。 在對編譯程序產(chǎn)生的中間代碼進(jìn)行優(yōu)化時(shí),就實(shí)施優(yōu)化的范圍來說,分 A 優(yōu)化和 B 優(yōu)化。循環(huán)優(yōu)化屬于 B 優(yōu)化,它對于提高目標(biāo)代碼的運(yùn)行速度是非常有效的。循環(huán)優(yōu)化主要采用的三項(xiàng)優(yōu)化措施是 C 、 D 、 E 。答案:A:局部 B:全局 C:代碼外提 D:削減運(yùn)算強(qiáng)度 E:刪除歸納變量