3B.2 代码结构
主体解析逻辑涉及到的代码位置
- package 位置: $GCROOT/compile/internal/syntax
- parser.go: 语法解析器主题逻辑
- nodes.go: AST 数据结构声明
- syntax.go: 解析入口函数所在文件,入口函数为
Parse()
- pos.go: 跟踪源文件位置信息的结构体声明
辅助代码
- dumper.go: 可视化 AST
- printer.go: 以特定格式打印 AST
从编译器主函数进入语法分析的代码位置如下:
// file: cmd/compile/internal/gc/main.go
func Main(archInit func(*ssagen.ArchInfo)) {
// 忽略前置的编译器初始化代码
// Parse and typecheck input.
noder.LoadPackage(flag.Args())
// 忽略后续代码
}
noder.LoadPackage() 在文件
$GCROOT/compile/internal/noder/noder.go
中, 该函数会调用语法分析的入口函数 syntax.Parse()