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

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

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.

相关推荐
热点推荐
普京用最直白的话告诉泽连斯基,俄罗斯想要的,从一开始就定好了

普京用最直白的话告诉泽连斯基,俄罗斯想要的,从一开始就定好了

铁锤侃侃而谈
2026-10-24 10:26:49
快讯!外媒:沙特首都利雅得发生两起爆炸

快讯!外媒:沙特首都利雅得发生两起爆炸

环球网资讯
2026-10-24 09:50:05
每年数万人因前列腺离世!医生建议:天冷宁可躺一天,也别干 8 事

每年数万人因前列腺离世!医生建议:天冷宁可躺一天,也别干 8 事

健康之光
2026-10-23 20:35:08
章泽天,空得吓人...

章泽天,空得吓人...

背包旅行
2026-09-08 14:33:32
志愿军营长致朝鲜姑娘怀孕,被判死刑,刑场上姑娘挺孕肚以命相护

志愿军营长致朝鲜姑娘怀孕,被判死刑,刑场上姑娘挺孕肚以命相护

老范谈史
2026-10-18 17:47:29
坐不住了!大V博主孙宁发帖征集股市盈亏,评论区有人称“200万进场变850万”

坐不住了!大V博主孙宁发帖征集股市盈亏,评论区有人称“200万进场变850万”

火山詩话
2026-10-24 11:43:22
某豪华车车主凭什么撞上柱子,让车几秒钟起火,谁给他撞车的权利

某豪华车车主凭什么撞上柱子,让车几秒钟起火,谁给他撞车的权利

李昕言温度空间
2026-10-24 11:39:28
罗永浩又批评餐厅了:价格贵,巨咸,很难吃!可这一次,大量网友已经反感了:到处碰瓷!

罗永浩又批评餐厅了:价格贵,巨咸,很难吃!可这一次,大量网友已经反感了:到处碰瓷!

谭谈社会
2026-10-02 16:39:44
现在轮到银行开始头疼了!越来越多储户,主动把存款分散

现在轮到银行开始头疼了!越来越多储户,主动把存款分散

白浅娱乐聊
2026-10-24 14:35:12
谢卫江任湖南省政府党组书记

谢卫江任湖南省政府党组书记

界面新闻
2026-10-24 12:51:46
女性衰老的标志:1臭、2大、3小,如果你没有,说明还年轻!

女性衰老的标志:1臭、2大、3小,如果你没有,说明还年轻!

健康科普365
2026-08-04 15:30:10
一句流传几十年的口号:“只生一个好,政府来养老”,原来并不是原文

一句流传几十年的口号:“只生一个好,政府来养老”,原来并不是原文

十为先生
2026-10-22 14:26:11
1948辽沈战役:曾泽生率领26000将士倒戈,蒋介石下密令要诛杀其妻儿,部下却公然硬刚,让密令沦为废纸

1948辽沈战役:曾泽生率领26000将士倒戈,蒋介石下密令要诛杀其妻儿,部下却公然硬刚,让密令沦为废纸

睡前讲故事
2026-10-10 20:12:07
50岁小燕子近况曝光!皮松脸垮下垂明显,新加坡顶光拍面相都变了

50岁小燕子近况曝光!皮松脸垮下垂明显,新加坡顶光拍面相都变了

不似少年游
2026-10-21 11:35:46
伟大的长征:直到云贵川立下腊子口奇功,才懂杨成武为何把他当宝贝

伟大的长征:直到云贵川立下腊子口奇功,才懂杨成武为何把他当宝贝

楼兰娱姐
2026-10-24 12:38:22
人狂必有祸!央媒怒批后,披旭日旗留学生再迎噩耗,终为荒唐买单

人狂必有祸!央媒怒批后,披旭日旗留学生再迎噩耗,终为荒唐买单

与你挽月色清
2026-10-21 14:24:44
她7岁上初中,12岁上浙大,她就是“广东神童”陈舒音!

她7岁上初中,12岁上浙大,她就是“广东神童”陈舒音!

扶苏聊历史
2026-10-22 15:17:32
他从奴隶逆袭成皇帝,创立中国史上唯一白人王朝,连毛主席都称赞

他从奴隶逆袭成皇帝,创立中国史上唯一白人王朝,连毛主席都称赞

小豫讲故事
2026-10-15 06:00:15
中国最恐怖的伪佛教之一:北魏大乘教到底有多邪乎?

中国最恐怖的伪佛教之一:北魏大乘教到底有多邪乎?

明月清风阁
2026-10-23 10:55:17
很多人不知道,父母与子女翻脸变仇人,主要是因为这4件事

很多人不知道,父母与子女翻脸变仇人,主要是因为这4件事

荷兰豆爱健康
2026-10-24 14:29:10
2026-10-24 15:52:49
安全客 incentive-icons
安全客
有思想的安全新媒体
1360文章数 4754关注度
往期回顾 全部

科技要闻

写程序、做3D,新Kimi还有多少本事?

头条要闻

北大包丽案牟某获刑3年2个月 同居恋人认定为家庭成员

头条要闻

北大包丽案牟某获刑3年2个月 同居恋人认定为家庭成员

体育要闻

从乐透秀到总冠军再到没工作 一共要几年?

娱乐要闻

翁虹19岁女儿三次拒爱,在美国上学却“不随便”

财经要闻

叫"保障"不叫"保险":租车平台的文字游戏

汽车要闻

大众安徽与众09正式上市 双十一权益价16.99万起

态度原创

房产
艺术
家居
健康
本地

房产要闻

百亩大盘又 +1!攒量超 200 万㎡!江东,要燃起来了!

艺术要闻

18幅 美国当代画家约瑟夫·迪利作品

家居要闻

2026建博会(广州) 公装联探展交流活动

痘痘能根治吗?皮肤科医生说实话

本地新闻

这么近,那么美,周末赴贺州丨大湾区后花园

无障碍浏览 进入关怀版