日韩偷拍一区二区,国产香蕉久久精品综合网,亚洲激情五月婷婷,欧美日韩国产不卡

在線客服
軟件設計師考試應試指導(第2版)圖書
人氣:23

軟件設計師考試應試指導(第2版)

前言 在信息技術和軟件產業快速發展的推動下,計算機技術與軟件專業技術資格(水平)考試(通常簡稱"軟考")已經成為我國部級的IT專業人員從業資格考試。軟考通過后頒發的資格證書不僅在全國范圍內有效,部分級別的...

內容簡介

本書以國家頒布的軟件設計師考試大綱和教程為依據,以對考生進行綜合指導、提高考生應試能力為原則,在深入研究考試真題基礎上結合考前輔導班教師的實際教學經驗編寫而成。

全書共分13章,每章章節開始均設置有"考核說明"板塊,簡要概括考生需要了解和掌握的內容。書中精選歷年真題穿插在知識點的講解中,有利于考生理解知識點。每章結尾設置有"應試加油站",該板塊分為考頻統計和解題技巧兩部分,以引導考生掌握重點內容,提高解題能力和綜合應用能力。同時每章還有過關習題,方便讀者一點一練,鞏固提高。書后附有兩套模擬試卷并給以詳細的分析與解答,可以讓考生積累考試經驗。

本書主要面向參加軟件設計師考試的應試者,同時也可作為高等院校相關課程的輔導書,以及培訓班的教材。

目錄

第1章 計算機系統知識

1.1 計算機系統的基礎知識

1.1.1 計算機系統硬件

1.1.2 中央處理單元

1.1.3 數據表示

1.1.4 校驗碼

1.2 計算機體系結構

1.2.1 計算機體系結構的分類

1.2.2 指令系統

1.3 存儲系統

1.3.1 存儲器的層次結構與分類

1.3.2 高速緩存

1.3.3 相聯存儲器與虛擬存儲器

1.3.4 外存儲器

1.3.5 磁盤陣列技術

1.4 輸入/輸出技術

1.4.1 常見的內存與接口的編址方式

1.4.2 CPU與外設之間的數據傳送方式

1.5 總線結構

1.6 計算機安全

1.6.1 計算機安全概述

1.6.2 網絡攻擊手段

1.6.3 病毒防護

1.6.4 防火墻、漏洞掃描與入侵檢測

1.6.5 加密技術和認證技術

1.7 性與系統性能評測基礎知識

1.7.1 計算機性

1.7.2 計算機系統的性能評價

1.8 應試加油站

1.8.1 考頻統計

1.8.2 解題技巧

1.9 過關習題

第2章 程序語言基礎

2.1 程序語言概述

2.1.1 程序設計語言的基本概念

2.1.2 程序設計語言的基本成分

2.2 語言處理程序基礎

2.2.1 匯編語言的基本原理

2.2.2 編譯程序的基本原理

2.2.3 解釋程序的基本原理

2.3 文法和有限自動機

2.3.1 文法和語言的形式描述

2.3.2 詞法分析

2.3.3 正規式與有限自動機之間的轉換

2.3.4 詞法分析器的構造

2.3.5 語法分析

2.4 應試加油站

2.4.1 考頻統計

2.4.2 解題技巧

2.5 過關習題

第3章 操作系統

3.1 操作系統基礎知識

3.2 處理機管理

3.2.1 基本概念

3.2.2 進程間的通信

3.2.3 進程調度

3.2.4 死鎖

3.2.5 線程

3.3 存儲管理

3.3.1 基本概念

3.3.2 分區存儲管理

3.3.3 分頁存儲管理

3.3.4 分段存儲管理

3.3.5 段頁式存儲管理

3.3.6 虛擬存儲管理

3.4 設備管理

3.4.1 設備管理概述

3.4.2 I/O軟件

3.4.3 設備管理采用的相關緩沖技術

3.4.4 磁盤調度

3.5 文件管理

3.5.1 文件與文件系統

3.5.2 文件的結構和組織

3.5.3 文件目錄

3.5.4 存取方法和存取空間的管理

3.5.5 文件的使用

3.5.6 文件的共享和保護

3.5.7 系統的安全

