【构建基本块】基本块包含一个语句序列。控制流从语句的开始进入, 而在结束时离开而没有任何停止(可能是该块的最后一条指令除外)。
以下三个地址语句序列构成一个基本块:
t1:= x * x
t2:= x * y
t3:= 2 * t2
t4:= t1 + t3
t5:= y * y
t6:= t4 + t5
基本块构建算法:划分为基本块
输入:它包含三个地址语句的序列
输出:它包含一个基本块列表, 每个三个地址语句恰好在一个块中
方法:首先确定代码中的领导者。寻找领导者的规则如下:
- 第一个陈述是领导者。
- 如果有条件或无条件的goto语句, 例如:if … . goto L或goto L, 则语句L为领导者
- 如果指令L紧随goto或条件goto语句(例如:goto B或goto B), 则它是领导者
考虑以下两个长度为10的向量a和b的点积的源代码:
begin
prod :=0;
i:=1;
do begin
prod :=prod+ a[i] * b[i];
i :=i+1;
end
while i <
= 10
end
上面的源程序的三个地址代码如下:
B1
(1) prod := 0
(2) i := 1
B2
(3) t1 := 4* i
(4) t2 := a[t1]
(5) t3 := 4* i
(6) t4 := b[t3]
(7) t5 := t2*t4
(8) t6 := prod+t5
(9) prod := t6
(10) t7 := i+1
(11) i := t7
(12) if i<
=10 goto (3)
基本块B1包含语句(1)至(2)
基本块B2包含语句(3)至(12)