天天看點

《C語言開發從入門到精通》一1.3 了解編譯系統——學習的第一步

本節書摘來自異步社群《c語言開發從入門到精通》一書中的第1章,第1.3節,作者王長青 , 韓海玲,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

知識點講解:CD光牒:視訊ppt講解(知識點)第1章了解編譯系統.mp4

c語言是一門dos環境下的開發語言,在執行前需要先将其編譯,才能正确運作執行結果。要想真正了解編譯系統的原理,重要的是要了解何謂“編譯”。編譯是一個過程,通過這個過程可以把進階語言變成計算機可以識别的二進制語言。計算機隻認識1和0格式的二進制資料,編譯程式可以把人們熟悉的語言換成二進制的形式。

要想通過編譯把一個源程式翻譯成目标程式,所做的工作過程分為如下5個階段:

(1)詞法分析。

(2)文法分析。

(3)語義檢查中間代碼生成。

(4)代碼優化。

(5)目标代碼生成。

在上述過程中,最為主要的階段是進行詞法分析和文法分析,這又稱為源程式分析。如果在分析過程中發現有文法錯誤,會給出對應的提示資訊。具體編譯流程如圖1-1所示。

《C語言開發從入門到精通》一1.3 了解編譯系統——學習的第一步

圖1-1 編譯系統結構流程

接下來開始講解上述5個階段的具體過程。

1.詞法分析

詞法分析的任務是對由字元組成的單詞進行處理,從左至右逐個字元地對源程式進行掃描,産生一個個的單詞符号,把作為字元串的源程式改造成為單詞符号串的中間程式。執行詞法分析的程式稱為詞法分析程式或掃描器。

2.文法分析

編譯程式的文法分析器以單詞符号作為輸入,分析單詞符号串是否形成符合文法規則的文法機關,如表達式、指派、循環等,最後看是否構成一個符合要求的程式,按該語言使用的文法規則分析檢查每條語句是否有正确的邏輯結構,程式是最終的一個文法機關。編譯程式的文法規則可用上下文無關文法來刻畫。文法分析的方法有兩種。

自上而下分析法:從文法的開始符号出發,向下推導,推出句子。

自下而上分析法:使用移進歸約法,基本思想是用一個寄存符号的先進後出棧,把輸入符号一個一個地移進棧裡,當棧頂形成某個産生式的一個候選式時,即把棧頂的這一部分歸成該産生式的左鄰符号。

3.語義檢查中間代碼生成

中間代碼是源程式的一種内部表示,也稱為中間語言。中間代碼的作用是使編譯程式的結構在邏輯上更為簡單明确,特别是使目标代碼的優化更容易實作。中間代碼即為中間語言程式,中間語言的複雜性介于源程式語言和機器語言之間。中間語言有多種形式,其中最為常見的有4種:逆波蘭記号、四元式、三元式和樹。

4.代碼優化

代碼優化是指對程式進行多種等價變換,使得從變換後的程式出發,能生成更有效的目标代碼。所謂等價,是指不改變程式的運作結果。有效是指目标代碼運作時間較短,而且占用的存儲空間較小。這種變換稱為優化。

5.目标代碼生成

目标代碼生成是編譯的最後一個階段。通過目标代碼生成器,把文法分析後或優化後的中間代碼變換成目标代碼。

另外,還有下面兩個過程。

1.表格管理程式

編譯過程中源程式的各種資訊被保留在不同的表格中,編譯各階段的工作都涉及構造、查找或更新有關的表格。

2.出錯處理程式

如果編譯過程中發現源程式有錯誤,編譯程式将報告錯誤的性質和錯誤發生的地點,并且将錯誤所造成的影響限制在盡可能小的範圍内,使得源程式的其餘部分能繼續被編譯下去。有些編譯程式還能自動糾正錯誤,這些工作由錯誤處理程式完成。

了解了“編譯”過程後,整個編譯系統概念便一目了然。編譯系統就是按照編譯原理集合而成的一種機制,這種機制能夠實作對程式語言的上述處理。

系統編譯與釋出是在系統編碼之後執行的一項基本操作。編譯是用于生成可執行代碼,釋出是将編譯之後的可運作版本釋出到伺服器,以供使用者使用。在編譯過程中,編譯器将代碼翻譯成中間語言(msil)。運作時會将msil翻譯成cpu特定的指令,以便計算機上的處理器運作應用程式。應用程式通過編譯可以提高代碼的運作速度,增加代碼的安全性和穩定性。

因為c語言獨有的dos環境特性,是以,在編譯時會變得十分麻煩。但是幸好已經有多種編譯器工具,通過這些工具可以簡捷實作對c語言程式的編譯、運作和調試。例如通過專用的編譯器,可以對1.2節中的c語言代碼進行編譯和運作處理,假設使用turbo c進行編譯。

在turbo c中編寫上述代碼後,可以按下【f9】鍵進行編譯并連結,成功後彈出成功提示,如圖1-2所示。

80%

《C語言開發從入門到精通》一1.3 了解編譯系統——學習的第一步

圖1-2 成功提示

繼續閱讀