首頁 常見問題 正文
聚名企服

編譯過程中分哪幾個階段?

轉載 2021-12-20 16:05:54 7085
編譯過程可分為5個階段:1、詞法分析階段,該階段會對構成源程序的字符串進行掃描和分解,識別出一個個的單詞。2、語法分析階段,該階段用于分析句子的語法結構。3、語義分析與中間代碼產生階段。4、代碼優化階段。5、目標代碼生成程序階段。

編譯過程中分哪幾個階段?

編譯程序把一個源程序翻譯成目標程序的工作過程分為五個階段:詞法分析;語法分析;中間代碼生成;代碼優化;目標代碼生成。

編譯程序一般分為詞法分析、語法分析、語義分析與中間代碼產生、代碼優化、目標代碼生成程序5個階段:

編譯過程中分哪幾個階段?

下面是對編譯過程的五個階段的詳解

對于編譯程序的工作,從輸入源程序開始到輸出目標程序為止的整個過程,是非常復雜的。但就其過程而言,它與人們進行自然語言直接的翻譯有許多相近之處。當我們把一種文字翻譯為另一種文字,例如把一段英文翻譯為中文時,通常需要經以下列幾個步驟:

(1)先要識別出句子中的一個個單詞;

(2)分析句子的語法結構;

(3)根據句子的含義進行初步翻譯;

(4)對譯文進行修飾;

(5)寫出最后的譯文。

類似地,我們可以把編譯程序的工作過程劃分為五個階段:詞法分析、語法分析、語義分析與中間代碼產生、優化和目標代碼生成。

第一階段:詞法分析

詞法分析的任務是:輸入源程序,對構成源程序的字符串進行掃描和分解,識別出一個個的單詞(亦稱單詞符號或簡稱符號),如基本字(begin、end、if、for、while),標識符、常數、運算符和界符(標點符號、左右括號)。

單詞符號是語言的基本組成成分,是人們理解和編寫程序的基本要素。識別和理解這些要素無疑也是翻譯的基礎。如同將英文翻譯成中文的情形一樣,如果你對英語單詞不理解,那就談不上進行正確的翻譯。在詞法分析階段的工作中所依循的是語言的詞法規則(或稱構詞規則)。描述詞法規則的有效工具是正規式和有效自動機。

第二階段:語法分析

語法分析的任務是:在詞法分析的基礎上,根據語言的語法規則,把單詞符號串分解成各類語法單位(語法范疇),如“短語”、“句子”、“程序段”和“程序”等。通過語法分析,確定整個輸入串是否構成語法上正確的“程序”。語法分析所依循的是語言的語法規則。語法規則通常用上下文無關文法描述。詞法分析是一種線性分析,而語法分析是一種層次結構分析。例如:Z= X + 0168*Y;代表一個“賦值語句”,而其中的代表X + 0168*Y一個“算術表達式”。因而,語法分析的任務就是識別X + 0.618 * Y為算術表達式,同時,十倍上述整個符號串屬于賦值語句這個范疇。

第三階段:語義分析與中間代碼產生

這一階段的任務是:對語法分析所識別出的各類語法范疇,分析其含義,并進行初步翻譯(產生中間代碼)。這一階段通常包含兩個方面的工作。首先,對每種語法范疇進行語義i安插,例如,變量是否定義、類型是否正確等等。如果語義正確,則進行另一方面工作,即進行中間代碼的解釋。

這一階段所依循的是語言的語義規則。通常使用屬性文法描述語義規則。“翻譯”僅僅在這里才開始涉及到。所謂“中間代碼”是一種含義明確、便于處理的記號系統,它通常獨立于具體的硬件。這種記號系統或者與現代計算機的指令形式有某種程度的接近,或者能夠比較容易地把它變換成現代計算機的機器指令。

