出版時間:2009-1 出版社:電子工業(yè)出版社 作者:王曉斌,陳文宇 著 頁數(shù):324
Tag標簽:無
前言
由于我的年事已高,本次改版由跟隨我二十余年、從事程序設(shè)計語言和編譯教學(xué)、科研的王曉斌副教授和陳文宇副教授執(zhí)筆。他們能很好地繼承我的風(fēng)格,深入淺出地分析程序設(shè)計語言的結(jié)構(gòu)、編譯的基本技術(shù)。他們有豐富的教學(xué)經(jīng)驗,在科研工作中曾實現(xiàn)過幾個語言的編譯系統(tǒng);他們年富力強,對近年來語言的發(fā)展有更多、更深刻的理解。這些都是他們寫好本教材的基本保證。? 本書是一本適合大多數(shù)學(xué)校計算機專業(yè)的廣口徑教材,按照CC2001和CCC2002教程改寫,覆蓋了編程語言(PL)模塊的全部內(nèi)容。? 在改寫中,力求簡明、通俗,注意可讀性。本次改版將第二版中的附錄“Java語言概述”替換為“形式語言與自動機簡介”,Java語言部分內(nèi)容插入到書中的相關(guān)章節(jié)。在語義分析部分,納入了數(shù)組的內(nèi)容;在優(yōu)化部分,增加了并行優(yōu)化。? 作為計算機工作者,必須要與計算機進行交流、通信,所使用的工具是程序設(shè)計語言,用來告訴計算機“做什么”和“怎么做”。而程序設(shè)計語言數(shù)以千計,千姿百態(tài),到底在大學(xué)中學(xué)習(xí)哪些語言才合適?我們的觀點是,學(xué)會一兩種語言的程序設(shè)計,更重要的是在此基礎(chǔ)上了解語言的共性,這樣,就具有鑒賞、評價、選擇、學(xué)習(xí)和設(shè)計程序語言的能力。本書的上篇就是為達到上述目的編寫的。以抽象的觀點,將程序設(shè)計語言的共性抽象出來,然后用相應(yīng)的語言去說明這些共性。? 隨著計算機技術(shù)的發(fā)展,有越來越多的人認為,編譯程序的設(shè)計和實現(xiàn)是專家的工作領(lǐng)域,并非每個計算機專業(yè)的學(xué)生都需要具有設(shè)計和實現(xiàn)編譯程序的知識和能力,有的學(xué)校減少了學(xué)時,有的學(xué)校更砍掉編譯課程。多年的教學(xué)經(jīng)驗告訴我們,編譯系統(tǒng)作為計算機系統(tǒng)軟件之一,其設(shè)計和實現(xiàn)的系統(tǒng)性,能使學(xué)生對軟件系統(tǒng)的結(jié)構(gòu)形成及系統(tǒng)的建立有個充分的了解。因此,本書的下篇討論了編譯程序的5個階段及每個階段的基本實現(xiàn)技術(shù)。? 本書為教師提供了教學(xué)參考資料,包括課件、教學(xué)指導(dǎo)書和習(xí)題答案,需要的老師可通過電子工業(yè)出版社的教材服務(wù)部獲得教學(xué)支持。? 本書的出版獲得了許多同事的幫助,余盛季、屈鴻為資料的收集和整理做了大量的工作,并為本書的編寫提供了很多有價值的建議,在此對他們表示衷心的感謝。本書的下篇(第7-13章)由王曉斌編寫,上篇(第1-6章)、附錄由陳文宇編寫。若書中出現(xiàn)謬誤,懇請讀者不吝賜教。
內(nèi)容概要
《程序設(shè)計語言與編譯:語言的設(shè)計和實現(xiàn)(第3版)》是一本計算機專業(yè)的寬口徑教材,新版覆蓋CC2001和CCC2002教程中,除自動機外編程語言(PL)模塊的全部知識點。內(nèi)容涉及語言及其編譯系統(tǒng)的設(shè)計要素、設(shè)計思想、設(shè)計方法、設(shè)計技術(shù)和設(shè)計風(fēng)格等知識,《程序設(shè)計語言與編譯:語言的設(shè)計和實現(xiàn)(第3版)》分為上、下篇。上篇,程序設(shè)計語言的設(shè)計包括:緒論、數(shù)據(jù)類型、控制結(jié)構(gòu)、程序語言設(shè)計、非過程式程序設(shè)計語言和形式語義學(xué)簡介;下篇,程序設(shè)計語言的實現(xiàn)(編譯)包括:編譯概述、詞法分析、自上而下的語法分析、自下而上的語法分析、語義分析和中間代碼生成、代碼優(yōu)化和目標代碼生成、運行時存儲空間的組織。? 《程序設(shè)計語言與編譯:語言的設(shè)計和實現(xiàn)(第3版)》的學(xué)習(xí)目標是,使讀者掌握設(shè)計和實現(xiàn)一個程序設(shè)計語言的基本思想和方法,具有分析、鑒賞、評價、選擇、學(xué)習(xí)、設(shè)計和實現(xiàn)一個語言的基本能力?!冻绦蛟O(shè)計語言與編譯:語言的設(shè)計和實現(xiàn)(第3版)》力求簡明、通俗,注重可讀性,是大學(xué)計算機科學(xué)和軟件工程等專業(yè)高級程序設(shè)計語言概論及編譯技術(shù)課程教材,也是軟件開發(fā)人員的學(xué)習(xí)參考書。
書籍目錄
上篇 程序設(shè)計語言的設(shè)計第1章 緒論1.1 引言1.2 強制式語言1.2.1 程序設(shè)計語言的分類1.2.2 馮·諾依曼體系結(jié)構(gòu)1.2.3 綁定和綁定時間1.2.4 變量1.2.5 虛擬機1.3 程序單元1.4 程序設(shè)計語言發(fā)展簡介1.4.1 早期的高級語言1.4.2 早期語言的發(fā)展階段1.4.3 概念的集成階段1.4.4 再一次突破1.4.5 大量的探索1.4.6 Ada 語言1.4.7 第四代語言1.4.8 網(wǎng)絡(luò)時代的語言1.4.9 新一代程序設(shè)計語言1.4.10 面向未來的漢語程序設(shè)計語言1.4.11 總結(jié)習(xí)題1第2章 數(shù)據(jù)類型2.1 引言2.2 內(nèi)部類型2.3 用戶定義類型2.3.1 笛卡兒積2.3.2 有限映像2.3.3 序列2.3.4 遞歸2.3.5 判定或2.3.6 冪集2.4 Pascal語言數(shù)據(jù)類型結(jié)構(gòu)2.4.1 非結(jié)構(gòu)類型2.4.2 聚合構(gòu)造2.4.3 指針2.5 Ada語言數(shù)據(jù)類型結(jié)構(gòu)2.5.1 標量類型2.5.2 組合類型2.6 C語言數(shù)據(jù)類型結(jié)構(gòu)2.6.1 非結(jié)構(gòu)類型2.6.2 聚合構(gòu)造2.6.3 指針2.6.4 空類型2.7 Java 語言的數(shù)據(jù)類型2.7.1 內(nèi)部類型2.7.2 用戶定義類型2.8 抽象數(shù)據(jù)類型2.8.1 SIMULA 67 語言的類機制2.8.2 CLU語言的抽象數(shù)據(jù)類型2.8.3 Ada語言的抽象數(shù)據(jù)類型2.8.4 Modula 2語言的抽象數(shù)據(jù)類型2.8.5 C++語言的抽象數(shù)據(jù)類型2.8.6 Java抽象數(shù)據(jù)類型2.9 類型檢查2.10 類型轉(zhuǎn)換2.11 類型等價2.12 實現(xiàn)模型2.12.1 內(nèi)部類型和用戶定義的非結(jié)構(gòu)類型實現(xiàn)模型2.12.2 結(jié)構(gòu)類型實現(xiàn)模型習(xí)題2第3章 控制結(jié)構(gòu)3.1 引言3.2 語句級控制結(jié)構(gòu)3.2.1 順序結(jié)構(gòu)3.2.2 選擇結(jié)構(gòu)3.2.3 循環(huán)結(jié)構(gòu)3.2.4 語句級控制結(jié)構(gòu)分析3.2.5 用戶定義控制結(jié)構(gòu)3.3 單元級控制結(jié)構(gòu)3.3.1 顯式調(diào)用從屬單元3.3.2 隱式調(diào)用單元——異常處理3.3.3 SIMULA 67語言協(xié)同程序3.3.4 并發(fā)單元習(xí)題3第4章 程序語言的設(shè)計4.1 語言的定義4.1.1 語法4.1.2 語義4.2 文法4.2.1 文法的定義4.2.2 文法的分類4.2.3 文法產(chǎn)生的語言4.2.4 語法樹4.3 語言的設(shè)計4.3.1 表達式的設(shè)計4.3.2 語句的設(shè)計4.3.3 程序單元的設(shè)計4.3.4 程序的設(shè)計4.4 語言設(shè)計實例4.5 一些設(shè)計準則習(xí)題4第5章 非過程式程序設(shè)計語言5.1 引言5.2 函數(shù)式程序設(shè)計語言5.2.1 函數(shù)5.2.2 數(shù)學(xué)函數(shù)與程序設(shè)計語言函數(shù)5.2.3 一種簡單的純函數(shù)式語言5.2.4 LISP語言概述5.2.5 APL語言概述5.2.6 作用式語言和命令式語言的比較5.3 邏輯程序設(shè)計語言5.3.1 邏輯程序設(shè)計5.3.2 Prolog語言概述5.3.3 邏輯程序設(shè)計展望5.4 面向?qū)ο蟪绦蛟O(shè)計語言5.4.1 面向?qū)ο蟮幕靖拍?.4.2 Smalltalk語言概述5.4.3 對面向?qū)ο笳Z言的評價5.5 小結(jié)習(xí)題5第6章 形式語義學(xué)簡介6.1 引言6.2 形式語義學(xué)分類6.3 公理語義學(xué)簡介6.4 指稱語義學(xué)簡介習(xí)題6下篇 程序設(shè)計語言的實現(xiàn)(編譯)第7章 編譯概述7.1 引言7.2 翻譯和編譯7.3 解釋7.4 編譯步驟習(xí)題7第8章 詞法分析8.1 詞法分析概述8.2 單詞符號的類別8.3 詞法分析器的輸出形式8.4 詞法分析器的設(shè)計8.5 符號表8.5.1 符號表的組織8.5.2 常用的符號表結(jié)構(gòu)習(xí)題8第9章 自上而下的語法分析9.1 引言9.2 回溯分析法9.2.1 回溯的原因9.2.2 提取公共左因子9.2.3 消除左遞歸9.3 遞歸下降分析法9.3.1 遞歸下降分析器的構(gòu)造9.3.2 擴充的BNF9.4 預(yù)測分析法9.4.1 預(yù)測分析過程9.4.2 預(yù)測分析表的構(gòu)造9.4.3 LL(1)文法9.4.4 非LL(1)文法習(xí)題9第10章 自下而上的語法分析10.1 引言10.1.1 分析樹10.1.2 規(guī)范歸約、短語和句柄10.2 算符優(yōu)先分析法10.2.1 算符優(yōu)先文法10.2.2 算符優(yōu)先分析算法10.2.3 算符優(yōu)先關(guān)系表的構(gòu)造10.3 LR分析法10.3.1 LR分析過程10.3.2 活前綴10.3.3 LR(0)項目集規(guī)范族10.3.4 LR(0)分析表的構(gòu)造10.3.5 SLR(1)分析表的構(gòu)造習(xí)題10第11章 語義分析和中間代碼生成11.1 語義分析概論11.1.1 語義分析的任務(wù)11.1.2 語法制導(dǎo)翻譯11.2 中間代碼11.3 語義變量和語義函數(shù)11.4 說明語句的翻譯11.5 賦值語句的翻譯11.5.1 只含簡單變量的賦值語句的翻譯11.5.2 含數(shù)組元素的賦值語句的翻譯11.6 控制語句的翻譯11.6.1 布爾表達式的翻譯11.6.2 無條件轉(zhuǎn)移語句的翻譯11.6.3 條件語句的翻譯11.6.4 while語句的翻譯11.6.5 for語句的翻譯11.6.6 過程調(diào)用的翻譯習(xí)題11第12章 代碼優(yōu)化和目標代碼生成12.1 局部優(yōu)化12.1.1 優(yōu)化的定義12.1.2 基本塊的劃分12.1.3 程序流圖12.1.4 基本塊內(nèi)的優(yōu)化12.2 全局優(yōu)化12.2.1 循環(huán)的定義12.2.2 必經(jīng)結(jié)點集12.2.3 循環(huán)的查找12.2.4 循環(huán)的優(yōu)化12.3 并行優(yōu)化12.3.1 數(shù)據(jù)的依賴關(guān)系分析12.3.2 向量化代碼生成12.3.3 反相關(guān)與輸出相關(guān)的消除12.3.4 標量擴張12.3.5 循環(huán)條塊化12.4 目標代碼生成12.4.1 一個計算機模型12.4.2 簡單的代碼生成方法12.4.3 循環(huán)中的寄存器分配習(xí)題12第13章 運行時存儲空間的組織13.1 程序的存儲空間13.1.1 代碼空間13.1.2 數(shù)據(jù)空間13.1.3 活動記錄13.1.4 變量的存儲分配13.1.5 存儲分配模式13.2 靜態(tài)分配13.3 棧式分配13.3.1 只含半靜態(tài)變量的棧式分配13.3.2 半動態(tài)變量的棧式分配13.3.3 非局部環(huán)境13.3.4 非局部環(huán)境的引用13.4 參數(shù)傳遞13.4.1 數(shù)據(jù)參數(shù)傳遞13.4.2 子程序參數(shù)傳遞習(xí)題13附錄A 形式語言與自動機簡介思考題
章節(jié)摘錄
1.4.2 早期語言的發(fā)展階段 隨著計算機的發(fā)展和應(yīng)用的日益廣泛,實現(xiàn)的效率已經(jīng)不再是人們唯一的追求目標。早在20世紀60年代就出現(xiàn)了一些基于數(shù)學(xué)原則的機器計算表示法語言,它們基于數(shù)學(xué)函數(shù)和函數(shù)作用,而不是基于馮·諾依曼模型的。這些語言的代表是LISP,APL(AProgr·ammingLanguage)和SNOBOL4?! ?.LISP語言 1960年,JohnMcCarthy在麻省理工學(xué)院(MIT)設(shè)計和實現(xiàn)了LISP語言,它的設(shè)計基于函數(shù)和函數(shù)作用的數(shù)學(xué)概念,它奠定了函數(shù)式(或作用式)語言風(fēng)格的基礎(chǔ)。由于沒有適用于函數(shù)式語言的計算機體系結(jié)構(gòu)問世,因此它不得不在馮·諾依曼體系結(jié)構(gòu)的計算機上執(zhí)行,其執(zhí)行效率低,執(zhí)行速度慢?! ⊥ǔ?,LISP程序不經(jīng)過編譯而是通過解釋來執(zhí)行。人們?yōu)榱颂岣邎?zhí)行速度,各種實現(xiàn)對LISPI。ISP進行了不同的改造,出現(xiàn)了許多不同的版本。1981年4月,各個不同的LISP學(xué)派召開了一次會議,試圖將各種版本統(tǒng)一起來,于是出現(xiàn)了通用LISP(CommonLISP)語言。 由于LISP語言特有的數(shù)學(xué)特性,使它一出現(xiàn)就在計算機科學(xué)的研究中得到大量應(yīng)用,特別是在人工智能領(lǐng)域。例如,在機器人、自然語言理解、定理證明和智能系統(tǒng)等研究領(lǐng)域應(yīng)用非常廣泛?! 〖僉ISP語言從變量值可以被修改、賦值語句、goto語句等馮·諾依曼體系結(jié)構(gòu)概念中解放出來。它主要用來處理符號表達式,并引入了許多新概念。例如,語言有統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)(表);數(shù)據(jù)和程序有統(tǒng)一的表示方法(S表達式),其中包括遞歸表達式、前綴表達式,并將遞歸作為基本控制結(jié)構(gòu)等。LISP語言的語義很容易用LISP程序描述,用LISP語言編寫的函數(shù)EVAL,可用來計算任何給定的LISP表達式,它是LISP語言的語義定義。
編輯推薦
在國家規(guī)劃教材的基礎(chǔ)上,進行全面更新,以適應(yīng)高校課程與教學(xué)改革的需要,并特別注意教材的可讀性和可用性,為任課教師提供各種教學(xué)服務(wù)(包括)數(shù)學(xué)電子課件、教學(xué)指導(dǎo)材料、習(xí)題解答和實驗指導(dǎo)等。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載