完整参考:https://juejin.im/post/5bfc21d2e51d4544313df666
场景:js转译、babel、eslint、代码压缩、代码格式化
编译器通过词法分析(扫描scanner)、语法分析生成抽象语法树
- 词法分析,也叫做扫描过程。它读取我们的代码,然后把它们按照预定的规则合并成一个个的标识tokens。同时,它会移除空白符,注释,等。最后,整个代码将被分割进一个tokens列表(或者说一维数组)
当词法分析源代码的时候,它会一个一个字母地读取代码,所以很形象地称之为扫描-scans;当它遇到空格,操作符,或者特殊符号的时候,它会认为一个话已经完成了
- 语法分析,也解析器。它会将词法分析出来的数组转化成树形的表达形式。同时,验证语法,语法如果有错的话,抛出语法错误