3.6 應試加油站

3.6.1 考頻統計

3.6.2 解題技巧

3.7 過關習題

第4章 軟件工程基礎知識

4.1 軟件工程概述

4.1.1 軟件危機

4.1.2 計算機軟件

4.1.3 軟件工程基本原理

4.1.4 軟件生存周期

4.1.5 軟件過程

4.2 軟件過程模型

4.2.1 瀑布模型

4.2.2 增量模型

4.2.3 演化模型

4.2.4 噴泉模型

4.2.5 基于構件的開發模型

4.2.6 形式化方法模型

4.3 軟件開發方法

4.3.1 結構化方法

4.3.2 Jackson方法

4.3.3 原型方法

4.3.4 面向對象開發方法

4.3.5 敏捷方法

4.4 軟件工具和軟件開發環境

4.4.1 軟件工具

4.4.2 軟件開發環境

4.5 軟件項目管理

4.5.1 軟件項目管理的范圍

4.5.2 軟件項目估算

4.5.3 進度管理

4.5.4 軟件項目的組織

4.5.5 軟件質量管理

4.5.6 軟件配置管理

4.6 風險管理

4.6.1 軟件風險

4.6.2 風險識別

4.6.3 風險預測

4.6.4 風險評估

4.6.5 風險控制

4.7 軟件度量

4.7.1 軟件度量分類

4.7.2 軟件復雜性度量

4.8 應試加油站

4.8.1 考頻統計

4.8.2 解題技巧

4.9 過關習題

第5章 系統開發與運行

5.1 系統分析與設計概述

5.1.1 系統分析概述

5.1.2 系統設計的基本原理

5.1.3 系統設計的內容和步驟

5.1.4 系統總體結構設計

5.1.5 系統文檔

5.2 需求分析與需求工程

5.3 結構化分析方法

5.4 結構化設計方法

5.4.1 結構化設計的步驟

5.4.2 數據流圖到軟件體系結構的映射

5.5 Web應用系統分析與設計

5.5.1 WebApp的特性

5.5.2 Web應用系統分析模型

5.6 用戶界面設計

5.7 測試基礎知識

5.7.1 系統測試與調試

5.7.2 傳統軟件的測試策略

5.7.3 測試方法

5.7.4 調試

5.7.5 測試Web應用系統

5.8 系統運行和維護知識

5.8.1 系統轉換

5.8.2 系統維護概述

5.8.3 系統評價

5.9 應試加油站

5.9.1 考頻統計

5.9.2 解題技巧

5.10 過關習題

第6章 網絡和多媒體基礎知識

6.1 網絡概述

6.1.1 計算機網絡的分類

6.1.2 網絡的拓撲結構

6.1.3 ISO/OSI網絡體系結構

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 TCP/IP協議簇

6.4 Internet及其應用

6.4.1 Internet地址

6.4.2 Internet服務

6.5 網絡安全

6.5.1 網絡的信息安全

6.5.2 防火墻技術

6.6 多媒體概述

6.6.1 多媒體的基本概念

6.6.2 虛擬現實的基本概念

6.6.3 聲音

6.6.4 圖形和圖像

6.6.5 動畫和視頻

6.7 多媒體網絡

6.7.1 超文本與超媒體

6.7.2 流媒體

6.8 多媒體計算機系統

6.8.1 多媒體計算機硬件系統

6.8.2 多媒體計算機軟件系統

6.9 應試加油站

6.9.1 考頻統計

6.9.2 解題技巧

6.10 過關習題

第7章 數據庫技術

7.1 基本概念

7.1.1 數據庫系統

7.1.2 數據庫管理系統

7.1.3 數據庫的三級模式結構

7.1.4 兩級映像

7.2 數據模型

7.2.1 數據模型的基本概念

7.2.2 E-R模型

7.3 關系代數

7.3.1 關系數據庫的基本概念

7.3.2 五種基本的關系代數運算

7.3.3 擴展的關系代數運算

7.4 關系數據庫SQL簡介

7.4.1 SQL數據庫體系結構

7.4.2 SQL數據定義

7.4.3 SQL數據查詢

7.4.4 SQL數據更新

7.4.5 SQL的訪問控制

