0

我目前正在开展一个项目,以在给定的 I/O 函数中查找变量依赖项,并选择使用 Pycparser。我现在的代码主要是一个访问者类和几个节点类。它的作用是遍历 AST 并为每个变量赋值、声明、输入、输出和 If 语句创建节点。这些节点具有存储其依赖项的列表属性,例如:

a = b + c/2;

将创建一个名为“a”的节点,并将其连接到“b”和“c”的最新节点。

我的问题来自这里:关于如何连接输出变量有一个大致的想法吗?

return b;

除了可能是“b”的最新实例之外,此代码没有向我们提供有关它具有哪些依赖项的任何信息。但是,我能想出的所有解决方案也会添加“b”的先前节点。例子:

b = 3;
b = b + 4;

我不希望这两个“b”节点都用于我的输出依赖项。但是,如果从 If 语句中获取多个路径,我会想要多个节点,但每个路径中只有最近的一个。如果您发现问题含糊不清,是否有任何关于查找变量依赖关系的方法或来源可以推荐?简而言之,这个项目应该实现的是输出 x(可能有多个输出)我希望能够找出它依赖于哪些输入。这又可能是多种情况,具体取决于其他变量。不同依赖的例子:

int function(int a, int b, int c, int d, bool z){
    int x;
    if(z){
       x = a + b;
    }
    else{
        x = c + d;
    }

    return x;
4

1 回答 1

0

我刚刚发现,我一直在使用的方法是不可能实现的。AST 和 Pycparser 可以为我提供的是用于确定变量值的所有变量。

要解决我的问题,您必须考虑创建 CFG(控制流图)以及数据流。然而,这完全是另一种方法和结果。

于 2016-06-28T05:55:47.020 回答