js语法解析探索

引子

自诚明,谓之性;自明诚,谓之教。诚则明矣,明则诚矣。

–《中庸》

大纲

现在流行的es6 甚至 es7等特性的写法,通常并不被浏览器所认识,那么就需要一定的parser(转换器)将其转换为浏览器兼容性更好的的es5深知es3。

一种很自然而然的想法是将es6或者es7语法下写成的js代码解析为语法树,让后对应生成相应es5(es3)的代码。

eslint等语法检查就是基于这个原理做的

另外,很多操作,比如压缩,模块化等都需要解析原来的代码,从而进行相应的操作。还有,js并没有反射机制,如果要获取变量名本身字符串,还是需要解析源代码。

解析js最开始是 esprima

还有 acorn

由于eslint用的是espree,所以我们探索的大纲是:esprima –> acorn –> espree

esprima

esprima,bsd协议,是使用ECMAscript编写的高可用,符合标准的转换器,由Ariya Hidayat同其它贡献者共同完成。

特性:

  • 对 ECMAScript 2017 完全支持(ecma-262
  • ESTree project标准化的语法树模式
  • 对jsx实验性的支持,React的语法扩展
  • 可选的语法节点位置的记录(序号和行列)
  • 已经被严格的测试(1500左右的标准测试

API:

暂时不表,有点多,因为非常底层