从227谈控制流平坦化的还原(二)

没有太多时间总结,大家理解一下下面三个图

while break

while continue

不管是while break还是while continue,都可以把节点想象成case num,num就对应上面的数字,每个case对应着代码块

然后在构造新节点,其实就是在构造while循环代码,怎么构造可以自己思考一下

案例:阿里还原到最后一层后的图

上图环的while代码结构

// 类似于这样把环拆掉
27329
while (6947) {
    if (7585) {
        if (25856) {
            5891           // 一轮循环
        } else {
            if (14468) {
                5891       // 一轮循环
            } else {
                if (7301) {
                    3362
                    5891   // 一轮循环
                } else {
                    19012  // break
                }
            }
        }
    } else {
        if (14468) {
            5891       // 一轮循环
        } else {
            if (7301) {
                3362
                5891   // 一轮循环
            } else {
                19012
                break
            }
        }
    }
}
15397

结束

感谢learningx大佬