练习9.1
解:程序的流图如下。
练习9.2解:各结点n的控制结点集d(n)如下:
d(n0) =
d(n1) =
d(n2) =
d(n3) =
d(n4) =
d(n5) =
d(n6) =
d(n7) =
回边和循环:
因为 d(n5) =且 n5 ->n2,所以 n5 ->n2为一条回边。根据它求出的循环 l1 =
因为d(n6) =且 n6 ->n1,所以n6 ->n1为一条回边。根据这条回边,求出的循环 l2 =
练习9.3解:
练习9.4
解:把本题的三地址**划分成基本块并画出其程序流图显示在图9.4(1)中,其中有三个基本块b1,b2,b3,有一条回边b2 ->b2,相应的循环是。
1)**外提:由于循环中没有不变运算,故不做此项优化 (2)强度削弱:b2中a和b都是i的归纳变量。优化结果显示在图9.4(2)中。
3)删除归纳变量:变换循环控制条件,删除归纳变量i后的流图显示在图9.4(3)中
练习9.5解:采用字节地址,两个字节作为一个机器字。
1)程序的四元式中间**如下:
b1: read n /*置初值 */
i :=2b2: if i > n goto b4 /*第一个for语句 */
b3: t1 :=i
t2 :=addr(a) /数组a的基地址 */
t1 :=2 * t1
t2[t1] :true
i :=i + 1
goto b2
b4: i :=2
t3 :=n **0.5
t3 :=t3] +1 /*t3]是对t3的值取整 */
b5: if i > t3 goto b12
b6: t4 :=i
t5 :=addr(a)
t4:= 2 * t4
if t5[t4] goto b8
b7: goto b11
b8: j :=2 * i
b9: if j > n goto b11 /*第三个for语句 */
b10: t6 :=j
t7 :=addr(a)
t6 :=2 * t6
t7[t6] =false
j :=j + i
goto b9
b11: i :=i + 1
goto b5
b12: 2)根据四元式的中间**,可划分成基本块b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11。其程序流图如下:
考察上面的程序流图:
d(b3) =又有 b3 ->b2,因此 b3 ->b2 是一条回边。根据它找到的循环 l1 =
d(b10) =又有 b10 ->b9,所以 b10 ->b9 是一条回边。根据这条回边找到循环 l2 =
d(b11) =又有 b11 ->b5,因此 b11 ->b5 是一条回边。根据这条回边找到循环 l3 =
3)进行**外提。
把在循环中不随循环变化的操作提到循环外的前置结点中,且在基本块中作复写传播和删除无用赋值。结果程序流图如下:
4)进行强度削弱和删除归纳变量后,其程序流图如下:
练习9.6
解:本题程序的程序流图如图9.6(1)所示。
1)计算各基本块的到达-定值集in[b]。公式为:
in[b] =out[p]
p∈p[b]
out[b] =gen[b] ∪in[b] -kill[b] )
gen[b]和kill[b]由程序流图直接求出,显示在表9.6(1)中。
表9.6(1)
求各基本块到达-定值的初值及各遍的执行结果显示在表9.6(2)中。
表9.6(2)
2)求各基本块中各变量引用点的ud链:
假设在程序中某点u引用了变量a,则把能到达u的a的所有定值点,称为a在引用点u的引用-定值链(简称ud链)。可以利用到达-定值信息来计算各个变量在任何引用点的ud链。
由图9.6(1)的程序流图可知,i的引用点是d3、d5和d6,j的引用点是d3和d8。
b2中i和j的引用点d3前面没有对i和j的定值点,其ud链在in[b2]=中,所以i在引用点d3的ud链是;j在引用点d3的ud链是。
在b2中i的引用点d5前面有i的定值点d4,且在d4定值后到达d5,所以i在引用点d5的ud链是。
b3中i的引用点d6前面没有i的定值点,其ud链是in[b3]中i的所有定值点,所以是。
b4中j的引用点d8前面没有对j的定值点,其ud链是in[b4]中j的所有定值点。已知in[b4] =所以,j的引用点d8的ud链是。
3)各基本块出口的活跃变量集v-out[b]:
对程序中某变量a和某点p,如果存在一条从p开始的道路,其中引用了a在p点的值,则称a在点p是活跃的。计算公式如下:
v_in[b] =use[b] ∪v_out[b] -def[b] )
v_out[b] =v_in[s]
s∈s[b]
其中,s[b]是b的所有后继块组成的集合。
def[b]和use[b]可以从给定流图直接求出。从图9.6(1)的流图中求出的各基本块的def[b]和use[b]显示在表9.6(3)中。
表9.6(3)
计算次序为b4, b3, b2, b1,各次迭代结果显示在表9.6(4)中。
表9.6(4)
4)各基本块变量定值点的du链。
一个变量a在某点p定值后该定值到达a的那些引用点成为该定值点的定值-引用链(简称du链)。使用下面的方程式进行计算:
d_in[b] =d_use[b] ∪d_out[b] -d_def[b] )
d_out[b] =d_in[s]
s∈s[b]
其中s[b]是b的后继基本块集。d_use[b]和d_def[b]根据程序流图可直接求出。本题根据图9.
6(1)的程序流图求出的d_use[b]和d_def[b]显示在表9.6(5)中。
xt02答案
练习2.1 解答 a 终结符号为 非终结符号为 开始符号为 s b c a,a s l l,s s,s a,s a,a a,a,a s l l,s s,s a,s a,l a,l,s a,s,s a,a,s a,a,a a,a,a a,a s l l,s s,s a,s a,l a,l,s a,s,...
09 A 答案
暨南大学考试试卷 答案 1.设命题 p 空集是一切集合的真子集,q 日本首都是京都,r 暨大校训是忠信笃敬,则复合命题 的真值为 真 2.设b为含命题变项p,q,r的矛盾式,则公式的类型为 重言式 3.设命题公式,则g与h的逻辑关系是 等值 4.设f x x为实数,g x,y x y,命题 不存在最...
09技能答案
2009年5月心理咨询师 真题技能案例答案。1.本案例最可能的诊断是什么?诊断的依据是什么?初步诊断 a 心理正常,心理不健康,严重心理问题。诊断依据 a 首先根据心理正常与异常三原则 主客观统。一 知情意协调 人格相对稳定,有自知力和主动求医行为,无幻觉 妄想等精神病性症状,可以排除重性精神障碍诊...