我目前正在开展一个项目,以在给定的 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;