程序設計語言與編譯

出版時間:2009-1  出版社:電子工業(yè)出版社  作者:王曉斌,陳文宇 著  頁數(shù):324  
Tag標簽:無  

前言

  由于我的年事已高,本次改版由跟隨我二十余年、從事程序設計語言和編譯教學、科研的王曉斌副教授和陳文宇副教授執(zhí)筆。他們能很好地繼承我的風格,深入淺出地分析程序設計語言的結構、編譯的基本技術。他們有豐富的教學經(jīng)驗,在科研工作中曾實現(xiàn)過幾個語言的編譯系統(tǒng);他們年富力強,對近年來語言的發(fā)展有更多、更深刻的理解。這些都是他們寫好本教材的基本保證。?  本書是一本適合大多數(shù)學校計算機專業(yè)的廣口徑教材,按照CC2001和CCC2002教程改寫,覆蓋了編程語言(PL)模塊的全部內容。?  在改寫中,力求簡明、通俗,注意可讀性。本次改版將第二版中的附錄“Java語言概述”替換為“形式語言與自動機簡介”,Java語言部分內容插入到書中的相關章節(jié)。在語義分析部分,納入了數(shù)組的內容;在優(yōu)化部分,增加了并行優(yōu)化。?  作為計算機工作者,必須要與計算機進行交流、通信,所使用的工具是程序設計語言,用來告訴計算機“做什么”和“怎么做”。而程序設計語言數(shù)以千計,千姿百態(tài),到底在大學中學習哪些語言才合適?我們的觀點是,學會一兩種語言的程序設計,更重要的是在此基礎上了解語言的共性,這樣,就具有鑒賞、評價、選擇、學習和設計程序語言的能力。本書的上篇就是為達到上述目的編寫的。以抽象的觀點,將程序設計語言的共性抽象出來,然后用相應的語言去說明這些共性。?  隨著計算機技術的發(fā)展,有越來越多的人認為,編譯程序的設計和實現(xiàn)是專家的工作領域,并非每個計算機專業(yè)的學生都需要具有設計和實現(xiàn)編譯程序的知識和能力,有的學校減少了學時,有的學校更砍掉編譯課程。多年的教學經(jīng)驗告訴我們,編譯系統(tǒng)作為計算機系統(tǒng)軟件之一,其設計和實現(xiàn)的系統(tǒng)性,能使學生對軟件系統(tǒng)的結構形成及系統(tǒng)的建立有個充分的了解。因此,本書的下篇討論了編譯程序的5個階段及每個階段的基本實現(xiàn)技術。?  本書為教師提供了教學參考資料,包括課件、教學指導書和習題答案,需要的老師可通過電子工業(yè)出版社的教材服務部獲得教學支持。?  本書的出版獲得了許多同事的幫助,余盛季、屈鴻為資料的收集和整理做了大量的工作,并為本書的編寫提供了很多有價值的建議,在此對他們表示衷心的感謝。本書的下篇(第7-13章)由王曉斌編寫,上篇(第1-6章)、附錄由陳文宇編寫。若書中出現(xiàn)謬誤,懇請讀者不吝賜教。

內容概要

  《程序設計語言與編譯:語言的設計和實現(xiàn)(第3版)》是一本計算機專業(yè)的寬口徑教材,新版覆蓋CC2001和CCC2002教程中,除自動機外編程語言(PL)模塊的全部知識點。內容涉及語言及其編譯系統(tǒng)的設計要素、設計思想、設計方法、設計技術和設計風格等知識,《程序設計語言與編譯:語言的設計和實現(xiàn)(第3版)》分為上、下篇。上篇,程序設計語言的設計包括:緒論、數(shù)據(jù)類型、控制結構、程序語言設計、非過程式程序設計語言和形式語義學簡介;下篇,程序設計語言的實現(xiàn)(編譯)包括:編譯概述、詞法分析、自上而下的語法分析、自下而上的語法分析、語義分析和中間代碼生成、代碼優(yōu)化和目標代碼生成、運行時存儲空間的組織。?  《程序設計語言與編譯:語言的設計和實現(xiàn)(第3版)》的學習目標是,使讀者掌握設計和實現(xiàn)一個程序設計語言的基本思想和方法,具有分析、鑒賞、評價、選擇、學習、設計和實現(xiàn)一個語言的基本能力?!冻绦蛟O計語言與編譯:語言的設計和實現(xiàn)(第3版)》力求簡明、通俗,注重可讀性,是大學計算機科學和軟件工程等專業(yè)高級程序設計語言概論及編譯技術課程教材,也是軟件開發(fā)人員的學習參考書。

