基本信息
- 原书名:Concepts of Programming Languages
- 原出版社: Addison Wesley

编辑推荐
本书从为什么学习程序设计语言入手,深入细致地讲解了命令式语言的主要结构及其设计与实现,内容涉及变量、数据类型、表达式和赋值语句、控制语句、子程序、数据抽象机制、支持面向对象程序设计(继承和动态方法绑定)、并发程序单元和异常处理等方面。在最后两章介绍了函数式程序设计语言和逻辑程序设计语言。.
内容简介
作译者
目录
专家指导委员会
译者序
前言
第1章 基本概念
1.1 学习程序设计语言原理的缘由
1.2 程序设计应用领域
1.3 语言评估标准
1.4 影响语言设计的因素
1.5 语言分类
1.6 语言设计中的权衡
1.7 实现方法
1.8 程序设计环境
小结*复习题*练习题
第2章 主要程序设计语言的发展
2.1 Zuse的Plankalkiil语言
2.2 最小硬件的程序设计:伪代码
2.3 IBM 704计算机与:Fortrzan
2.4 函数式程序设计:LISP语言
2.5 迈向成熟的第一步:ALGOL 60
译者序
计算机科学的各个方面都离不开程序设计语言。计算机工作者一生中必然会接触好几种语言:当一种新的语言问世并被广泛接受时,你需要学习这种语言以更新技能;当接手一个新项目时,你必须为这个项目选择一种最合适的实现语言;甚至你可能会为它专门设计并实现一种新的语言。本书并不教授如何使用一种语言,而是讨论程序设计语言的结构与特性、这些结构与特性在不同语言中的设计与实现以及这些结构与特性带给语言的优点与缺点。掌握了这些知识,会让读者在学习新的语言时有一种“似曾相识”的感觉,并很快掌握该语言中的许多特性。当读者需要选择一种语言时,可以根据各种语言的适用性及它们的优缺点做到知“语”善用;当其需要构造一种新语言时,也会知道应该从何处着手来选择出最优的设计实现方案。另外,本书所提供的关于语言“内部”结构的设计与实现的知识,正是大多数介绍语言使用方法的书籍所欠缺的。这种知识能够让读者将一种语言的优点充分地发挥出来,并且避免该语言本身的缺点可能带来的种种问题。
本书的主要内容可分为四部分。第一部分包括第1章和第2章,第二部分包括第3章和第4章,第三部分从第5章到第14章,第四部分包括第15章和第16章。
在第一部分中,第1章介绍一些预备性的基础知识。第2章是对程序设计语言的历史进行有趣而引人入胜的回顾,这一章介绍了一种在第二次世界大战期间由德国开发的功能十分齐全、但鲜为人知的语言—Plankalk焞语言,还介绍了Fortran语言的巨大成功及其深远的影响,还包括ALGOL、COBOL、Pascal、Ada、C、C++、Java、C#等语言,所有重要的语言几乎都涉及了,本章为程序设计语言描绘了一个完整的家谱,在这里,各种语言的来龙去脉变成了一幅清晰的画卷。
在第二部分中,第3章是关于语法和语义的描述,语法和语义是语言中的两大要素,这一章讨论对程序设计语言的语法和语义进行形式描述的方法。第4章简明地介绍了程序设计语言的编译原理,这一章是专门为不开设编译技术课程的学校而编写的。然而实际上,即使你打算去啃一本编译技术的大部头书,或者是准备学习一门编译课程,这一章也很值得读一读。它会让你事先获得编译技术的概貌,而不至于一头扎入大量的技术细节当中,导致“不识庐山真面目”。..
第三部分集中了本书精华的部分。这一部分详细地剖析语言的各个组成部分设计的实现。程序设计语言的主要组成部分包括变量、类型、表达式、赋值语句、控制结构、子程序、并发、异常处理等。对于语言的每一个组成部分,本书首先是讨论其必要性,接着分析设计中必须解决的问题,然后列出了各种不同的解决方法,并评价了各种方法的优缺点,讨论了一些重要语言中具体的设计实现。在读完这一部分之后,一门语言将不再是一个黑盒子,而像是在硬件高手面前打开了盖子的一台计算机。各个部分的特征、优劣以及对整体性能的影响都变得清清楚楚,这些与语言有关的知识对于编写可靠高效的程序将是极有帮助的。例如,如果一位程序员了解他所使用的语言中调用子程序的代价,他就能根据对程序速度和程序模块化的特定要求来决定是否使用递归子程序。同样,如果一位程序员熟悉他所使用的语言中的变量引用环境,他的程序中由于变量引用错误而产生的“疑难病症”就会少得多。有时,这些知识还能帮助你判断出编译器内部的错误,使你从盲目地挑剔那些无辜程序的思维中解放出来。
第四部分介绍两种“另类”的语言:以LISP为代表的函数式语言以及逻辑程序设计语言Prolog语言,它们都是人工智能语言,而此前所讨论的语言都属于命令式语言。命令式语言的程序向机器发出一条条可执行的命令语句。然而,在函数式和逻辑程序设计语言中,程序设计却遵循一种完全不同的思维方式,连算法设计都大相径庭。在这些语言里,没有我们熟悉的、必不可少的赋值语句、循环语句等。使用这些语言时,程序设计不再能够先画框图,然后将每一个框图翻译成一条或几条命令语句。函数式程序设计通过函数调用来解决问题,逻辑程序设计则是通过逻辑推理来解决问题。在这两章中,作者举了几个很好的例子,让你很容易转换思维,接受这两种不同的方式;另外还给出了十分巧妙的算法来解决传统的问题,它们会帮助你拓宽解决问题的思路。也许在下一个项目中,这两种程序设计的知识能够使你在解决问题时另辟蹊径,获取出人意料的成功。
本书还收录了与一批著名的计算机科学家进行的有趣而生动的访谈,其中还有C++、Java、PHP、Perl等语言的作者,他们在程序设计语言上的卓越贡献对计算机事业的发展产生了巨大的影响。从这些访谈之中,我们可以了解到这些科学家们丰富的成长经历、独特的思维方式、对问题的深刻见解,以及他们对未来的科学展望。与这些科学家们进行的这些访谈,向读者们打开了另一扇奇妙的窗子,其形式生动活泼、妙趣横生;希望这些内容能够激励读者,尤其是年轻的读者,走上一条成功的道路。
这是一本适用面很广的书,既可用作大学程序设计语言课程的教材,也可用作自学语言的读物,毕业多年的经验丰富的计算机工作者也可以读一读来更新知识。...
译者
2007年1月
前言
本书的目的、总体结构以及写作方式与前面的6个版本保持了一致。其主要目的是介绍当代程序设计语言的主要结构,并为读者提供对已有的程序设计语言和未来的程序设计语言进行客观评估所必需的工具;还有一个目的是通过提供对程序设计语言的深入讨论,以及通过表述一种描述语法的形式化方法,为读者学习编译器的设计做准备。.
本书第7版采用一些较新语言的素材取代了较老的程序设计语言内容,从而保持内容上的新颖。例如,第1章与第2章中都增加了以XSLT和JSP为例讨论标记与程序设计混合式语言的内容,还增加了使用公理语义进行程序验证的内容,并包括了一种新的验证方式。第4章通过增加一个新的语法分析程序和包括一套使用递归下降算法的完整语法分析,增强了关于递归下降语法分析的内容。本书多处加入了介绍Java 5.0语言版本中最有趣特征的材料,包括该语言版本中新的迭代语句、枚举类以及它的通用性。最后,为了增强本书表述的清晰程度,书中的大部分章节都进行了细微的修正。
全书概貌
本书通过讨论各种语言结构的设计问题,讨论最常用语言中这些结构的设计选择,并客观比较各种设计选择,来描述程序设计语言的基本概念。
要对程序设计语言进行认真研究,需要讨论以下相关课题,其中包括描述程序设计语言的语法和语义的形式方法,该课题被概括进本书的第3章。本书还考虑了各种语言结构的实现技术,第4章讨论词法分析和语法分析,第10章讨论子程序链接的实现。其他一些语言结构的实现问题,也在本书的各个不同部分进行讨论。
下面简略说明第7版包括的内容。
章节概述
第1章从学习程序设计语言的目的开始,讨论用于评估程序设计语言及语言结构的标准,以及影响语言设计的主要因素,设计中常用到的权衡方法及其基本的实现。
第2章概述书中讨论的大部分重要语言的演化过程。虽然没有完整地描述某一种语言,但对于每一种语言的起源、发展和它的贡献都进行了分析。这种历史回顾十分有价值:它为人们理解当代语言设计的实践和理论基础提供了必要的背景,也为进一步学习语言的设计以及评估提供了动力。除此之外,因为书中的其他章节都不依赖第2章,因而可以将这一章作为完全独立的部分来阅读。
第3章讨论描述程序设计语言语法的主要形式方法,即巴科斯-诺尔范式(BNF)。接着是关于属性文法的描述,该文法描述了语言的静态语义及语法。然后讲解语义描述这一有难度的主题,这里包括对三种最常用语义描述方法的简略介绍,即操作语义、公理语义和指称语义。
第4章介绍词法分析和语法分析。这一章是为那些没有设置编译器设计课程的学校准备的。与第2章相似,这一章也是独立的,可以不依赖书中的其他章节独立学习。
第5章到第14章详细地描述命令式语言主要结构的设计问题。对其中每一种结构,作者列举和评估了几种范例语言的设计选择。具体讲,第5章包括变量的多种特性,第6章包括数据类型;而第7章则解释表达式及赋值语句,第8章描述控制语句,第9章和第10章讨论子程序及其实现问题,第11章研究数据抽象的机制,第12章提供了关于支持面向对象程序设计语言特征(继承和动态方法绑定)的深入讨论,第13章讨论并发程序单元,第14章介绍异常处理以及事件处理。
最后两章(第15章和第16章)描述两种最重要的、不同的程序设计范型:函数式程序设计及逻辑程序设计。第15章介绍Scheme语言,包括它的一些基本功能、特殊形式、函数形式,并给出用Scheme语言编写的简单函数示例。接下来,简略地介绍 COMMON LISP、ML和 Haskell语言,以说明不同形式的函数式语言。第16章介绍逻辑程序设计以及逻辑程序设计语言:Prolog。
写给教师
在位于科罗拉多州斯普林的科罗拉多大学的初级程序设计语言课堂上,我们是这样来使用本书的:我们通常会详细地讲授第1章与第3章。由于第2章没有很难的技术内容,我们只花费很少的课时来讲解,而且如我们在前面提到的,后面所有章节的内容都不依赖于第2章,所以这一章的内容完全可以自学完成。此外,我们单独设置编译器设计课程,所以第4章也不在本课程里讲授。
对于具有丰富的C++、Java和C#语言程序设计经验的学生,第5章到第9章是相对容易的。第10章到第14章则有些挑战性,因而需要进行比较详细地讲授。
对大多数的低年级学生而言,第15章和第16章是全新的。理想情况下,应该对那些学习这两章内容的学生提供 Scheme 和 Prolog的语言处理器。书中提供了充足的资料,指导学生写出简单的程序。
本科生的课程中可以不讲解最后两章的全部内容,但在研究生的课程中则可以讨论这两章的所有内容,此时可以跳过前面几章关于命令式语言的内容。
教辅资料