关于编译器
编译器本质就是一个翻译器,作用是将一个高级语言翻译成计算机可以识别的机器语言,如今的编译器都是分层架构,分层可以增加各层之间的独立性。golang 编译器分为前端和后端
编译器种类:
- 本地编译器:可以编译生成所在计算机系统相同平台可执行的目标代码
- 交叉编译器:可生成在其他平台上可执行的目标代码
golang 编译器主要编译阶段:
1.词法分析 => 2.语法分析 => 3.类型检查 => 4.生成 SSA 中间代码 => 5.生成机器代码
词法分析
golang 通过词法分析器程序将 golang 源代码文件中的字符串序列化成 Token 序列,或者称为标记序列,便于编译器后面的进一步进行语法分析
语法分析
golang 通过语法分析器将刚才生成的标记序列按照 golang 定义好的语法进行整理,构建出最后的抽象语法树 AST
每一个抽象语法树 AST 都对应一个单独的 golang 源码文件。AST 中包含有当前文件所属包名,定义的常量,结构体和函数等信息,方便后续调试