因为最近工作上有需要使用解析JavaScript的代码,大部分情况使用正则表达式匹配就可以处理,但是一旦依赖于代码上下文的内容时,正则或者简单的字符解析就很力不从心了,这个时候需要一个语言解析器来获取整一个AST(abstractsyntaxtree)。
然后我找到了多个使用JavaScript编写的JavaScript解析器:
Esprima
Acorn
UglifyJS2
Shift
从提交记录来看,维护情况都蛮好的,ES各种发展的特性都跟得上,我分别都简单了解了一下,聊聊他们的一些情况。
Esprima是很经典的一个解析器,Acorn在它之后诞生,都是几年前的事情了。按照Acorn作者的说法,当时造这个轮子更多只是好玩,速度可以和Esprima媲美,但是实现代码更少。其中比较关键的点是这两个解析器出来的AST结果(对,只是AST,tokens不一样)都是符合TheEstreeSpec规范(这是Mozilla的工程师给出的SpiderMonkey引擎输出的JavaScriptAST的规范文档,也可以参考:SpiderMonkeyinMDN)的,也就是得到的结果在很大部分上是兼容的。
现在很出名的Webpack解析代码时用的也是Acorn。
至于Uglify,很出名的一个JavaScript代码压缩器,其实它自带了一个代码解析器,也可以输出AST,但是它的功能更多还是用于压缩代码,如果拿来解析代码感觉不够纯粹。
Shift这个没做多少了解,只知道他定义了自己的一套AST规范。
Esprima哪家医院白癜风能治愈中医治疗白癜风的医院