程序編譯結構
❶ 編譯過程可分為幾個階段
編譯程序把一個源程序翻譯成目標程序的工作過程分為五個階段:詞法分析;語法分析;中間代碼生成;代碼優化;目標代碼生成。
編譯程序一般分為詞法分析、語法分析、語義分析與中間代碼產生、代碼優化、目標代碼生成程序5個階段:
下面是對編譯過程的五個階段的詳解
對於編譯程序的工作,從輸入源程序開始到輸出目標程序為止的整個過程,是非常復雜的。但就其過程而言,它與人們進行自然語言直接的翻譯有許多相近之處。當我們把一種文字翻譯為另一種文字,例如把一段英文翻譯為中文時,通常需要經以下列幾個步驟:
(1)先要識別出句子中的一個個單詞;
(2)分析句子的語法結構;
(3)根據句子的含義進行初步翻譯;
(4)對譯文進行修飾;
(5)寫出最後的譯文。
類似地,我們可以把編譯程序的工作過程劃分為五個階段:詞法分析、語法分析、語義分析與中間代碼產生、優化和目標代碼生成。
第一階段:詞法分析
詞法分析的任務是:輸入源程序,對構成源程序的字元串進行掃描和分解,識別出一個個的單詞(亦稱單詞符號或簡稱符號),如基本字(begin、end、if、for、while),標識符、常數、運算符和界符(標點符號、左右括弧)。
單詞符號是語言的基本組成成分,是人們理解和編寫程序的基本要素。識別和理解這些要素無疑也是翻譯的基礎。如同將英文翻譯成中文的情形一樣,如果你對英語單詞不理解,那就談不上進行正確的翻譯。在詞法分析階段的工作中所依循的是語言的詞法規則(或稱構詞規則)。描述詞法規則的有效工具是正規式和有效自動機。
第二階段:語法分析
語法分析的任務是:在詞法分析的基礎上,根據語言的語法規則,把單詞符號串分解成各類語法單位(語法范疇),如「短語」、「句子」、「程序段」和「程序」等。通過語法分析,確定整個輸入串是否構成語法上正確的「程序」。語法分析所依循的是語言的語法規則。語法規則通常用上下文無關文法描述。詞法分析是一種線性分析,而語法分析是一種層次結構分析。例如:Z= X + 0168*Y;代表一個「賦值語句」,而其中的代表X + 0168*Y一個「算術表達式」。因而,語法分析的任務就是識別X + 0.618 * Y為算術表達式,同時,十倍上述整個符號串屬於賦值語句這個范疇。
第三階段:語義分析與中間代碼產生
這一階段的任務是:對語法分析所識別出的各類語法范疇,分析其含義,並進行初步翻譯(產生中間代碼)。這一階段通常包含兩個方面的工作。首先,對每種語法范疇進行語義i安插,例如,變數是否定義、類型是否正確等等。如果語義正確,則進行另一方面工作,即進行中間代碼的解釋。
這一階段所依循的是語言的語義規則。通常使用屬性文法描述語義規則。「翻譯」僅僅在這里才開始涉及到。所謂「中間代碼」是一種含義明確、便於處理的記號系統,它通常獨立於具體的硬體。這種記號系統或者與現代計算機的指令形式有某種程度的接近,或者能夠比較容易地把它變換成現代計算機的機器指令。
例如,許多編譯程序採用了一種與「三地址指令」非常近似的「四元式」作為中間代碼。它的意義是:對「左右操作數」進行某種運(由「算符」指明),把運算所得的值作為「結果」保留下來。在採用四元式作為中間代碼的情形下,中間代碼產生的任務就是按語言的語法規則把各類范疇翻譯成四元式序列。
一般而言,中間代碼是一種獨立於具體硬體的記號系統。常用的中間大媽,除了四元式之外,還有三元式、間接三元式、逆波蘭記號和樹形表示等等。
第四階段:代碼優化
優化的任務在於對前段產生的中間代碼進行加工變換,以期在最後階段能產生出更為高效(省時間和空間)的目標代碼。優化的主要方面有:公關子表達式的提取、循環優化、刪除無用代碼等等。有時,為了便於「並行運算」,還可以對代碼進行並行化處理。優化所依循的原則是程序的等價變換規則。
第五階段:目標代碼生成程序
這一階段的任務是:把中間代碼(或經優化處理之後)變換成特定機器上的低級語言代碼。這階段實現了最後的翻譯,它的工作有賴於硬體系統結構和機器指令含義。這階段工作非常復雜,設計到硬體系統功能部件的運用,機器指令的選擇,各種數據類型變數的存儲空間分配,以及寄存器和後援寄存器的調度,等等。
目標代碼的形式可以是絕對指令代碼或可重定位的指令代碼或匯編指令代碼。如目標代碼是絕對指令代碼,則這種目標代碼可立即執行。如果目標代碼是匯編指令代碼,則需匯編器匯編之後才行運行。必須指出,現在多數實用編譯程序所產生的目標代碼都是一種可重定位的指令代碼。這種目標代碼在運行前必須藉助於一個連接裝配程序把各個目標模塊(包括系統提供的庫函數)連接在一起,確定程序變數(或常數)在主存中的位置,裝入內存中指定的起始地址,使之成為一個可以運行的絕對指令代碼程序。
❷ 編譯程序是什麼意思編譯是什麼意思
編譯程序(Compiler,compiling program)也稱為編譯器,是指把用高級程序設計語言書寫的源程序,翻譯成等價的機器語言格式目標程序的翻譯程序。
解釋程序是一種語言處理程序,在詞法、語法和語義分析方面與編譯程序的工作原理基本相同,但在運行用戶程序時,它直接執行源程序或源程序的內部形式(中間代碼)。
(2)程序編譯結構擴展閱讀:
結構:
編譯過程分為分析和綜合兩個部分,並進一步劃分為詞法分析、語法分析、語義分析、代碼優化、存儲分配和代碼生成等六個相繼的邏輯步驟。這六個步驟只表示編譯程序各部分之間的邏輯聯系,而不是時間關系。
編譯過程既可以按照這六個邏輯步驟順序地執行,也可以按照平行互鎖方式去執行。在確定編譯程序的具體結構時,常常分若干遍實現。對於源程序或中間語言程序,從頭到尾掃視一次並實現所規定的工作稱作一遍。每一遍可以完成一個或相連幾個邏輯步驟的工作。
可以把詞法分析作為第一遍;語法分析和語義分析作為第二遍;代碼優化和存儲分配作為第三遍;代碼生成作為第四遍。反之,為了適應較小的存儲空間或提高目標程序質量,也可以把一個邏輯步驟的工作分為幾遍去執行。
❸ 編譯器有哪幾部分構成.編譯原理
1. 詞法分析
詞法分析器根據詞法規則識別出源程序
中的各個記號(token),每個記號代表一類單詞(lexeme)。源程序中常見的記號可以歸為幾大類:關鍵字、標識符、字面量和特殊符號。詞法分析器
的輸入是源程序,輸出是識別的記號流。詞法分析器的任務是把源文件的字元流轉換成記號流。本質上它查看連續的字元然後把它們識別為「單詞」。
2. 語法分析
語法分析器根據語法規則識別出記號流中的結構(短語、句子),並構造一棵能夠正確反映該結構的語法樹。
3. 語義分析
語義分析器根據語義規則對語法樹中的語法單元進行靜態語義檢查,如果類型檢查和轉換等,其目的在於保證語法正確的結構在語義上也是合法的。
4. 中間代碼生成
中間代碼生成器根據語義分析器的輸出生成中間代碼。中間代碼可以有若干種形式,它們的共同特徵是與具體機器無關。最常用的一種中間代碼是三地址碼,它的一種實現方式是四元式。三地址碼的優點是便於閱讀、便於優化。
❹ 編譯程序包括哪幾個主要組成部分
一個典型的編譯系統通常由多個組成部分構成,包括詞法分析程序、語法分析程序、語義分析程序、中間代碼生成程序、代碼優化程序、目標代碼生成程序、表格管理程序、出錯處理程序。這些程序共同協作,確保源代碼能夠被正確地轉換為目標代碼。
詞法分析程序負責從左到右地讀入源程序,對字元流進行掃描和分解,識別出一個個單詞。它的作用是將復雜的源代碼分解為更簡單的單元,為後續分析奠定基礎。
語法分析程序則在詞法分析的基礎上,將單詞序列分解成各類語法短語。這一過程確保了源代碼符合編譯語言的語法規則,進一步驗證了源代碼的結構正確性。
語義分析程序審查源程序有無語義錯誤,為代碼生成階段收集類型信息。它不僅檢查源代碼是否符合語法規則,還確保源代碼在邏輯上是正確的,為後續的代碼生成提供可靠的基礎。
中間代碼生成程序在語法分析和語義分析之後,將源程序轉換為一種內部表示形式,這種形式稱為中間語言或中間代碼。這種中間代碼有助於優化和轉換成目標代碼。
代碼優化程序對中間代碼進行變換或改造,使生成的目標代碼更加高效,節省時間和空間。這一過程旨在提高目標代碼的執行效率,確保程序能夠高效地運行。
目標代碼生成程序將中間代碼變換成特定機器上的絕對指令代碼或可重定位的指令代碼或匯編指令代碼。這一過程是編譯過程的最後一步,確保源代碼能夠在目標機器上正確執行。
表格管理程序在編譯程序工作過程中,需要保持一系列的表格,以登記源程序的各類信息和編譯各階段的進展情況。這些表格幫助編譯器追蹤程序的編譯過程,確保信息的准確性和完整性。
出錯處理程序在編譯過程中發現源程序有錯誤時,報告錯誤的性質和錯誤發生的地點。它還努力將錯誤造成的影響限制在盡可能小的范圍,使得源程序的其餘部分可以繼續被編譯下去。有些編譯程序甚至能夠自動校正錯誤,提高了編譯的效率和可靠性。
❺ 編譯程序有哪些主要構成成分它們各自的主要功能是什麼
編譯過程分為分析和綜合兩個部分,並進一步劃分為詞法分析、語法分析、語義分析、代碼優化、存儲分配和代碼生成等六個相繼的邏輯步驟。這六個步驟只表示編譯程序各部分之間的邏輯聯系,而不是時間關系。
編譯過程既可以按照這六個邏輯步驟順序地執行,也可以按照平行互鎖方式去執行。在確定編譯程序的具體結構時,常常分若干遍實現。對於源程序或中間語言程序,從頭到尾掃視一次並實現所規定的工作稱作一遍。每一遍可以完成一個或相連幾個邏輯步驟的工作。
例如,可以把詞法分析作為第一遍;語法分析和語義分析作為第二遍;代碼優化和存儲分配作為第三遍;代碼生成作為第四遍。
反之,為了適應較小的存儲空間或提高目標程序質量,也可以把一個邏輯步驟的工作分為幾遍去執行。例如,代碼優化可劃分為代碼優化准備工作和實際代碼優化兩遍進行。
(5)程序編譯結構擴展閱讀
從左至右逐個字元地對源程序進行掃描,產生一個個的單詞符號,把作為字元串的源程序改造成為單詞符號串的中間程序。執行詞法分析的程序稱為詞法分析程序或掃描器。
源程序中的單詞符號經掃描器分析,一般產生二元式:單詞種別;單詞自身的值。單詞種別通常用整數編碼,如果一個種別只含一個單詞符號,那麼對這個單詞符號,種別編碼就完全代表它自身的值了。若一個種別含有許多個單詞符號,那麼,對於它的每個單詞符號,除了給出種別編碼以外,還應給出自身的值。
詞法分析器一般來說有兩種方法構造:手工構造和自動生成。手工構造可使用狀態圖進行工作,自動生成使用確定的有限自動機來實現。
編譯程序的語法分析器以單詞符號作為輸入,分析單詞符號串是否形成符合語法規則的語法單位,如表達式、賦值、循環等,最後看是否構成一個符合要求的程序,按該語言使用的語法規則分析檢查每條語句是否有正確的邏輯結構,程序是最終的一個語法單位。編譯程序的語法規則可用上下文無關文法來刻畫。