程序设计语言与编译

当前位置:首页 > 教材教辅 > 大学教材教辅 > 程序设计语言与编译

出版社:电子工业出版社
出版日期:2009-1
ISBN:9787121081040
页数:324页

章节摘录

  1.4.2 早期语言的发展阶段  随着计算机的发展和应用的日益广泛,实现的效率已经不再是人们唯一的追求目标。早在20世纪60年代就出现了一些基于数学原则的机器计算表示法语言,它们基于数学函数和函数作用,而不是基于冯·诺依曼模型的。这些语言的代表是LISP,APL(AProgr·ammingLanguage)和SNOBOL4。  1.LISP语言  1960年,JohnMcCarthy在麻省理工学院(MIT)设计和实现了LISP语言,它的设计基于函数和函数作用的数学概念,它奠定了函数式(或作用式)语言风格的基础。由于没有适用于函数式语言的计算机体系结构问世,因此它不得不在冯·诺依曼体系结构的计算机上执行,其执行效率低,执行速度慢。  通常,LISP程序不经过编译而是通过解释来执行。人们为了提高执行速度,各种实现对LISPI。ISP进行了不同的改造,出现了许多不同的版本。1981年4月,各个不同的LISP学派召开了一次会议,试图将各种版本统一起来,于是出现了通用LISP(CommonLISP)语言。  由于LISP语言特有的数学特性,使它一出现就在计算机科学的研究中得到大量应用,特别是在人工智能领域。例如,在机器人、自然语言理解、定理证明和智能系统等研究领域应用非常广泛。  纯LISP语言从变量值可以被修改、赋值语句、goto语句等冯·诺依曼体系结构概念中解放出来。它主要用来处理符号表达式,并引入了许多新概念。例如,语言有统一的数据结构(表);数据和程序有统一的表示方法(S表达式),其中包括递归表达式、前缀表达式,并将递归作为基本控制结构等。LISP语言的语义很容易用LISP程序描述,用LISP语言编写的函数EVAL,可用来计算任何给定的LISP表达式,它是LISP语言的语义定义。

前言

  由于我的年事已高,本次改版由跟随我二十余年、从事程序设计语言和编译教学、科研的王晓斌副教授和陈文宇副教授执笔。他们能很好地继承我的风格,深入浅出地分析程序设计语言的结构、编译的基本技术。他们有丰富的教学经验,在科研工作中曾实现过几个语言的编译系统;他们年富力强,对近年来语言的发展有更多、更深刻的理解。这些都是他们写好本教材的基本保证。?  本书是一本适合大多数学校计算机专业的广口径教材,按照CC2001和CCC2002教程改写,覆盖了编程语言(PL)模块的全部内容。?  在改写中,力求简明、通俗,注意可读性。本次改版将第二版中的附录“Java语言概述”替换为“形式语言与自动机简介”,Java语言部分内容插入到书中的相关章节。在语义分析部分,纳入了数组的内容;在优化部分,增加了并行优化。?  作为计算机工作者,必须要与计算机进行交流、通信,所使用的工具是程序设计语言,用来告诉计算机“做什么”和“怎么做”。而程序设计语言数以千计,千姿百态,到底在大学中学习哪些语言才合适?我们的观点是,学会一两种语言的程序设计,更重要的是在此基础上了解语言的共性,这样,就具有鉴赏、评价、选择、学习和设计程序语言的能力。本书的上篇就是为达到上述目的编写的。以抽象的观点,将程序设计语言的共性抽象出来,然后用相应的语言去说明这些共性。?  随着计算机技术的发展,有越来越多的人认为,编译程序的设计和实现是专家的工作领域,并非每个计算机专业的学生都需要具有设计和实现编译程序的知识和能力,有的学校减少了学时,有的学校更砍掉编译课程。多年的教学经验告诉我们,编译系统作为计算机系统软件之一,其设计和实现的系统性,能使学生对软件系统的结构形成及系统的建立有个充分的了解。因此,本书的下篇讨论了编译程序的5个阶段及每个阶段的基本实现技术。?  本书为教师提供了教学参考资料,包括课件、教学指导书和习题答案,需要的老师可通过电子工业出版社的教材服务部获得教学支持。?  本书的出版获得了许多同事的帮助,余盛季、屈鸿为资料的收集和整理做了大量的工作,并为本书的编写提供了很多有价值的建议,在此对他们表示衷心的感谢。本书的下篇(第7-13章)由王晓斌编写,上篇(第1-6章)、附录由陈文宇编写。若书中出现谬误,恳请读者不吝赐教。

