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