書籍目錄

  上篇 程序設計語言的設計第1章 緒論1.1 引言1.2 強制式語言1.2.1 程序設計語言的分類1.2.2 馮·諾依曼體系結構1.2.3 綁定和綁定時間1.2.4 變量1.2.5 虛擬機1.3 程序單元1.4 程序設計語言發(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)絡時代的語言1.4.9 新一代程序設計語言1.4.10 面向未來的漢語程序設計語言1.4.11 總結習題1第2章 數(shù)據(jù)類型2.1 引言2.2 內部類型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ù)類型結構2.4.1 非結構類型2.4.2 聚合構造2.4.3 指針2.5 Ada語言數(shù)據(jù)類型結構2.5.1 標量類型2.5.2 組合類型2.6 C語言數(shù)據(jù)類型結構2.6.1 非結構類型2.6.2 聚合構造2.6.3 指針2.6.4 空類型2.7 Java 語言的數(shù)據(jù)類型2.7.1 內部類型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 類型轉換2.11 類型等價2.12 實現(xiàn)模型2.12.1 內部類型和用戶定義的非結構類型實現(xiàn)模型2.12.2 結構類型實現(xiàn)模型習題2第3章 控制結構3.1 引言3.2 語句級控制結構3.2.1 順序結構3.2.2 選擇結構3.2.3 循環(huán)結構3.2.4 語句級控制結構分析3.2.5 用戶定義控制結構3.3 單元級控制結構3.3.1 顯式調用從屬單元3.3.2 隱式調用單元——異常處理3.3.3 SIMULA 67語言協(xié)同程序3.3.4 并發(fā)單元習題3第4章 程序語言的設計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 語言的設計4.3.1 表達式的設計4.3.2 語句的設計4.3.3 程序單元的設計4.3.4 程序的設計4.4 語言設計實例4.5 一些設計準則習題4第5章 非過程式程序設計語言5.1 引言5.2 函數(shù)式程序設計語言5.2.1 函數(shù)5.2.2 數(shù)學函數(shù)與程序設計語言函數(shù)5.2.3 一種簡單的純函數(shù)式語言5.2.4 LISP語言概述5.2.5 APL語言概述5.2.6 作用式語言和命令式語言的比較5.3 邏輯程序設計語言5.3.1 邏輯程序設計5.3.2 Prolog語言概述5.3.3 邏輯程序設計展望5.4 面向對象程序設計語言5.4.1 面向對象的基本概念5.4.2 Smalltalk語言概述5.4.3 對面向對象語言的評價5.5 小結習題5第6章 形式語義學簡介6.1 引言6.2 形式語義學分類6.3 公理語義學簡介6.4 指稱語義學簡介習題6下篇 程序設計語言的實現(xiàn)(編譯)第7章 編譯概述7.1 引言7.2 翻譯和編譯7.3 解釋7.4 編譯步驟習題7第8章 詞法分析8.1 詞法分析概述8.2 單詞符號的類別8.3 詞法分析器的輸出形式8.4 詞法分析器的設計8.5 符號表8.5.1 符號表的組織8.5.2 常用的符號表結構習題8第9章 自上而下的語法分析9.1 引言9.2 回溯分析法9.2.1 回溯的原因9.2.2 提取公共左因子9.2.3 消除左遞歸9.3 遞歸下降分析法9.3.1 遞歸下降分析器的構造9.3.2 擴充的BNF9.4 預測分析法9.4.1 預測分析過程9.4.2 預測分析表的構造9.4.3 LL(1)文法9.4.4 非LL(1)文法習題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)先關系表的構造10.3 LR分析法10.3.1 LR分析過程10.3.2 活前綴10.3.3 LR(0)項目集規(guī)范族10.3.4 LR(0)分析表的構造10.3.5 SLR(1)分析表的構造習題10第11章 語義分析和中間代碼生成11.1 語義分析概論11.1.1 語義分析的任務11.1.2 語法制導翻譯11.2 中間代碼11.3 語義變量和語義函數(shù)11.4 說明語句的翻譯11.5 賦值語句的翻譯11.5.1 只含簡單變量的賦值語句的翻譯11.5.2 含數(shù)組元素的賦值語句的翻譯11.6 控制語句的翻譯11.6.1 布爾表達式的翻譯11.6.2 無條件轉移語句的翻譯11.6.3 條件語句的翻譯11.6.4 while語句的翻譯11.6.5 for語句的翻譯11.6.6 過程調用的翻譯習題11第12章 代碼優(yōu)化和目標代碼生成12.1 局部優(yōu)化12.1.1 優(yōu)化的定義12.1.2 基本塊的劃分12.1.3 程序流圖12.1.4 基本塊內的優(yōu)化12.2 全局優(yōu)化12.2.1 循環(huán)的定義12.2.2 必經(jīng)結點集12.2.3 循環(huán)的查找12.2.4 循環(huán)的優(yōu)化12.3 并行優(yōu)化12.3.1 數(shù)據(jù)的依賴關系分析12.3.2 向量化代碼生成12.3.3 反相關與輸出相關的消除12.3.4 標量擴張12.3.5 循環(huán)條塊化12.4 目標代碼生成12.4.1 一個計算機模型12.4.2 簡單的代碼生成方法12.4.3 循環(huán)中的寄存器分配習題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ù)傳遞習題13附錄A 形式語言與自動機簡介思考題

