2012-04-24 51 views
4

Mozilla交付了an API for parsing a Javascript module生成abstract syntax tree。他們稱之爲Reflect.parse是否有與引擎無關的Reflect.parse?

在Javascript中是否有一個Reflect.parse或類似的東西寫成獨立模塊?我可以在任何ES5引擎上運行以生成語法樹?如果沒有一個C++中的獨立工具可以幫我做到這一點?還是服務?


我試圖doctorjs.org爲一個非常簡單的自我評估匿名函數,它窒息。我做錯了嗎?

(function (scope) { 
    .... 
}(this)); 
+0

順便說一句,*這*與範圍沒有任何關係。在上面的代碼片段中,變量* scope *將引用調用(匿名)函數的執行上下文的* this *對象,該函數在ES5嚴格模式下可以是任何對象,也可以是'null'或'undefined'。它似乎是全局代碼,所以* scope *將引用全局對象,因此會更好地命名爲* global *或* GLOBAL *或類似的(或者可能* window *,但假設類似瀏覽器的環境,這可能會不適合)。 – RobG 2012-04-24 05:15:14

+0

我知道,謝謝Rob。 – Cheeso 2012-04-24 05:18:16

回答

2

JS.js(JavaScript解釋Javascript編寫的),可能有一個JavaScript分析器作爲一個組成部分,但我不知道它是多麼容易得到訪問或從外面使用。

0

東西,我可以在任何ES5發動機運行產生語法樹? 失敗,是否有一個獨立的工具在C++中爲我做到這一點?

你可以得到源和構建的SpiderMonkey JavaScript的獨立外殼(在Mozilla的Firefox的JS引擎),這將有Reflect.parse內置的,所以你可以做一個小腳本包裝的SpiderMonkey的功能,這將是可用作工具。

4

嘗試Esprima(esprima.org),這是我幾個月前開始的一個項目。它的AST輸出與Mozilla Reflect.parse兼容,它幾乎可以在IE 6到Node.js的任何地方運行,解析器速度非常快(競爭對手中速度最快),單元測試(500+以上),代碼覆蓋率達到100% 。

Esprima符合ES5(包括嚴格模式),甚至還有支持ES6(和Harmony)功能的WIP。衆所周知,從標準庫(如jQuery)到百萬行Web應用程序代碼解析大量JavaScript,毫無問題。

+0

我現在正在嘗試,它工作得很好。 – Cheeso 2012-04-27 16:24:32