Open JacyCui opened 2 years ago
定义 3.4 中将程序点(PP)定义为相邻语句的二元组是否不妥?这样的定义将程序点定义在了 CFG 的边上。但按我的理解,PP 应该是和每个结点(i.e.语句)匹配的,每个语句执行前后各一个,然后这样可以和 In[s] 和 Out[s] 相对应.
举个例子,考虑一个执行流合并,三个语句 a, b, c,连边 a-> c, b-> c。那么,这里有几个程序点呢?按照当前定义 3.4 的理解,应该有两个程序点 (a, b) 和 (b, c)。但是如何为这两个程序点分配数据流值呢?我们发现 In[c] = Out[a] meet Out[b]。这里有三个数据流值,理应有三个 PP。
@rijuyuezhu 定义 3.4 中将程序点(PP)定义为相邻语句的二元组是否不妥?这样的定义将程序点定义在了 CFG 的边上。但按我的理解,PP 应该是和每个结点(i.e.语句)匹配的,每个语句执行前后各一个,然后这样可以和 In[s] 和 Out[s] 相对应.
举个例子,考虑一个执行流合并,三个语句 a, b, c,连边 a-> c, b-> c。那么,这里有几个程序点呢?按照当前定义 3.4 的理解,应该有两个程序点 (a, b) 和 (b, c)。但是如何为这两个程序点分配数据流值呢?我们发现 In[c] = Out[a] meet Out[b]。这里有三个数据流值,理应有三个 PP。
嗯嗯,这个是很早以前写的了,当时还很稚嫩。应当是 CFG 的每个结点前后各有一个程序点,你可以提一个 pr 来改进相关表述,我审核一下可以 merge 进主线。
https://static-analysis.cuijiacai.com/03-dfa-ap/
基于南京大学软件分析课程的静态分析基础教程