Download presentation
Presentation is loading. Please wait.
1
第 3 章 控制流分析 内容概述 – 定义一个函数式编程语言,变量可以指称函数 – 以 dynamic dispatch problem 为例(作为参数的 函数被调用时,究竟执行的是哪个函数) – 规范该控制流分析问题,定义什么是可接受的控 制流分析 – 定义可接受分析在语义模型上的可靠性 – 讨论分析算法 – 加上数据流分析 – 加上上下文信息
2
第 3 章 控制流分析 函数的不动点 – 若 f(x) = x ,则 x 是函数 f 的不动点 – 求解含函数变量 f 的方程 f = n. if n=0 then 1 else n f(n 1) end – 看成找下面函数的不动点 f. n. if n=0 then 1 else n f(n 1) end – 该函数只有唯一的不动点 阶乘函数
3
第 3 章 控制流分析 函数的最小不动点 – 求解含函数变量 f 的方程 f = n. if n=0 then 1 else if n = 1 then f(3) else f(n 2) end – 相应高阶函数有无数个不动点 当 n 是偶数时,结果是 1 当 n 是奇数时,结果是 a ( a 可以任取 ) – 最小不动点 n 为偶数时, 结果是 1; n 为奇数时, 结果未定义
4
第 3 章 控制流分析 函数最小不动点的计算 – 例: F f. n. if n=0 then 1 else n f(n 1) end –lfp(F) = F n ( )(n = 0, 1, …) –F 0 ( ) = ( 表示处处无定义的函数 ) –F 1 ( ) = F(F 0 ( )) = ( f. n. if n = 0 then 1 else n f(n 1) end ) = n. if n = 0 then 1 else n (n 1) end = { 0, 0! }
5
第 3 章 控制流分析 函数最小不动点的计算 – 例: F f. n. if n=0 then 1 else n f(n 1) end –lfp(F) = F n ( )(n = 0, 1, …) –F 2 ( ) = F(F 1 ( )) =( f. n. if n=0 then 1 else n f(n 1)end)F 1 ( ) = n. if n = 0 then 1 else n F 1 ( ) (n 1) end = { 0, 0! , 1, 1! } – 依次逐步计算可得: , { 0, 0! }, { 0, 0! , 1, 1! }, { 0, 0! , 1, 1! , 2, 2! }, … ( 构成一个上升链 ) –lfp(F) = F n ( ) = { 0, 0! , 1, 1! , 2, 2! , …}
6
第 3 章 控制流分析 归纳和余归纳 (coinduction) 归纳法 – 初始条件、迭代规则、最小化条件 – 字母表 A 上的串集 A 归纳定义如下 (1) A ; (2) 若 a A 且 x A , 则 ax A ;(3) 除此以 外, A 不含其它元素 余归纳法 – 迭代规则 ( 循环条件 ) ,最大化条件 – 流可以通过余归纳法来定义 (1) 若 t 是 A 上的流且 a A ,则 (a,t) 也是 A 上的流; (2) A 上的流集是满足上述规则的最大集合
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.