Skip to content

AST(抽象语法树) 到底是什么?

抽象语法树(Abstract Syntax Tree,AST)是源代码语法结构的一种抽象表示,它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。在代码语法的检查、代码风格的检查、代码的格式化、代码的高亮、代码错误提示、代码自动补全等等场景均有广泛的应用。

以前我们在做小学语文题时,经常会做到的一种题型就是在一句话中找出不恰当的部分,比如:"你是猪,"

解题方法通常是:

  • 第一步:找出语句中的主语、谓语、宾语
  • 第二步:找出语句中的形容词、动词、标点符号等进行分析

如果将其程序化,我们按照上面的方法可以先将其进行拆分成这样:

[
  { type: "主语", value: "你" },
  { type: "谓语", value: "是" },
  { type: "宾语", value: "猪" },
  { type: "标点符号", value: "," },
]

在这一步骤中可以很快的发现第一个错误:在句末使用的是一个逗号❌,实际应该使用句号。

接着再对主语、谓语、宾语中的词语进行依次分析,将数据结构整理成这样:

 {
  type: "语句",
  body: {
    type: "肯定陈述句",
    declarations: [
      {
        type: "声明",
        person: {
          type: "Identifier",
          name: "你",
        },
        name: {
          type: "animal",
          value: "猪",
        },
      },
    ],
  },
};

在这个结构中我们发现:在一个肯定陈述句中,将一个人比作一个猪🐷,显然不合适...❌,因此找出第二个错误。


在上面这个简单的例子中,其实和AST的生成和应用就颇为相似,AST是源代码的抽象语法结构的树状表现形式,简单点就是一个深度嵌套对象,这个对象能够描述我们书写代码的所有信息

Welcome to the site