官术网_书友最值得收藏!

1.3 理解編譯系統——學習的第一步

知識點講解:光盤:視頻\PPT講解(知識點)\第1章\理解編譯系統.mp4

C語言是一門DOS環境下的開發語言,在執行前需要先將其編譯,才能正確運行執行結果。要想真正理解編譯系統的原理,重要的是要理解何謂“編譯”。編譯是一個過程,通過這個過程可以把高級語言變成計算機可以識別的二進制語言。計算機只認識1和0格式的二進制數據,編譯程序可以把人們熟悉的語言換成二進制的形式。

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

(1)詞法分析。

(2)語法分析。

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

(4)代碼優化。

(5)目標代碼生成。

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

圖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所示。

圖1-2 成功提示

主站蜘蛛池模板: 大港区| 南丰县| 尼木县| 普洱| 新乐市| 穆棱市| 个旧市| 宝鸡市| 双柏县| 密云县| 隆昌县| 东阿县| 永修县| 衡东县| 铁岭市| 涪陵区| 永兴县| 邵阳县| 阜城县| 永善县| 张家界市| 双柏县| 枞阳县| 中江县| 金川县| 集贤县| 买车| 女性| 定结县| 阿克陶县| 小金县| 克东县| 郓城县| 九寨沟县| 长顺县| 宝丰县| 阿克| 马关县| 正宁县| 始兴县| 台安县|