例如,許多編譯程序采用了一種與“三地址指令”非常近似的“四元式”作為中間代碼。它的意義是:對“左右操作數”進行某種運(由“算符”指明),把運算所得的值作為“結果”保留下來。在采用四元式作為中間代碼的情形下,中間代碼產生的任務就是按語言的語法規則把各類范疇翻譯成四元式序列。

一般而言,中間代碼是一種獨立于具體硬件的記號系統。常用的中間大媽,除了四元式之外,還有三元式、間接三元式、逆波蘭記號和樹形表示等等。

第四階段:代碼優化

優化的任務在于對前段產生的中間代碼進行加工變換,以期在最后階段能產生出更為高效(省時間和空間)的目標代碼。優化的主要方面有:公關子表達式的提取、循環優化、刪除無用代碼等等。有時,為了便于“并行運算”,還可以對代碼進行并行化處理。優化所依循的原則是程序的等價變換規則。

第五階段:目標代碼生成程序

這一階段的任務是:把中間代碼(或經優化處理之后)變換成特定機器上的低級語言代碼。這階段實現了最后的翻譯,它的工作有賴于硬件系統結構和機器指令含義。這階段工作非常復雜,設計到硬件系統功能部件的運用,機器指令的選擇,各種數據類型變量的存儲空間分配,以及寄存器和后援寄存器的調度,等等。

目標代碼的形式可以是絕對指令代碼或可重定位的指令代碼或匯編指令代碼。如目標代碼是絕對指令代碼,則這種目標代碼可立即執行。如果目標代碼是匯編指令代碼,則需匯編器匯編之后才行運行。必須指出,現在多數實用編譯程序所產生的目標代碼都是一種可重定位的指令代碼。這種目標代碼在運行前必須借助于一個連接裝配程序把各個目標模塊(包括系統提供的庫函數)連接在一起,確定程序變量(或常數)在主存中的位置,裝入內存中指定的起始地址,使之成為一個可以運行的絕對指令代碼程序。

聲明:本文轉載于:互聯網,如有侵犯,請聯系service@Juming.com刪除
相關標簽: 編譯

相關專題

編輯推薦

  • 域名注冊專題合集 域名注冊專題合集

  • 域名搶注專題合集 域名搶注專題合集

  • 企業建站專題合集 企業建站專題合集

主站蜘蛛池模板: 亚洲国产av无码精品| 亚洲中文字幕无码av永久| 国产AV无码专区亚洲AV琪琪 | 亚洲国产日产无码精品| 中文无码字幕中文有码字幕| 人妻少妇无码视频在线| 无码少妇一区二区三区浪潮AV| 在线精品免费视频无码的| 精品日韩亚洲AV无码| 国产啪亚洲国产精品无码| 久久AV高潮AV无码AV| 中文精品无码中文字幕无码专区| 精品久久久久久中文字幕无码 | av无码一区二区三区| 亚洲欧洲AV无码专区| 无码少妇一区二区性色AV| 亚洲一区二区三区无码中文字幕| 国产精品无码AV天天爽播放器| 久久国产精品无码HDAV| 久久久久亚洲AV片无码| 日韩成人无码中文字幕| 午夜精品久久久久久久无码| 人妻丰满熟AV无码区HD| 亚洲αⅴ无码乱码在线观看性色| 亚洲AV日韩AV永久无码久久| 13小箩利洗澡无码视频网站免费| 午夜无码中文字幕在线播放 | 中文字幕丰满伦子无码| 无码精品前田一区二区| 国产AV无码专区亚洲AV麻豆丫| 中文字幕av无码一二三区电影| 精品无码人妻一区二区三区 | 国产精品无码一本二本三本色| 亚洲性无码一区二区三区| 免费无码VA一区二区三区| 无码国产精成人午夜视频一区二区| 中文字幕无码第1页| 亚洲欧洲自拍拍偷午夜色无码| 亚洲VA成无码人在线观看天堂| 亚洲欧洲自拍拍偷午夜色无码| 人妻丰满熟妇AV无码区HD|