抽象语法树AST

https://baijiahao.baidu.com/s?id=1626159656211187310&wfr=spider&for=pc

什么是语法树?

它是一种分层的程序表示,它根据编程语言的语法来表示源代码结构,每个AST节点对应于源代码的一个项。

如何从纯文本代码得到语法树?

第一步,词法分析

它读取我们的代码,然后把它们按照预定的规则合并成一个个的标识tokens。同时,它会移除空白符,注释,等。最后,整个代码将被分割进一个tokens列表(或者说一维数组)

🌰:

1
2
const a = 5
// [{value:'const', type:'keyword'}, {value:'a',type:'identifier'}...]

当词法分析源代码的时候,它会一个一个字母地读取代码,所以很形象地称之为扫描-scans;当它遇到空格,操作符,或者特殊符号的时候,它会认为一个话已经完成了。

第二步,语法分析

它会将词法分析出来的数组转化成树形的表达形式。同时,验证语法,语法如果有错的话,抛出语法错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const a = 5
// 分析结果如下
{
"type": 'VariableDeclaration'
"descriptions": [
{
type: 'VariableDeclaration',
kind: 'const',
id: {
type: 'Identifier’,
name: 'a'
},
init: {
type:"Literal",
value: 5
}
}
]
}

当生成树的时候,解析器会删除一些没必要的标识tokens(比如不完整的括号),因此AST不是100%与源码匹配的,但是已经能让我们知道如何处理了