Источник: Nuances of Programming В статье речь идёт о Go 1.13 Компилятор Go занимает важное место в экосистеме Go. Компиляция — необходимый этап создания исполняемого двоичного кода. Компилятор проходит долгий путь: его пишут на C, переносят на Go и постоянно оптимизируют. Фазы компиляции Компилирование Go состоит из четырёх фаз, которые можно объединить в два этапа: Для лучшего понимания используем простую программу: package main
func main() {
a := 1
b := 2
if true {
add(a, b)
}
}
func add(a, b int) {
println(a + b)
} Синтаксический разбор Первая фаза предельно проста. Её описание можно найти в README: В первой фазе компиляции исходный код маркируется (это лексический анализ), затем анализируется синтаксически и для каждого исходного файла создаётся синтаксическое дерево. Лексический анализатор будет первым пакетом, запущенным для маркирования. Исходный код здесь. Ниже приведён результат: После маркирования проводится синтаксический анализ и строится синтаксическое дерево. П