定义
抽象语法树是将无意义的字节流转换成具有代码结构的数据结构定义。通过抽象语法树规则,可以一层一层将字节流识别为有意义的Go语言代码。
基础数据结构
元数据类型-token
token是具有独立含义的最小词法单位,简单理解为可识别的最小元数据标记,不可再拆分。
分类
Go语言中的token被分为四类:特殊类型,基础面值描述、运算符、关键字
特殊类型
特殊类型的token只有三种:
ILLEGAL | 错误,所有不能被识别的Token均被识别为ILLEGAL类型 |
EOF | 文件结束 |
COMMENT | 注释 |
基础面值描述
包括Go语言规范定义的所有基础面值类型(整数、浮点数、负数)。此外,还有字符和字符串以及布尔类型对应的“true”和“false”。
运算符
算术运算法 | 加减乘除 |
二元运算 | 逻辑运算、位运算、比较运算 |
一元运算 | 正负号、取地址、管道读取 |
分隔符 | 小括弧、中括弧、大括弧,以及逗号、点号、分号、冒号 |
关键字
Go语言中定义了25个关键字用于表示特殊的代码逻辑结构
BREAK | CASE | CHAN | CONST | CONTINUE |
DEFAULT | DEFER | ELSE | FALLTHROUGH | FOR |
FUNC | GO | GOTO | IF | IMPORT |
INTERFACE | MAP | PACKAGE | RANGE | RETURN |
SELECT | STRUCT | SWITCH | TYPE | VAR |
基本编译单元-fileset
Go语言的编译是由多个文件组成的一个包为单位。在go中,Token还定义了filesethefile两种类型。
FileSet | 一组文件集合。底层结构为File元素的一位数组,由Pos类型表示下标位置。文件间无重合,但是可能有填充。 |
File | 每个File类型包括文件名、base、size三个信息。base对应其在FileSet中的索引位置(Pos) |
*Pos底层为int类型。除了表示File在FileSet中的索引位置以外,也在进行词法分析时表示每个token对应到FileSet中的位置,并且可以以此倒推Token所在文件及相对位置。