创建一个互斥的代码路径列表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建一个互斥的代码路径列表相关的知识,希望对你有一定的参考价值。
这是一个普遍的问题,不是一种语言特有的。基本上:如何将1-deep代码路径列表(即if条件列表)转换为互斥if条件列表?即是否有一系列算法可以做到这一点?我觉得这是编译器中的常见问题。
让我们约束问题。我们有一个非常简单的语言。
- 整数变量
- 带有两个二元运算符的if / else条件==和!=
- 执行从上到下发生
- 没有副作用:如果b = 1然后b = 2,我们可以删除第一个作业
例:
if a == 1 { b = 1 }
if a == 2 { b = 2 }
if a != 3 { b = 2 }
if a == 4 { b = 3 }
将被转换为例如:
if a == 4 { b = 3 }
else if a != 3 { b = 2 }
如果这个问题得到解决,那么支持<,>,&,|会更具挑战性。
答案
我做了一些研究。所以有两个步骤:
- 检测互斥性
- 使两个非互斥条件相互排斥
如sepp2k已经说过的,可以使用SAT求解器来检测互斥性。不知道它们是如何在内部工作的,但是一位同事给出了使用格子作为值的抽象解释思想的暗示。
ad 2.在一种天真的方法中,对于两个非互斥的代码路径A和B,我们简单地用条件A和B,A和~B以及~A和B替换它们。
以上是关于创建一个互斥的代码路径列表的主要内容,如果未能解决你的问题,请参考以下文章