流程图

2025年6月17日 | 阅读 4 分钟

流程图是一个有向图。它包含一组基本块的控制流信息。

控制流图用于描述程序控制在块之间的解析方式。它在循环优化中很有用。

一个控制流图由两个主要块组成

  • 入口块:在此块中,它允许控制进入控制流图。
  • 出口块:在此块中,控制流通过出口块。

构建基本块的算法

下面给出了一个创建基本块算法的逐步解释

算法:一个算法用于将三地址码分成基本块。

输入:它是三地址码的集合。

输出:具有块中三地址语句的基本块的集合称为输出。

让我们以将 10 x 10 矩阵转换为单位矩阵为例。

上述程序的三地址码如下所示

上述代码的六个基本块如下所示

  1. Block1 对应语句 1
  2. Block2 对应语句 2
  3. Block3 对应语句 3 - 9
  4. Block4 对应语句 10 - 11
  5. Block5 对应语句 12
  6. Block6 对应语句 13 - 17

上述基本块的控制流图如下所示。

说明

在上述控制流图中,block1 是起点。它没有以任何跳转语句结束。它紧接着是 block2。block3 最后一条指令中的条件跳转指向 block3 的第一条指令,第二条指令是 block4。最后,block6 是控制流图的出口点。

向量点积的流程图如下所示

Flow Graph
  • Block B1 是初始节点。Block B2 紧接着 B1,因此从 B2 到 B1 存在一条边。
  • 从 B1 的最后一条语句到 B2 的跳转目标是第一条语句 B2,因此从 B1 到 B2 存在一条边。
  • B2 是 B1 的后继,B1 是 B2 的前驱。

如何创建控制流图?

以下是创建控制流图的简单步骤。

  • 图中的每个语句都将有一个节点。
  • 第一条语句将只有出边。
  • 出口节点将只有入边。

流程图的特征

以下是控制流图的特征。

  • 控制流图是面向过程的。
  • 控制流图显示了程序控制如何解析到块中。
  • 它显示了在程序执行期间可以遍历的所有路径。

控制流图的表示

以下是控制流图的各种表示的详细信息。

  • If Then Else - 如果条件为真,则执行 TRUE 语句,否则执行 ELSE 块或 FALSE 语句。
Flow Graph

示例 1

在上面的例子中,我们创建了一个主函数,它声明了三个变量,例如 x、y 和 z。代码检查变量 x 的值是否大于变量 y 的值。如果 x 的值大于,则程序计算 x 和 y 变量的加法,并将值分配给变量 z,否则它计算 x 和 y 变量之间的减法,并将其分配给 z 变量。

  • While 循环 - 在 while 循环语句中,如果条件为真,则循环体结束,如果条件为假,则循环结束,程序中的下一条语句继续执行。
    Flow Graph
  • Do While 循环 - 在 do while 循环语句中,首先执行循环体,然后检查条件。循环语句执行到条件为真为止,如果条件变为假,则循环结束,程序的下一条语句继续执行。
    Flow Graph

关于控制流图的常见问题解答

1. 控制流图的优点是什么?

  • 它用于查看程序的流程。

2. 控制流图的局限性是什么?

  • 对于大型程序,理解复杂性很困难
  • 它没有显示明确的路径。
  • 它只显示程序的流程。
  • 它不包含任何信息。

下一主题块优化