作者 |
[美]罗伯特·W. 塞巴斯塔(Robert W. Sebesta) |
丛书名 |
经典原版书库 |
出版社 |
机械工业出版社 |
ISBN |
9787111671848 |
简要 |
简介 |
内容简介书籍计算机书籍 从为什么学习程序设计语言入手,深入细致地讲解了命令式语言的主要结构及其设计与实现,内容涉及变量、数据类型、表达式和赋值语句、控制语句、子程序、数据抽象机制、对面向对象程序设计的支持(继承和动态方法绑定)、并发、异常处理和事件处理等方面。 |
目录 |
第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研制的Plankalkül语言 36 2.2 伪代码 37 2.3 IBM 704计算机和Fortran 40 2.4 函数式程序设计语言:Lisp 45 2.5 迈向成熟的第一步:ALGOL 60 50 2.6 计算机化的商业记录:COBOL 56 2.7 分时处理的开始:Basic 61 访谈:Alan Cooper—用户设计与语言设计 64 2.8 满足所有人的需求:PL/I 66 2.9 两种早期的动态语言:APL 和SNOBOL 69 2.10 数据抽象的开端:SIMULA 67 70 2.11 正交设计:ALGOL 68 71 2.12 ALGOL系列语言的早期后代语言 73 2.13 基于逻辑的程序设计:Prolog 77 2.14 历史上规模最大的语言设计工作:Ada 79 2.15 面向对象程序设计:Smalltalk 83 2.16 结合命令式和面向对象的特性:C++ 85 2.17 基于命令式的面向对象语言:Java 89 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 Stroustrup—C++的诞生、广泛应用及受到的质疑 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 第一个函数式程序设计语言:Lisp 629 15.5 Scheme概述 633 15.6 Common Lisp 651 15.7 ML 653 15.8 Haskell 658 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 Zuse’s Plankalkül ........................................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 COOPER—User Design and Language Design.........64 2.8 Everything for Everybody: PL/I........................................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 History’s 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........................................92 2.19 The Flagship .NET Language: C#........................................98 2.20 Markup-Programming Hybrid Languages.......................................100 Summary . Bibliographic Notes . Review Questions . Problem Set . Programming Exercises .......................102 Chapter 3 Describing Syntax and Semantics 109 3.1 Introduction........................................110 3.2 The General Problem of Describing Syntax ....................................111 3.3 Formal Methods of Describing Syntax........................................113 3.4 Attribute Grammars ........................................128 History Note ........................................128 3.5 Describing the Meanings of Programs: Dynamic Semantics...........134 History Note ........................................142 Summary . Bibliographic Notes . Review Questions . Problem Set ........155 Chapter 4 Lexical and Syntax Analysis 161 4.1 Introduction........................................162 4.2 Lexical Analysis........................................163 4.3 The Parsing Problem ........................................171 4.4 Recursive-Descent Parsing........................................175 4.5 Bottom-Up Parsing ........................................183 Summary . Review Questions . Problem Set . Programming Exercises ................................191 Chapter 5 Names, Bindings, and Scopes 197 5.1 Introduction........................................198 5.2 Names ........................................199 History Note ........................................199 5.3 Variables........................................200 5.4 The Concept of Binding ........................................203 5.5 Scope........................................211 5.6 Scope and Lifetime........................................222 5.7 Referencing Environments ........................................223 5.8 Named Constants........................................224 Summary . Review Questions . Problem Set . Programming Exercises ..................................227 Chapter 6 Data Types 235 6.1 Introduction........................................236 6.2 Primitive Data Types........................................238 6.3 Character String Types........................................242 History Note ........................................243 6.4 Enumeration Types ........................................247 6.5 Array Types........................................250 History Note ........................................251 History Note ........................................251 6.6 Associative Arrays ........................................261 6.7 Record Types ........................................263 6.8 Tuple Types........................................266 6.9 List Types........................................268 6.10 Union Types ........................................270 6.11 Pointer and Reference Types ........................................273 History Note ........................................276 6.12 Optional Types ........................................285 6.13 Type Checking........................................286 6.14 Strong Typing........................................287 6.15 Type Equivalence........................................288 6.16 Theory and Data Types........................................292 Summary . Bibliographic Notes . Review Questions . Problem Set . Programming Exercises ...........294 Chapter 7 Expressions and Assignment Statements 301 7.1 Introduction........................................302 7.2 Arithmetic Expressions........................................302 7.3 Overloaded Operators........................................311 7.4 Type Conversions ........................................313 History Note ........................................315 7.5 Relational and Boolean Expressions ........................................316 History Note ........................................316 7.6 Short-Circuit Evaluation........................................318 7.7 Assignment Statements ........................................319 History Note ........................................323 7.8 Mixed-Mode Assignment........................................324 Summary . Review Questions . Problem Set . Programming Exercises ....324 Chapter 8 Statement-Level Control Structures 329 8.1 Introduction........................................330 8.2 Selection Statements ........................................332 8.3 Iterative Statements........................................343 8.4 Unconditional Branching........................................355 History Note ........................................356 8.5 Guarded Commands ........................................356 8.6 Conclusions ........................................359 Summary . Review Questions . Problem Set . Programming Exercises ....360 Chapter 9 Subprograms 365 9.1 Introduction........................................366 9.2 Fundamentals of Subprograms ........................................366 9.3 Design Issues for Subprograms........................................374 9.4 Local Referencing Environments ........................................375 9.5 Parameter-Passing Methods........................................376 History Note ........................................384 9.6 Parameters That Are Subprograms ........................................392 History Note ........................................394 9.7 Calling Subprograms Indirectly........................................394 9.8 Design Issues for Functions ........................................396 9.9 Overloaded Subprograms........................................397 9.10 Generic Subprograms........................................398 9.11 User-Defined Overloaded Operators ........................................404 9.12 Closures ........................................405 9.13 Coroutines ........................................407 Summary . Review Questions . Problem Set . Programming Exercises .....410 Chapter 10 Implementing Subprograms 417 10.1 The General Semantics of Calls and Returns...................................418 10.2 Implementing “Simple” Subprograms........................................419 10.3 Implementing Subprograms with Stack-Dynamic Local Variables...........................421 10.4 Nested Subprograms ........................................429 10.5 Blocks........................................436 10.6 Implementing Dynamic Scoping ........................................437 Summary . Review Questions . Problem Set . Programming Exercises .....441 Chapter 11 Abstract Data Types and Encapsulation Constructs 447 11.1 The Concept of Abstraction ........................................448 11.2 Introduction to Data Abstraction........................................449 11.3 Design Issues for Abstract Data Types ........................................452 11.4 Language Examples........................................453 Interview: BJARNE STROUSTRUP—C++: Its Birth, Its Ubiquitousness, and Common Criticisms............................454 11.5 Parameterized Abstract Data Types........................................466 11.6 Encapsulation Constructs........................................471 11.7 Naming Encapsulations ........................................474 Summary . Review Questions . Problem Set . Programming Exercises .....478 Chapter 12 Support for Object-Oriented Programming 483 12.1 Introduction........................................484 12.2 Object-Oriented Programming ........................................485 12.3 Design Issues for Object-Oriented Languages.................................489 12.4 Support for Object-Oriented Programming in Specific Languages ...........................494 Interview: BJARNE STROUSTRUP—On Paradigms and Better Programming..............................498 12.5 Implementation of Object-Oriented Constructs..............................519 12.6 Reflection ........................................522 Summary . Review Questions . Problem Set . Programming Exercises .....528 Chapter 13 Concurrency 533 13.1 Introduction........................................534 13.2 Introduction to Subprogram-Level Concurrency............................539 13.3 Semaphores........................................544 13.4 Monitors ........................................549 13.5 Message Passing ........................................551 13.6 Ada Support for Concurrency........................................552 13.7 Java Threads ........................................560 13.8 C# Threads........................................570 13.9 Concurrency in Functional Languages........................................575 13.10 Statement-Level Concurrency........................................578 Summary . Bibliographic Notes . Review Questions . Problem Set . Programming Exercises ..........580 Chapter 14 Exception Handling and Event Handling 587 14.1 Introduction to Exception Handling ........................................588 History Note ........................................592 14.2 Exception Handling in C++ ........................................594 14.3 Exception Handling in Java........................................598 14.4 Exception Handling in Python and Ruby........................................605 14.5 Introduction to Event Handling ........................................608 14.6 Event Handling with Java ........................................609 14.7 Event Handling in C# ........................................613 Summary . Bibliographic Notes . Review Questions . Problem Set . Programming Exercises .........................616 Chapter 15 Functional Programming Languages 623 15.1 Introduction........................................624 15.2 Mathematical Functions........................................625 15.3 Fundamentals of Functional Programming Languages ...................628 15.4 The First Functional Programming Language: Lisp .......................629 15.5 An Introduction to Scheme........................................633 15.6 Common Lisp........................................651 15.7 ML ........................................653 15.8 Haskell ........................................658 15.9 F# ........................................663 15.10 Support for Functional Programming in Primarily Imperative Languages ....................666 15.11 A Comparison of Functional and Imperative Languages.................669 Summary . Bibliographic Notes . Review Questions . Problem Set . Programming Exercises ...........................671 Chapter 16 Logic Programming Languages 679 16.1 Introduction........................................680 16.2 A Brief Introduction to Predicate Calculus ......................................680 16.3 Predicate Calculus and Proving Theorems ......................................684 16.4 An Overview of Logic Programming........................................686 16.5 The Origins of Prolog........................................688 16.6 The Basic Elements of Prolog ........................................688 16.7 Deficiencies of Prolog ........................................703 16.8 Applications of Logic Programming........................................709 Summary . Bibliographic Notes . Review Questions . Problem Set . Programming Exercises .......710 Bibliography ........................................715 |