书籍目录

  上篇 程序设计语言的设计第1章 绪论1.1 引言1.2 强制式语言1.2.1 程序设计语言的分类1.2.2 冯·诺依曼体系结构1.2.3 绑定和绑定时间1.2.4 变量1.2.5 虚拟机1.3 程序单元1.4 程序设计语言发展简介1.4.1 早期的高级语言1.4.2 早期语言的发展阶段1.4.3 概念的集成阶段1.4.4 再一次突破1.4.5 大量的探索1.4.6 Ada 语言1.4.7 第四代语言1.4.8 网络时代的语言1.4.9 新一代程序设计语言1.4.10 面向未来的汉语程序设计语言1.4.11 总结习题1第2章 数据类型2.1 引言2.2 内部类型2.3 用户定义类型2.3.1 笛卡儿积2.3.2 有限映像2.3.3 序列2.3.4 递归2.3.5 判定或2.3.6 幂集2.4 Pascal语言数据类型结构2.4.1 非结构类型2.4.2 聚合构造2.4.3 指针2.5 Ada语言数据类型结构2.5.1 标量类型2.5.2 组合类型2.6 C语言数据类型结构2.6.1 非结构类型2.6.2 聚合构造2.6.3 指针2.6.4 空类型2.7 Java 语言的数据类型2.7.1 内部类型2.7.2 用户定义类型2.8 抽象数据类型2.8.1 SIMULA 67 语言的类机制2.8.2 CLU语言的抽象数据类型2.8.3 Ada语言的抽象数据类型2.8.4 Modula 2语言的抽象数据类型2.8.5 C++语言的抽象数据类型2.8.6 Java抽象数据类型2.9 类型检查2.10 类型转换2.11 类型等价2.12 实现模型2.12.1 内部类型和用户定义的非结构类型实现模型2.12.2 结构类型实现模型习题2第3章 控制结构3.1 引言3.2 语句级控制结构3.2.1 顺序结构3.2.2 选择结构3.2.3 循环结构3.2.4 语句级控制结构分析3.2.5 用户定义控制结构3.3 单元级控制结构3.3.1 显式调用从属单元3.3.2 隐式调用单元——异常处理3.3.3 SIMULA 67语言协同程序3.3.4 并发单元习题3第4章 程序语言的设计4.1 语言的定义4.1.1 语法4.1.2 语义4.2 文法4.2.1 文法的定义4.2.2 文法的分类4.2.3 文法产生的语言4.2.4 语法树4.3 语言的设计4.3.1 表达式的设计4.3.2 语句的设计4.3.3 程序单元的设计4.3.4 程序的设计4.4 语言设计实例4.5 一些设计准则习题4第5章 非过程式程序设计语言5.1 引言5.2 函数式程序设计语言5.2.1 函数5.2.2 数学函数与程序设计语言函数5.2.3 一种简单的纯函数式语言5.2.4 LISP语言概述5.2.5 APL语言概述5.2.6 作用式语言和命令式语言的比较5.3 逻辑程序设计语言5.3.1 逻辑程序设计5.3.2 Prolog语言概述5.3.3 逻辑程序设计展望5.4 面向对象程序设计语言5.4.1 面向对象的基本概念5.4.2 Smalltalk语言概述5.4.3 对面向对象语言的评价5.5 小结习题5第6章 形式语义学简介6.1 引言6.2 形式语义学分类6.3 公理语义学简介6.4 指称语义学简介习题6下篇 程序设计语言的实现(编译)第7章 编译概述7.1 引言7.2 翻译和编译7.3 解释7.4 编译步骤习题7第8章 词法分析8.1 词法分析概述8.2 单词符号的类别8.3 词法分析器的输出形式8.4 词法分析器的设计8.5 符号表8.5.1 符号表的组织8.5.2 常用的符号表结构习题8第9章 自上而下的语法分析9.1 引言9.2 回溯分析法9.2.1 回溯的原因9.2.2 提取公共左因子9.2.3 消除左递归9.3 递归下降分析法9.3.1 递归下降分析器的构造9.3.2 扩充的BNF9.4 预测分析法9.4.1 预测分析过程9.4.2 预测分析表的构造9.4.3 LL(1)文法9.4.4 非LL(1)文法习题9第10章 自下而上的语法分析10.1 引言10.1.1 分析树10.1.2 规范归约、短语和句柄10.2 算符优先分析法10.2.1 算符优先文法10.2.2 算符优先分析算法10.2.3 算符优先关系表的构造10.3 LR分析法10.3.1 LR分析过程10.3.2 活前缀10.3.3 LR(0)项目集规范族10.3.4 LR(0)分析表的构造10.3.5 SLR(1)分析表的构造习题10第11章 语义分析和中间代码生成11.1 语义分析概论11.1.1 语义分析的任务11.1.2 语法制导翻译11.2 中间代码11.3 语义变量和语义函数11.4 说明语句的翻译11.5 赋值语句的翻译11.5.1 只含简单变量的赋值语句的翻译11.5.2 含数组元素的赋值语句的翻译11.6 控制语句的翻译11.6.1 布尔表达式的翻译11.6.2 无条件转移语句的翻译11.6.3 条件语句的翻译11.6.4 while语句的翻译11.6.5 for语句的翻译11.6.6 过程调用的翻译习题11第12章 代码优化和目标代码生成12.1 局部优化12.1.1 优化的定义12.1.2 基本块的划分12.1.3 程序流图12.1.4 基本块内的优化12.2 全局优化12.2.1 循环的定义12.2.2 必经结点集12.2.3 循环的查找12.2.4 循环的优化12.3 并行优化12.3.1 数据的依赖关系分析12.3.2 向量化代码生成12.3.3 反相关与输出相关的消除12.3.4 标量扩张12.3.5 循环条块化12.4 目标代码生成12.4.1 一个计算机模型12.4.2 简单的代码生成方法12.4.3 循环中的寄存器分配习题12第13章 运行时存储空间的组织13.1 程序的存储空间13.1.1 代码空间13.1.2 数据空间13.1.3 活动记录13.1.4 变量的存储分配13.1.5 存储分配模式13.2 静态分配13.3 栈式分配13.3.1 只含半静态变量的栈式分配13.3.2 半动态变量的栈式分配13.3.3 非局部环境13.3.4 非局部环境的引用13.4 参数传递13.4.1 数据参数传递13.4.2 子程序参数传递习题13附录A 形式语言与自动机简介思考题

