編譯器是如何工作的?
解釋編譯器如何工作不是一件容易的事,最好的方法是用一個例項進行說明:
編譯器是這樣一個電腦程式,它把用高階程式語言編寫的原始碼,轉化成低階語言。
最基本地,一個編譯器由以下幾個階段組成:詞法分析、語法分析、語義分析、IR(中間程式碼,intermediate Representation)產生、IR優化、程式碼產生、最終優化。
現在,看一個例子:
以下就是各個步驟的詳細分析。
1.詞法分析
把一個程式轉換成序列的符號。
2.語法分析
恢復上面掃描得到的序列符號描述的結構。
3.語義分析
保證程式的定義是明確的。
4.IR產生
5.IR 優化
6.程式碼產生
7.最終優化
我在想,應該畫一個可以清晰地表達編譯器是如何工作的圖解。然而,我發現在《龍書》(譯註:《龍書》就是《編譯原理》(Compilers—Principles, Techniques and Tools),名字源於書的封皮有一條吐火的龍)的圖非常好,那就不需要自己動手了。
我仍然想自己做一個可以從頭到尾編譯一個簡單函式的小編譯器,我會做一些調研,並可能找到一種清晰展示的方法。
譯者注:以上各個步驟介紹比較簡單,推薦閱讀這篇。
參考:1、史丹佛編譯器課程。2、龍書
原文連結: programm creek 翻譯: 伯樂線上 - 乾龍
相關文章
- Python是如何編譯執行的Python編譯
- 【譯】Arc 在 Rust 中是如何工作的Rust
- 代理伺服器是如何工作的?伺服器
- [譯] 我是如何找到谷歌 UX 設計工作的谷歌UX
- [譯] JavaScript 是如何工作的:Web 推送通知的機制JavaScriptWeb
- python的描述符(器)是如何工作的?Python
- 編譯器的自展和自舉、交叉編譯編譯
- 淺談彙編器、編譯器和直譯器編譯
- babel是如何編譯es6 class和extends的Babel編譯
- vue編譯器Vue編譯
- CUDAFORTRAN編譯器編譯
- [譯] JavaScript 是如何工作的:深入網路層 + 如何優化效能和安全JavaScript優化
- ES6 系列之 Babel 是如何編譯 Class 的(上)Babel編譯
- ES6 系列之 Babel 是如何編譯 Class 的(下)Babel編譯
- ES6系列之Babel是如何編譯Class的(上)Babel編譯
- 動畫: 一個瀏覽器是如何工作的?動畫瀏覽器
- Linux 下如何繞過編譯器優化Linux編譯優化
- CDN是如何工作的?
- Javascript是如何工作的JavaScript
- instanceof 是如何工作的
- DNS是如何工作的?DNS
- Cucumber是如何工作的?
- Go編譯器簡介【譯】Go編譯
- python如何編譯Python編譯
- [bazel]-如何編譯編譯
- 程式碼線上編譯器(上)- 編輯及編譯編譯
- JavaScript 是如何工作:Shadow DOM 的內部結構 + 如何編寫獨立的元件!JavaScript元件
- [譯] JavaScript 是如何工作的:Service Worker 的生命週期與使用場景JavaScript
- 【譯】如何更好的編寫CSSCSS
- 如何提高 Xcode 的編譯速度XCode編譯
- [譯] Virtual Dom 和 Diff 演算法在 React 中是如何工作的?演算法React
- CSS預編譯器CSS編譯
- 恆訊科技分析:雲伺服器是如何工作的?伺服器
- 什麼是Linux包管理器,它是如何工作的?Linux
- 【譯】瀏覽器如何工作:在現代web瀏覽器場景的之下瀏覽器Web
- 如何讓Java編譯器幫你寫程式碼Java編譯
- 如何製作一款線上編譯器編譯
- [譯] JavaScript 是如何工作的:CSS 和 JS 動畫背後的原理 + 如何優化效能JavaScriptCSSJS動畫優化
- GCC編譯器背後的故事GC編譯