對於傳統編譯語言,程序中一段源代碼在執行前會經歷三個步驟(統稱爲「編譯」):javascript
分詞/詞法分析就是將程序代碼分解成對編程語言來講有意義的代碼塊,這些代碼塊被稱爲詞法單元(token)。java
咱們直接舉例子說明:編程
var a = 2;
這段程序通過詞法分析後會被分解成下面這些詞法單元:var、a、=、二、;
segmentfault
空格是否被看成詞法單元,取決於空格在這門語言中是否具備意義
解析/語法分析就是將詞法單元流(數組)轉換爲一個由元素逐級嵌套所組成的表明了程序語法結構的樹——抽象語法樹(Abstract Syntax Tree, AST)。數組
咱們來看一下 var a = 2;
通過語法分析後生成的AST是什麼樣子的:編程語言
從上面的截圖中,能夠看到這段程序的類型是 VariableDeclaration,也就是說這段代碼是用來聲明變量的。ide
AST 相關的知識本人也正在學習中,因此文章中不會對 AST 進行詳細解釋,後續會發表相關文章。若是想了解 AST,請查看 AST對象文檔
若是想了解如何查看一段代碼的 AST,請參考 AST抽象語法樹——最基礎的javascript重點知識,99%的人根本不瞭解
代碼生成就是將AST轉換爲可執行代碼(機器指令)的過程。這個過程與語言、目標平臺等息息相關。學習
參考文章:
1.《你不知道的JavaScript 上卷》
2. AST抽象語法樹——最基礎的javascript重點知識,99%的人根本不瞭解