JavaScript中的JavaScript解析器[关闭]


71

我需要在JavaScript源代码中添加一些轻量级语法糖,并使用基于JavaScript的构建系统对其进行处理。是否有任何用JavaScript编写的开源JavaScript解析器?在V8或类似的高性能JavaScript实现上运行时,它们是否相当快?

感谢您提供的任何指导!


2
“我需要在JavaScript源代码中添加一些轻量级语法糖”,您愿意吗?像什么?
彼得·贝利

您需要它用于代码展示还是编辑器?
卡·菲洛索菲

1
Objective-J做到了。您可能想签出其开源代码。但是它使用与Objective-C类似的完全不同的语法,并在运行时afaik解释为Javascript。
阿努拉格

3
JSLint包含用JavaScript编写的JavaScript解析器。请参见jslint.com/fulljslint.js。第2049行左右开始解析器。JSLint被编写为还处理html,因此您必须掩盖这些部分。
月牙食

Crescent French:请重新发表您的评论作为答案,我会投票支持您。谢谢!
emk 2010年

Answers:


34

UglifyJS(JavaScript中的JS压缩器/美化器)包含一个完整的JavaScript解析器,该解析器公开了一个简单的API。它已经过大量测试,并在某些大型项目(WebKit)中使用。


3
UglifyJS很棒,谢谢您。也感谢HTMLArea,这在大约7或8年前开发WYSIWYG编辑器时对我来说是一个很好的参考。我建议您在链接到UglifyJS时提及您的兴趣。
蒂姆·唐

3
我只想指出,此解析器已准备就绪,并且似乎运行良好。它包含在一个单独的文件中,因此无需遍历jslint.js即可取出不需要的部分。+1
tex

24

Crescent Fresh在评论中回答了这个问题:

JSLint包含用JavaScript编写的JavaScript解析器。参见Douglas Crockford的JSlint,第2712行左右开始解析器。JSLint被编写为还处理html,因此您必须掩盖这些部分


Crescent Fresh,如果您想重新发表评论作为答案,我会接受并支持您。
emk 2010年

4
最近的源代码,上面的链接转到了404:github.com/douglascrockford/JSLint
sibidiba,2011年



10

橡子是用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。


8

它本身不是JavaScript解析器,但是有一个名为Jison(如Bison)的项目,用于生成用JS编写的解析器。


1
好吧,问题要使用JavaScript解析器...?

7

我见过的用JavaScript实现的唯一元圆解释器Narcissus Engine。

它也是由Brendan Eich开发的,他们使用了许多特定于SpiderMonkey的非标准扩展,我认为它不适用于V8。


有趣!我想那里有个解析器。:-)不幸的是,我正在寻找可以在V8下运行的产品。但是,感谢您提供的非常有趣的链接!
emk 2010年

5

Microsoft用TypeScript开发了TypeScript编译器。由于TypeScript是JavaScript的严格超集,并且TypeScript可以编译为JavaScript,所以从技术上讲,生成的编译器是用JavaScript编写的JavaScript编译器。

当然,这取决于您对“编译器”的定义。但是,如果接受语言A的超集的编译器不是语言A编译器,那么它将排除GCC,Clang和几乎所有其他编译器。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.