7.4.6 嵌入式SQL

7.5 關系數據庫的規范化

7.5.1 函數依賴

7.5.2 規范化

7.5.3 模式分解及分解應具有的特性

7.6 數據庫的控制功能

7.6.1 事務管理

7.6.2 數據庫的備份與恢復

7.6.3 并發控制

7.7 數據庫的分析與設計

7.7.1 數據庫設計的步驟

7.7.2 數據庫設計的方法

7.8 應試加油站

7.8.1 考頻統計

7.8.2 解題技巧

7.9 過關習題

第8章 數據結構

8.1 線性結構

8.1.1 線性表

8.1.2 棧和隊列

8.1.3 串

8.2 數組、矩陣和廣義表

8.2.1 數組

8.2.2 矩陣

8.2.3 廣義表

8.3 樹

8.3.1 樹的定義

8.3.2 二叉樹

8.4 圖

8.4.1 圖的定義

8.4.2 存儲結構

8.4.3 圖的遍歷

8.4.4 生成樹和最小生成樹

8.4.5 拓撲排序和關鍵路徑

8.4.6 最短路徑

8.5 查找

8.5.1 查找的基本概念

8.5.2 靜態查找表

8.5.3 動態查找表

8.5.4 哈希表及其查找

8.6 排序

8.6.1 排序的基本概念

8.6.2 簡單排序

8.6.3 希爾排序

8.6.4 快速排序

8.6.5 堆排序

8.6.6 歸并排序

8.6.7 基數排序

8.6.8 內部排序方法的比較和選擇

8.6.9 外部排序

8.7 應試加油站

8.7.1 考頻統計

8.7.2 解題技巧

8.8 過關習題

第9章 算法與設計

9.1 算法設計與分析基礎

9.1.1 算法

9.1.2 算法設計與分析

9.2 分治法

9.2.1 遞歸的概念

9.2.2 分治法的基本思想

9.2.3 典型應用:Hanoi塔問題

9.3 動態規劃法

9.4 貪心法

9.5 回溯法

9.6 應試加油站

9.6.1 考頻統計

9.6.2 解題技巧

9.7 過關習題

第10章 面向對象技術

10.1 面向對象的基本概念

10.2 面向對象程序設計

10.2.1 面向對象程序設計語言

10.2.2 面向對象程序設計語言中的OOP機制

10.3 面向對象開發技術

10.4 面向對象分析與設計

10.4.1 OOA和OOD法

10.4.2 Booch的OOD法

10.4.3 OMT法

10.5 UML概述

10.5.1 事物

10.5.2 關系

10.5.3 UML中的圖

10.6 設計模式

10.6.1 設計模式的要素

10.6.2 創建型設計模式

10.6.3 結構型設計模式

10.6.4 行為設計模式

10.7 C++程序設計

10.7.1 類和對象

10.7.2 構造函數和析構函數

10.7.3 繼承與派生

10.7.4 多態

10.8 Java程序設計

10.8.1 基本概念

10.8.2 基本語法

10.8.3 程序設計

10.9 應試加油站

10.9.1 考頻統計

10.9.2 解題技巧

10.10 過關習題

第11章 標準化和軟件知識產權基礎

11.1 標準化基礎知識

11.1.1 標準化的基本概念

11.1.2 標準化組織

11.1.3 ISO9000標準簡介

11.1.4 ISO/IEC15504過程評估標準簡介

11.2 知識產權基礎知識

11.2.1 知識產權的基本概念

11.2.2 計算機軟件著作權

11.2.3 計算機軟件的商業秘密權

11.2.4 專利權

11.2.5 商標權

11.2.6 企業知識產權的保護

11.3 應試加油站

11.3.1 考頻統計

11.3.2 解題技巧

11.4 過關習題

第12章 計算機專業英語

12.1 專業英語試題分析

12.1.1 軟件工程專業詞匯

12.1.2 專業英語試題分析

12.2 應試加油站

12.2.1 考頻統計

12.2.2 解題技巧

12.3 過關習題

第13章 模擬試卷及參考答案

13.1 模擬試卷

13.1.1 模擬試卷一

13.1.2 模擬試卷二

13.2 模擬試卷參考答案

