我正在开始一个关于向Go添加一些功能的类项目。但是,我对Go的结构完全感到困惑。我的印象是Go使用了flex和bison,但在Go源代码中找不到任何熟悉的东西。另一方面,目录go / src / pkg / go中包含具有熟悉名称(ast,token,parser等)的文件夹,但其中包含的都是.go文件。我很困惑!我的要求是,对于熟悉Go的任何人,您能否概述一下Go是如何进行词法分析,解析等的,以及在何处可以找到用于编辑语法的文件以及其他内容?
3 回答
守候你守候我
TA贡献1802条经验 获得超10个赞
目录结构:
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)
Lexer用纯C语言编写(no flex)。语法是用野牛写的:
src/cmd/gc/lex.c
src/cmd/gc/go.y
下的许多目录src/cmd都包含一个doc.go文件,其中对该目录的内容进行了简短描述。
如果您打算修改语法,则应注意,Bison语法有时无法区分表达式和类型。
慕码人8056858
TA贡献1803条经验 获得超6个赞
Go编译器是用c编写的,这就是为什么需要flex和bison的原因。不使用Go包进行解析。如果您想在Go中编写自托管编译器,则可以使用Go解析包。
- 3 回答
- 0 关注
- 224 浏览
添加回答
举报
0/150
提交
取消