编辑推荐

  在国家规划教材的基础上,进行全面更新,以适应高校课程与教学改革的需要,并特别注意教材的可读性和可用性,为任课教师提供各种教学服务(包括)数学电子课件、教学指导材料、习题解答和实验指导等。

作者简介

《程序设计语言与编译:语言的设计和实现(第3版)》为“普通高等教育‘十一五’国家级规划教材”,是一本计算机专业的宽口径教材,新版覆盖CC2001和CCC2002教程中,除自动机外编程语言(PL)模块的全部知识点。内容涉及语言及其编译系统的设计要素、设计思想、设计方法、设计技术和设计风格等知识,全书分为上、下篇。上篇,程序设计语言的设计包括:绪论、数据类型、控制结构、程序语言设计、非过程式程序设计语言和形式语义学简介;下篇,程序设计语言的实现(编译)包括:编译概述、词法分析、自上而下的语法分析、自下而上的语法分析、语义分析和中间代码生成、代码优化和目标代码生成、运行时存储空间的组织。
《程序设计语言与编译:语言的设计和实现(第3版)》的学习目标是,使读者掌握设计和实现一个程序设计语言的基本思想和方法,具有分析、鉴赏、评价、选择、学习、设计和实现一个语言的基本能力。《程序设计语言与编译:语言的设计和实现(第3版)》力求简明、通俗,注重可读性,是大学计算机科学和软件工程等专业高级程序设计语言概论及编译技术课程教材,也是软件开发人员的学习参考书。

图书封面


 程序设计语言与编译下载



发布书评

 
 


 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024