程式設計語言概念(第9版)

程式設計語言概念(第9版)

《程式設計語言概念(第9版)》是2011年1月清華大學出版社出版的圖書,作者是Robert W.Sebesta、譯者徐明星。

基本介紹

  • 書名:程式設計語言概念(第9版)
  • 作者:Robert W.Sebesta
  • 譯者:徐明星
  • ISBN:9787302229568
  • 定價:69元
  • 出版社清華大學出版社
  • 出版時間:2011.01.01
  • 裝幀:平裝
內容簡介,圖書目錄,

內容簡介

程式設計語言是計算機教學的基礎課程。大部分的高等院校程式設計語言教材旨在講解語法形式,講解如何寫出讓編譯器接受的語句,以及這些語句是如何被編譯器理解的。學生很容易將程式設計語言當作一門特殊的外語來學習,將編程當作是句型練習,編程過程就是語言翻譯的過程——即將頭腦中的“內部言語”翻譯成符合某種程式設計語言語法的語句。當面對以練習語法為主要目的習題時,這樣的翻譯過程容易完成,而當面對複雜的綜合性習題或者要編程實現算法時,學生往往就會覺得難以下手。
導致這種情況的根本原因是學生的思維沒有上升到計算機解題的思維。程式設計語言是一種人造語言,它與漢語、英語、法語等自然語言存在著很大的不同。程式設計語言是在一定的設計思想指導下,權衡多種因素,精心為計算機定義的。程式設計語言的語法和語義只是外在的表現,程式設計語言的本質是解決套用領域問題的方法與工具。語言既是思維的表達,也是思維的工具。如果局限於程式設計語言定義的語法和語義,不能運用語言工具來輔助自己的思維,必然會限制用程式設計語言來解決實際問題的能力。
本書並不是介紹某一種具體的程式設計語言所蘊涵的計算機解題原理,而是直接解釋說明一般性原理,並介紹這些原理在不同程式設計語言中的實現,比較不同語言實現的優劣。這是一種從本質到現象的論述方式,它使讀者更關注於程式設計語言原理本身,為今後深入理解和掌握具體的程式設計語言,選擇更合適的程式設計語言來解決具體問題,乃至於創造實現新的程式設計語言都打下紮實的基礎。
本書作者有長達幾十年的計算機科學教育經歷,書中內容豐富,論述全面,被美國和加拿大多所高等院校採用作為教材。本書既可用做高等院校計算機及相關專業程式設計語言課程的教材和參考書,也可供程式設計人員參考。

圖書目錄

