- 相關推薦
編譯原理期末總結
編譯是計算機系統軟件的最重要組成部分之一,也是用戶最直接關心的工具之一。編譯原理的整個知識體系是數十年中無數學術精英在形式語義學、計算數學、計算機科學等相關領域探索、積累的結果。整個編譯程序,也是一個完整的系統算法,將數據結構的理論進一步專一化。
編譯原理的主要內容概括了開發一個編譯程序所需要的基本理論、方法和技術,如詞法分析、語法分析、語義分析、中間代碼生成、符號表、存儲空間組織、優化和目標代碼生成等。隨著編譯技術的發展,加入了屬性文法、語法制導翻譯、面向對象語言的編譯、并行編譯等知識。在程序設計和數據結構等課程學習后,學生對較為孤立的算法有了一定的了解,再學習編譯原理,可以較系統地認識程序算法,培養分析問題和解決問題的能力。
作為授課教師,如何在有限的學時內,使學生理解編譯的基本原理、掌握編譯的基本方法,提高學生的動手能力,使課程的教學效果得到較大改觀,是一個迫切需要解決的課題。課程組以現代教育教學理論為指導,在教學過程中,針對教材選擇、課堂教學、習題指導、答疑討論、網絡輔助、教學互動等環節進行綜合探索和創造性的改革與實踐,積累經驗。為學生創造一個全方位立體化的教學環境,滿足各層次學生的需要。
在教學過程中,學生理解和掌握這門課有一定難度,出現這種情況的原因存在以下幾個方面:
(1)編譯程序規模大。由于編譯原理是一個極其復雜的系統,程序規模大,導致不可能在一節課或一段時間講述完,只好將它分解開一部分一部分地研究, 但是這樣容易造成知識體系斷裂。不可能在短時間讓學生對整個編譯系統各部分融會貫通,理清各部分邏輯關系的順序。
(2)理論知識抽象。要完整地構造一個編譯系統并不是一件容易的事情,它不僅需要具有較完備的軟件知識,并需要掌握現有的軟件工具的使用,而且更重要的是要有豐富的實踐經驗,了解硬件系統結構和操作系統的功能。這些對于剛學完基礎知識的學生來講,理解難度系數相當大。
(3)算法的理解和實現。編譯原理這門課包含許多理論知識和算法,這些理論的學習和理解都存在著一定的難度。其中理論知識包括:詞法分析器的構造,語法中各種分析器(LR, LL,SLR,LALR 等)實現與完成。
針對這些問題,分別采取各種不同的策略,策略包括傳統教學方法和現代教學理論兩方面, 已經應用這些方法于實際教學中,已取得良好的教學效果。
第一、傳統的教學方法是教學成果的精華,如何在現今的教學中靈活應用,
也值得我們討論,我們常用的方法為:比喻式教學方法、問題式教學方法、反思式教學方法。
(1)比喻式教學方法就是用接近我們生活中的例子來近似地表示問題, 使問題更容易理解和解決。一般來說大學生的想象能力,邏輯能力比較強,但由于計算機處理問題的過程與日常處理問題有些不同, 而且計算機領域中涉及到一些概念比較抽象, 所以在講解時打比方,轉換問題的難度, 是常采用的方法。
(2)問題式教學方法可以更好地擴展學生的思維,發揮學生學習的遷移。問題式教學一般分四步: 提出問題、引導問題、解決問題、擴充問題。 在分析語法分析器時,首先提出:語法分析的解決問題?常用的語法分析的方法?引導語法分析構造的步驟和過程, 在引導過程中,解決語法構造過程的難點,并且擴充問題到,對于同一種語法在用不同的語法分析器中,將產生的結果和基理。語法分析器,讓學生在分解問題的過程中得到了理解和應用。
(3)反思式教學方法要求教師從學生的角度來考慮問題,講解問題。這種方式可以加強學生和老師之間的互動, 降低學生學習焦慮的情緒,提高教學的效果。
第二、構建多媒體環境下的教學環境,利用現代的教學手段,多媒體設施,電子教案等多種途徑,實現課堂時間的有效化,在傳統的教學模式下,推導理論需要大量的板書,老師忙于講,而學生忙于記筆記,一堂課下來,學生累,老師累, 結果學生不知道具體內容。借助多媒體,各種算法的推導一目了然,老師的重點放在講解算法的原理, 理順原理之間的邏輯關系上,學生則側重于理解。具體的做法為向學生提供各類資源庫的網上教學系統,幫助學生理解課堂教學內容。
編譯原理期末總結 [篇2]
1編譯程序: 從高級語言到匯編語言或機器語言的翻譯程序
2.源程序:用匯編語言或高級語言編寫的程序
3. 目標程序:用目標語言所表示的程序。 目標語言:介于源語言和機器語言之間的 “中間語言”,也可以是某種機器的機器語言,也可以是 某機器的匯編語言。
4 翻譯程序:將源程序轉換為目標程序的程序稱為翻譯程序。
5 賦值語句的語法規則: A::=V=E E::=T|E+T T::=F|T*F F::=V|(E)|C V::=標識符 C::=常數
6 遍:對源程序(包括源程序中間形式)從頭到尾掃描一次,并做有關的加工處理,生成新的源程序中間形式或目標程序,通常稱之為一遍。
優點:節省內存空間,提高目標代碼質量,邏輯機構清晰
缺點:編譯時間較長,會增加輸入輸出所消耗的時間,在內存許可下少用為妙
7前端:通常將與源程序有關的編譯部分稱為前端。 包括詞法分析,語法分析,語義分析,等分析部分
后端:與目標機有關的部分稱為后端。包括中間代碼生成,代碼優化,目標程序生成等綜合部分
8編譯程序構成部分以及功能: (1)詞法分析(掃描器):輸入源程序,對構成源程序的字符串進行掃描和分解,識別出一個個的單詞及其有關屬性,并轉換成屬性字。(2)語法分析(分析器):在詞法分析的基礎上,根據語言的語法規則,逐一分析詞法分析時得到的屬性字,檢查語法錯誤,若沒有錯誤,則給出正確的語法結構(如短語、子句、句子、程序段、程序等)。(3)語義分析(語義處理):語法分析識別出的各類語法范疇,分析其含義,進行和初步翻譯,產生介于源代碼和目標代碼之間的一種代碼“中間代碼”。或者直接生成目標代碼。(4)優化:依據程序的等價變換規則,盡量壓縮
目標程序運行時所需的時間和所占的存儲空間,以提高目標程序的質量(5)目標代碼生成:把經過優化的中間代碼轉化成特定機器上的低級語言代碼。
9計算機執行用高級語言編寫的程序途徑有兩種:解釋方式和編譯方式。 根本區別:是否生成了目標代碼。 解釋方式下,翻譯程序事先并不對高級語言程序進行徹底翻譯以得到機器代碼,而是讀入一條語句,就解釋其含義并執行,然后再讀入下一條語句,再解釋執行,即按,源程序中語句的動態順序逐句地進行分析解釋,并立即予以執行。 編譯方式下,翻譯程序先對高級語言程序進行徹底翻譯并生成目標代碼,然后再對目標代碼進行執行,即對源程序的處理是先翻譯后執行。簡單來說解釋方式不生成目標代碼,編譯方式生成目標代碼
10編譯程序采用多遍掃描還是單編掃描需要考慮哪些因素 不一定,多遍編譯器結構清晰,構造時間短,運行時需要內存少,產生的目標代碼質量高,但時間效率低,
應該根據具體情況決(1)語句的大小與結構,(2)機器規模(3)設計目的(4)設計人員的素質及數量。 11 比較LR(0),SLR(1),LR(1)和LALR(1)
分析表的優缺點
(1)LR(0)分析表局限性大,但其構造方法是其他構造方法的基礎
(2)SLR分析表雖然不是對所有文法都存在,但這種分析表狀態少,存儲空間占用少,較易實現又極有實用價值。
(3)規范LR分析表,即LR(1)分析表,它的,它的分析能力最強,能適用于一大類文法,但是實現代價過高,主要是體積過大 (4)LALR分析表的能力介于SLR分析表和規范LR分析表之間,稍加努力,就可以高效的實現。
12比較LL(K)分析表與LR(K)分析法 共同點:(1)兩者多借助于可能句柄左部的全部符號及向右看K個符號來確定所應執
行的唯一動作,識別過程嚴格地從左到右掃描,無回溯,效率高。(2)都能及時察覺錯誤2。(3)識別程序都能自動生成。 區別:(1)兩者都是嚴格地從左到右掃描,名稱中第一個L隱指這點,但LR分析技術利用的是最右推導(最左歸約),由R隱指,LL(K)分析利用的是最左推導,由第二個L隱指。(2)LL(K)要求文法無左遞歸,滿足無回溯的條件,而LR分析法則無此限制。(3)LL(K)是自上而下構造推導的,而LR(K)是自下而上構造歸約的。 13語法制導翻譯過程:對單詞符號串進行語法分析,構造語法分析樹,構造屬性依賴圖,遍歷語法樹并在語法樹各結點處按語義規則計算順序。
14靜態語義檢查:類型檢查,控制流檢查,一致性檢查,相關名字檢查,名字的作用域分析。
15引入中間代碼的好處:
(1)便于進行與機器無關的代碼優化工作 (2)使編譯程序更容易改變目標機
(3)使編譯程序的結構在邏輯上更為簡單明確,以中間語言為界限,編譯前端和后端的接口更清晰。 16編譯程序分類 (1)診斷編譯程序 (2)優化編譯程序 (3)交叉編譯程序 (4)可變目標編譯程序
17編譯程序工作過程5個階段及其任務: (1)詞法分析:任務是從左到右逐個字符的讀入源程序,對構成源程序的字符流進行掃描和分解,進而識別一個個單詞。
(2)語法分析:任務是根據語法規則,分析并識別出各種語法成分,并經行語法正確性檢查。
(3)語義分析與中間代碼生成:任務是對識別出的各種語法成分進行語義分析,并產生相應的中間代碼。
(4)目標代碼生成:任務是把中間代碼轉換成特定機器上的低級語言代碼。 18編譯程序和解釋程序
(1)編譯程序需要在運行前將源代碼譯成目標代碼,解釋程序接受某個語言的程序并立即運行這個源程序
(2)二者存儲組織有著很大不同,編譯程序處理時存儲區要存儲編譯用時需要的各種表格;解釋程序將分析結果存放在源程序區
(3)編譯程序動態性很差,可形成永久性可執行文件,解釋程序動態性較好。
19程序性合計語言范型:
(1)強制(命令)式語言:c,fortron,pasal (2)函數式語言:ML,Lisp
(3)基于規則(邏輯)的語言:prolog (4)面向對象語言:Ada,c++,java
1.推導:
—自上而下的語法分析過程
—預測分析程序,遞歸下降分析法(最左推導)
—注:要求文法是LL(1)文法
2.歸約:
—自下而上的語法分析過程
—簡單優先分析法,算符優先分析法、LR分析法3
3.自下而上的語法分析過程思想
—自下而上的語法分析過程是一個最左歸約的過程,從輸入串開始。朝著文法的開始符號進行歸約,直到到達文法的開始符號為止的過程 注意:輸入串在這里是指從詞法分析器送來的單詞符號組成的二元式的有限序列 。 即:自左至右把輸入串的符號一個一個移進棧,在移進過程中不斷查看棧頂符號串,一旦形成某個句型的句柄時,就將此句柄用相應的產生式左部替換(歸約),若再形成句柄,就繼續替換,直到棧頂不再形成句柄為止,然后繼續移進符號,重復上面的過程直到棧頂只剩下文法的開始符號,輸入串讀完為止,這樣就認為識別了一個句子。
1)初態時棧內僅有棧底符“#”,讀頭指在最左邊的單詞符號上 .
2)語法分析程序執行的動作:
a)移進:讀入一個單詞并壓入棧內,讀頭后移;
b)歸約:檢查棧頂若干個符號能否進行歸約,若能,就以產生式左部替代該符號串,同時輸出產生式編號.
c)識別成功:移進—歸約的結局是棧內只剩下棧底符號和文法開始符號,讀頭也指向語句的結束符.
d)識別失敗.
令G是一個文法,S是文法的開始符號,假定αβδ是文法G的一個句型,如果有 S αAδ且A β
則稱β是句型αβδ相對于非終結符A的短語。
特別是,如果有 A β
則稱β是句型αβδ相對于規則A→β的直接短語,一個句型的最左直接短語稱為該句型的句柄。
注: 一個句型的語法樹中任一子樹葉節點所組成的符號串就是該句型的短語,當子樹中不包含其他更小的子樹時,該子樹結點所組成的字符串就是該句型的直接(簡單)短語。
素短語: 一個遞歸的定義,至少含有一個終結符,并且除它自身之外不在含有任何更小的素短語,(所謂最左素短語就是處于句型最左邊的素短語)。
簡單優先分析法:1.確定相鄰文法符號之間的優先關系 在句型中,句柄內各相鄰符號之間具有相同的優先級,相同優先級用“ ”
由于句柄要先歸約,所以規定句柄兩端符號的優先級要比位于句柄之外的相鄰符號的優先級高,優先級低于表示為“﹤”,優先級高于表示為“ >”
某句型中:N1…..Ni-1< Ni …… Nj > Nj+1…..Nn
定義:一個文法G,如果它不含e產生式,也不含任何右部相
同的不同產生式,并且它的任何符號對(X,Y)
X,Y是終結符或非終結符 ——或者沒有關系,
——或者存在優先級相同或低于、高于等關系之一,
則這是一個簡單優先文法。
1LR(0) 文法:該文法的以 LR(0) 項目集為狀態的識別規范句型活前綴的 DFA 中沒有沖突狀態。
2 SLR(1) 文法:該文法的以 LR(0) 項目集為狀態的識別規范句型活前綴的 DFA 中有沖突狀態,沖突可用 FOLLOW 集解決。
該文法不是 SLR(1) 文法。
因為 FOLLOW(S)={a,b,#} ,所以無法解決沖突
3算符優先:(T) (<firstvt(T) lastvt(T)>) (6章)
1.靜態語義檢查包括: (1)類型檢查 (2)控制流檢查 (3)一致性檢查 (4)相關名字檢查 (5)名字的作用域分析
2.引入中間代碼的好處:
(1)便于進行與機器無關的代碼優化工作 (2)使編譯程序更容易改變目標機
(3)使編譯程序的結構在邏輯上更為簡單
明確,以中間語言為界限,編譯前端和后端的接口更清晰。
(1章) 1.源程序: 用編譯語言或高級語言編寫的程序
目標程序:用目標語言表示的程序
翻譯程序: 將源程序轉換為目標程序的程序。
2.編譯程序分類 (1)診斷編譯程序 (2)優化編譯程序 (3)交叉編譯程序 (4)可變目標編譯程序
3.編譯程序工作過程5個階段及其任務: (1)詞法分析:任務是從左到右逐個字符的讀入源程序,對構成源程序的字符流進行掃描和分解,進而識別一個個單詞。
(2)語法分析:任務是根據語法規則,分析并識別出各種語法成分,并經行語法正確性檢查。
(3)語義分析與中間代碼生成:任務是對識別出的各種語法成分進行語義分析,并產生相應的中間代碼。
(4)目標代碼生成:任務是把中間代碼轉換成特定機器上的低級語言代碼。
4.編譯程序和解釋程序
(1)編譯程序需要在運行前將源代碼譯成目標代碼,解釋程序接受某個語言的程序并立即運行這個源程序
(2)二者存儲組織有著很大不同,編譯程序處理時存儲區要存儲編譯用時需要的各種表格;解釋程序將分析結果存放在源程序區
(3)編譯程序動態性很差,可形成永久性可執行文件,解釋程序動態性較好。
5.程序性合計語言范型:
(1)強制(命令)式語言:c,fortron,pasal (2)函數式語言:ML,Lisp
(3)基于規則(邏輯)的語言:prolog
(4)面向對象語言:Ada,c++,java
6.構造編譯程序必須掌握的三方面內容: (1)源程序 (2)目標語言 (3)編譯方法
7.編譯前端和后端
前端:通常指與源程序有關的編譯部分,包括詞法分析,語法分析,語義分析,特點是與源程序有關。
后端:與目標機有關的部分,包括中間代碼生成,代碼優化,目標程序生成,特點是與目標機有關。
1.推導:
—自上而下的語法分析過程
—預測分析程序,遞歸下降分析法(最左推導)
—注:要求文法是LL(1)文法
2.歸約:
—自下而上的語法分析過程
—簡單優先分析法,算符優先分析法、LR分析法3
3.自下而上的語法分析過程思想
—自下而上的語法分析過程是一個最左歸約的過程,從輸入串開始。朝著文法的開始符號進行歸約,直到到達文法的開始符號為止的過程 注意:輸入串在這里是指從詞法分析器送來的單詞符號組成的二元式的有限序列 。 即:自左至右把輸入串的符號一個一個移進棧,在移進過程中不斷查看棧頂符號串,一旦形成某個句型的句柄時,就將此句柄用相應的產生式左部替換(歸約),若再形成句柄,就繼續替換,直到棧頂不再形成句柄為止,然后繼續移進符號,重復上面的過程直到棧頂只剩下文法的開始符號,輸入串讀完為止,這樣就認為識別了一個句子。
1)初態時棧內僅有棧底符“#”,讀頭指在最左邊的單詞符號上 .
2)語法分析程序執行的動作:
a)移進:讀入一個單詞并壓入棧內,讀頭后移;
b)歸約:檢查棧頂若干個符號能否進行歸約,若能,就以產生式左部替代該符號串,同時輸出產生式編號.
c)識別成功:移進—歸約的結局是棧內只剩下棧底符號和文法開始符號,讀頭也指向語句的結束符.
d)識別失敗.
令G是一個文法,S是文法的開始符號,假定αβδ是文法G的一個句型,如果有 S αAδ且A β
則稱β是句型αβδ相對于非終結符A的短語。
特別是,如果有 A β
則稱β是句型αβδ相對于規則A→β
的直接短語,一個句型的最左直接短語稱為該句型的.句柄。
注: 一個句型的語法樹中任一子樹葉節點所組成的符號串就是該句型的短語,當子樹中不包含其他更小的子樹時,該子樹結點所組成的字符串就是該句型的直接(簡單)短語。
素短語: 一個遞歸的定義,至少含有一個終結符,并且除它自身之外不在含有任何更小的素短語,(所謂最左素短語就是處于句型最左邊的素短語)。
簡單優先分析法:1.確定相鄰文法符號之間的優先關系 在句型中,句柄內各相鄰符號之間具有相同的優先級,相同優先級用“ ”
由于句柄要先歸約,所以規定句柄兩端符號的優先級要比位于句柄之外的相鄰符號的優先級高,優先級低于表示為“﹤”,優先級高于表示為“ >”
某句型中:N1..Ni-1< Ni Nj > Nj+1..Nn
定義:一個文法G,如果它不含e產生式,也不含任何右部相
同的不同產生式,并且它的任何符號對(X,Y)
X,Y是終結符或非終結符 ——或者沒有關系,
——或者存在優先級相同或低于、高于等關系之一,
則這是一個簡單優先文法。
編譯原理期末總結 [篇3]
1.簡要說明語義分析的基本功能。
答:語義分析的基本功能包括: 確定類型、類型檢查、語義處理和某些靜態語義檢 查。
1.編譯方式和解釋方式的根本區別是什么?
編譯方式:是將源程序經編譯得到可執行文件后,就可脫離源程序和編譯程序單獨執行,所以編譯方式的效率高,執行速度快;解釋方式:在執行時,必須源程序和解釋程序同時參與才能運行,其不產生可執行程序文件,效率低,執行速度慢。
2.編譯程序有哪些主要構成成分?各自的主要功能是什么? 編譯程序的主要構成成分有:詞法分析程序、語法分析程序、語義分析程序、中間代碼 生成程序、代碼優化程序、目標代碼生成程序、表格管理程序及出錯處理程序。 (1)詞法分析程序:從左到右掃描源程序,識別單詞及其有關屬性; (2)語法分析程序:分析源程序的結構, 判別它是否為相應程序設計語言中的一個合法 程序; (3)語義分析程序:審查源程序有無語義錯誤,為代碼生成階段收集類型信息; (4)中間代碼生成程序:將源程序變成一種內部表示形式;
3什么是解釋程序?它與編譯程序的主要不同是什么? 解釋程序接受某個語言的程序并立即運行這個源程序。它的工作模式是一個個的獲取、 分析并執行源程序語句,一旦第一個語句分析結束,源程序便開始運行并且生成結果,它特 別適合程序員交互方式的工作情況。 而編譯程序是一個語言處理程序,它把一個高級語言程序翻譯成某個機器的匯編或二進 制代碼程序,這個二進制代碼程序再機器上運行以生成結果。 它們的主要不同在于:解釋程序是邊解釋邊執行,解釋程序運行結束即可得到該程序的 運行結果, 而編譯程序只是把源程序翻譯成匯編或者二進制程序, 這個程序再執行才能得到 程序的運行結果。 (當然還有其他不同,比如存儲組織方式不同)
什么是句柄?什么是素短語?
一個句型的最左直接短語稱為該句型的句柄。
詞法分析 詞法分析的主要任務是從左向右掃描每行源程序的符號,按照詞法規則 從構成源程序的字符串中識別出一個個具有獨立意義的最小語法單位,
并轉換成統一的內部表示(token),送給語法分析程序。
編譯程序的工作分為那幾個階段?
詞法分析、語法分析和語義分析是對源程序進行的分析(稱為編譯程序的前端), 而中間代碼生成、代碼優化和代碼生成三個階段合稱為對源程序進行綜合(稱為
編譯程序的后端),它們從源程序的中間表示建立起和源程序等價的目標程序。
簡述自下而上的分析方法。
開始符號;或者說從語法樹的末端開始,步步向上“歸約”,直到根節點。
4.簡述代碼優化的目的和意義。
一種等價變換,在保證變換前后代碼執行結果相同的前提下,盡量使目 標程序運行時所需要的時間短,同時所占用的存儲空間少。
LR(0)分析器
每一步,只須根據分析棧當前已移進和歸約出的全部文法符號,并至多再
向前查看0個輸入符號,就能確定相對于某一產生式左部符號的句柄是否
已在分析棧的頂部形成,從而也就可以確定當前所應采取的分析動作 (是 移進還是按某一產生式進行歸約等)。
第四章
1. 設有如下文法G[S]:
SaABbcd |
AASd |
BSAh | eC |
CSf | Cg |
(1) 求每個產生式的Predict集。
(2) 該文法是否為LL(1)文法?為什么?
答:(1)
Predict(SaABbcd)={a}
Predict(S )={#,d,f,a,h } Predict(AASd)={a,d} Predict(A )={h,a,d,b,e} Predict(BSAh)={a,d,h} Predict(B eC)={e} Predict(B )={b} Predict(CSf)={a,f} Predict(C Cg)={a,f,g} Predict(C )={g,b} (2)由于Predict(AASd) Predict(A ),所以該文法不是LL(1)文法。
三、 給定文法G[S]:
S→aA|bQ; A→aA|bB|b;B→bD|aQ ;Q→aQ|bD|b;D→bB|aA ;E→aB|bF F→bD|aE|b
構造相應的最小的DFA 。
解:先構造其NFA: 用子集法將NFA確定化:
將S、A、Q、BZ、DZ、D、B重新命名,分別用0、1、2、3、4、5、6表示。因為3、4中含有z,所以它們為終態。
令P0=({0,1,2,5,6},{3,4})用b進行分割:
P1=({0,5, 6},{1,2},{3,4})再用b進行分割: P2=({0},{5, 6},{1,2},{3,4})再用a、b 進行分割,仍不變。 再令{0}為A,{1,2}為B,{3,4}為C,{5,6}為D。 最小化為右上圖。
四、對下面的文法G:
S→a | b | (T) T→T,S | S
(1) 消去文法的左遞歸,得到等價的文法G2;
(2) 判斷文法G2是否LL(1)文法,如果是,給出其預測分析表。(15) G2:
S→a | b | (T)
T→ ST’
T’→,S T’ | ε
A→BCc | gDB
B→bCDE |ε C→DaB | ca D→dD |ε E→gAf | c
(1) 計算該文法的每一個非終結符的FIRST集和FOLLOW集; (2)
是
二、設={0,1}上的正規集S由倒數第二個字符為1的所有字符串組成,請給出該字集對應的正規式,并構造一個識別該正規集的DFA。(8分)
答:
構造相應的正規式:(0|1)*1(0|1) (3分) NFA: (2分)
1
編譯原理期末總結 [篇4]
第一章 引論
為什么要用編譯器
與編譯器相關的程序
翻譯步驟
編譯器中的主要數據結構
1、語言處理器
1、簡單的說,一個編譯器就是一個程序,它可以閱讀以某一種語言(源語言)編寫的程序,并把該程序翻譯成一個等價的、用另一種語言(目標語言)編寫的程序。
2、編譯器的重要任務之一就是報告它在翻譯過程中發現的源程序中的錯誤。
3、使用編譯器是為了提高編程的速度和準確度。
4、與編譯器相關的程序:解釋程序(interpreter)、匯編程序(assembler)、連接程序(linker)、裝入程序(loader)、預處理器(preprocessor)、編輯器(editor)、調試程序(debugger)、描述器(profiler)、項目管理程序(project manager)。
5、解釋器是另一種常見的語言處理器。它并不通過翻譯的方法生成目標程序。從用戶的角度來看,解釋器直接利用用戶提供的輸入執行源程序中指定的操作。
Object Source
Program
Output
6、一個源程序可能被分割成多個模塊,并存放于獨立的文件中。把源程序聚合在一起的任務有時會由一個被稱為預處理器(preprocessor)的程序獨立完成。預處理器還負責把那些稱為宏的縮寫形式轉換為源語言的語句。
7、連接器(linker)能夠解決外部內存地址的問題。
8、加載器(loader)把所有的可執行目標文件放到內存中執行。
2、一個編譯器的結構
Front end Back end
1、將編譯器看成黑盒,則源程序映射為在語義上等價的目標程序,而這個映射由兩部分組成:分析部分和綜合部分。
2、分析部分把源程序分解成多個組成要素,并在這些要素之上加上語法結構。
3、綜合部分根據中間表示和符號表中的信息來構造用戶期待的目標程序。
4、編譯器的第一個步驟:詞法分析(lexical)或掃描(scanning)。詞法分析器讀入組成源程序的字符流,并且將它們組成有意義的詞素(lexeme)的序列。詞法分析器產生詞法單元(token)。
5、分隔詞素的空格會被詞法分析器忽略掉。
6、編譯器的第二個步驟:語法分析(syntax)或解析(parsing)。語法分析器使用由詞法分析器生成的各個詞法單元的第一個分量來創建樹形的中間表示。
7、語義分析(static semantic analysis):語義分析器使用語法樹和符號表中的信息來檢查源程序是否和語言定義的語義一致。它同時也收集類型信息,并把這些信息存放在語法樹或符號表中,以便在隨后的中間代碼生成過程中使用。語義分析的一個重要部分是類型檢查(type checking)。編譯器檢查每個運算符是否具有匹配的運算分量。
8、總的說,編譯器的翻譯步驟是:掃描程序----語法分析程序----語義分析程序----源代碼優化程序----代碼生成器----目標代碼優化程序。
3、編譯器結構中的主要數據結構
1、記號(token)
2、語法樹(syntax tree)
3、符號表(symbol table)
4、常數表(literal table)
5、中間代碼(intermediate code)
6、臨時文件(temporary file)
4、將編譯器分成了只依賴于源語言(前端( front end))的操作和只依賴于目 標語言(后端( back end))的操作兩部分。
第二章 詞法分析
掃描處理
正則表達式
有窮自動機
從正則表達式到D FA
利用L e x自動生成掃描程序
1、 Tokens記號標記:identifiers、keywords、integers、floating-point、symbols、strings、comments
1、 使用正則表達式去描述程序語言tokens
2、 一個正則表達式是歸納確定
3、 一個正則表達式R描述一組字符串集合L(R)
4、 L(R) = the language defined by R
5、 所有的token都能用正則表達式表示
2、 正則表達式:
1、 基本正則表達式:他們是字母比哦啊中的單個字符且自身匹配
2、 正則表達式運算:
1、 從各選擇對象中選擇,用元字符“|”表示
2、 連結,由并置表示(不用元字符)
3、 重復或“閉包”,由元字符“*”表示
3、從各選擇對象中選擇:
4、連結:正則表達式r和正則表達式s的連接可寫作rs
5、重復:正則表達式的重復有時稱為Kleene閉包((Kleene)closure),寫作r*
6、運算的優先和括號的使用:前面的內容忽略了選擇、連接和重復的優先問題。
7、正則表達式的名字:為較長的正則表達式提供一個簡化了的名字很有用處,這樣就不再需要在每次使用正則表達式時書寫常常的表達式本身了。
3、有窮自動機(有窮狀態機):是描述(或“機器”)特定類型算法的數學方法。
1、確定性有窮自動機:下一個狀態由當前狀態和當前輸入字符惟一給出的自動機。
2、非確定性有窮自動機:由它產生的。
4、從正則表達式到DFA
1、構造一個個掃描程序的自動過程可分為3步
2、從正則表達式到
NFA
3、從NFA到
DFA
4、將DFA中的狀態最小化
第三章 上下文無關文法及分析
分析過程
上下文無關文法
上下文無關語言的形式特性
分析樹與抽象語法樹
二義性
1、分析過程:
2、上下文無關文法:
3、分析樹與抽象語法樹:
4、二義性:
可生成帶有兩個不同分析樹的串的文法稱作二義性文法( ambiguous grammar) 有兩個解決二義性的基本方法。
其一是:設置一個規則,該規則可在每個二義性情況下指出哪一個分析樹(或語法樹)是正確的。
另一種方法是將文法改變成一個強制正確分析樹的構造的格式,這樣就可以解決二義性了。
第四章 自頂向下的分析
使用遞歸下降分析算法進行自頂向下的分析
LL(1)分析
First 集合和F o l l o w集合
1、使用遞歸下降分析算法進行自頂向下的分析
2、LL(1) 分析方法是這樣得名的:第1個“L”指的是由左向右地處理輸入(一些舊式的分析程序慣于自右向左地處理輸入,但現在已不常用了)。第2個“L”指的是它為輸入串描繪出一個最左推導。括號中的數字1意味著它僅使用輸入中的一個符號來預測分析的方向。
3、定義:如果文法G相關的L L ( 1 )分析表的每個項目中至多只有一個產生式,則該文法 就是L L ( 1 )文法(LL(1) grammar)。
【編譯原理期末總結】相關文章:
編譯原理學結05-31
編譯原理課程的設計心得體會06-20
編譯原理課程設計的心得體會06-20
C語言編譯過程總結詳解04-14
最新C語言編譯過程總結詳解04-30
美學原理期末考試答案01-25
2015城市規劃原理期末試題08-25
C語言條件編譯10-31
C語言的編碼編譯04-14