新書推薦:
《
三星堆对话古遗址(从三星堆出发,横跨黄河流域,长江流域,对话11处古遗址,探源多元一体的中华文明)
》
售價:HK$
87.4
《
迷人的化学(迷人的科学丛书)
》
售價:HK$
143.4
《
宋代冠服图志(详尽展示宋代各类冠服 精美插图 考据严谨 细节丰富)
》
售價:HK$
87.4
《
形似神异:什么是中日传统政治文化的结构性差异
》
售價:HK$
55.8
《
养育不好惹的小孩
》
售價:HK$
77.3
《
加加美高浩的手部绘画技法 II
》
售價:HK$
89.4
《
卡特里娜(“同一颗星球”丛书)
》
售價:HK$
87.4
《
伟大民族:从路易十五到拿破仑的法国史(方尖碑)
》
售價:HK$
188.2
|
內容簡介: |
从为什么学习程序设计语言入手,深入细致地讲解了命令式语言的主要结构及其设计与实现,内容涉及变量、数据类型、表达式和赋值语句、控制语句、子程序、数据抽象机制、对面向对象程序设计的支持(继承和动态方法绑定)、并发、异常处理和事件处理等方面。
|
關於作者: |
罗伯特W. 塞巴斯塔(Robert W. Sebesta) 科罗拉多大学科罗拉多斯普林斯分校计算机科学系荣休副教授,拥有40多年的授课经验,研究兴趣包括程序设计语言的设计和评估以及Web程序设计。他拥有宾夕法尼亚州立大学计算机科学硕士和博士学位。
|
目錄:
|
第1章 预备知识1
1.1 学习程序设计语言原理的原因2
1.2 程序设计领域5
1.3 语言评估标准7
1.4 影响语言设计的因素17
1.5 程序设计语言的分类20
1.6 语言设计中的权衡21
1.7 实现方法22
1.8 程序设计环境29
小结复习题习题30
第2章 主要程序设计语言发展简史33
2.1 Zuse研制的Plankalkl语言36
2.2 伪代码37
2.3 IBM 704计算机和Fortran40
2.4 函数式程序设计语言:Lisp45
2.5 迈向成熟的第一步:ALGOL 6050
2.6 计算机化的商业记录:COBOL56
2.7 分时处理的开始:Basic61
访谈:Alan Cooper用户设计与语言设计64
2.8 满足所有人的需求:PLI66
2.9 两种早期的动态语言:APL 和SNOBOL69
2.10 数据抽象的开端:SIMULA 6770
2.11 正交设计:ALGOL 6871
2.12 ALGOL系列语言的早期后代语言73
2.13 基于逻辑的程序设计:Prolog77
2.14 历史上规模最大的语言设计工作:Ada79
2.15 面向对象程序设计:Smalltalk83
2.16 结合命令式和面向对象的特性:C85
2.17 基于命令式的面向对象语言:Java89
2.18 脚本语言92
2.19 .NET旗舰语言:C#98
2.20 混合标记程序设计语言100
小结文献注记复习题习题程序设计练习102
第3章 语法和语义描述109
3.1 概述110
3.2 语法描述的一般问题111
3.3 语法描述的形式化方法113
3.4 属性文法128
历史注记128
3.5 描述程序的含义:动态语义134
历史注记142
小结文献注记复习题习题155
第4章 词法和语法分析161
4.1 概述162
4.2 词法分析163
4.3 语法分析问题171
4.4 递归下降的语法分析175
4.5 自底向上的语法分析183
小结复习题习题程序设计练习191
第5章 名字、绑定和作用域197
5.1 概述198
5.2 名字199
历史注记199
5.3 变量200
5.4 绑定的概念203
5.5 作用域211
5.6 作用域和生存期222
5.7 引用环境223
5.8 命名常量224
小结复习题习题程序设计练习227
第6章 数据类型235
6.1 概述236
6.2 基本数据类型238
6.3 字符串类型242
历史注记243
6.4 枚举类型247
6.5 数组类型250
历史注记251
历史注记251
6.6 关联数组261
6.7 记录类型263
6.8 元组类型266
6.9 列表类型268
6.10 联合类型270
6.11 指针和引用类型273
历史注记276
6.12 可选类型285
6.13 类型检查286
6.14 强类型化287
6.15 类型等价288
6.16 理论和数据类型292
小结文献注记复习题习题程序设计练习294
第7章 表达式和赋值语句301
7.1 概述302
7.2 算术表达式302
7.3 重载运算符311
7.4 类型转换313
历史注记315
7.5 关系表达式和布尔表达式316
历史注记316
7.6 短路求值318
7.7 赋值语句319
历史注记323
7.8 混合方式赋值324
小结复习题习题程序设计练习324
第8章 语句级控制结构329
8.1 概述330
8.2 选择语句332
8.3 迭代语句343
8.4 无条件分支355
历史注记356
8.5 防护命令356
8.6 结论359
小结复习题习题程序设计练习360
第9章 子程序365
9.1 概述366
9.2 子程序基础366
9.3 子程序的设计问题374
9.4 局部引用环境375
9.5 参数传递方法376
历史注记384
历史注记384
9.6 子程序作为参数392
历史注记394
9.7 子程序间接调用394
9.8 函数设计问题396
9.9 重载子程序397
9.10 类属子程序398
9.11 用户定义的重载运算符404
9.12 闭包405
9.13 协同程序407
小结复习题习题程序设计练习410
第10章 子程序实现417
10.1 调用和返回的一般语义418
10.2 简单子程序的实现419
10.3 具有栈动态局部变量的子程序实现421
10.4 嵌套子程序429
10.5 程序块436
10.6 动态作用域的实现437
小结复习题习题程序设计练习441
第11章 抽象数据类型和封装结构447
11.1 抽象的概念448
11.2 数据抽象概述449
11.3 抽象数据类型的设计问题452
11.4 语言示例453
访谈:Bjarne StroustrupC的诞生、广泛应用及受到的质疑454
11.5 参数化的抽象数据类型466
11.6 封装结构471
11.7 命名封装474
小结复习题习题程序设计练习478
第12章 对面向对象程序设计的支持483
12.1 概述484
12.2 面向对象程序设计485
12.3 面向对象语言的设计问题489
12.4 特定语言对面向对象程序设计的支持494
访谈:Bjarne Stroustrup关于程序设计范型和更好的程序设计 498
12.5 面向对象结构的实现519
12.6 反射522
小结复习题习题程序设计练习528
第13章 并发533
13.1 概述534
13.2 子程序级并发概述539
13.3 信号量544
13.4 管程549
13.5 消息传递551
13.6 Ada对并发机制的支持552
13.7 Java线程560
13.8 C#线程570
13.9 函数式语言中的并发处理575
13.10 语句级并发578
小结文献注记复习题习题程序设计练习580
第14章 异常处理和事件处理587
14.1 异常处理概述588
历史注记592
14.2 C中的异常处理594
14.3 Java中的异常处理598
14.4 Python和Ruby中的异常处理605
14.5 事件处理概述608
14.6 Java中的事件处理609
14.7 C#中的事件处理613
小结文献注记复习题习题程序设计练习616
第15章 函数式程序设计语言623
15.1 概述624
15.2 数学函数625
15.3 函数式程序设计语言基础628
15.4 第一个函数式程序设计语言:Lisp629
15.5 Scheme概述633
15.6 Common Lisp651
15.7 ML653
15.8 Haskell658
15.9 F#663
15.10 主要命令式语言对函数式程序设计的支持666
15.11 函数式语言和命令式语言的比较669
小结文献注记复习题习题程序设计练习671
第16章 逻辑程序设计语言679
16.1 概述680
16.2 谓词演算概述680
16.3 谓词演算和定理证明 684
16.4 逻辑程序设计概述686
16.5 Prolog的起源688
16.6 Prolog的基本元素688
16.7 Prolog的缺点703
16.8 逻辑程序设计的应用709
小结文献注记复习题习题程序设计练习710
参考文献715
Contents
Chapter 1 Preliminaries 1
1.1 Reasons for Studying Concepts of Programming Languages..............2
1.2 Programming Domains.........................................................................5
1.3 Language Evaluation Criteria...............................................................7
1.4 Influences on Language Design .........................................................17
1.5 Language Categories...........................................................................20
1.6 Language Design Trade-Offs..............................................................21
1.7 Implementation Methods....................................................................22
1.8 Programming Environments ..............................................................29
Summary . Review Questions . Problem Set ...............................................30
Chapter 2 Evolution of the Major Programming Languages 33
2.1 Zuses Plankalkl ...................................................................36
2.2 Pseudocodes.........................................................................................37
2.3 The IBM 704 and Fortran ..................................................................40
2.4 Functional Programming: Lisp...........................................................45
2.5 The First Step Toward Sophistication: ALGOL 60...........................50
2.6 Computerizing Business Records: COBOL.......................................56
2.7 The Beginnings of Timesharing: Basic...............................................61
Interview: ALAN COOPERUser Design and Language Design.........64
2.8 Everything for Everybody: PLI.........................................................66
2.9 Two Early Dynamic Languages: APL and SNOBOL........................69
2.10 The Beginnings of Data Abstraction: SIMULA 67 ...........................70
2.11 Orthogonal Design: ALGOL 68 ........................................................71
2.12 Some Early Descendants of the ALGOLs..........................................73
2.13 Programming Based on Logic: Prolog ...............................................77
2.14 Historys Largest Design Effort: Ada..................................................79
2.15 Object-Oriented Programming: Smalltalk.........................................83
2.16 Combining Imperative and Object-Oriented Features: C.............85
2.17 An Imperative-Based Object-Oriented Language: Java.....................89
2.18 Scripting Languages....................................
|
內容試閱:
|
第12版的更新
本书第12版的目标、总体结构以及撰写方法与之前的11个版本相同。第一个目标是介绍现代程序设计语言的基本结构,并为读者提供对现有以及未来的程序设计语言进行严格评估的工具。第二个目标是为学习编译器设计做好准备,为此,本书深入讨论了程序设计语言的结构,展示了描述语法的形式化方法,并介绍了词法和语法分析方法。
与第11版相比,第12版有多个方面的变化。为了保持本书内容不落伍,几乎全部删除了对某些程序设计语言(尤其是Lua和Objective-C)的讨论,而有关较新的程序设计语言Swift的内容则被添加到若干章中。
此外,在第6章中新增了关于可选类型的一节。8.3.4节增加了一些内容以介绍Python中的迭代器。书中还做了一些小改动,以对一些讨论内容进行改正或澄清。具体变化如下:
第2章:增加2.16.4节,介绍Swift;增加2.16.5节,介绍Delphi;删除2.18.6节,不再关注Lua。
第5章:重写5.5.3节的若干段落,改正并澄清一些错误。
第6章:6.3.2节增加一段,介绍Swift对字符串的支持;6.4.2节增加一段,介绍Swift对枚举类型的支持;6.5.3节增加一段,介绍Swift对数组的支持;6.6.1节增加一段,介绍Swift对关联数组的支持;删除6.6.1节中的访谈;增加6.12节,介绍可选类型。
第8章:8.3.1.1节增加一个设计问题,并对其进行了简要讨论;8.3.4节增加几个段落,描述Python中的迭代器。
第9章:9.5.4节增加一段,介绍Swift参数。
第11章:删除11.4.2节,不再关注Objective-C的抽象数据类型。
第12章:删除12.4.5节,不再关注Objective-C;删除表12.1中Objective-C一列;在小结中增加一段,介绍反射。
本书总体框架
本书主要介绍程序设计语言的基本概念。为此,书中讨论了各种语言结构的设计问题,研究了一些常见语言在语言结构上的设计选择,并对设计备选方案进行了严格的比较。
对程序设计语言进行的任何细致研究都无法脱离一些相关的主题,包括描述程序设计语言语法和语义的形式化方法,第3章将介绍这些方法。此外,还必须考虑各种语言结构的实现技术,第4章将讨论词法和语法分析,第10章将介绍子程序链接的实现。本书还将讨论其他语言结构的实现技术。
章节概述
第1章从学习程序设计语言的基本原理开始,然后讨论用于评估程序设计语言和语言结构的标准,同时分析了影响语言设计的主要因素、语言设计中的权衡以及语言实现的基本方法。
第2章概述书中所讨论的语言的发展过程。虽然没有试图完整地描述任何一种语言,但是对每种语言的起源、目标和贡献都会进行讨论。这样的历史回顾是很有价值的,因为它为我们理解当代语言设计的实践和理论基础提供了必要的背景。这也推动了对语言设计与评估的进一步研究。因为本书的其余部分都不依赖于第2章,所以这一章可以独立于其他章节单独阅读。
第3章介绍用于描述程序设计语言的BNF范式的主要形式化方法,首先讨论用于描述语言的语法和静态语义的属性文法,然后探讨语义描述的难点,并对三种最常见的语义方法(操作语义、指称语义和公理语义)进行了简要介绍。
第4章介绍词法分析和语法分析。这一章主要面向那些在课程体系中不设置编译器设计课程的计算机科学院系。与第2章类似,这一章独立于除了第3章之外的所有部分,可以单独阅读。
第5~14章详细讨论程序设计语言中主要结构的设计问题。对于每一种语言结构,都讲述了几种示例语言的设计选择并对其进行了评估。具体来说,第5章介绍变量的一些特性,第6章介绍数据类型,第7章解释表达式和赋值语句,第8章介绍控制语句,第9和10章讨论子程序及其实现,第11章研究数据抽象机制,第12章深入讨论支持面向对象程序设计的语言特性(继承和动态方法绑定),第13章讨论并发程序单元,第14章讨论异常处理并简要介绍事件处理。
第15和16章介绍另外两种重要的程序设计范型:函数式程序设计与逻辑程序设计。注意,第6和8章已经讨论过函数式程序设计语言的某些数据结构和控制构造。第15章介绍Scheme,包括其基本函数、特殊形式、函数形式,以及一些使用Scheme语言编写的简单函数示例。此外,还简要介绍了ML、Haskell和F#,以说明函数式程序设计的一些不同方向。第16章介绍逻辑程序设计以及逻辑程序设计语言Prolog。
可供使用的语言处理器
本书所讨论的某些程序设计语言的处理器以及相关信息可在以下网站找到:
C、C、FORTRAN和Adagcc.gnu.org
C#和F#microsoft.com
Javajava.sun.com
Haskellhaskell.org
Schemewww.plt-scheme.orgsoftwaredrscheme
Perlwww.perl.com
Pythonwww.python.org
Rubywww.ruby-lang.org
几乎所有浏览器都包含JavaScript,而PHP事实上也包含在所有Web服务器中。
致授课教师
一般应详细讲解第1和3章。对于第2章,尽管学生会认为很有趣且阅读起来很轻松,但由于缺乏严格的技术内容,不建议安排较多的课时。如前所述,由于后续各章中的内容都不依赖于第2章,因此这一章也可以直接跳过。如果单独设置了编译器设计课程,那么也不需要讲授第4章。
|
|