第七章——程式設計語言基礎知識
7.1 基本概念
7.1.1 低階語言和高階語言
通常稱機器語言和組合語言為低階語言。機器語言是指用0、1字串組成的機器指令序列,是最基本的計算機語言。組合語言是指用符號表示指令的語言。
高階語言是從人類的邏輯思維角度出發、面向各類應用的程式語言,其抽象程度大大提高,需要編譯成特定機器上的目的碼才能執行。這類語言與人們使用的自然語言比較接近,大大提高了程式設計的效率。
程式設計語言的定義一般都涉及語法、語義、語用和語境等方面。
- 語法:由程式設計語言的基本符號組成程式中的各個語法成分的一組規則,其中由基本字元構成的符號書寫規則稱為詞法規則,由符號構成語法成分的規則稱為語法規則。程式語言的語法可透過形式語言進行描述。
- 語義:程式語言中按語法規則構成的各個語法成分的含義,可分為靜態語義和動態語義
- 語用:表示構成語言的各個記號和使用者的關係,涉及符號的來源、使用和影響。
- 語境:理解和實現程式設計語言的環境,包括編譯環境和執行環境。
7.1.2 程式設計語言的分類
- 命令式程式設計語言
命令式程式設計語言是基於動作的語言,在這種語言中,計算被看作是動作的序列,命令式語言族開始於Fortran、Pascal和C語言,體現了命令式程式設計的關鍵思想。 - 物件導向的程式設計語言
物件導向的程式設計在很大程度上應歸功於從模擬領域發展而來的Simula,Simula提出了物件和類的概念。C++、Java和Smalltalk是物件導向程式設計語言的代表。 - 函式式程式設計語言
函式式程式設計語言是一類以2-演算為基礎的語言。該語言的代表是LISP,其中大量使用了遞迴。 - 邏輯型程式設計語言
邏輯型程式設計語言是一類以形式邏輯為基礎的語言。該語言的代表是建立在關係理論和一階謂詞理論基礎上的Prolog。
7.1.3 程式設計語言的基本成分
資料成分:
- 常量和變數
- 全域性量和區域性量
- 資料型別
基本型別:整型(int)、字元型(char)、實型(float、double)和布林型別(bool)。
特殊型別:空型別(void)
使用者定義型別:列舉型別(enum)
構造型別:陣列、結構和聯合
指標型別:type
抽象資料型別:類型別
運算成分:
算術運算加減乘除、邏輯運算或與非、關係運算
控制成分:
順序結構、選擇結構、迴圈結構
函式和函式的呼叫
7.2 編譯與解釋
組合語言是為特定的計算機或計算機系統設計的面向機器的符號化的程式設計語言。用匯編語言編寫的程式稱為組合語言源程式。組合語言源程式由若干條語句組成。一個程式中可以有3類語句:指令語句、偽指令語句和宏指令語句。
編譯程式的功能是把用高階語言書寫的源程式翻譯成與之等價的目標程式。編譯過程劃分成詞法分析、語法分析、語義分析、中間程式碼生成、程式碼最佳化和目的碼生成六個階段,實際的編譯器可能會將其中的某些階段結合在一起進行處理。
解釋程式是一種語言處理程式,在詞法、語法和語義分析方面與編譯程式的工作原理基本相同,但在執行使用者程式時,它直接執行源程式或源程式的內部形式(中間程式碼)。因此,解釋程式並不產生目標程式,這是它和編譯程式的主要區別。
-
詞法分析階段的任務是:對源程式從前到後(從左到右)逐個字元進行掃描,從中識別出一個個“單詞”符號。“單詞”符號是程式設計語言的基本語法單位,如關鍵字、識別符號等。
-
語法分析階段的任務是:在詞法分析的基礎上,根據語言的語法規則將單詞符號序列分解成各類語法單位,如“表示式”“語句”和“程式”等。詞法分析和語法分析本質上都是對源程式的結構進行分析。
-
語義分析階段主要是:審查源程式是否存在語義錯誤,並收集型別資訊供後面的程式碼生成階段使用,只有語法和語義都正確的源程式才能翻譯成正確的目的碼。語義分析的一個主要工作是進行型別分析和檢查。
-
中間程式碼生成階段的工作:是根據語義分析的輸出生成中間程式碼。
-
程式碼最佳化階段的任務是:對前一階段產生的中間程式碼進行變換或進行改造,目的是使生成的目的碼更為高效,即省時間和省空間。
-
目的碼生成階段的任務是:把中間程式碼變換成特定機器上的絕對指令程式碼、可重定位的指令程式碼或彙編指令程式碼。這是編譯的最後階段,它的工作與具體的機器密切相關
7.3 文法
https://www.bilibili.com/video/BV1Qc411G7fB?p=17&vd_source=1a563cd2b3f3fdeb2a16cbbf18022d2f