MOOC 編譯原理筆記(一):編譯原理概述以及程序設計語言的定義

編譯原理概述

什麼是編譯程序

編譯程序指:把某一種高級語言程序等價地轉換成另一張低級語言程序(如彙編語言或機器代碼)的程序。
高級語言程序-翻譯->機器語言程序-運行->結果。
其中編譯程序又可以分爲:
診斷編譯程序(Diagnostic Compiler)--專門用於幫助程序員開發和調試,對於目標代碼的效率不關注。
優化編譯程序(Optimizing Compiler)--側重於提高目標代碼的執行效率,能夠生成高效的目標代碼。
交叉編譯程序(Cross Compiler)--運行編譯程序的機器叫做宿主機,運行目標代碼的機器我們稱爲目標機,一般來說宿主機和目標機是同一個機器,如果一個編譯程序產生不屬於宿主機的目標代碼,我們稱其爲交叉編譯程序。
可變目標編譯程序(Retargetable Compiler)--不需要重寫與機器無關的部分,只要改變與目標機器有關的部分,就能針對不同的平臺生成不同的代碼。

解釋程序(Interpreter)

把源語言寫的源程序作爲輸入,但不產生目標程序,而是邊解釋邊執行源程序。
不同於編譯程序,解釋程序不會產生完整的目標程序文件。(如python語言)
高級語言程序-解釋->結果

編譯過程

類比自然語言的翻譯:
把英文翻譯爲中文:
1.識別出句子紅的一個個單詞。
2.分析句子的語法結構。
3.根據句子的含義進行初步翻譯。
4.對譯文進行修飾。
5.寫出最後的譯文。
與編譯程序工作的五個階段對應爲:
1.詞法分析。
2.語法分析。
3.中間代碼產生。
4.優化。
5.目標代母產生。

詞法分析

任務:輸入源程序,對構成源程序的字符進行掃描和分解,識別出單詞符號。
依循的原則:構詞規則。
描述工具:有限自動機。

語法分析

任務:在詞法分析的基礎上,根據語法規則把單詞符號串分解成各類語法單位(語法範疇)。
依循的原則:語法規則。
描述工具:上下文無關文法。

中間代碼產生

任務:對各類不同的語法單位按語言的語義進行初步翻譯。
依循的原則:語義規則
描述工具:屬性文法
中間代碼:三元式,四元式,樹,...

優化

任務:對前階段產生的中間代碼進行加工變換,以期在最後階段產生更高效的目標代碼。
依循的原則:程序的等價變換原則

目標代碼產生

任務:把中間代碼變換成特定機器上的目標代碼
依賴於硬件系統結構和機器指令的含義
目標代碼的三種形式:
1.彙編指令代碼:需要進行彙編。
2.絕對指令代碼:可直接運行。
3.可重定位指令代碼:需要鏈接。

編譯程序的結構

編譯程序的總框

--源程序--》詞法分析器--單詞符號--》語法分析器--語法單位--》語義分析與中間代碼產生器--中間代碼(四元式)--》優化段--中間代碼(四元式)--》目標代碼生成器--目標代碼--》。
另外還有符號表管理,與出錯處理模塊。

出錯處理程序

發現源程序中的錯誤,把有關錯誤信息報告給用戶,錯誤分爲語法錯誤與語義錯誤。

重要概念:遍

所謂“遍”,就是對源程序或源程序的中間表示從頭到尾掃描一次。
階段和遍是不同的概念--一遍可以由若干段組成(詞法分析,語法分析、中間代碼程序可以合成一遍來處理),一個階段可以分爲若干遍來完成(比如:優化就可能分爲好多遍)。

編譯程序的前後端

詞法分析、語法分析、語義分析和中間代碼生成以及優化中與目標機器無關的部分一起稱爲編譯程序的前端。
而優化中與目標機器有關的部分和目標代碼生成,一起稱爲編譯程序的後端。
這樣分的好處爲:程序邏輯結構清晰、優化更充分,有利於移植。

編譯程序的生成

以機器語言和彙編語言爲工具。

優點:可以針對具體的機器,充分發揮計算機的系統功能;生成的抽象效率高。
缺點:程序難度、難寫、易出錯、難維護、生產效率低。

使用高級語言書寫

優點:程序易讀、容易維護、生產效率高。
如圖:

自編譯方式

編譯程序的自動產生

如LEX:詞法分析程序產生器。
YACC:語法分析程序產生器。

高級程序設計語言概述

常用的高級程序設計語言

FORTRAN 數值計算
COBOL 事務處理
PASCAL 結構化程序設計
LISP 函數式程序設計
PROLOG 邏輯程序設計
C 系統程序設計
Smalltalk 面向對象程序設計
Java Internet引用,可移植性
Python 解釋型,動態編程
第一位圖靈獎獲得者Alan J.Perlis曾經說過:如果一個語言不能改變你進行程序設計的思維方法的話,那麼你不值得去了解它。

高級程序設計語言的優點

更接近於數學語言和工程語言,更直觀、自然和易於理解。
更容易驗證其正確性。
編寫程序的效率更高。
更容易移植。

程序設計語言的定義

語法

程序本質上是一定字符集上的字符串。
語法:一組規則,用它可以形成和產生一個合式(形式上正確)的程序,分爲詞法規則和語法規則。

詞法規則:單詞符號的形成規則

單詞符號是語言中具有獨立意義的最基本結構
一般包括:常數、標識符、基本字、算符、界符等。

語法規則:語法單位的形成規則

語法單位通常包括:表達式、語句、分程序、過程、函數、程序的等。
描述工具:上下文無關文法。

語義

一組規則,用它可以定義一個程序的意義。
描述方法:
1.自然語言描述:二義性、隱藏錯誤和不完整性。
2.形式描述:
操作語義。
指稱語義。
代數語義。

程序語言的基本功能和層次結構

程序,本質上說是描述一定數據的處理過程。
程序語言的基本功能:描述數據和對數據的運算。
程序的層次結構:
程序--》子程序或分程序、過程、函數--》語句--》表達式--》數據引用、運算符、函數調用。
程序語言成分的邏輯和實現意義
抽象的邏輯的意義:數學意義。
計算機實現的意義:具體實現。
計算思維和數學思維是不同的!。

高級語言的分類

強制性語言/過程式語言
應用式語言
基於規則的語言
面向對象的語言

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章