第1章 預備知識
1.1 學習程序設計語言原理的原因
1.2 程序設計領域
1.2.1 科學應用
1.2.2 商務應用
1.2.3 人工智能
1.2.4 係統程序設計
1.2.5 網絡軟件
1.3 語言評價標準
1.3.1 可讀性
1.3.2 可寫性
1.3.3 可靠性
1.3.4 代價
1.4 影響語言設計的因素
1.4.1 計算機體係結構
1.4.2 程序設計方法學
1.5 程序設計語言的分類
1.6 語言設計中的權衡
1.7 實現方法
1.7.1 編譯
1.7.2 完全解釋
1.7.3 混閤實現係統
1.7.4 預處理器
1.8 編程環境
小結
復習題
習題
第2章 主要程序設計語言的發展
2.1 Zuse的Plankalkül語言
2.1.1 曆史背景
2.1.2 語言概述
2.2 最少硬件的程序設計:僞代碼
2.2.1 Short Code語言
2.2.2 Speedcoding係統
2.2.3 UNIVAC“編譯”係統
2.2.4 相關工作
2.3 IBM 704計算機與Fortran語言
2.3.1 曆史背景
2.3.2 設計過程
2.3.3 Fortran I概述
2.3.4 Fortran II
2.3.5 Fortran IV、77、90、95和2003
2.3.6 評價
2.4 函數式程序設計:LISP語言
2.4.1 人工智能的起源和錶處理
2.4.2 LISP語言的設計過程
2.4.3 語言概述
2.4.4 評價
2.4.5 LISP的兩種後代語言
2.4.6 相關語言
2.5 邁嚮成熟的第一步:ALGOL 60
2.5.1 曆史背景
2.5.2 早期設計過程
2.5.3 ALGOL 58概述
2.5.4 對ALGOL 58報告的響應
2.5.5 ALGOL 60的設計過程
2.5.6 ALGOL 60概述
2.5.7 評價
2.6 商務記錄計算機化:COBOL語言
2.6.1 曆史背景
2.6.2 FLOW-MATIC語言
2.6.3 COBOL語言的設計過程
2.6.4 評價
2.7 分時處理的開始:BASIC語言
2.7.1 設計過程
2.7.2 語言概述
2.7.3 評價
2.8 滿足所有人的需要:PL/I
2.8.1 曆史背景
2.8.2 設計過程
2.8.3 語言概述
2.8.4 評價
2.9 兩種早期的動態語言:APL和SNOBOL
2.9.1 APL語言的起源與特點
2.9.2 SNOBOL語言的起源與特點
2.10 數據抽象的開始:SIMULA 67
2.10.1 設計過程
2.10.2 語言概述
2.11 正交設計:ALGOL 68
2.11.1 設計過程
2.11.2 語言概述
2.11.3 評價
2.12 ALGOL係列語言的早期後代語言
2.12.1 為簡單性而設計:Pascal語言
2.12.2 可移植的係統語言:C語言
2.13 基於邏輯的程序設計:Prolog語言
2.13.1 設計過程
2.13.2 語言概述
2.13.3 評價
2.14 曆史上規模最大的設計工作:Ada語言
2.14.1 曆史背景
2.14.2 設計過程
2.14.3 語言概述
2.14.4 評價
2.14.5 Ada 95
2.15 麵嚮對象的程序設計:Smalltalk
2.15.1 設計過程
2.15.2 語言概述
2.15.3 評價
2.16 結閤命令式和麵嚮對象的特性:C++
2.16.1 設計過程
2.16.2 語言概述
2.16.3 評價
2.16.4 一種相關語言:Eiffel
2.16.5 另一種相關語言:Delphi
2.17 基於命令式的麵嚮對象語言:Java
2.17.1 設計過程
2.17.2 語言概述
2.17.3 評價
2.18 腳本語言
2.18.1 Perl的起源與特點
2.18.2 JavaScript的起源與特點
2.18.3 PHP的起源與特點
2.18.4 Python的起源與特點
2.18.5 Ruby的起源與特點
2.18.6 Lua的起源與特點
2.19 一種新韆年的基於C的語言:C#
2.19.1 設計過程
2.19.2 語言概述
2.19.3 評價
2.20 標記與程序設計混閤的語言
2.20.1 XSLT
2.20.2 JSP
小結
文獻注釋
復習題
習題
程序設計練習
訪談:用戶設計與語言設計
第3章 描述語法和語義
3.1 概述
3.2 描述語法的普遍問題
3.2.1 語言識彆器
3.2.2 語言生成器
3.3 描述語法的形式化方法
3.3.1 巴科斯-諾爾範式和上下文無關文法
3.3.2 擴展的BNF
3.3.3 文法與識彆器
3.4 屬性文法
3.4.1 靜態語義
3.4.2 基本概念
3.4.3 屬性文法定義
3.4.4 本質屬性
3.4.5 屬性文法的例子
3.4.6 計算屬性值
3.4.7 評價
3.5 描述程序的意義:動態語義
3.5.1 操作語義
3.5.2 指稱語義
3.5.3 公理語義
小結
文獻注釋
復習題
習題
第4章 詞法分析和語法分析
4.1 概述
4.2 詞法分析
4.3 語法分析問題
4.3.1 語法分析概述
4.3.2 自頂嚮下的語法分析器
4.3.3 自底嚮上的語法分析器
4.3.4 語法分析的復雜度
4.4 遞歸下降的語法分析
4.4.1 遞歸下降的語法分析過程
4.4.2 LL文法類
4.5 自底嚮上的語法分析
4.5.1 自底嚮上語法分析器的分析問題
4.5.2 移進-歸約算法
4.5.3 LR語法分析器
小結
復習題
習題
程序設計練習
第5章 名字、綁定和作用域
5.1 引言
5.2 名字
5.2.1 設計問題
5.2.2 名字形式
5.2.3 特殊字
5.3 變量
5.3.1 名字
5.3.2 地址
5.3.3 類型
5.3.4 數值
5.4 綁定的概念
5.4.1 屬性與變量綁定
5.4.2 綁定類型
5.4.3 存儲綁定和生存期
5.5 作用域
5.5.1 靜態作用域
5.5.2 塊
5.5.3 聲明的次序
5.5.4 全局作用域
5.5.5 靜態作用域評估
5.5.6 動態作用域
5.5.7 動態作用域評估
5.6 作用域和生存期
5.7 引用環境
5.8 命名常量
小結
復習題
問題集
編程題
訪談:腳本語言以及其他靈活解決方案的例子
第6章 數據類型
6.1 引言
6.2 基本數據類型
6.2.1 數值類型
6.2.2 布爾類型
6.2.3 字符類型
6.3 字符串類型
6.3.1 設計問題
6.3.2 字符串及其操作
6.3.3 字符串長度的設計選項
6.3.4 評估
6.3.5 字符串類型的實現
6.4 用戶定義的序數類型
6.4.1 枚舉類型
6.4.2 子界類型
6.4.3 用戶定義的有序類型的實現
6.5 數組類型
6.5.1 設計問題
6.5.2 數組和索引
6.5.3 下標的綁定和數組的種類
6.5.4 數組初始化
6.5.5 數組操作
6.5.6 矩形數組和不規則數組
6.5.7 切片
6.5.8 評估
6.5.9 數組類型的實現
6.6 關聯數組
6.6.1 結構和操作
6.6.2 關聯數組的實現
6.7 記錄類型
6.7.1 記錄的定義
6.7.2 記錄域引用
6.7.3 記錄操作
6.7.4 評估
6.7.5 記錄類型的實現
6.8 聯閤類型
6.8.1 設計問題
6.8.2 判彆式聯閤與自由聯閤
6.8.3 Ada的聯閤類型
6.8.4 評估
6.8.5 聯閤類型的實現
6.9 指針和引用類型
6.9.1 設計問題
6.9.2 指針操作
6.9.3 指針的相關問題
6.9.4 Ada語言中的指針
6.9.5 C和C++中的指針
6.9.6 引用類型
6.9.7 評估
6.9.8 指針和引用類型的實現
6.10 類型檢查
6.11 強類型化
6.12 類型等價
6.13 理論和數據類型
小結
參考文獻注釋
復習題
問題集
編程題
訪談:Lua
第7章 錶達式與賦值語句
7.1 引言
7.2 算術錶達式
7.2.1 運算符運算順序
7.2.2 操作對象運算順序
7.3 運算符重載
7.4 類型轉換
7.4.1 錶達式中的強製類型轉換
7.4.2 顯式類型轉換
7.4.3 錶達式中的錯誤
7.5 關係錶達式和邏輯錶達式
7.5.1 關係錶達式
7.5.2 邏輯錶達式
7.6 短路求值
7.7 賦值語句
7.7.1 簡單賦值
7.7.2 條件賦值
7.7.3 混閤賦值運算符
7.7.4 一元賦值運算符
7.7.5 賦值作為錶達式
7.7.6 列錶賦值
7.8 混閤模式賦值
小結
復習題
問題集
編程題
第8章 語句級控製結構
8.1 引言
8.2 選擇語句
8.2.1 雙路選擇語句
8.2.2 多重選擇結構
8.3 迭代語句
8.3.1 計數控製循環
8.3.2 邏輯控製循環
8.3.3 用戶自定義的循環控製機製
8.3.4 基於數據結構的迭代
8.4 無條件分支
8.5 防護命令(GuardedCommands)
8.6 結論
小結
復習題
問題集
編程題
訪談:第一部分:語言學的研究和腳本語言Perl的誕生
第9章 子程序
9.1 引言
9.2 子程序基本原理
9.2.1 子程序的一般性質
9.2.2 子程序的基本定義
9.2.3 參數
9.2.4 Ruby語言的塊
9.2.5 過程與函數
9.3 子程序的設計問題
9.4 局部引用環境
9.4.1 局部變量
9.4.2 嵌套子程序
9.5 參數傳遞方式
9.5.1 參數傳遞的語義模型
9.5.2 參數傳遞的實現模式
9.5.3 參數傳遞方法的實現
9.5.4 常見語言的參數傳遞方法
9.5.5 參數類型檢查
9.5.6 多維數組作參數
9.5.7 設計考慮
9.5.8 參數傳遞的例子
9.6 子程序作為參數
9.7 重載子程序
9.8 泛型子程序
9.8.1 Ada中的泛型子程序
9.8.2 C++中的泛型函數
9.8.3 Java 5.0中的泛型方法
9.8.4 C# 2005中的泛型方法
9.9 函數的設計問題
9.9.1 函數副作用
9.9.2 返迴值類型
9.9.3 返迴值的個數
9.10 用戶定義重載運算符
9.11 協同程序
小結
復習題
問題集
編程題
訪談:第二部分:一般的腳本語言和特殊的Perl語言
第10章 實現子程序
10.1 調用和返迴的一般語義
10.2 實現“簡單”的子程序
10.3 通過棧動態局部變量實現子程序
10.3.1 更復雜的活動記錄
10.3.2 一個不含遞歸調用的例子
10.3.3 遞歸調用
10.4 嵌套子程序
10.4.1 基礎
10.4.2 靜態鏈
10.5 塊
10.6 動態作用域的實現
10.6.1 深訪問
10.6.2 淺訪問
小結
復習題
問題集
編程題
訪談:保持盡量簡單
第11章 抽象數據類型與封裝結構
11.1 抽象的概念
11.2 數據抽象的介紹
11.2.1 抽象數據類型之浮點型
11.2.2 抽象數據類型之用戶定義類型
11.2.3 示例
11.3 抽象數據類型的設計要點
11.4 語言示例
11.4.1 Ada中的抽象數據類型
11.4.2 C++中的抽象數據類型
11.4.3 Java中的抽象數據類型
11.4.4 C#中的抽象數據類型
11.4.5 Ruby中的抽象數據類型
11.5 參數化的抽象數據類型
11.5.1 Ada
11.5.2 C++
11.5.3 Java 5.0
11.5.4 C# 2005
11.6 封裝結構
11.6.1 引言
11.6.2 嵌套子程序
11.6.3 C中的封裝
11.6.4 C++中的封裝
11.6.5 Ada包
11.6.6 C#程序集
11.7 命名封裝
11.7.1 C++命名空間
11.7.2 Java包
11.7.3 Ada包
11.7.4 Ruby模塊
小結
復習題
問題集
編程題
附錄1
訪談:C++:它的誕生,它的無處不在和它受到的常見質疑
第12章 麵嚮對象程序設計的支持
12.1 概述
12.2 麵嚮對象程序設計
12.2.1 引言
12.2.2 繼承
12.2.3 動態綁定
12.3 麵嚮對象語言的設計問題
12.3.1 對象的排他性
12.3.2 子類是子類型嗎
12.3.3 類型檢查和多態
12.3.4 單繼承與多繼承
12.3.5 對象的分配和釋放
12.3.6 動態綁定與靜態綁定
12.3.7 嵌套類
12.3.8 對象的初始化
12.4 Smalltalk對麵嚮對象程序設計支持
12.4.1 一般特徵
12.4.2 類型檢查和多態
12.4.3 繼承
12.4.4 Smalltalk的評估
12.5 C++對麵嚮對象程序設計的支持
12.5.1 一般特徵
12.5.2 繼承
12.5.3 動態綁定
12.5.4 評估
12.6 Java中對麵嚮對象程序設計的支持
12.6.1 一般特徵
12.6.2 繼承
12.6.3 動態綁定
12.6.4 被嵌套的類
12.6.5 評估
12.7 C#中對麵嚮對象程序設計的支持
12.7.1 一般特徵
12.7.2 繼承
12.7.3 動態綁定
12.7.4 被嵌套的類
12.7.5 評估
12.8 Ada 95對麵嚮對象程序設計的支持
12.8.1 一般特徵
12.8.2 繼承
12.8.3 動態綁定
12.8.4 子程序包
12.8.5 評估
12.9 Ruby對麵嚮對象程序設計的支持
12.9.1 一般特徵
12.9.2 繼承
12.9.3 動態綁定
12.9.4 評估
12.10 麵嚮對象構造的實現
12.10.1 存儲實例數據
12.10.2 方法調用到方法的動態綁定
小結
復習題
問題集
編程題
訪談:關於程序設計範型和更好的程序設計
第13章 描述語法和語義
13.1 概述
13.1.1 多處理器體係結構
13.1.2 並發的種類
13.1.3 使用並發的目的
13.2 子程序級並發的介紹
13.2.1 基本概念
13.2.2 為並發而設計的語言
13.2.3 設計問題
13.3 信號量
13.3.1 概述
13.3.2 閤作同步
13.3.3 競爭同步
13.3.4 評價
13.4 管程
13.4.1 概述
13.4.2 競爭同步
13.4.3 閤作同步
13.4.4 評價
13.5 消息傳遞
13.5.1 概述
13.5.2 同步消息傳遞的原理
13.6 Ada對並發的支持
13.6.1 基本原理
13.6.2 閤作同步
13.6.3 競爭同步
13.6.4 任務終止
13.6.5 優先級
13.6.6 二元信號量
13.6.7 受保護對象
13.6.8 異步消息傳遞
13.6.9 評價
13.7 Java綫程
13.7.1 Thread類
13.7.2 優先級
13.7.3 競爭同步
13.7.4 閤作同步
13.7.5 評價
13.8 C#綫程
13.8.1 基本綫程操作
13.8.2 同步綫程
13.8.3 評價
13.9 語句級並發
13.9.1 高性能Fortran
小結
文獻注釋
復習題
習題
程序設計練習
第14章 異常處理和事件處理
14.1 異常處理概述
14.1.1 基本概念
14.1.2 設計問題
14.2 Ada中的異常處理
14.2.1 異常處理程序
14.2.2 將異常綁定到處理程序
14.2.3 繼續
14.2.4 其他設計選擇
14.2.5 例子
14.2.6 評價
14.3 C++中的異常處理
14.3.1 異常處理程序
14.3.2 異常與處理程序的綁定
14.3.3 繼續
14.3.4 其他設計選擇
14.3.5 例子
14.3.6 評價
14.4 Java中的異常處理
14.4.1 異常類
14.4.2 異常處理程序
14.4.3 異常與處理程序的綁定
14.4.4 其他設計選擇
14.4.5 例子
14.4.6 finally子句
14.4.7 斷言
14.4.8 評價
14.5 事件處理概述
14.6 Java的事件處理
14.6.1 Java Swing的GUI組件
14.6.2 Java事件模型
小結
文獻注釋
復習題
習題
程序設計練習
訪談:Java的誕生
第15章 函數式程序設計語言
15.1 概述
15.2 數學函數
15.2.1 簡單函數
15.2.2 函數形式
15.3 函數式程序設計語言基礎
15.4 第一種函數式程序設計語言:LISP
15.4.1 數據類型和結構
15.4.2 第一個LISP解釋器
15.5 Scheme概述
15.5.1 Scheme的起源
15.5.2 Scheme解釋器
15.5.3 基本數值函數
15.5.4 定義函數
15.5.5 輸齣函數
15.5.6 數值謂詞函數
15.5.7 控製流
15.5.8 錶函數
15.5.9 用於符號原子和錶的謂詞函數
15.5.10 Scheme函數示例
15.5.11 Scheme中的尾遞歸
15.5.12 函數形式
15.5.13 構建代碼的函數
15.6 COMMON LISP
15.7 ML
15.8 Haskell
15.9 函數式語言的應用
15.10 函數式語言和命令式語言的比較
小結
文獻注釋
復習題
習題
程序設計練習
第16章 邏輯程序設計語言
16.1 概述
16.2 謂詞演算簡介
16.2.1 命題
16.2.2 子句形式
16.3 謂詞演算與定理證明
16.4 邏輯程序設計概述
16.5 Prolog的起源
16.6 Prolog的基本元素
16.6.1 項
16.6.2 事實語句
16.6.3 規則語句
16.6.4 目標語句
16.6.5 Prolog的推理過程
16.6.6 簡單算術
16.6.7 錶結構
16.7 Prolog的缺陷
16.7.1 歸結順序的控製
16.7.2 封閉世界假設
16.7.3 否定問題
16.7.4 固有的限製
16.8 邏輯程序設計的應用
16.8.1 關係數據庫管理係統
16.8.2 專傢係統
16.8.3 自然語言處理
小結
文獻注釋
復習題
習題
程序設計練習
參考文獻
· · · · · · (
收起)
評分
☆☆☆☆☆
作者帶逛。適閤大一同學建立對程序設計語言的正確認識。已工作的同學也可以抓重要的章節看看。走馬觀花看起來也挺快的,不需要花太多時間,可能會給你一些靈感。
評分
☆☆☆☆☆
提綱挈領 如果不知道技術宅嘴中的那些行話 刷一遍就能裝下逼瞭
評分
☆☆☆☆☆
讀到吐血,讓我過吧...orz...
評分
☆☆☆☆☆
翻譯差
評分
☆☆☆☆☆
淺淺地講解一些programming language的基本原理,然後拿幾個語言作示例齣來對比,開瞭眼界,但是收獲不多。
評分
☆☆☆☆☆
在读,不求甚解 只因为很多内容不能在自己的脑海中形成自己的体系,一些基本功有所欠缺所致 读到中间部分了,对于程序设计语言的历史,一些程序语言的特点及一些常见结构的形成原因有所了解,比如字符串,知道为什么会有字符串这个数据类型,在不同的语言中对于这个数据类型的...
評分
☆☆☆☆☆
我有个“坏习惯”:碰到我买到的书都要评论,呵呵。 《概念》我也买了,不过买的是第 5 版的英文版。这本书我比较欣赏的是她介绍语言发展的部分《Evolution of the Major Programming Languages》(即:《主流程序设计语言的演化》),从我之前听都没听过的 Zuse Plankalkal ...
評分
☆☆☆☆☆
这本书的名气很大,很多人说是经典之作。 读过后是什么感觉呢?就是没什么感觉。读之前对程序语言有多少困惑和不解,读之后还是有多少困惑和不解。 为什么,因为书里对各种语言的叙述更多停留在语法层面上,是的,不同语言的语法是不一样的。但是为什么新的语言引入了一种东...
評分
☆☆☆☆☆
我有个“坏习惯”:碰到我买到的书都要评论,呵呵。 《概念》我也买了,不过买的是第 5 版的英文版。这本书我比较欣赏的是她介绍语言发展的部分《Evolution of the Major Programming Languages》(即:《主流程序设计语言的演化》),从我之前听都没听过的 Zuse Plankalkal ...
評分
☆☆☆☆☆
这本书的名气很大,很多人说是经典之作。 读过后是什么感觉呢?就是没什么感觉。读之前对程序语言有多少困惑和不解,读之后还是有多少困惑和不解。 为什么,因为书里对各种语言的叙述更多停留在语法层面上,是的,不同语言的语法是不一样的。但是为什么新的语言引入了一种东...