第1章 預備知識 1
1.1 學習程式設計語言原理的
原因 1
1.2 程式設計領域 3
1.2.1 科學套用 3
1.2.2 商務套用 3
1.2.3 人工智慧 4
1.2.4 系統程式設計 4
1.2.5 網路軟體 4
1.3 語言評價標準 5
1.3.1 可讀性 5
1.3.2 可寫性 9
1.3.3 可靠性 10
1.3.4 代價 11
1.4 影響語言設計的因素 13
1.4.1 計算機體系結構 13
1.4.2 程式設計方法學 14
1.5 程式設計語言的分類 15
1.6 語言設計中的權衡 16
1.7 實現方法 17
1.7.1 編譯 18
1.7.2 完全解釋 19
1.7.3 混合實現系統 20
1.7.4 預處理器 20
1.8 編程環境 21
小結 22
複習題 22
習題 23
第2章 主要程式設計語言的發展 24
2.1 Zuse的Plankalkül語言 25
2.1.1 歷史背景 25
2.1.2 語言概述 26
2.2 最少硬體的程式設計:
偽代碼 27
2.2.1 Short Code語言 27
2.2.2 Speedcoding系統 28
2.2.3 UNIVAC“編譯”
系統 28
2.2.4 相關工作 28
2.3 IBM 704計算機與Fortran
語言 29
2.3.1 歷史背景 29
2.3.2 設計過程 29
2.3.3 Fortran I概述 30
2.3.4 F...
2.3.5FortranIV、77、90、95和2003 31
2.3.6評價 31
2.4函式式程式設計:LISP語言 33
2.4.1人工智慧的起源和表處理 33
2.4.2LISP語言的設計過程 33
2.4.3語言概述 34
2.4.4評價 35
2.4.5LISP的兩種後代語言 36
2.4.6相關語言 36
2.5邁向成熟的第一步:ALGOL60 37
2.5.1歷史背景 37
2.5.2早期設計過程 37
2.5.3ALGOL58概述 38
2.5.4對ALGOL58報告的回響 38
2.5.5ALGOL60的設計過程 39
2.5.6ALGOL60概述 39
2.5.7評價 40
2.6商務記錄計算機化:COBOL語言 41
2.6.1歷史背景 42
2.6.2FLOW-MATIC語言 42
2.6.3COBOL語言的設計過程 42
2.6.4評價 43
2.7分時處理的開始:BASIC語言 45
2.7.1設計過程 46
2.7.2語言概述 46
2.7.3評價 46
2.8滿足所有人的需要:PL/I 48
2.8.1歷史背景 48
2.8.2設計過程 48
2.8.3語言概述 49
2.8.4評價 49
2.9兩種早期的動態語言:APL和SNOBOL 50
2.9.1APL語言的起源與特點 51
2.9.2SNOBOL語言的起源與特點 51
2.10數據抽象的開始:SIMULA67 51
2.10.1設計過程 51
2.10.2語言概述 52
2.11正交設計:ALGOL68 52
2.11.1設計過程 52
2.11.2語言概述 52
2.11.3評價 53
2.12ALGOL系列語言的早期後代語言 53
2.12.1為簡單性而設計:Pascal語言 53
2.12.2可移植的系統語言:C語言 55
2.13基於邏輯的程式設計:Prolog語言 57
2.13.1設計過程 57
2.13.2語言概述 57
2.13.3評價 58
2.14歷史上規模最大的設計
工作:Ada語言 58
2.14.1歷史背景 58
2.14.2設計過程 59
2.14.3語言概述 60
2.14.4評價 60
2.14.5Ada95 61
2.15面向對象的程式設計:
Smalltalk 62
2.15.1設計過程 62
2.15.2語言概述 62
2.15.3評價 63
2.16結合命令式和面向對象的特性:C++ 64
2.16.1設計過程 64
2.16.2語言概述 65
2.16.3評價 65
2.16.4一種相關語言:Eiffel 65
2.16.5另一種相關語言:Delphi 66
2.17基於命令式的面向對象語言:Java 66
2.17.1設計過程 66
2.17.2語言概述 67
2.17.3評價 68
2.18腳本語言 69
2.18.1Perl的起源與特點 69
2.18.2JavaScript的起源與特點 71
2.18.3PHP的起源與特點 72
2.18.4Python的起源與特點 73
2.18.5Ruby的起源與特點 73
2.18.6Lua的起源與特點 74
2.19一種新千年的基於C的語言:C# 74
2.19.1設計過程 74
2.19.2語言概述 75
2.19.3評價 76
2.20標記與程式設計混合的語言 77
2.20.1XSLT 77
2.20.2JSP 77
小結 78
文獻注釋 78
複習題 79
習題 80
程式設計練習 81
訪談:用戶設計與語言設計 82
第3章描述語法和語義 85
3.1概述 85
3.2描述語法的普遍問題 86
3.2.1語言識別器 86
3.2.2語言生成器 87
3.3描述語法的形式化方法 87
3.3.1巴科斯-諾爾範式和
上下文無關文法 87
3.3.2擴展的BNF 96
3.3.3文法與識別器 97
3.4屬性文法 98
3.4.1靜態語義 98
3.4.2基本概念 98
3.4.3屬性文法定義 99
3.4.4本質屬性 99
3.4.5屬性文法的例子 99
3.4.6計算屬性值 101
3.4.7評價 102
3.5描述程式的意義:
動態語義 102
3.5.1操作語義 103
3.5.2指稱語義 104
3.5.3公理語義 108
小結 118
文獻注釋 119
複習題 119
習題 120
第4章詞法分析和語法分析 124
4.1概述 124
4.2詞法分析 125
4.3語法分析問題 132
4.3.1語法分析概述 132
4.3.2自頂向下的語法
分析器 133
4.3.3自底向上的語法
分析器 133
4.3.4語法分析的複雜度 134
4.4遞歸下降的語法分析 134
4.4.1遞歸下降的語法
分析過程 134
4.4.2LL文法類 139
4.5自底向上的語法分析 142
4.5.1自底向上語法分析器
的分析問題 142
4.5.2移進-歸約算法 143
4.5.3LR語法分析器 144
小結 147
複習題 148
習題 149
程式設計練習 150
第5章名字、綁定和作用域 151
5.1引言 151
5.2名字 151
5.2.1設計問題 151
5.2.2名字形式 152
5.2.3特殊字 153
5.3變數 154
5.3.1名字 154
5.3.2地址 154
5.3.3類型 155
5.3.4數值 155
5.4綁定的概念 156
5.4.1屬性與變數綁定 156
5.4.2綁定類型 156
5.4.3存儲綁定和生存期 160
5.5作用域 162
5.5.1靜態作用域 163
5.5.2塊 164
5.5.3聲明的次序 165
5.5.4全局作用域 166
5.5.5靜態作用域評估 168
5.5.6動態作用域 168
5.5.7動態作用域評估 169
5.6作用域和生存期 170
5.7引用環境 171
5.8命名常量 172
小結 174
複習題 175
問題集 175
編程題 180
訪談:腳本語言以及其他靈活
解決方案的例子 180
第6章數據類型 183
6.1引言 183
6.2基本數據類型 184
6.2.1數值類型 184
6.2.2布爾類型 186
6.2.3字元類型 187
6.3字元串類型 187
6.3.1設計問題 187
6.3.2字元串及其操作 187
6.3.3字元串長度的
設計選項 189
6.3.4評估 190
6.3.5字元串類型的實現 190
6.4用戶定義的序數類型 191
6.4.1枚舉類型 191
6.4.2子界類型 193
6.4.3用戶定義的有序
類型的實現 194
6.5數組類型 194
6.5.1設計問題 195
6.5.2數組和索引 195
6.5.3下標的綁定和數組
的種類 196
6.5.4數組初始化 198
6.5.5數組操作 200
6.5.6矩形數組和不規則數組 201
6.5.7切片 201
6.5.8評估 202
6.5.9數組類型的實現 202
6.6關聯數組 204
6.6.1結構和操作 205
6.6.2關聯數組的實現 206
6.7記錄類型 206
6.7.1記錄的定義 207
6.7.2記錄域引用 208
6.7.3記錄操作 208
6.7.4評估 209
6.7.5記錄類型的實現 209
6.8聯合類型 210
6.8.1設計問題 210
6.8.2判別式聯合與自由聯合 210
6.8.3Ada的聯合類型 211
6.8.4評估 212
6.8.5聯合類型的實現 212
6.9指針和引用類型 213
6.9.1設計問題 214
6.9.2指針操作 214
6.9.3指針的相關問題 215
6.9.4Ada語言中的指針 216
6.9.5C和C++中的指針 216
6.9.6引用類型 218
6.9.7評估 219
6.9.8指針和引用類型的
實現 219
6.10類型檢查 223
6.11強類型化 223
6.12類型等價 224
6.13理論和數據類型 227
小結 229
參考文獻注釋 230
複習題 230
問題集 231
編程題 232
訪談:Lua 233
第7章表達式與賦值語句 237
7.1引言 237
7.2算術表達式 237
7.2.1運算符運算順序 238
7.2.2操作對象運算
順序 242
7.3運算符重載 244
7.4類型轉換 245
7.4.1表達式中的強制
類型轉換 246
7.4.2顯式類型轉換 247
7.4.3表達式中的錯誤 248
7.5關係表達式和邏輯表達式 248
7.5.1關係表達式 248
7.5.2邏輯表達式 249
7.6短路求值 250
7.7賦值語句 251
7.7.1簡單賦值 252
7.7.2條件賦值 252
7.7.3混合賦值運算符 252
7.7.4一元賦值運算符 253
7.7.5賦值作為表達式 253
7.7.6列表賦值 254
7.8混合模式賦值 255
小結 255
複習題 256
問題集 257
編程題 259
第8章語句級控制結構 260
8.1引言 260
8.2選擇語句 261
8.2.1雙路選擇語句 261
8.2.2多重選擇結構 265
8.3疊代語句 272
8.3.1計數控制循環 273
8.3.2邏輯控制循環 277
8.3.3用戶自定義的
循環控制機制 279
8.3.4基於數據結構的
疊代 280
8.4無條件分支 283
8.5防護命令(Guarded
Commands) 283
8.6結論 285
小結 286
複習題 287
問題集 288
編程題 288
訪談:第一部分:語言學的研究和
腳本語言Perl的誕生 290
第9章子程式 293
9.1引言 293
9.2子程式基本原理 293
9.2.1子程式的一般性質 293
9.2.2子程式的基本定義 294
9.2.3參數 295
9.2.4Ruby語言的塊 299
9.2.5過程與函式 300
9.3子程式的設計問題 301
9.4局部引用環境 302
9.4.1局部變數 302
9.4.2嵌套子程式 303
9.5參數傳遞方式 304
9.5.1參數傳遞的語義
模型 304
9.5.2參數傳遞的實現
模式 304
9.5.3參數傳遞方法的
實現 308
9.5.4常見語言的參數
傳遞方法 309
9.5.5參數類型檢查 311
9.5.6多維數組作參數 313
9.5.7設計考慮 316
9.5.8參數傳遞的例子 316
9.6子程式作為參數 319
9.7重載子程式 320
9.8泛型子程式 321
9.8.1Ada中的泛型子
程式 322
9.8.2C++中的泛型函式 323
9.8.3Java5.0中的泛型
方法 325
9.8.4C#2005中的泛型
方法 326
9.9函式的設計問題 327
9.9.1函式副作用 327
9.9.2返回值類型 327
9.9.3返回值的個數 327
9.10用戶定義重載運算符 328
9.11協同程式 328
小結 330
複習題 331
問題集 332
編程題 334
訪談:第二部分:一般的腳本語言
和特殊的Perl語言 335
第10章實現子程式 337
10.1調用和返回的一般語義 337
10.2實現“簡單”的子程式 337
10.3通過棧動態局部變數
實現子程式 339
10.3.1更複雜的活動
記錄 339
10.3.2一個不含遞歸
調用的例子 341
10.3.3遞歸調用 343
10.4嵌套子程式 345
10.4.1基礎 345
10.4.2靜態鏈 346
10.5塊 350
10.6動態作用域的實現 351
10.6.1深訪問 351
10.6.2淺訪問 353
小結 354
複習題 355
問題集 355
編程題 358
訪談:保持儘量簡單 359
第11章抽象數據類型與封裝
結構 361
11.1抽象的概念 361
11.2數據抽象的介紹 362
11.2.1抽象數據類型之
浮點型 362
11.2.2抽象數據類型之
用戶定義類型 362
11.2.3示例 363
11.3抽象數據類型的
設計要點 364
11.4語言示例 364
11.4.1Ada中的抽象
數據類型 365
11.4.2C++中的抽象
數據類型 369
11.4.3Java中的抽象
數據類型 372
11.4.4C#中的抽象
數據類型 374
11.4.5Ruby中的抽象
數據類型 375
11.5參數化的抽象數據類型 377
11.5.1Ada 378
11.5.2C++ 378
11.5.3Java5.0 380
11.5.4C#2005 381
11.6封裝結構 381
11.6.1引言 381
11.6.2嵌套子程式 382
11.6.3C中的封裝 382
11.6.4C++中的封裝 382
11.6.5Ada包 383
11.6.6C#程式集 383
11.7命名封裝 384
11.7.1C++命名空間 384
11.7.2Java包 385
11.7.3Ada包 386
11.7.4Ruby模組 387
小結 387
複習題 388
問題集 389
編程題 390
附錄1 391
訪談:C++:它的誕生,它的無處不
在和它受到的常見質疑 391
第12章 面向對象程式設計的
支持 394
12.1概述 394
12.2面向對象程式設計 394
12.2.1引言 394
12.2.2繼承 395
12.2.3動態綁定 396
12.3面向對象語言的設計
問題 397
12.3.1對象的排他性 397
12.3.2子類是子類型嗎 397
12.3.3類型檢查和多態 398
12.3.4單繼承與多繼承 399
12.3.5對象的分配和
釋放 399
12.3.6動態綁定與靜態
綁定 400
12.3.7嵌套類 400
12.3.8對象的初始化 400
12.4Smalltalk對面向對象程式
設計支持 400
12.4.1一般特徵 401
12.4.2類型檢查和多態 401
12.4.3繼承 401
12.4.4Smalltalk的評估 402
12.5C++對面向對象程式
設計的支持 402
12.5.1一般特徵 403
12.5.2繼承 403
12.5.3動態綁定 407
12.5.4評估 409
12.6Java中對面向對象程式
設計的支持 410
12.6.1一般特徵 410
12.6.2 繼承 411
12.6.3動態綁定 412
12.6.4被嵌套的類 412
12.6.5評估 413
12.7C#中對面向對象程式設計
的支持 413
12.7.1一般特徵 413
12.7.2繼承 413
12.7.3動態綁定 413
12.7.4被嵌套的類 414
12.7.5評估 414
12.8Ada95對面向對象程式
設計的支持 414
12.8.1一般特徵 414
12.8.2繼承 415
12.8.3動態綁定 416
12.8.4子程式包 417
12.8.5評估 418
12.9Ruby對面向對象程式設計
的支持 418
12.9.1 一般特徵 418
12.9.2繼承 420
12.9.3動態綁定 421
12.9.4評估 421
12.10面向對象構造的實現 421
12.10.1存儲實例數據 421
12.10.2方法調用到方法
的動態綁定 422
小結 424
複習題 425
問題集 426
編程題 427
訪談:關於程式設計范型和
更好的程式設計 427
第13章描述語法和語義 430
13.1概述 430
13.1.1多處理器體系
結構 431
13.1.2並發的種類 432
13.1.3使用並發的目的 432
13.2子程式級並發的介紹 433
13.2.1基本概念 433
13.2.2為並發而設計的
語言 435
13.2.3設計問題 436
13.3信號量 436
13.3.1概述 436
13.3.2合作同步 436
13.3.3競爭同步 438
13.3.4評價 439
13.4管程 440
13.4.1概述 440
13.4.2競爭同步 440
13.4.3合作同步 440
13.4.4評價 440
13.5訊息傳遞 441
13.5.1概述 441
13.5.2同步訊息傳遞的
原理 442
13.6Ada對並發的支持 442
13.6.1基本原理 442
13.6.2合作同步 445
13.6.3競爭同步 446
13.6.4任務終止 448
13.6.5優先權 448
13.6.6二元信號量 448
13.6.7受保護對象 449
13.6.8異步訊息傳遞 450
13.6.9評價 451
13.7Java執行緒 451
13.7.1Thread類 451
13.7.2優先權 453
13.7.3競爭同步 453
13.7.4合作同步 454
13.7.5評價 457
13.8C#執行緒 457
13.8.1基本執行緒操作 457
13.8.2同步執行緒 458
13.8.3評價 458
13.9語句級並發 458
13.9.1高性能Fortran 459
小結 460
文獻注釋 461
複習題 461
習題 463
程式設計練習 463
第14章異常處理和事件處理 464
14.1異常處理概述 464
14.1.1基本概念 465
14.1.2設計問題 466
14.2Ada中的異常處理 469
14.2.1異常處理程式 469
14.2.2將異常綁定到
處理程式 470
14.2.3繼續 470
14.2.4其他設計選擇 471
14.2.5例子 472
14.2.6評價 474
14.3C++中的異常處理 474
14.3.1異常處理程式 474
14.3.2異常與處理程式的
綁定 475
14.3.3繼續 476
14.3.4其他設計選擇 476
14.3.5例子 476
14.3.6評價 478
14.4Java中的異常處理 478
14.4.1異常類 478
14.4.2異常處理程式 479
14.4.3異常與處理程式
的綁定 479
14.4.4其他設計選擇 480
14.4.5例子 481
14.4.6finally子句 482
14.4.7斷言 483
14.4.8評價 484
14.5事件處理概述 484
14.6Java的事件處理 485
14.6.1JavaSwing的GUI
組件 485
14.6.2Java事件模型 486
小結 489
文獻注釋 490
複習題 490
習題 491
程式設計練習 492
訪談:Java的誕生 493
第15章函式式程式設計語言 495
15.1概述 495
15.2數學函式 496
15.2.1簡單函式 496
15.2.2函式形式 497
15.3函式式程式設計語言
基礎 497
15.4第一種函式式程式設計
語言:LISP 498
15.4.1數據類型和結構 499
15.4.2第一個LISP
解釋器 499
15.5Scheme概述 501
15.5.1Scheme的起源 501
15.5.2Scheme解釋器 501
15.5.3基本數值函式 501
15.5.4定義函式 502
15.5.5輸出函式 503
15.5.6數值謂詞函式 503
15.5.7控制流 504
15.5.8表函式 505
15.5.9用於符號原子和
表的謂詞函式 507
15.5.10Scheme函式示例 508
15.5.11Scheme中的
尾遞歸 512
15.5.12函式形式 512
15.5.13構建代碼的函式 514
15.6COMMONLISP 515
15.7ML 515
15.8Haskell 518
15.9函式式語言的套用 522
15.10函式式語言和命令式
語言的比較 522
小結 524
文獻注釋 525
複習題 525
習題 526
程式設計練習 527
第16章邏輯程式設計語言 528
16.1概述 528
16.2謂詞演算簡介 528
16.2.1命題 529
16.2.2子句形式 530
16.3謂詞演算與定理證明 531
16.4邏輯程式設計概述 533
16.5Prolog的起源 534
16.6Prolog的基本元素 534
16.6.1項 534
16.6.2事實語句 535
16.6.3規則語句 536
16.6.4目標語句 536
16.6.5Prolog的推理
過程 537
16.6.6簡單算術 539
16.6.7表結構 541
16.7Prolog的缺陷 545
16.7.1歸結順序的控制 545
16.7.2封閉世界假設 547
16.7.3否定問題 548
16.7.4固有的限制 549
16.8邏輯程式設計的套用 550
16.8.1關係資料庫管理
系統 550
16.8.2專家系統 550
16.8.3自然語言處理 551
小結 551
文獻注釋 551
複習題 552
習題 552
程式設計練習 553
參考文獻 554

相關詞條

熱門詞條

聯絡我們