我需要在JavaScript源代码中添加一些轻量级的语法糖,并使用基于JavaScript的构建系统进行处理。是否有任何用JavaScript编写的开源JavaScript解析器?并且当在V8或类似的高性能JavaScript实现上运行时,它们是否足够快?
感谢你能提供的任何指导!
我需要在JavaScript源代码中添加一些轻量级的语法糖,并使用基于JavaScript的构建系统进行处理。是否有任何用JavaScript编写的开源JavaScript解析器?并且当在V8或类似的高性能JavaScript实现上运行时,它们是否足够快?
感谢你能提供的任何指导!
UglifyJS是一款用JavaScript编写的JS压缩器/美化器,其中包含一个完整的JavaScript解析器,提供了简单易用的API接口。它经过严格测试并在一些大型项目(如WebKit)中得到广泛应用。
Crescent Fresh在评论中回答了这个问题:
JSLint包含一个用JavaScript编写的JavaScript解析器。请参见Douglas Crockford的JSLint,大约在2712行左右开始解析器。JSLint也被编写为处理HTML,因此您需要忽略那些部分。
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的解析器API兼容,因此您可以使用escodegen从解析树生成JavaScript。
它本身并不是JavaScript解析器,但有一个名为Jison(类似于Bison)的项目用于生成解析器,它是用JS编写的。
当然,这取决于您对“编译器”的定义。但如果接受语言A的一个超集的编译器不是语言A编译器,那么GCC、Clang和几乎所有其他编译器都不在此列。
https://developer.mozilla.org/zh-CN/docs/SpiderMonkey/Parser_API:
最近版本的独立SpiderMonkey shell包含了一个SpiderMonkey解析器的反射,作为一种JavaScript API提供。
需要注意的是,这仅仅是一个JavaScript API,而解析器本身是用C++编写的。
JS/CC - LALR(1)解析器和词法分析器生成器,用JavaScript编写 - http://jscc.phorward-software.com/