一、 语言类型:编译型语言
代码在运行前,通过编译器生成二进制机器码,即,包含二进制机器码的文件才能再目标机器上运行。
Go 语言编译器的源代码在 src/cmd/compile
目录中
编译器分为前端和后端
编译器的前端一般承担着词法分析、语法分析、类型检查、中间代码生成;
后端主要负责目标代码的生成和优化,即,将中间代码翻译成目标机器能够运行的二进制机器码。
二、Go 编辑器上的四个转换阶段
Go 的编译器在逻辑上可分为四个阶段:
- 词法与语法分析
- 类型检查和 AST 转换
- 通过 SSA 生成中间代码
- 最后机器代码生成
2-1 词法与语法分析 - 词法解析器
所有的编译过程,都是从解析源文件开始的。
词法分析的作用是解析源代码文件,将文件中的字符串转换成 Token 序列,方便后续的处理和解析。
通常情况,处理词法分析的程序称为 “ 词法解析器(lexer)”
lexer 将字符串转换成 Token 后,进行语法分析,将 Token 韩兆语言定义好的文法(Grammar)自上而下或者自下而上的进行规约,每一个Go 的源代码文件都会被归纳成一个