源代码的结构在编译器中往往会在某个环节被转换成CFG,不同的控制语句会生成形形色色的控制流结构,而在后端转换的过程中又会生成许多前端语法无法描述的结构出来,在控制流分析的过程中需要去识别这些结构。这篇文章简单的介绍一些基本结构。
1,基本块(basic block)。基本块是一个执行时连续的语句序列,往往最后会跟一个终结语句,比如跳转,条件跳转或者返回,除了最后一个语句外没有任何的分支或跳转命令。
基本块
2,分支结构(branch)。分支结构由一个条件基本块和两个分支基本块组成,一般语言中的if\while\for都会产生这种结构。
分支结构
根据分支结构的上下文,又可以区分为if-then结构,if-else结构和if-then-else结构。
if-else结构