Appearance
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是源代码的抽象语法结构的树状表现形式,简单点就是一个深度嵌套对象,这个对象能够描述我们书写代码的所有信息
。