摘要:語(yǔ)法分析利用詞法分析的結(jié)果建立上下文關(guān)系語(yǔ)法樹(shù)。一般情況下,我們不會(huì)直接和語(yǔ)法樹(shù)打交道,但會(huì)在進(jìn)行代碼壓縮語(yǔ)法高亮重編譯關(guān)鍵字匹配和作用域判斷時(shí)間接涉及到。傳統(tǒng)的引擎直接根據(jù)語(yǔ)法樹(shù)的的結(jié)果進(jìn)行解釋執(zhí)行,導(dǎo)致效率比較為低下。
一門(mén)語(yǔ)言的執(zhí)行,大致經(jīng)歷下面這些過(guò)程:詞法分析 -- 語(yǔ)法分析 -- 語(yǔ)義分析 -- 中間代碼生成 -- 優(yōu)化代碼 -- 代碼生成。
在Javascript中,Syntax Parser的作用是進(jìn)行詞法分析和語(yǔ)法分析。
A program that reads your code and determines what it does and if its grammar is valid.
詞法分析挨個(gè)字符地掃描代碼,把關(guān)鍵token識(shí)別出來(lái)。語(yǔ)法分析利用詞法分析的結(jié)果建立上下文關(guān)系語(yǔ)法樹(shù) Abstract Syntax Tree (AST)。一般情況下,我們不會(huì)直接和語(yǔ)法樹(shù)打交道,但會(huì)在進(jìn)行Uglify代碼壓縮、IDE語(yǔ)法高亮、Babel重編譯、關(guān)鍵字匹配和作用域判斷時(shí)間接涉及到。
var AST = "is Tree";
傳統(tǒng)的Javascript引擎直接根據(jù)語(yǔ)法樹(shù)的的結(jié)果進(jìn)行解釋執(zhí)行,導(dǎo)致效率比C/C++較為低下。一些最新的Javascript引擎(如V8),會(huì)將部分Javascript代碼編譯成為目標(biāo)代碼以提高執(zhí)行效率。
介紹幾個(gè)Javascript的Syntax Parser
esprima
acorn
Reference
javascript-ast-tutorial
javascript-syntax-tree
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/91199.html
摘要:的這種實(shí)現(xiàn)方式導(dǎo)致了一些尷尬問(wèn)題,比如刪除元素元素遍歷。后面的參數(shù)被忽略掉了,表示并沒(méi)有要插入的元素。其實(shí),的本質(zhì)是跟蹤中的,并始終保持值是。這時(shí)候,雖然不大可能,可能會(huì)在中間某個(gè)中被用戶重新定義。但是在上進(jìn)行這種操作是很糟糕的。 在Javascript中,array是一個(gè)類數(shù)組的object。顧名思義,它能夠在一個(gè)變量上存儲(chǔ)多個(gè)值。 數(shù)組是值的有序集合。每個(gè)值叫做一個(gè)元素,而每個(gè)元素...
摘要:經(jīng)過(guò)連續(xù)幾期的介紹,手寫(xiě)編譯器系列進(jìn)入了智能提示模塊,前幾期從詞法到文法語(yǔ)法,再到構(gòu)造語(yǔ)法樹(shù),錯(cuò)誤提示等等,都是為智能提示做準(zhǔn)備。 1 引言 詞法、語(yǔ)法、語(yǔ)義分析概念都屬于編譯原理的前端領(lǐng)域,而這次的目的是做 具備完善語(yǔ)法提示的 SQL 編輯器,只需用到編譯原理的前端部分。 經(jīng)過(guò)連續(xù)幾期的介紹,《手寫(xiě) SQL 編譯器》系列進(jìn)入了 智能提示 模塊,前幾期從 詞法到文法、語(yǔ)法,再到構(gòu)造語(yǔ)法...
摘要:引言是一個(gè)版語(yǔ)法解析器生成器,具有分詞語(yǔ)法樹(shù)解析的能力。實(shí)現(xiàn)函數(shù)用鏈表設(shè)計(jì)函數(shù)是最佳的選擇,我們要模擬調(diào)用棧了。但光標(biāo)所在的位置是期望輸入點(diǎn),這個(gè)輸入點(diǎn)也應(yīng)該參與語(yǔ)法樹(shù)的生成,而錯(cuò)誤提示不包含光標(biāo),所以我們要執(zhí)行兩次。 1. 引言 syntax-parser 是一個(gè) JS 版語(yǔ)法解析器生成器,具有分詞、語(yǔ)法樹(shù)解析的能力。 通過(guò)兩個(gè)例子介紹它的功能。 第一個(gè)例子是創(chuàng)建一個(gè)詞法解析器 my...
摘要:值傳遞引用傳遞是值傳遞,是引用傳遞。但這影響會(huì)根據(jù)父類是屬于還是而有微妙差別。我們?cè)O(shè)想有一個(gè)父類,和兩個(gè)繼承了他的子類和。這時(shí),子類修改該不會(huì)影響到父類本身,更不會(huì)傳遞到其他子類上。 Javascript有兩種基本數(shù)據(jù)類型,Primitive和Object。Object是properties的聚合,其property可以是Object也可以是Primitive。Primitive只有v...
閱讀 2516·2021-11-15 11:36
閱讀 1260·2019-08-30 15:56
閱讀 2313·2019-08-30 15:53
閱讀 1104·2019-08-30 15:44
閱讀 715·2019-08-30 14:13
閱讀 1052·2019-08-30 10:58
閱讀 542·2019-08-29 15:35
閱讀 1370·2019-08-29 13:58