13.2.1 模擬試卷一參考答案

13.2.2 模擬試卷二參考答案

參考文獻

在線預覽

第2章

程序語言基礎

本章要點

程序設計語言的基本成分

匯編語言的基本原理

編譯程序的基本原理

解釋程序的基本原理

文法和語言的形式描述

正規式

有限狀態機

2.1 程序語言概述

考核說明:本節主要介紹程序設計語言的定義、發展和分類,程序設計語言的基本成分,后者是重點,經常會考到,其中數據成分和函數是考核要點,要理解掌握。

2.1.1 程序設計語言的基本概念

1. 低級語言和高級語言

1) 低級語言

通常稱機器語言和匯編語言為低級語言。機器語言是指用0、1字符串組成的機器指令序列,是最基本的計算機語言;匯編語言是指用符號表示指令的語言。匯編語言仍然是一種面向機器的語言。

2) 高級語言

高級語言是從人類的邏輯思維角度出發、面向各類應用的程序語言,抽象程度大大提高。這類語言與人們使用的自然語言比較接近,大大提高了程序設計的效率。常見的C、C++、Java、PHP等都是高級語言。

2. 編譯程序和解釋程序

用某種高級語言或匯編語言編寫的程序稱為源程序,源程序不能直接在計算機上執行。如果源程序是使用匯編語言編寫的,則需要一個稱為匯編程序的翻譯程序將其翻譯成目標程序后才能執行。如果源程序是使用某種高級語言編寫的,則需要相應的解釋程序或編譯程序對其進行翻譯,然后才能在機器上運行。

注意:在解釋方式下,翻譯源程序時不生成獨立的目標程序,而編譯器則會將源程序翻譯成獨立保存的目標程序。

3. 程序設計語言的定義

(1) 語法:由程序設計語言的基本符號組成程序中的各個語法成分(包括程序)的一組規則,其中由基本符號構成符號(單詞)的書寫規則稱為詞法規則,由符號(單詞)構成語法成分的規則稱為語法規則。程序語言的語法可通過形式語言進行描述。

(2) 語義:程序語言中按語法規則構成的各個語法成分的含義,可分為靜態語義和動態語義。

(3) 語用:表示構成語言的各個記號和使用者的關系,涉及符號的來源、使用和影響。

(4) 語境:理解和實現程序設計語言的環境,包括編譯環境和運行環境。

4. 程序設計語言的發展

FORTRAN是及時個被廣泛用來進行科學計算的高級語言。

ALGOL60是一個分程序結構的語言,它采用巴科斯范式(BNF)來描述語言的語法。

COBOL是一種面向事務處理的高級語言,主要用于情報檢索、商業數據處理等。

Pascal是一種結構化程序設計語言,它從ALGOL60衍生而來。

C語言是一種通用程序設計語言,允許程序員直接訪問操作系統和底層硬件,因此在系統級應用和實時處理應用的開發中成為主要語言。

C++是在C語言的基礎上發展起來的,增加了類機制,成為面向對象的程序設計語言。

Java的初始用途是開發網絡瀏覽器的小應用程序,目前已廣泛應用于個人電腦(PC)、數據中心、游戲控制臺、移動電話和互聯網等。

PHP是一種在服務器端執行的、嵌入HTML文檔的腳本語言,可以快速地執行動態網頁,其語法風格類似于C語言。

Python是一種面向對象的解釋型程序設計語言,可用于編寫獨立程序、快速腳本和復雜應用的原型。

Delphi是一種可視化開發工具,主要特性是基于窗體和面向對象的方法、高速的編譯器、強大的數據庫支持、與Windows編程緊密結合以及成熟的組件技術。

5. 程序設計語言的分類

1) 命令式程序設計語言

命令式程序設計語言是基于動作的語言,在這種語言中,計算被看作動作的序列。命令式語言族開始于FORTRAN、Pascal和C語言,體現了命令式程序設計的關鍵思想。

2) 面向對象的程序設計語言

C++、Java和Smalltalk是面向對象程序設計語言的代表。

3) 函數式程序設計語言

函數式程序設計語言是一類以-演算為基礎的語言。該語言的代表是LISP語言,其中大量使用了遞歸。

