AST抽象语法树

解析器 Parser

这个步骤分为2个阶段,词法分析和语法分析

词法分析:

词法分析阶段把字符串形式的代码转换为 令牌(tokens)流。

分词:将整个代码字符串分割成最小语法单元数组,每个不可分割的最小单元为一个token,最终为tokens组成的一维数组

例如 var 这三个字符,它只能作为一个整体,语义上不能再被分解,因此它是一个 Token。

[
  { type: { ... }, value: "n", start: 0, end: 1, loc: { ... } },
  { type: { ... }, value: "*", start: 2, end: 3, loc: { ... } },
  { type: { ... }, value: "n", start: 4, end: 5, loc: { ... } },
]

语法分析:

语法分析会将分析出来的 Token 流转化成有语法含义的AST抽象语法树。同时,验证语法,语法如果有错的话,抛出语法错误。

function square(n) {
  return n * n;
}

语法分析生成的ast结构:
{
  type: "FunctionDeclaration",
  id: {
    type: "Identifier",
    name: "square"
  },
  params: [{
    type: "Identifier",
    name: "n"
  }],
  body: {
    type: "BlockStatement",
    body: [{
      type: "ReturnStatement",
      argument: {
        type: "BinaryExpression",
        operator: "*",
        left: {
          type: "Identifier",
          name: "n"
        },
        right: {
          type: "Identifier",
          name: "n"
        }
      }
    }]
  }
}


阅读剩余
THE END