什么是 AST
抽象语法树(Abstract Syntax Tree
)简称 AST
,是源代码的抽象语法结构的树状表现形式。webpack、eslint 等很多工具库的核心都是通过抽象语法书这个概念来实现对代码的检查、分析等操作。
// 简单函数 function square(n) { return n * n; } // 转换后的AST { type: "FunctionDeclaration", id: { type: "Identifier", name: "square" }, params: [ { type: "Identifier", name: "n" } ], ... }
第一步:词法分析,也叫扫描scanner
它读取我们的代码,然后把它们按照预定的规则合并成一个个的标识 tokens。同时,它会移除空白符、注释等。最后,整个代码将被分割进一个 tokens 列表(或者说一维数组)。
const a = 5; // 转换成 [{value: 'const', type: 'keyword'}, {value: 'a', type: 'identifier'}, ...]
第二步:语法分析,也称解析器
它会将词法分析出来的数组转换成树形的形式,同时,验证语法。语法如果有错的话,抛出语法错误。
[{value: 'const', type: 'keyword'}, {value: 'a', type: 'identifier'}, ...] // 语法分析后的树形形式 { type: "VariableDeclarator", id: { type: "Identifier", name: "a" }, ... }
示例
function add(a, b) { return a + b }