4) 邏輯型程序設計語言

邏輯型程序設計語言是一類以形式邏輯為基礎的語言。該語言的代表是建立在關系理論和一階謂詞理論基礎上的Prolog語言。

真題鏈接

[例2-1]可用于編寫獨立程序和快速腳本的語言是 (20) 。(2012年11月真題20)

(20) A.Python B.Prolog C.Java D.C#

[解析]Python是一種面向對象的解釋型程序設計語言,可用于編寫獨立程序、快速腳本和復雜應用的原型。Python也是一種腳本語言,它支持對操作系統底層的訪問。

Prolog是一種邏輯型語言。Prolog程序是一系列事實、數據對象或事實間的具體關系和規則的集合。Prolog有很強的推理功能,適用于書寫自動定理證明、專家系統、自然語言理解等問題的程序。

Java是一種面向對象的程序設計語言,能開發應用在Internet上且具有軟、硬件獨立性和交互能力的程序。Java可以一次編寫而到處運行。

C#是微軟公司的一種面向對象的、運行于.NET Framework(框架)之上的高級程序設計語言。C#看起來與Java有著驚人的相似:它包括了諸如單一繼承、接口、與Java幾乎同樣的語法和編譯成中間代碼再運行的過程。但是C#與Java有著明顯的不同,它借鑒了Delphi的一個特點,與COM(組件對象模型)是直接集成的,而且它是微軟公司.NET Windows網絡框架的主角。

[答案]A

2.1.2 程序設計語言的基本成分

1. 數據成分

程序語言的數據成分是指一種程序語言的數據類型。

1) 常量和變量

按照程序運行時數據的值能否改變,將數據分為常量和變量。程序中的數據對象可以具有左值和(或)右值,左值是指存儲單元(或地址、容器),右值是指具體值(或內容)。變量具有左值和右值,在程序運行過程中其右值可以改變;常量只有右值,在程序運行過程中其右值不能改變。

2) 全局量和局部量

按數據的作用域范圍,數據可分為全局量和局部量。系統為全局變量分配的存儲空間在程序運行的過程中一般是不改變的,而為局部變量分配的存儲單元是動態改變的。

3) 數據類型

按照數據組織形式的不同可將數據分為基本類型、用戶定義類型、構造類型及其他類型。C(C++)的數據類型如下所示。

基本類型:整型(int)、字符型(char)、實型(float、double)和布爾型(bool)。

特殊類型:空類型(void)。

用戶定義類型:枚舉類型(enum)。

構造類型:數組、結構和聯合。

指針類型:type 。

抽象數據類型:類類型。

其中,布爾類型和類類型是C++在C語言的基礎上擴充的。

2. 運算成分

程序語言的運算成分是指允許使用的運算符號及運算規則。大多數高級程序語言的基本運算可以分成算術運算、關系運算和邏輯運算,有些語言還提供位運算。運算符號的使用與數據類型密切相關。為了確保運算結果的性,運算符號要規定優先級和結合性,必要時還要使用圓括號。

3. 控制成分

控制成分用于指明語言允許表述的控制結構,程序員使用控制成分來構造程序中的控制邏輯。

1) 順序結構

在順序結構中,計算過程從所描述的及時個操作開始,按順序依次執行后續的操作,直到執行完序列的一個操作。順序結構內也可以包含其他控制結構。

2) 選擇結構

選擇結構提供了在兩種或多種分支中選擇執行其中一個分支的邏輯。基本的選擇結構是指定一個條件P,然后根據條件的成立與否決定控制流走計算A還是走計算B,從兩個分支中選擇一個執行。

3) 循環結構

循環結構描述了重復計算的過程,通常包括三個部分:初始化、需要重復計算的部分和重復的條件。其中初始化部分有時在控制的邏輯結構中不進行顯式的表示。循環結構主要有兩種形式:while型重復結構和do-while型重復結構。

4. C(C++)語言提供的控制語句

C(C++)語言提供的控制語句如下。

(1) 復合語句。復合語句是一系列用"{"和"}"括起來的聲明和語句,其主要作用是將多條語句組成一個可執行單元。復合語句是一個整體。

(2) if語句和switch語句。這兩種語句用于實現選擇結構。

