本书是一本计算机专业的宽口径教材,新版覆盖CC2001和CCC2002教程中,除自动机外编程语言(PL)模块的全部知识点。内容涉及语言及其编译系统的设计要素、设计思想、设计方法、设计技术和设计风格等知识,全书分为上、下篇。上篇,程序设计语言的设计包括:绪论、数据类型、控制结构、程序语言设计、非过程式程序设计语言和形式语义学简介;下篇,程序设计语言的实现(编译)包括:编译概述、词法分析、自上而下的语法分析、自下而上的语法分析、语义分析和中间代码生成、代码优化和目标代码生成、运行时存储空间的组织。\r\n\r\n 本书的学习目标是,使读者掌握设计和实现一个程序设计语言的基本思想和方法,具有分析、鉴赏、评价、选择、学习、设计和实现一个语言的基本能力。本书力求简明、通俗,注重可读性,是大学计算机科学和软件工程等专业高级程序设计语言概论及编译技术课程教材,也是软件开发人员的学习参考书。\r\n
\r\n
上篇 程序设计语言的设计 \r\n\r\n 第1章 绪论 \r\n\r\n 11 引言 \r\n\r\n 12 强制式语言 \r\n\r\n 121 程序设计语言的分类 \r\n\r\n 122 冯·诺依曼体系结构 \r\n\r\n 123 绑定和绑定时间 \r\n\r\n 124 变量 \r\n\r\n 125 虚拟机 \r\n\r\n 13 程序单元 \r\n\r\n 14 程序设计语言发展简介 \r\n\r\n 141 早期的高级语言 \r\n\r\n 142 早期语言的发展阶段 \r\n\r\n 143 概念的集成阶段 \r\n\r\n 144 再一次突破 \r\n\r\n 145 大量的探索 \r\n\r\n 146 Ada 语言 \r\n\r\n 147 第四代语言 \r\n\r\n 148 网络时代的语言 \r\n\r\n 149 新一代程序设计语言 \r\n\r\n 习题1 \r\n\r\n 第2章 数据类型 \r\n\r\n 21 引言 \r\n\r\n 22 内部类型 \r\n\r\n 23 用户定义类型 \r\n\r\n 231 笛卡儿积 \r\n\r\n 232 有限映像 \r\n\r\n 233 序列 \r\n\r\n 234 递归 \r\n\r\n 235 判定或 \r\n\r\n 236 幂集 \r\n\r\n 24 Pascal语言数据类型结构 \r\n\r\n 241 非结构类型 \r\n\r\n 242 聚合构造 \r\n\r\n 243 指针 \r\n\r\n 25 Ada语言数据类型结构 \r\n\r\n 251 标量类型 \r\n\r\n 252 组合类型 \r\n\r\n 26 C语言数据类型结构 \r\n\r\n 261 非结构类型 \r\n\r\n 262 聚合构造 \r\n\r\n 263 指针 \r\n\r\n 264 空类型 \r\n\r\n 27 抽象数据类型 \r\n\r\n 271 SIMULA 67语言的类机制 \r\n\r\n 272 CLU语言的抽象数据类型 \r\n\r\n 273 Ada语言的抽象数据类型 \r\n\r\n 274 Modula-2语言的抽象数据类型 \r\n\r\n 275 C++语言的抽象数据类型 \r\n\r\n 28 类型检查 \r\n\r\n 29 类型转换 \r\n\r\n 210 类型等价 \r\n\r\n 211 实现模型 \r\n\r\n 2111 内部类型和用户定义的非结构类型实现模型 \r\n\r\n 2112 结构类型实现模型 \r\n\r\n 习题2 \r\n\r\n 第3章 控制结构 \r\n\r\n 31 引言 \r\n\r\n 32 语句级控制结构 \r\n\r\n 321 顺序结构 \r\n\r\n 322 选择结构 \r\n\r\n 323 重复结构 \r\n\r\n 324 语句级控制结构分析 \r\n\r\n 325 用户定义控制结构 \r\n\r\n 33 单元级控制结构 \r\n\r\n 331 显式调用从属单元 \r\n\r\n 332 隐式调用单元——异常处理 \r\n\r\n 333 SIMULA 67语言协同程序 \r\n\r\n 334 并发单元 \r\n\r\n 习题3 \r\n\r\n 第4章 程序语言的设计 \r\n\r\n 41 语言的定义 \r\n\r\n 411 语法 \r\n\r\n 412 语义 \r\n\r\n 42 文法 \r\n\r\n 421 文法的定义 \r\n\r\n 422 文法的分类 \r\n\r\n 423 文法产生的语言 \r\n\r\n 424 语法树 \r\n\r\n 43 语言的设计 \r\n\r\n 431 表达式的设计 \r\n\r\n 432 语句的设计 \r\n\r\n 433 程序单元的设计 \r\n\r\n 434 程序的设计 \r\n\r\n 44 语言设计实例 \r\n\r\n 45 一些设计准则 \r\n\r\n 习题4 \r\n\r\n 第5章 非过程式程序设计语言 \r\n\r\n 51 引言 \r\n\r\n 52 函数式程序设计语言 \r\n\r\n 521 函数 \r\n\r\n 522 数学函数与程序设计语言函数 \r\n\r\n 523 一种简单的纯函数式语言 \r\n\r\n 524 LISP语言概述 \r\n\r\n 525 APL语言概述 \r\n\r\n 526 作用式语言和命令式语言的比较 \r\n\r\n 53 逻辑程序设计语言 \r\n\r\n 531 逻辑程序设计 \r\n\r\n 532 Prolog语言概述 \r\n\r\n 533 逻辑程序设计展望 \r\n\r\n 54 面向对象程序设计语言 \r\n\r\n 541 面向对象的基本概念 \r\n\r\n 542 Smalltalk语言概述 \r\n\r\n 543 对面向对象语言的评价 \r\n\r\n 55 小结 \r\n\r\n 习题5 \r\n\r\n 第6章 形式语义学简介 \r\n\r\n 61 引言 \r\n\r\n 62 形式语义学分类 \r\n\r\n 63 公理语义学简介 \r\n\r\n 64 指称语义学简介 \r\n\r\n 习题6 \r\n\r\n 下篇 程序设计语言的实现(编译) \r\n\r\n 第7章 编译概述 \r\n\r\n 71 引言 \r\n\r\n 711 翻译和编译 \r\n\r\n 712 解释 \r\n\r\n 72 参数传递 \r\n\r\n 721 数据参数传递 \r\n\r\n 722 子程序参数传递 \r\n\r\n 73 编译步骤 \r\n\r\n 习题7 \r\n\r\n 第8章 词法分析 \r\n\r\n 81 词法分析概述 \r\n\r\n 811 词法分析器的功能 \r\n\r\n 812 词法分析器的输出形式 \r\n\r\n 82 词法分析器的结构 \r\n\r\n 821 扫描缓冲区 \r\n\r\n 822 符号的识别 \r\n\r\n 83 状态转换图 \r\n\r\n 84 词法分析器的设计 \r\n\r\n 习题8 \r\n\r\n 第9章 自上而下的语法分析 \r\n\r\n 91 引言 \r\n\r\n 92 回溯分析法 \r\n\r\n 921 提取产生式的公因子 \r\n\r\n 922 消除左递归 \r\n\r\n 93 递归下降分析法 \r\n\r\n 931 递归下降分析器的构造 \r\n\r\n 932 扩充的BNF \r\n\r\n 94 预测分析法 \r\n\r\n 941 预测分析过程 \r\n\r\n 942 FIRST集和FOLLOW集 \r\n\r\n 943 LL(1)文法 \r\n\r\n 944 预测分析表的构造 \r\n\r\n 945 非LL(1)文法 \r\n\r\n 习题9 \r\n\r\n \r\n\r\n 第10章 自下而上的语法分析 \r\n\r\n 101 引言 \r\n\r\n 1011 分析树 \r\n\r\n 1012 规范归约. 短语和句柄 \r\n\r\n 102 算符优先分析法 \r\n\r\n 1021 算符优先文法 \r\n\r\n 1022 算符优先分析算法 \r\n\r\n 1023 算符优先分析表的构造 \r\n\r\n 103 LR分析法 \r\n\r\n 1031 LR分析过程 \r\n\r\n 1032 活前缀 \r\n\r\n 1033 LR(0)项目集规范族 \r\n\r\n 1034 LR(0)分析表的构造 \r\n\r\n 1035 SLR(1)分析表的构造 \r\n\r\n 习题10 \r\n\r\n \r\n\r\n 第11章 语义分析和中间代码生成 \r\n\r\n 111 语义分析概论 \r\n\r\n 1111 语义分析的任务 \r\n\r\n 1112 语法制导翻译 \r\n\r\n 1113 中间代码 \r\n\r\n 1114 语义函数和语义变量 \r\n\r\n 112 赋值语句的翻译 \r\n\r\n 1121 表达式的翻译 \r\n\r\n 1122 只含简单变量的赋值语句的翻译 \r\n\r\n 113 控制语句的翻译 \r\n\r\n 1131 布尔表达式的翻译 \r\n\r\n 1132 无条件转移语句的翻译 \r\n\r\n 1133 条件语句的翻译 \r\n\r\n 1134 while语句的翻译 \r\n\r\n 1135 循环语句的翻译 \r\n\r\n 114 过程调用的翻译 \r\n\r\n 115 说明语句的翻译 \r\n\r\n 习题11 \r\n\r\n 第12章 代码优化和目标代码生成 \r\n\r\n 121 局部优化 \r\n\r\n 1211 优化的定义 \r\n\r\n 1212 基本块的划分 \r\n\r\n 1213 程序流图 \r\n\r\n 1214 基本块内的优化 \r\n\r\n 122 全局优化 \r\n\r\n 1221 循环的定义 \r\n\r\n 1222 必经结点集 \r\n\r\n 1223 循环的查找 \r\n\r\n 1224 循环的优化 \r\n\r\n 123 目标代码生成 \r\n\r\n 1231 一个计算机模型 \r\n\r\n 1232 简单的代码生成方法 \r\n\r\n 1233 循环中的寄存器分配 \r\n\r\n 习题12 \r\n\r\n 第13章 运行时存储空间的组织 \r\n\r\n 131 程序的存储空间 \r\n\r\n 1311 代码空间 \r\n\r\n 1312 数据空间 \r\n\r\n 1313 活动记录 \r\n\r\n 1314 变量的存储分配 \r\n\r\n 1315 存储分配模式 \r\n\r\n 132 静态分配 \r\n\r\n 133 栈式分配 \r\n\r\n 1331 只含半静态变量的栈式分配 \r\n\r\n 1332 半动态变量的栈式分配 \r\n\r\n 1333 非局部环境 \r\n\r\n 1334 非局部环境的引用 \r\n\r\n 134 符号表 \r\n\r\n 1341 符号表的组织 \r\n\r\n 1342 常用的符号表结构 \r\n\r\n 习题13 \r\n\r\n 附录A Java语言概述 \r\n\r\n A1 什么是Java \r\n\r\n A2 Java语言的特性 \r\n\r\n A3 Java语言的数据类型 \r\n\r\n A4 Java语言的控制结构 \r\n\r\n A5 Java程序实例 \r\n\r\n 参考文献 \r\n
\r\n
本书是一本计算机专业的宽口径教材, 新版按照CC2001和CCC2002教程改写, 覆盖除自动机外编程语言(PL)模块的全部内容.
一个程序设计语言涉及设计者. 实现者和使用者. 读者在阅读本书之前, 都学习过1~2门高级编程语言, 已经是语言的使用者. 他们在学习中还会有许多不解的问题:为什么在设计软件时要选择使用C++而不是FORTRON或别的语言?为什么所使用的语言的数据结构和控制结构是这样规定的?运行中的错误是如何由编译程序发现的?其底层的异常处理机制是什么?编译器是如何工作的?更进一步, 语言的设计者和实现者是如何设计. 构造和应用编译系统的?……通过本书的学习, 相信读者会得到问题的答案. 语言及其编译系统的设计要素. 设计思想. 设计方法. 设计技术和设计风格等知识, 无论对于语言的高级使用者还是未来的语言设计和实现者都是必需的. 本教材的目标是, 使读者掌握设计和实现一个程序设计语言的基本思想和方法, 具有分析. 鉴赏. 评价. 选择. 学习. 设计和实现一个语言的基本能力.
随着计算机技术的快速发展, 有越来越多的人认为, 编译器的设计和实现是专家的工作领域, 并非每个计算机专业的学生都需要设计和实现编译器的知识与能力, 有的学校减少了学时, 更有的学校砍掉了编译课程, 取而代之一些更现代的课程. 多年的教学经验告诉我们:编译系统作为系统软件之一, 其设计和实现的系统性, 能使学生对软件系统的结构形式及系统建立有一个充分的了解. 另一方面, 语言是软件设计与开发最重要的工具, 程序设计语言数以千计, 千姿百态, 但它们在发展与变化之中体现出很多共性, 又各具特点和优势, 更有不少的创新, 有必要从语言设计层面展现这些共性和语言发展的脉络及全貌, 这些也是每个计算机从业人员需要透彻了解的. 所以, 无论从计算机专业人才的知识结构还是专业素养的培养来看, 编译课程都是必不可少的核心课程. 基于以上的考虑, 我们重新设计了教材的结构和内容, 将其分为上. 下两篇, 上篇为程序设计语言的设计, 下篇为程序设计语言的实现(编译).
本书在改写中力求简明. 通俗, 注重可读性. 上篇中, 在第2章增加了C和C++语言的相关内容, 还特别增加了第4章——程序设计语言的设计. 通篇用抽象的方法, 讨论程序设计语言的共性, 并用具体的语言作为实例来说明这些共性. 下篇中, 所有章节全部改写, 删除了一些内容, 回避了一些基础理论问题, 把这些问题留给专门的课程(如形式语言与自动机)去讨论. 本书最后还增加了附录Java语言概述. 相信这样的安排会适合更多学校的教学要求. 本书为教师提供教学参考资料(包括习题参考答案), 请直接与作者联系(Email:gtf@uestc.edu.cn), 或通过电子工业出版社的教材服务部(Email:eduservice@phei.com.cn)获得教学支持.
本书的出版得到许多同事的帮助, 杭诚方. 陈文宇和王晓斌为资料的收集和整理做了大量的工作, 并为本书的编写提出了许多有价值的建议, 在此对他们表示衷心的感谢. 特别要感谢向重伦教授, 他在百忙之中抽出时间认真审阅了全稿, 并提出了许多宝贵意见. 还要感谢侯文永教授, 他是我前一版的合作者, 由于他的前期工作, 为我此次改版打下了良好的基础. 由于水平有限, 时间仓促, 难免出现谬误, 恳请读者不吝赐教.
作 者
2003年4月4日于成都
无封面