达到定义分析 - 我的解决方案是否正确

我被要求为以下代码编写到达定义,我想知道我的解决方案是否正确?我是否在正确的轨道上?我真的很感激任何帮助或提示。谢谢。

代码:

a = 0;
while (a < 100) {
    b = a + 1
    c = c + b
    a = b * 2
}
return c;

第 1 步:寻找块和标记

a = 0;             // block 1  | a1

while (a < 100)    // block 2  |

    b = a + 1      // block 3  | b2
    c = c + b                  | c3
    a = b * 2                  | a3

return c;          // block 3  | 

第 2 步:为每个块找到 GEN 和 KILL 集

GEN 杀死
1 a1 a3
2
3 b3、c3、a3 a1
4

第 4 步:查看算法以找到 IN 和 OUT 集

input: control flow graph CFG = (N,E,Entry,Exit)
// Boundary condition
OUT[Entry] = ∅

// Initialization for an iterative algorithm
For each basic block B other than Entry
OUT[B] = ∅

// iterate
While (changes to any OUT occur) {
  For each basic block B other than Entry {
    in[B] = ∪ (out[p]),for all predecessors p of B
    out[B] = fB(in[B]) // out[B]=gen[B]∪(in[B]-kill[B])
}

第 5 步导出 IN 和 OUT 集

GEN 杀死 IN OUT
进入
1 a1 a3 a1
2 a1 a1
3 b3、c3、a3 a1 a1 b3、c3、a3
4 b3、c3、a3、a1 b3、c3、a3、a1
退出 b3、c3、a3、a1 b3、c3、a3、a1
crystalrainss 回答:达到定义分析 - 我的解决方案是否正确

看看这个例子:https://engineering.purdue.edu/~milind/ece573/2011spring/ps8-sol.pdf

该示例中分析的代码比您的代码稍微复杂一些,但对整个解决方案进行了非常详细的解释。

本文链接:https://www.f2er.com/977861.html

大家都在问