- C語言開發從入門到精通
- 王長青 韓海玲
- 1644字
- 2019-01-05 01:01:01
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 成功提示
- Mobile Application Development:JavaScript Frameworks
- 解構產品經理:互聯網產品策劃入門寶典
- Go語言高效編程:原理、可觀測性與優化
- Implementing Cisco Networking Solutions
- concrete5 Cookbook
- Hands-On Swift 5 Microservices Development
- VMware虛擬化技術
- Mastering Data Mining with Python:Find patterns hidden in your data
- Node Cookbook(Second Edition)
- 時空數據建模及其應用
- Visual Studio Code 權威指南
- Xcode 6 Essentials
- QPanda量子計算編程
- 零基礎輕松學C++:青少年趣味編程(全彩版)
- Mastering VMware vSphere Storage