网易首页 > 网易号 > 正文 申请入驻

程序分析理论 第三部分 控制流分析 理论证明

0
分享至

前言

这一篇文章是程序分析理论的理论部分的第七篇,是控制流分析部分的数学表示合理性的理论证明。
距离上一篇的发布已经很久了,所以做一个简单回顾。

目前讲了数据流分析过程间和过程内分析以及理论部分,其中理论部分讲到了结构归纳法,完全格和半序集。过程内分析有流分析,可用表达式Available Expressions Analysis,结果表达式 Reaching Definition Analysis,必定使用表达式Very Busy Expressions Analysis,活变量分析Live Variables Analysis。(翻译为个人理解)以及UD链。过程间分析包括上下文敏感和流敏感以及指针表达式。以及上一篇的控制流分析的抽象化和数学表示。

结构上的操作语义 Structural Operational Semantics

理论分析需要借助结构归纳法,所以我们要先将代码描述成结构。由于我们不再记录每一步操作后的变量值,所以我们只记录最初值和变量名

v用来表示value值 ρ表示变量组

v要记录所在语句,变量组。所以我们可以列出这样的表达式:v ::= c | close t in ρ

相对的ρ要记录变量名和值 : ρ ::= [] | ρ[x -> v]

也就有fn x => e_0可以表示为 close(fn x => e_0) in ρ

由于控制流分析不记录过程中变量的变化,所以会出现中间变量,也就是调用一个函数时,会有一个初始值,而整个程序也有一个初始值,函数的初始值就是中间变量,也就是局部变量。

我们用ie表示中间出现的表达式,it表示中间出现的项

表达式就是经过标签处理的代码,而项就是表达式中除去标签的部分。因为局部变量作用域需要记录,所以it会出现bind ρ in ie来实现记录作用域。相对的其值也需要记录,所以it又会有close t in ρ的情况

例子 Examples

上述式子中包括let in 结构,fn结构以及fun f结构,首先对两个fn结构进行处理:fn y => y ^2 |- close(fn y => y ^2) 我们用id_y表示 fn z => z ^7 |- close(fn z => z ^7) 我们用id_z表示。然后是fun f 结构fun f x => (f ^1 (fn y => y ^2)) |- close(fun f x => (f ^1 (fn y => y ^2))),我们用f表示。

对fn和fun f结构的处理主要是将函数转化为返回值形式作为参数实现控制流分析,也就是将操作当作参数。

let in结构则处理成控制流程图的形式:由于fun f 我们以f作为返回值,所以原结构变成 let g = f ^5 in (g ^6 (fn z => z ^7) ^8) ^9。而g = f ^5则是in部分的处理方式,我们记录g与f的转化关系记为bind[g -> f]。后续in部分g ^6由于g与f的转化关系我们将原结构处理成(f ^6 (fn z => z ^7) ^8) ^9。最后将fn z记为 id _z。

最终的表达方式是bind[g -> f] in (f ^6 id_z ^8) ^9。也就是先进行f操作再进行z操作得到的最终结果:(bind [ g -> f] in (bind [ f-> f] [x -> id_z] in (f ^1(fn y => y ^2) ^3) ^4) ^9) ^10)

由于上述例子处于递归循环结构当中,我们要进行一定的处理,在这个处理过程中,我们不改变g和f的对应关系,也不改变z的操作,只是在函数循环过程中多次执行y操作实现循环,也就是(bind [ g -> f] in (bind [ f-> f] [x -> id_z] in (bind [ f-> f] [x -> id_y] (f ^1(fn y => y ^2) ^3) ^4) ^4) ^9) ^10)

语义正确Semantic Correctness

我们要证明控制流分析的语义是正确的,首先我们证明过程间的操作语义是合理的:也就是要证明close t in p是合理的,即一个函数抽象t使用的参数一定包含于p中。除此之外,我们还要保证 t 的子语句中的ie一定是小于母语句中的ie的。这一点的证明我们只需要说明对于每一次调用都只使用本地环境,即任意参数被调用都在本地环境中存在,同时由于只使用本地环境,随着语句的不断更细的分析,ie一定是递减的。

所以对于语义分析,存在一定条件使得上述等式成立:

对于x -> v一定满足x在参数表p中,v一定在参数表p的x的可能性中。

