基于格理论数据流的分析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于格理论数据流的分析.ppt

内 容 一、控制流图 二、活性分析 三、可用表达式 四、很忙表达式 五、可达定义 六、初始化变量 七、符号分析 八、常量分析 九、区间分析 一、控制流图 (Control Flow Graph:CFG) 类型分析主要通过语法树进行 是流不敏感的(flow insensitive) S1; S2 的分析结果与 S2; S1 的结果相同 深入的分析是流敏感的(flow sensitive) 需要结束控制流图 一个控制流图是一个有向图 结点对应于程序中的点(语句) 边对应与可能的控制流 一个 CFG 有单个的入口和单个的出口 如果 v 是 一个CFG中 的一个点,则: pred(v) 是指该点直接前面点的集合 succ(v) 是指该点直接后面点的集合 数据流分析与格 传统的数据流分析(我们要讨论的内容) 从一个 CFG 和一个具有有限高度的格 L 开始 对于 CFG 中的每个点 v, 我们赋予一个变量 [v],其取值范围 是 L 中的元素. 对于编程语言中的每个构造块, 我们定义一个数据流约束(dataflow constraint ) 该约束反映了一个点与其它点(特别是邻居)之间值的关系 对于一个CFG,我们可以抽取变量的约束的集合 如果所有的约束刚好是等式或者不等式(右边单调) 我们就可以利用不动点算法求唯一的最小解 如果所有的解对应于程序的正确信息,则数据流约束是“确定的”(sound) 因为解可能或多或少地不精确,所以分析是“保守”的(conservative) 但计算最小解将获得最大的精确度 不动点算法 如果一个 CFG 具有点 V = {v1, v2, . . . , vn}, 我们可以这样构造格Ln 假定点 vi 产生数据流等式 [vi] = Fi([v1], . . . , [vn]) 我们构造联合函数 F : Ln → Ln F(x1, . . . , xn) = (F1(x1, . . . , xn), . . . , Fn(x1, . . . , xn)) x = (⊥, . . . , ⊥); do { t = x; x = F(x); } while (x ? t); x1 = ⊥; . . . ; xn = ⊥; q = [v1, . . . , vn]; while (q ? []) { assume q = [vi, . . .]; y = Fi(x1, . . . , xn); q = q.tail(); if (y ? xi) { for (v ∈ dep(vi)) q.append(v); xi = y; } } 二、活性(Liveness)分析 一个变量在程序的某个点是活跃的,如果: 它的当前值在后面程序执行时可能被读取 我们的分析借助于一个幂集格(powerset lattice) 其元素是程序中的变量 var x, y, z; x = input; while (x1) { y = x/2; if (y3) x = x-y; z = x-4; if (z0) x = x/2; z = z-1; } output x; 对任何一个CFG 结点 v,我们引入一个约束变量 [v] [v] 代表在该结点前活跃的程序变量集 我们引入一个辅助定义: JOIN(v) = ∪ [w] w∈succ(v) var x, y, z; x = input; while (x1) { y = x/2; if (y3) x = x-y; z = x-4; if (z0) x = x/2; z = z-1; } output x; 从该信息,一个聪明的编译器可以发现 y 和 z 从来没有同时活跃, z = z-1 中的赋值从未被用过。 因此,该程序可以被优化: 三、可用表达式 (Available expression) 一个重要的表达式是可用的,如果 它的当前值已经计算过 对应的幂集格,元素是程序中出现过的所有表达式 比较关系是反的(“以前”:从上到下) 程序例子: 定义: JOIN(v) = ∩[w] w∈pred(v) 对于入口,约束为: [entry] = {} 如果 v 包含一个条件表达式 E

文档评论(0)

xx88606 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档