第十三章函数式语言的编译.ppt

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
中国科大 第十三章 函数式语言的编译 本章内容 介绍一种简单的函数式编程语言SFP 介绍一种抽象机FAM,它的机器语言是SFP语言的目标语言 介绍SFP各种语言构造到FAM的编译 13.1 函数式编程语言简介 13.1.1 语言构造 函数是构建程序的基本成分 还提供一些机制用于构造更为复杂的函数 纯函数式语言禁止使用赋值语句,从而不会产生副作用,其优点是具有引用透明性,有助于程序的等式变换和推理 程序设计的任务就是定义函数 计算机按照所定义函数的相应表达式,根据计算规则逐步计算,最后得到所需的结果 13.1 函数式编程语言简介 语法论域和语法产生式 B:基值集,如布尔值、整数、. . .,用b示例 Opbin:二元算符集,如+, =, and, . . . , 用opbin示例 Opun: 一元算符集,如?, not, . . .,用opun示例 V :变量集,用v 示例 E :表达式集,用e 示例 e ? b | v | (opun e) | (e1 opbin e2) | (if e1 then e2 else e3) | (e1 e2) // 函数应用 | (?v.e) // 函数抽象, 如?x.x+1, 即f (x) = x+1 | (letrec v1== e1; v2== e2; . . . vn== en in e0) // 联立递归定义 13.1 函数式编程语言简介 约定 e ? b | v | (opun e) | … | (e1 e2) | (?v.e) | (letrec v1== e1; v2== e2; . . . vn== en in e0) 函数应用有最高优先级并且左结合 算术和逻辑算符有通常的优先级 ?抽象选择最大可能的语法表达式作为?v. e的体e,即e延伸到表达式的结尾或碰到第一个不能配对的右括号为止 n元函数写成?v1 … vn.e的形式 把fe1 … em实现为一次函数应用,而不是m次应用 13.1 函数式编程语言简介 13.1.2 参数传递机制 对于表达式e1e2,用按需调用的方式传递参数 值调用 换名调用 按需调用 又称惰性计算。从e1的计算开始,当第一次需要e2时,计算它的值,也就计算这一次。其它访问用第一次访问时计算的值。这种方式结合了前两种方式的优点 13.1 函数式编程语言简介 例1 letrec x == 2; f == ? y. x + y; F == ?g x. g2 in F f 1 静态作用域,结果等于4 {x :2, f : ? y. x + y, F : ?g x. g2}是表达式2, ? y.x+y, ?g x. g2和F f 1的计算环境 表达式e和它的计算环境u形成二元组(e, u),叫做闭包。环境u用来保证e中的自由变量会被正确地解释,因此环境u和变元e需要一起传递 13.1 函数式编程语言简介 例2 letrec comp == ?f .?g. ?x. f (gx); F == ?x. …; G == ?z. …; h == comp F G in h( ... ) + F( ... ) + G( ... ) 函数可以作为函数的变元 函数也可以作为函数的结果 n元函数可作为高阶函数使用, 当作用于m (m n)个变元时,结果是一个( n ? m )元的函数 13.1 函数式编程语言简介 13.1.3 变量的自由出现和约束出现 在letrec v1== e1; v2== e2; . . . vn== en in e0中,等号左边的v1, …, vn是这些变量的定义性出现 在?v1 … vn.e的?v1 … vn中的v1, …, vn是这些变量的定义性出现 变量出现在其它地方都是引用性出现 引用性出现分成自由出现和约束出现 在 (?x y. (?z. x + z) (y + z ) ) x中, 自由出现的变量:x, z 约束出现的变量:x, y, z 13.2函数式语言的编译简介 概述 将按需调用语义和静态约束的函数式语言SFP的程序编译成FAM的机器语言 FAM是一种抽象机,它有一个栈,生存期符合栈式管理的所有变量都分配在栈中;它还有一个堆,所有其它的变量都存在堆中 先用一连串的例子来启发后面从SFP程序到FAM程序的编译描述 13.2函数式语言的编译简介 13.2.1 几个受启发的例子 例1 1 + 2 本表达式的结果是基值类型,可以放在栈上 但是表达式结果也可能是函数,它不能放在栈上 统一做法: 把程序表达式的结果统一存放在堆中,在栈顶用一个指针指向堆中的结果 13.2函数式语言的编译简介 13.2.1 几个受启发的例子

文档评论(0)

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

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

1亿VIP精品文档

相关文档