if語句實現的是雙分支的選擇結構。

switch語句描述了多分支的選擇結構。

(3) 循環語句。C(C++)語言提供了三種形式的循環語句用于描述循環計算的控制結構。

while語句。

do-while語句。

for語句。

5. 函數

函數是程序模塊的主要成分,它是一段具有獨立功能的程序。函數的使用涉及三個概念:函數定義、函數聲明和函數調用。

(1) 函數定義:包括函數首部和函數體兩個部分。函數的定義描述了函數做什么和怎么做。

(2) 函數聲明:函數應該先聲明后引用。函數聲明定義了函數原型。聲明函數原型的目的在于告訴編譯器傳遞給函數的參數個數、類型以及函數返回值的類型,參數表中僅需要依次列出函數定義中的參數的類型。編譯器可以通過函數原型檢查源程序中對函數的調用是否正確。

(3) 函數調用:當需要在一個函數(稱為主調函數)中使用另一個函數(稱為被調函數)實現的功能時,便以函數名字進行調用,稱為函數調用。調用函數和被調用函數之間交換信息的方法主要有兩種:一種是由被調用函數把返回值返回給主調函數,另一種是通過參數帶回信息。函數調用時實參和形參之間交換信息的方法有傳值調用和引用調用兩種。

傳值調用。若實現函數調用時實參向形式參數傳遞相應類型的值(副本),則稱為傳值調用。這種方式下形式參數不能向實際參數傳遞信息。在C語言中,要實現被調用函數對實際參數的修改,必須用指針作形參。即調用時需要先對實參進行取地址運算,然后將實參的地址傳遞給指針形參,本質上仍屬于傳值調用。這種方式實現了間接內存訪問。

引用調用。引用是C++中增加的數據類型,當形式參數為引用類型時,形參名實際上是實參的別名,函數中對形參的訪問和修改實際上就是針對相應實際參數所做的訪問和改變。

真題鏈接

[例2-2]弱類型語言(動態類型語言)是指不需要進行變量/對象類型聲明的語言。 (50) 屬于弱類型語言。(2013年11月真題50)

(50) A.Java B.C/C++ C.Python D.C#

[解析]根據定義可知Java、C/C++、C#都需要進行變量/對象聲明,所以說是強類型語言。而Python不需要,它屬于弱類型語言。

[答案]C

[例2-3]程序運行過程中常使用參數在函數(過程)間傳遞信息,引用調用傳遞的是實參的 (20) 。(2014年5月真題21)

(20) A.地址 B.類型 C.名稱 D.值

[解析]引用就是某一變量(目標)的一個別名,對引用的操作與對變量直接操作一樣。表示該引用名是目標變量名的一個別名。

[答案]C

2.2 語言處理程序基礎

考核說明:本節主要介紹匯編語言、編譯程序和解釋程序的基本原理,編譯程序部分經常考到,是重點也是難點,要能透徹理解。

2.2.1 匯編語言的基本原理

1. 匯編語言

匯編語言是為特定的計算機或計算機系統設計的面向機器的符號化的程序設計語言。用匯編語言編寫的程序稱為匯編語言源程序。

匯編語言源程序由若干條語句組成。一個程序中可以有三類語句:指令語句、偽指令語句和宏指令語句。

(1) 指令語句:又稱為機器指令語句,匯編后能產生相應的機器代碼,被CPU直接識別并執行相應的操作。指令語句可分為傳送指令、算術運算指令、邏輯運算指令、移位指令、轉移指令和處理機控制指令等。

(2) 偽指令語句:指示匯編程序在對源程序進行匯編時完成某些工作。與指令語句的區別是:偽指令語句經匯編后不產生機器代碼,另外,偽指令語句所指示的操作是在源程序被匯編時完成的,而指令語句的操作必須在程序運行時完成。

(3) 宏指令語句:將多次重復使用的程序段定義為宏。宏的定義必須按照相應的規定進行,每個宏都有相應的宏名。

2. 匯編程序

