基本块的划分原则有4条
- 初始语句作为第一个基本块的入口
- 遇到标号类语句,结束当前基本块,标号作为新基本块的入口(标号不在当前基本块中,而是划到下一个基本块)
- 遇到转移类语句时,结束当前当前基本块,转移语句作为当前基本块的结尾。
- 当给引用类型变量赋值时,结束基本块,作为出口
关于if语句和while语句基本块划分的说明,对于if语句,其形式为:
判断条件->t
(THEN,t,_,_)
S1
(ELSE,_,_,_)
S2
(ENDIF,_,_,_)
翻译成目标代码的时候,THEN为JMPF指令,ELSE为JMP指令,ENDIF仅作为标号出现,则基本块应这样划分:
判断条件->t
(THEN,t,_,_)
*****************
S1
(ELSE,_,_,_)
*****************
S2
*****************
(ENDIF,_,_,_)
while语句的基本块划分说明:
while语句的基本形式为:
(WHILE,_,_,_)
判断条件——>t
(DO,t,_,_)
S1
(ENDWHILE,_,_,_)
再翻译成目标代码时,WHILE为标号,DO为JMPF指令,EHDWHILE为JMP指令,所以其基本块应该这样划分:
*****************
(WHILE,_,_,_)
判断条件——>t
(DO,t,_,_)
*****************
S1
(ENDWHILE,_,_,_)
*****************
一个练习,引自吉林大学PPT