●第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.1Zuse研制的Plankalkül語言36
2.2偽代碼37
2.3IBM704計算機和Fortran40
2.4函數式程序設計語言:Lisp45
2.5邁向成熟的第一步:ALGOL6050
2.6計算機化的商業記錄:COBOL56
2.7分時處理的開始:Basic61
訪談:AlanCooper——用戶設計與語言設計64
2.8滿足所有人的需求:PL/I66
2.9兩種早期的動態語言:APL和SNOBOL69
2.10數據抽像的開端:SIMULA6770
2.11正交設計:ALGOL6871
2.12ALGOL繫列語言的早期後代語言73
2.13基於邏輯的程序設計:Prolog77
2.14歷史上規模優選的語言設計工作:Ada79
2.15面向對像程序設計:Smalltalk83
2.16結合命令式和面向對像的特性:C++85
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
組類型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
訪談:BjarneStroustrup——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
訪談:BjarneStroustrup——關於程序設計範型和更好的程序設計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.6Ada對並發機制的支持552
13.7Java線程560
13.8C#線程570
13.9函數式語言中的並發處理575
13.10語句級並發578
小結·文獻注記·復習題·習題·程序設計練習580
第14章異常處理和事件處理587
14.1異常處理概述588
歷史注記592
14.2C++中的異常處理594
14.3Java中的異常處理598
14.4Python和Ruby中的異常處理605
14.5事件處理概述608
14.6Java中的事件處理609
14.7C#中的事件處理613
小結·文獻注記·復習題·習題·程序設計練習616
第15章函數式程序設計語言623
15.1概述624
15.2數學函數625
15.3函數式程序設計語言基礎628
15.4第一個函數式程序設計語言:Lisp629
15.5Scheme概述633
15.6CommonLisp651
15.7ML653
15.8Haskell658
15.9F#663
15.10主要命令式語言對函數式程序設計的支持666
15.11函數式語言和命令式語言的比較669
小結·文獻注記·復習題·習題·程序設計練習671
第16章邏輯程序設計語言679
16.1概述680
16.2謂詞演算概述680
16.3謂詞演算和定理證明684
16.4邏輯程序設計概述686
16.5Prolog的起源688
16.6Prolog素688
16.7Prolog的缺點703
16.8邏輯程序設計的應用709
小結·文獻注記·復習題·習題·程序設計練習710
參考文獻715