对于 fn x => e_0 -> close(fn x => e_0) in p_0 一定满足 p_0包含于p中,且 fn x => e_0为待定量。fun f 同理

对于语句ie_1 ie_2 -> ie’_1 ie_2一定满足ie_1 -> ie’_1

因此我们做出定义:p和关于p的操作满足包含关系的情况下 ie -> ie’ 如果关于代码的结果包含于ie中,那么结果一定也包含于ie‘中,也就是对于一个环境变量更精确的条件,执行结果更精确。也就是说对于控制流分析存在一个最小的最优解。

我们如何判断当前结果为最小最优解。这就用到了完全格,摩尔集的知识,这些知识在前面的文章都已经提到了,在这里简单描述。

一个完全格的子集任意元素基于完全格规则的衍生元素依旧包含于当前子集,该子集为摩尔集。

那么我们只要证明{(C,p) | (C,p) |= ie}的集合Y包含所有满足条件的元素即可。

根据 p(x) = close t_x in p_x需要满足t_x 属于 p(x) 并且 p_x 和 p满足关系。由于控制流分析结构满足单调递减的规则。所以t_x 属于 最小p(x) 并且 p_x 和 最小p满足关系。所以当p属于全部环境变量,{p’ | p’ R p}的集合是摩尔集。

所以对于{(C,p) | (C,p) |= ie},由于在程序过程中的任意的 i 满足(C_i,p_i) |= ie 所以{(C,p) | (C,p) |= ie}是摩尔集。

最小不动点和最大不动点

在上面的分析中,我们选取的 |= 关系是寻找最大不动点,也就是向最小单元分析包含其环境变量。接下来我们改变其关系为寻找最小不动点,也就是向最大单元分析。来证明我们确实需要利用最大不动点构造摩尔集使得分析成立。

由于我们改变了|=的定义,所以分析方法要重新定义。

e = t ^l

t = (fn x => (x ^l x ^l) ^l) ^l (fn x => (x ^l x ^l) ^l) ^l

lab = {l}

var = {x}

term = {t , fn x => (x ^l x ^l) ^l ,x ^l x ^l ,x}

IEXP = {t ^l | t ∈ Term}

val = P({fn x => (x ^l x ^l) ^l}) = {空集 , {fn x => (x ^l x ^l) ^l }}

和之前一样,我们通过(C,p) |= t来证明最小不动点的{(C,p) | (C,p) |= ie}不是摩尔集

我们先对各种情况满足的条件进行罗列。

对于(C,p) |= x ^l 需要满足 p(x) 包含于 C(l)

(C,p) |= fn x => (x ^l x ^l) ^l 需要满足 {fn x => (x ^l x ^l) ^l} 包含于 C(l)

(C,p) |= (x ^l x ^l) ^l 需要满足 (C,p) |= x ^l 的条件,且如果C(l)不为空,需要满足(C,p) |= (x ^l x ^l) ^l的条件 C(l) = p(x)

也就是说(C,p) 和 (x ^l x ^l) ^l 的关系有三种情况,C(l) = p(x) = 空 ,C(l) = p(x) 不等于空 , 不成立。

由于摩尔集不能为空,所以当出现第二种情况时,最小不动点的{(C,p) | (C,p) |= ie}不是摩尔集。

最后

欢迎指教
DR@03@星盟

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
6万座"大巨蛋" 选址定了 上海杨浦拿下

6万座"大巨蛋" 选址定了 上海杨浦拿下

看看新闻Knews
2026-06-22 15:45:27
媒体人:巴西前锋马尔康被推回中国市场了

媒体人:巴西前锋马尔康被推回中国市场了

懂球帝
2026-06-22 15:09:33
东契奇和湖人管理层已收到警告,内容是希望他们能够离杜伦远一点

东契奇和湖人管理层已收到警告,内容是希望他们能够离杜伦远一点

移动挡拆
2026-06-22 07:43:52
办世界杯竟成烫手山芋,2030年仅两个申办国,为啥没人抢?

办世界杯竟成烫手山芋,2030年仅两个申办国,为啥没人抢?

叹为观止易
2026-06-08 14:22:53
5000万婚礼,陈婉珍一毛不拔,豪门冷血真相

5000万婚礼,陈婉珍一毛不拔,豪门冷血真相

圆梦的小老头
2026-06-09 15:50:06
表演艺术家雷军

表演艺术家雷军

