1. 一個典型的編譯程序通常由哪些部分組成各部分的主要功能是什麼
通常由七個部分組成。分別是:詞法分析、語法分析、語義分析和中間代碼生成、優化、目標代碼生成以及表格和表格管理、出錯處理。
各自功能是:
1.詞法分析:輸入源程序,對構成源程序的字元串進行掃描和分解,識別出一個個單詞(也稱單詞符號,或簡稱符號)。在詞法分析階段工作所依循的是語言的詞法規則;描述詞法規則的有效工具是正規式和有限自動機。
2.語法分析:在詞法分析的基礎上,根據語言的語法規則,把單詞符號串組成各類語法單位。具體的說,語法分析是在單詞流的基礎上建立一個層次結構——建立語法樹。
3.語義分析和中間代碼生成:語義分析利用語法分析階段確定的層次結構來識別表達式和語句中的操作信息及類型信息;中間代碼生成階段將產生的源程序的一個顯式中間表示,這種中間表示可以看成是某種抽象程序,通常是與平台無關的,(可用三地址碼和四元式表示)。
4.優化:試圖改進中間代碼,以產生執行速度較快的機器代碼。
5.目標代碼生成:生成可重定位的機器代碼或匯編代碼。
6.表格和表格管理:編譯程序在工作過程中需要保持一系列的表格,以登記源程序的各類信息和編譯各階段的進展情況。
7.出錯處理:編譯程序對源程序中的錯誤進行處理,應最大限度地發現源程序中的各種錯誤,准確地指出錯誤的性質和發生錯誤的地點,並且將錯誤所造成的影響限制在盡可能小的范圍內,使得源程序的其餘部分能繼續被編譯下去,以便進一步發現其他可能的錯誤。通常編譯過程中每個階段都可能檢測出錯誤,其中,絕大多數數錯誤可以在編譯的前三階段檢測出來。且源程序中的錯誤通常分為語法錯誤和語義錯誤兩大類。出錯處理就是為了處理以上的錯誤情況。
2. 編譯程序包括哪幾個主要組成部分
編譯過程分為分析和綜合兩個部分,並進一步劃分為詞法分析、語法分析、語義分析、代碼優化、存儲分配和代碼生成等六個相繼的邏輯步驟。這六個步驟只表示編譯程序各部分之間的邏輯聯系,而不是時間關系。
編譯過程既可以按照這六個邏輯步驟順序地執行,也可以按照平行互鎖方式去執行。在確定編譯程序的具體結構時,常常分若干遍實現。對於源程序或中間語言程序,從頭到尾掃視一次並實現所規定的工作稱作一遍。每一遍可以完成一個或相連幾個邏輯步驟的工作。
(2)一個編譯器包括幾個部分擴展閱讀:
對於c編譯程序來說,其語言的特點如下:
1、c語言是一種結構化語言。它層次清晰,便於按模塊化方式組織程序,易於調試和維護,而且表現能力和處理能力極強。
2、c語言具有豐富的運算符和數據類型,便於實現各類復雜的數據結構。它還可以直接訪問內存的物理地址,進行位(bit)一級的操作。
3、由於c語言實現了對硬體的編程操作,因此集高級語言和低級語言的功能於一體。它既可用於系統軟體的開發,也適合於應用軟體的開發。
4、此外,c語言還具有效率高、可移植性強等特點。因此它廣泛地移植到了各類各型計算機上,從而形成了多種版本。
3. 一個編譯器至少包含三個部分的進程是哪三個
進程是操作系統中的一個核心概念.其概念至今未有嚴格的公認的定義.一般的講,進程是一個具有一定獨立功能的程序關於某個數據集合的一次運行活動.
其基本狀態有3種,即ready(就緒),running(運行),wait(等待).
1 死鎖是指,在兩個或多個並發進程中,如果每個進程持有某種資源而又都等待別的進程釋放它們現在保持著的資源,否則就不能向前推進.此時,每個進程都佔用了一定的資源但是又不能向前推進,稱這一組進程產生了死鎖。 通俗的講,就是兩個或多個進程無止境的等候著永遠不會成立的條件的一種系統狀態.
產生死鎖的根本原因是系統能夠提供的資源個數比要求該資源的進程數少.其具體原因是1系統資源不足2進程推進順序非法.
4. 典型的編譯器可以劃分成幾個主要的邏輯階段
這是我們今天的作業,
典型的編譯器可以劃分成七個主要的邏輯階段,分別是詞法分析器、語法分析器、語義分析器、中間代碼生成器、獨立於機器的代碼優化器、代碼生成器、依賴於機器的代碼優化器。各階段的主要功能:
(1)詞法分析器:詞法分析閱讀構成源程序的字元流,按編程語言的詞法規則把它們組成詞法記號流。
(2)語法分析器:按編程語言的語法規則檢查詞法分析輸出的記號流是否符合這些規則,並依據這些規則所體現出的該語言的各種語言構造的層次性,用各記號的第一元建成一種樹形的中間表示,這個中間表示用抽象語法的方式描繪了該記號流的語法情況。
(3)語義分析器:使用語法樹和符號表中的信息,依據語言定義來檢查源程序的語義一致性,以保證程序各部分能有意義地結合在一起。它還收集類型信息,把它們保存在符號表或語法樹中。
(4)中間代碼生成器:為源程序產生更低級的顯示中間表示,可以認為這種中間表示是一種抽象機的程序。
(5)獨立於機器的代碼優化器:試圖改進中間代碼,以便產生較好的目標代碼。通常,較好是指執行較快,但也可能是其他目標,如目標代碼較短或目標代碼執行時能耗較低。
(6)代碼生成器:取源程序的一種中間表示作為輸入並把它映射到一種目標語言。如果目標語言是機器代碼,則需要為源程序所用的變數選擇寄存器或內存單元,然後把中間指令序列翻譯為完成同樣任務的機器指令序列。
(7)依賴於機器的代碼優化器:試圖改進目標機器代碼,以便產生較好的目標機器代碼。
5. 編譯器的邏輯階段可以怎樣分組
編譯器的邏輯階段通常可以分為以下幾個部分:
詞法分析(Lexical Analysis):將源代碼轉換為單詞序列,也稱為詞法單元或記號。詞法分析器將源代碼字元流掃描,邊掃描邊識別記號,然後將這些記號作為輸出傳遞給下一個階段。識別出的詞法單元通常是關鍵字、標識符、運算符、界符、常量等。
語法分析(Syntax Analysis):將單詞序列轉換為語法分析樹,也稱為語法樹。語法分析器通過詞法分析器輸出的記號序列構建出語法樹,檢查代碼是否符合語法規則。如果發現不符合語法規則的語句,會生成一個錯誤消息。
語義分析(Semantic Analysis):對語法樹進行語義檢查。語義分析器會檢查語法樹中的語法單元是否符合語義規則,例如變數是否已聲明,數據類型是否匹配,函數參數是否正確等。如果發現不符合語義規則的語句,會生成一個錯誤消息。
中間代碼生成(Intermediate Code Generation):將語法樹轉換為中間代碼。中間代碼是一種與源代碼無關的代碼形式,通常使用一種類似於匯編語言的中間表示形式如伍蠢。
代碼優化(Code Optimization):對中間代碼進行優化,以提高程序的性能和效率。代碼優化器會應用一些優化技術,例如常量折疊、死代碼消除、循環展開等。
目標代碼生成(Code Generation):將中間代碼橘配轉換為機器碼或目標代碼。代碼生成器會將中間代碼轉換為目標機器的機器碼或匯編代碼,以便可執行程序的生成。
符號表管理(Symbol Table Management):維護變數、函數等符號的信息。符號表管理器會記錄符號的類型、作用域、存儲位置等信息,並提供符號的查找、插入、刪除等操作。
以上是編譯器的典型邏輯階段,不同的編譯器可能會渣陪有所不同,但通常都會包含以上階段的一部分或全部。
6. 編譯系統通常由哪幾個部分組成
一般說來,編譯程序主要由詞法分析程序、語法分析程序、語義分析程序、中間代碼生成程序、代碼優化程序、目標代碼生成程序、信息表管理程序、錯誤檢查處理程序組成。
7. 編譯器程序的組成部分分別是什麼
編譯器是由詞法分析器,語法分析器,語義分析器,中間代碼生成,代碼優化和目標代碼生成。謝謝。
8. 編譯器的組成及各部分的功能及作用
1. 詞法分析 詞法分析器根據詞法規則識別出源程序中的各個記號(token),每個記號代表一類單詞(lexeme)。源程序中常見的記號可以歸為幾大類:關鍵字、標識符、字面量和特殊符號。詞法分析器的輸入是源程序,輸出是識別的記號流。詞法分析器的任務是把源文件的字元流轉換成記號流。本質上它查看連續的字元然後把它們識別為「單詞」。 2. 語法分析 語法分析器根據語法規則識別出記號流中的結構(短語、句子),並構造一棵能夠正確反映該結構的語法樹。 3. 語義分析 語義分析器根據語義規則對語法樹中的語法單元進行靜態語義檢查,如果類型檢查和轉換等,其目的在於保證語法正確的結構在語義上也是合法的。 4. 中間代碼生成 中間代碼生成器根據語義分析器的輸出生成中間代碼。中間代碼可以有若干種形式,它們的共同特徵是與具體機器無關。最常用的一種中間代碼是三地址碼,它的一種實現方式是四元式。三地址碼的優點是便於閱讀、便於優化。 5. 中間代碼優化 優化是編譯器的一個重要組成部分,由於編譯器將源程序翻譯成中間代碼的工作是機械的、按固定模式進行的,因此,生成的中間代碼往往在時間和空間上有很大浪費。當需要生成高效目標代碼時,就必須進行優化。 6. 目標代碼生成 目標代碼生成是編譯器的最後一個階段。在生成目標代碼時要考慮以下幾個問題:計算機的系統結構、指令系統、寄存器的分配以及內存的組織等。編譯器生成的目標程序代碼可以有多種形式:匯編語言、可重定位二進制代碼、內存形式。 7 符號表管理 符號表的作用是記錄源程序中符號的必要信息,並加以合理組織,從而在編譯器的各個階段能對它們進行快速、准確的查找和操作。符號表中的某些內容甚至要保留到程序的運行階段。 8 出錯處理用戶編寫的源程序中往往會有一些錯誤,可分為靜態錯誤和動態錯誤兩類。所謂動態錯誤,是指源程序中的邏輯錯誤,它們發生在程序運行的時候,也被稱作動態語義錯誤,如變數取值為零時作為除數,數組元素引用時下標出界等。靜態錯誤又可分為語法錯誤和靜態語義錯誤。語法錯誤是指有關語言結構上的錯誤,如單詞拼寫錯、表達式中缺少操作數、begin和end不匹配等。靜態語義錯誤是指分析源程序時可以發現的語言意義上的錯誤,如加法的兩個操作數中一個是整型變數名,而另一個是數組名等。
9. 一個編譯器至少包含三個部分的進程是什麼
一個典型的編譯程序通常包含8個組成部分,它們是詞法分析程序、語法分析程序、語義分析程序、中間代碼生成程序、中間代碼優化程序、目標代碼生成程序、表格管理程序和錯誤處理程序。
(1) 編譯程序:如果源語言為高級語言,目標語言為某台計算機上的匯編語言或機器語
言,則此翻譯程序稱為編譯程序。
(2) 源程序:源語言編寫的程序稱為源程序。
(3) 目標程序:目標語言書寫的程序稱為目標程序。
(4) 編譯程序的前端:它由這樣一些階段組成:這些階段的工作主要依賴於源語言而與
目標機無關。通常前端包括詞法分析、語法分析、語義分析和中間代碼生成這些階
段,某些優化工作也可在前端做,也包括與前端每個階段相關的出錯處理工作和符
號表管理等工作。
(5) 後端:指那些依賴於目標機而一般不依賴源語言,只與中間代碼有關的那些階段,
即目標代碼生成,以及相關出錯處理和符號表操作。
(6) 遍:是對源程序或其等價的中間語言程序從頭到尾掃視並完成規定任務的過程。
詞法分析程序:輸人源程序,拼單詞、檢查單詞和分析單詞,輸出單詞的機內表達形式。
語法分析程序:檢查源程序中存在的形式語法錯誤,輸出錯誤處理信息。
語義分析程序:進行語義檢查和分析語義信息,並把分析的結果保存到各類語義信息表中。
中間代碼生成程序:按照語義規則,將語法分析程序分析出的語法單位轉換成一定形式的中間語言代碼,如三元式或四元式。
中間代碼優化程序:為了產生高質量的目標代碼,對中間代碼進行等價變換處理
10. 一個典型的編譯程序通常由哪些部分組成
1、詞法分析
詞法分析的任務是對由字元組成的單詞進行處理,從左至右逐個字元地對源程序進行掃描,產生一個個的單詞符號,把作為字元串的源程序改造成為單詞符號串的中間程序。執行詞法分析的程序稱為詞法分析程序或掃描器。
2、語法分析
編譯程序的語法分析器以單詞符號作為輸入,分析單詞符號串是否形成符合語法規則的語法單位,如表達式、賦值、循環等,最後看是否構成一個符合要求的程序,按該語言使用的語法規則分析檢查每條語句是否有正確的邏輯結構,程序是最終的一個語法單位。
3、中間代碼生成
中間代碼是源程序的一種內部表示,或稱中間語言。中間代碼的作用是可使編譯程序的結構在邏輯上更為簡單明確,特別是可使目標代碼的優化比較容易實現。中間代碼即為中間語言程序,中間語言的復雜性介於源程序語言和機器語言之間。
4、代碼優化
代碼優化是指對程序進行多種等價變換,使得從變換後的程序出發,能生成更有效的目標代碼。所謂等價,是指不改變程序的運行結果。所謂有效,主要指目標代碼運行時間較短,以及佔用的存儲空間較小。這種變換稱為優化。
5、目標代碼生成
目標代碼生成是編譯的最後一個階段。目標代碼生成器把語法分析後或優化後的中間代碼變換成目標代碼。
(10)一個編譯器包括幾個部分擴展閱讀:
編譯程序把用高級程序設計語言書寫的源程序,翻譯成等價的機器語言格式目標程序的翻譯程序。編譯程序屬於採用生成性實現途徑實現的翻譯程序。它以高級程序設計語言書寫的源程序作為輸入,而以匯編語言或機器語言表示的目標程序作為輸出。
編譯出的目標程序通常還要經歷運行階段,以便在運行程序的支持下運行,加工初始數據,算出所需的計算結果。
編譯程序的實現演算法較為復雜。這是因為它所翻譯的語句與目標語言的指令不是一一對應關系,而是一多對應關系;同時也因為它要處理遞歸調用、動態存儲分配、多種數據類型,以及語句間的緊密依賴關系。
但是,由於高級程序設計語言書寫的程序具有易讀、易移植和表達能力強等特點,編譯程序廣泛地用於翻譯規模較大、復雜性較高、且需要高效運行的高級語言書寫的源程序。