我正在开始一个课程项目,涉及向Go语言中添加一些功能。
然而,我对Go语言的结构感到十分困惑。我原本认为Go是使用flex和bison解析器生成的,但在Go源代码中我找不到任何熟悉的东西。
另一方面,目录go/src/pkg/go下有一些文件夹,它们的名称很熟悉(如ast、token、parser等),但它们只包含.go文件。我很困惑!
我的请求是,如果有人熟悉Go语言,能否给我一个关于Go的词法分析、语法分析等方面的概述,并告诉我在哪里可以找到编辑语法等文件?
我正在开始一个课程项目,涉及向Go语言中添加一些功能。
然而,我对Go语言的结构感到十分困惑。我原本认为Go是使用flex和bison解析器生成的,但在Go源代码中我找不到任何熟悉的东西。
另一方面,目录go/src/pkg/go下有一些文件夹,它们的名称很熟悉(如ast、token、parser等),但它们只包含.go文件。我很困惑!
我的请求是,如果有人熟悉Go语言,能否给我一个关于Go的词法分析、语法分析等方面的概述,并告诉我在哪里可以找到编辑语法等文件?
src/cmd/5* ARM
src/cmd/6* amd64 (x86-64)
src/cmd/8* i386 (x86-32)
src/cmd/cc C compiler (common part)
src/cmd/gc Go compiler (common part)
src/cmd/ld Linker (common part)
src/cmd/6c C compiler (amd64-specific part)
src/cmd/6g Go compiler (amd64-specific part)
src/cmd/6l Linker (amd64-specific part)
词法分析器是纯C编写的(没有使用flex
)。语法分析器是用Bison编写的:
src/cmd/gc/lex.c
src/cmd/gc/go.y
许多在src/cmd
下的目录都有一个doc.go
文件,其中包含该目录内容的简短描述。
如果您计划修改语法,则应注意Bison语法有时不区分表达式和类型。
Go编译器是用c语言编写的,所以你需要flex和bison。不使用Go解析包。如果你想在Go中编写自我托管编译器,可以使用Go解析包。