2012-04-24 32 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