我需要向 JavaScript 源代码中添加一些轻量级语法,并使用基于 JavaScript 的构建系统处理它。有没有用 JavaScript 编写的开源 JavaScript 解析器?当它们运行在 V8或类似的高性能 JavaScript 实现上时,它们的速度是否合理?
谢谢你提供的任何建议!
它本身不是一个 JavaScript 解析器,但是有一个名为 Jison的项目(比如 Bison) ,用于生成用 JS 编写的解析器。
我所见过的唯一用 JavaScript 实现的 元循环解释器元循环解释器是 水仙花引擎。
它也是由 Brendan Eich 开发的,他们使用了很多特定于 蜘蛛猴的非标准扩展,我认为它不会在 V8上工作。
新月食品在评论中回答了这个问题:
JSLint 包含一个用 JavaScript 编写的 JavaScript 解析器。请参见 道格拉斯·克罗克福特第2712行左右开始解析器。编写 JSLint 也是为了处理 html,因此您必须掩盖这些部分
UglifyJS (JavaScript 中的 JS 压缩器/美化器)包含一个完整的 JavaScript 解析器,它公开了一个简单的 API。它经过了大量的测试,并在一些大型项目中使用(WebKit)。
JS/CC-用 JavaScript-http://jscc.phorward-software.com/编写的 JavaScript 的 LALR (1)解析器和词法分析器生成器
Javascript 中的 最快的 Javascript 解析器是 Esprima。
它也给你
适用于抽象语法树(AST)的格式,与 Mozilla 解析器 API 兼容
Https://developer.mozilla.org/en-us/docs/spidermonkey/parser_api
最近构建的独立 SpiderMonkey shell 包括 SpiderMonkey 解析器的反射,以 JavaScript 形式提供 空气污染指数。
注意,这只是 JavaScript 中的一个 API,解析器是 C + + 。
Microsoft 已经用 TypeScript 开发了 TypeScript 编译器。由于 TypeScript 是 JavaScript 的严格超集,并且 TypeScript 可以编译成 JavaScript,所以最终的编译器在技术上是用 JavaScript 编写的 JavaScript 编译器。
这当然取决于你对“编译器”的定义。但是,如果一个编译器接受语言 A 的超集不是一个语言 A 的编译器,这排除了 GCC,Clang 和几乎所有其他编译器。
Acorn 是一个用 JavaScript 编写的非常快速的 JavaScript 解析器。现在甚至比 Esprima还快。我在 Chrome 浏览器中得到的结果是 Eprima 的速度对比页面:
Source Esprima UglifyJS2 Traceur Acorn Underscore 1.4.1 15.1 23.8 14.2 7.6 Backbone 1.0.0 17.1 30.2 16.7 7.9 jQuery 1.9.1 241.1 247.2 125.4 81.4 Total 273.3 ms 301.2 ms 156.3 ms 96.9 ms
它与 Mozilla 的 ParserAPI 兼容,因此可以使用 Escodegen从解析树生成 JavaScript。