章節(jié)摘錄

  1.4.2 早期語言的發(fā)展階段  隨著計算機的發(fā)展和應用的日益廣泛,實現(xiàn)的效率已經(jīng)不再是人們唯一的追求目標。早在20世紀60年代就出現(xiàn)了一些基于數(shù)學原則的機器計算表示法語言,它們基于數(shù)學函數(shù)和函數(shù)作用,而不是基于馮·諾依曼模型的。這些語言的代表是LISP,APL(AProgr·ammingLanguage)和SNOBOL4。  1.LISP語言  1960年,JohnMcCarthy在麻省理工學院(MIT)設計和實現(xiàn)了LISP語言,它的設計基于函數(shù)和函數(shù)作用的數(shù)學概念,它奠定了函數(shù)式(或作用式)語言風格的基礎。由于沒有適用于函數(shù)式語言的計算機體系結構問世,因此它不得不在馮·諾依曼體系結構的計算機上執(zhí)行,其執(zhí)行效率低,執(zhí)行速度慢?! ⊥ǔ?,LISP程序不經(jīng)過編譯而是通過解釋來執(zhí)行。人們?yōu)榱颂岣邎?zhí)行速度,各種實現(xiàn)對LISPI。ISP進行了不同的改造,出現(xiàn)了許多不同的版本。1981年4月,各個不同的LISP學派召開了一次會議,試圖將各種版本統(tǒng)一起來,于是出現(xiàn)了通用LISP(CommonLISP)語言?! ∮捎贚ISP語言特有的數(shù)學特性,使它一出現(xiàn)就在計算機科學的研究中得到大量應用,特別是在人工智能領域。例如,在機器人、自然語言理解、定理證明和智能系統(tǒng)等研究領域應用非常廣泛?! 〖僉ISP語言從變量值可以被修改、賦值語句、goto語句等馮·諾依曼體系結構概念中解放出來。它主要用來處理符號表達式,并引入了許多新概念。例如,語言有統(tǒng)一的數(shù)據(jù)結構(表);數(shù)據(jù)和程序有統(tǒng)一的表示方法(S表達式),其中包括遞歸表達式、前綴表達式,并將遞歸作為基本控制結構等。LISP語言的語義很容易用LISP程序描述,用LISP語言編寫的函數(shù)EVAL,可用來計算任何給定的LISP表達式,它是LISP語言的語義定義。

編輯推薦

  在國家規(guī)劃教材的基礎上,進行全面更新,以適應高校課程與教學改革的需要,并特別注意教材的可讀性和可用性,為任課教師提供各種教學服務(包括)數(shù)學電子課件、教學指導材料、習題解答和實驗指導等。

圖書封面

圖書標簽Tags

評論、評分、閱讀與下載


    程序設計語言與編譯 PDF格式下載


用戶評論 (總計0條)

 
 

 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7