不正确
2026-06-19 19:24:58
巴西女排爆冷输球,全胜战绩终结,日本队两连败,泰国无缘三连胜

巴西女排爆冷输球,全胜战绩终结,日本队两连败,泰国无缘三连胜

跑者排球视角
2026-06-21 23:57:00
女演员,吃了没文化的亏

女演员,吃了没文化的亏

新动察
2026-06-21 17:02:06
吃播良子被曝“大结局”倒计时:血糖破7牙齿烂光,网友却祝他“早点猝死”

吃播良子被曝“大结局”倒计时:血糖破7牙齿烂光,网友却祝他“早点猝死”

热搜摘要官
2026-06-20 00:49:00
非常罕见的老照片:退休多年的华国锋,看望生病的老革命家彭真

非常罕见的老照片:退休多年的华国锋,看望生病的老革命家彭真

文史季季红
2026-06-22 12:20:06
国防部出手了,比断供稀土还狠,困境来得太快,中国将有大动作?

国防部出手了,比断供稀土还狠,困境来得太快,中国将有大动作?

锅锅爱历史
2026-06-21 23:00:16
宾利新车官宣,6月20日,已正式上市

宾利新车官宣,6月20日,已正式上市

科技堡垒
2026-06-20 11:55:05
彻查!信号强烈!中央升级反腐“天网”!

彻查!信号强烈!中央升级反腐“天网”!

职场资深秘书
2026-06-21 14:07:53
南京27公斤黄金盗窃案,童某落网细节公布:在距离中越边境线仅百米处被截获;2名主犯都是高学历赌徒,童某赌债高达700万元

南京27公斤黄金盗窃案,童某落网细节公布:在距离中越边境线仅百米处被截获;2名主犯都是高学历赌徒,童某赌债高达700万元

荔枝新闻
2026-06-22 17:02:49
全球破19亿,北美夺冠,中国票房仅37.2万,观众给好莱坞上了一课

全球破19亿,北美夺冠,中国票房仅37.2万,观众给好莱坞上了一课

靠谱电影君
2026-06-22 17:02:52
几乎全是假货!利润高达2400%,为何消费者还前赴后继争相购买?

几乎全是假货!利润高达2400%,为何消费者还前赴后继争相购买?

离离言几许
2026-06-22 15:58:48
存款高于这个数,不必攀比,你已经拥有安稳的生活底色

存款高于这个数,不必攀比,你已经拥有安稳的生活底色

坠入二次元的海洋
2026-06-22 11:05:15
今年618,手机厂商全军覆没……

今年618,手机厂商全军覆没……

黑马公社
2026-06-22 11:49:51
陪玩陪睡只是皮毛!继关晓彤后,向佐再曝“猛料”,谢娜也没逃过

陪玩陪睡只是皮毛!继关晓彤后,向佐再曝“猛料”,谢娜也没逃过

趣文说娱
2026-06-21 23:14:56
中国灵活就业者突破3.2亿大关,占就业人口比例高达44%。

中国灵活就业者突破3.2亿大关,占就业人口比例高达44%。

流苏晚晴
2026-06-13 18:21:18
2026-06-22 18:15:00
安全客 incentive-icons
安全客
有思想的安全新媒体
1360文章数 4754关注度
往期回顾 全部

科技要闻

智谱盘中狂飙超40%,市值破万亿港元

头条要闻

离异男爽快加价20万买房 过户后卖家傻眼:房子被抵押

头条要闻

离异男爽快加价20万买房 过户后卖家傻眼:房子被抵押

体育要闻

法国球星祝中国队下届世界杯取得好成绩

娱乐要闻

陪睡陪玩是皮毛,向佐揭内娱暗规则

财经要闻

多部门核查"婴幼儿纸尿裤甲酰胺问题"

汽车要闻

电动MINIJCW缎光特别版藏锋上市尽显低调赛道本色

态度原创

健康
房产
艺术
亲子
教育

吃粽子的3条保胃法则,消化科医生推荐

房产要闻

一年时间,36个盘“消失”!海口楼市,罕见“大收缩”!

艺术要闻

冷军 人物油画写生8幅

亲子要闻

送给新手妈妈的三个建议,既真诚又实用,新手爸妈都该看一看

教育要闻

发现没:越是会顶嘴的孩子后劲越足,乖巧听话的孩子成绩反而一般

无障碍浏览 进入关怀版