匯編程序的功能是將用匯編語言編寫的源程序翻譯成機器指令程序。它一般至少需要兩次掃描源程序才能完成翻譯過程。及時次掃描的主要工作是定義符號的值并創建一個符號表(ST);第二次掃描的任務是產生目標程序。除了使用前一次掃描所產生的符號表(ST)外,還要使用機器指令表(MOT2)。在第二次掃描過程中,可執行匯編語句應被翻譯成對應的二進制代碼機器指令。這一過程涉及兩個方面的工作:一是把機器指令助記符轉換成二進制機器指令操作碼,這可通過查找MOT2來實現;二是求出操作數區各操作的值(用二進制表示)。

2.2.2 編譯程序的基本原理

編譯程序的功能是把用高級語言書寫的源程序翻譯成與之等價的目標程序。編譯過程劃分成詞法分析、語法分析、語義分析、中間代碼生成、代碼優化和目標代碼生成六個階段,實際的編譯器可能會將其中的某些階段結合在一起進行處理。

1. 詞法分析階段

詞法分析階段的任務是對源程序從前到后(從左到右)逐個字符進行掃描,從中識別出一個個"單詞"符號。"單詞"符號是程序設計語言的基本語法單位,如關鍵字、標識符等。詞法分析程序輸出的"單詞"常常采用二元組的方式,即單詞類別和單詞自身的值。

2. 語法分析階段

語法分析的任務是在詞法分析的基礎上,根據語言的語法規則將單詞符號序列分解成各類語法單位,如"表達式"、"語句"和"程序"等。詞法分析和語法分析本質上都是對源程序的結構進行分析。

過程(函數)說明和過程(函數)調用是程序中一種常見的語法結構。過程說明和調用語句的翻譯,有賴于形式參數和實際參數結合的方式以及數據空間的分配方式。需要分配存儲空間的對象有基本數據類型、結構化數據類型和連接數據(如返回地址、參數等)。分配的依據是名字的作用域和生存期的定義規則。分配的策略有靜態存儲分配和動態存儲分配兩大類。

如果在編譯時就能確定目標程序運行時所需要的全部空間大小,則在編譯時就可以安排好目標程序運行時的全部數據空間,并確定每個數據對象的存儲位置。這種分配策略為靜態存儲分配。

如果一個程序語言允許遞歸過程和可變數據結構,那么就需要采用動態存儲分配技術。動態存儲分配策略的實現有棧分配和堆分配兩種方式。

3. 語義分析階段

語義分析階段主要是審查源程序是否存在語義錯誤,并收集類型信息供后面的代碼生成階段使用,只有語法和語義都正確的源程序才能翻譯成正確的目標代碼。語義分析的一個主要工作是進行類型分析和檢查。

描述程序語義的形式化方法主要有屬性文法、公理語義、操作語義和指稱語義等,其中屬性文法是對上下文無關文法的擴充。目前廣泛使用的靜態語義分析方法是語法制導翻譯,其基本思想是將語言結構的語義以屬性的形式賦予代表此結構的文法符號,而屬性值的計算以語義規則的形式賦予文法的產生式。在語法分析的推導或歸納的步驟中,通過語義規則實現對屬性值的計算,以達到對語義的處理。

4. 中間代碼生成階段

中間代碼是一種結構簡單且含義明確的記號系統,可以有多種形式。中間代碼生成階段的工作就是根據語義分析的輸出生成中間代碼。語義分析和中間代碼生成所依據的是語言的語義規則。

實際上,中間代碼起著編譯器前端和后端分水嶺的作用,使用中間代碼有利于提高編譯程序的可移植性。常用的中間代碼有后綴式、三元式、四元式和樹等形狀。

后綴式:把運算符寫在運算對象的后面。例如,ab的后綴式為ab。這種表示法的優點是根據運算對象和運算符的出現次序進行計算,不需要使用括號,也便于用棧實現求值。

三元式:由運算符OP、及時運算對象ARG1和第二運算對象ARG2組成。例如,x:=a+b的三元式為:① (+, a, b) ② (:=, ①, x)。

四元式:組成成分為運算符OP、及時運算對象ARG1、第二運算對象ARG2和運算結果RESULT。例如,x:=a+b的四元式為:① (+, a, b, t) ② (:=, t, _, x)。

樹:例如,表達式x:=(a+b)(c-d)可以表示為圖2-1所示的結構。

