一門語言的執(zhí)行,大致經(jīng)歷下面這些過程:詞法分析 -- 語法分析 -- 語義分析 -- 中間代碼生成 -- 優(yōu)化代碼 -- 代碼生成。
在Javascript中,Syntax Parser的作用是進行詞法分析和語法分析。
A program that reads your code and determines what it does and if its grammar is valid.
詞法分析挨個字符地掃描代碼,把關(guān)鍵token識別出來。語法分析利用詞法分析的結(jié)果建立上下文關(guān)系語法樹 Abstract Syntax Tree (AST)。一般情況下,我們不會直接和語法樹打交道,但會在進行Uglify代碼壓縮、IDE語法高亮、Babel重編譯、關(guān)鍵字匹配和作用域判斷時間接涉及到。
var AST = "is Tree";
傳統(tǒng)的Javascript引擎直接根據(jù)語法樹的的結(jié)果進行解釋執(zhí)行,導(dǎo)致效率比C/C++較為低下。一些最新的Javascript引擎(如V8),會將部分Javascript代碼編譯成為目標(biāo)代碼以提高執(zhí)行效率。
介紹幾個Javascript的Syntax Parser
Reference