Yaitza

控制流图

1.控制流图

控制流图(Control Flow Graph, CFG)也叫控制流程图,是一个过程或程序的抽象表现,是用在编译器中的一个抽象数据结构,由编译器在内部维护,代表了一个程序执行过程中会遍历到的所有路径。它用图的形式表示一个过程内所有基本块执行的可能流向, 也能反映一个过程的实时执行过程。

2.控制流图生成算法

2.1 简单语句节点

该节点直接添加到当前节点的下一节点,然后当前节点变为后继节点。
简单语句节点

2.2 IF语句节点

该节点需要增加一条条件节点,由该条件出发引出两条后继节点,其中一条为if为真的后继节点,另外一条需要根据代码表达式判断是否存在else,如果存在else则后继节点再增加一条else的节点,不存在else则仍添加一条后继节点,该节点为if结束节点。最后当前节点分别对if和else内的语法树进行分析,if内的分析完后最后指向if结束节点。
IF语句节点

2.3 SWITCH语句节点

该节点需要增加一条条件节点,由该条件出发引出多条后继节点。建立两个栈结构,一个label栈,用于存放case或者default节点,一个是break栈,如果有break表示该case结束。最后增加一个switch结束节点,所有case节点的后继节点都指向它。
IF语句节点

2.4 WHILE语句节点

该节点需要增加一条条件节点,由该条件出发引出两条后继节点,其中一个节点为while结束节点,另外一个节点为while内语句节点。再增加break栈结构和continue栈结构,while结束时从这些栈中取出节点,break节点指向while结束节点,continue指向while条件节点。
WHILE语句节点
WHILE语句节点
WHILE语句节点

2.5 DO-WHILE语句节点

该节点处理方式和上述while相似,只要把条件节点换在while结束前,并且该条件节点指向do节点。
DO-WHILE语句节点

2.6 FOR语句节点

该节点添加一个后继节点表示循环初始值,再在后面添加条件节点表示for循环条件,循环结束节点需要指向条件节点。
FOR语句节点

🐶 您的支持将鼓励我继续创作 🐶