圖2-1 樹型結構

5. 代碼優化階段

代碼優化階段的任務是對前階段產生的中間代碼進行變換或進行改造,目的是使生成的目標代碼更為高效,即省時間和省空間。優化過程可以在中間代碼生成階段進行,也可以在目標代碼生成階段進行。

6. 目標代碼生成階段

目標代碼生成階段的任務是把中間代碼變換成特定機器上的指令代碼、可重定位的指令代碼或匯編指令代碼。這是編譯的階段,它的工作與具體的機器密切相關。

7. 符號表管理

符號表的作用是記錄源程序中各個符號的必要信息,以輔助語義的正確性檢查和代碼生成。符號表的建立可以始于詞法分析階段,也可以放到語法分析階段,但符號表的使用有時會延續到目標代碼的運行階段。

8. 出錯處理

用戶編寫的源程序中的錯誤大致可分為靜態錯誤和動態錯誤。動態錯誤也稱動態語義錯誤,指程序中包含的邏輯錯誤。靜態錯誤是指編譯階段發現的程序錯誤,可分為語法錯誤和靜態語義錯誤。出錯處理程序的任務包括檢查錯誤、報告出錯信息、排錯、恢復編譯工作。

真題鏈接

[例2-4]將高級語言源程序翻譯成機器語言程序的過程,常引入中間代碼。以下關于中間代碼的敘述中,不正確的是 (22) 。(2014年11月真題22)

(22) A.中間代碼不依賴于具體的機器

B. 使用中間代碼可提高編譯程序的可移植性

C.中間代碼可以用樹或圖表示

D.

……

網友評論(不代表本站觀點)

來自無昵稱**的評論:

物流很快 挺好的

2015-09-10 14:21:40
來自無昵稱**的評論:

不錯的

2015-09-21 19:34:42
來自無昵稱**的評論:

書不錯,優惠了一些,也很便宜。

2015-10-30 17:00:53
來自冰緣一**的評論:

書不錯,內容很豐富

2016-02-20 18:22:44
來自liuyun9**的評論:

挺好的,軟四精簡版。

2016-03-18 08:20:29
來自無昵稱**的評論:

怎么感覺像盜版的封皮不如以前的好,紙很薄

2016-04-13 14:03:03
來自無昵稱**的評論:

可以,就是派送太慢了

2016-08-07 12:00:11
來自無昵稱**的評論:

很不錯的一本書,當年的教材又到手了。

2016-08-17 21:21:32
來自無昵稱**的評論:

還不錯的

2016-09-08 09:01:04
來自無昵稱**的評論:

和我買的另一本一樣,知識點都不詳細。

2016-09-23 10:53:00
來自無昵稱**的評論:

不錯

2017-01-02 19:05:16
來自無昵稱**的評論:

這本書不錯。

2017-02-07 16:02:39
來自匿名用**的評論:

感覺不錯……

2017-02-18 10:01:13
來自蜘***(**的評論:

能看就行唄

2017-02-25 08:14:18
來自周***(**的評論:

買了準備考試

2017-03-12 13:33:47
來自s***x(**的評論:

書挺不錯的,下次應該還會購買。

2017-03-29 09:58:49
來自匿名用**的評論:

整體感覺不錯哦

2017-07-13 19:46:12
來自桐靈人**的評論:

內容不錯,寫得還可以,通俗易懂,快遞滿分。

2017-08-27 23:52:04
來自shijun7**的評論:

軟考必備。

2017-10-24 10:29:01

免責聲明

更多出版社
主站蜘蛛池模板: 永靖县| 赤城县| 巧家县| 西吉县| 讷河市| 孟州市| 化州市| 车险| 津南区| 普兰县| 蒙山县| 芦山县| 买车| 永年县| 新绛县| 和林格尔县| 龙泉市| 林口县| 四子王旗| 乌鲁木齐县| 崇仁县| 华安县| 托里县| 乌鲁木齐市| 永胜县| 斗六市| 陈巴尔虎旗| 沂水县| 彰武县| 汤原县| 盘山县| 吴旗县| 梁山县| 平果县| 弥渡县| 巨野县| 县级市| 潮州市| 信丰县| 六安市| 石家庄市|