我需要在JavaScript源代码中添加一些轻量级的语法糖,并使用基于JavaScript的构建系统对其进行处理.有没有用JavaScript编写的开源JavaScript解析器?在V8或类似的高性能JavaScript实现上运行时,它们是否相当快?
感谢您提供的任何指示!
UglifyJS(JavaScript中的JS压缩器/美化器)包含一个完整的JavaScript解析器,它公开了一个简单的API.它经过了大量测试,并在一些大型项目中使用(WebKit).
Crescent Fresh在评论中回答了这个问题:
JSLint包含一个用JavaScript编写的JavaScript解析器.参见Douglas Crockford的JSlint第2712行开始解析器.编写JSLint也可以处理html,所以你必须掩盖这些部分
将最快在Javascript JavaScript分析器是esprima.
它也给你
抽象语法树(AST)的合理格式,与Mozilla Parser API兼容
acorn是一个用JavaScript编写的非常快速的JavaScript解析器.它现在甚至比esprima还要快.我在Chrome中获得的结果形成了esprima的速度比较页面:
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的Parser API兼容,因此您可以使用escodegen从解析树生成JavaScript.
它不是一个JavaScript解析器本身,但是有一个名为Jison的项目(比如Bison)用于生成用JS编写的解析器.
我在JavaScript中看到的唯一的metacircular解释器是Narcissus Engine.
它也是由Brendan Eich开发的,他们使用了许多特定于SpiderMonkey的非标准扩展,我认为它不适用于V8.
Microsoft已在TypeScript中开发了TypeScript编译器.由于TypeScript是JavaScript的严格超集,并且TypeScript编译为JavaScript,因此生成的编译器在技术上是用JavaScript编写的JavaScript编译器.
那当然取决于你对"编译器"的定义.但是,如果接受语言A的超集的编译器不是语言A编译器,则排除GCC,Clang和几乎所有其他编译器.