Go使用Go解析自己?

cal*_*vin 12 grammar parsing token go

我正在开始一个关于为Go添加一些功能的类项目.

但是,我对Go的结构非常困惑.我的印象是Go使用了flex和bison但我在Go源代码中找不到任何熟悉的东西.

另一方面,目录go/src/pkg/go包含熟悉名称(ast,token,parser等)的文件夹,但它们包含的都是.go文件.我糊涂了!

我的请求是,熟悉Go的任何人,你能不能给我一个关于Go如何被lexed,解析等等的概述,以及在哪里找到编辑语法的文件等等?

小智 8

目录结构:

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)
Run Code Online (Sandbox Code Playgroud)

Lexer是用纯C编写的(没有flex).语法是用野牛写的:

src/cmd/gc/lex.c
src/cmd/gc/go.y
Run Code Online (Sandbox Code Playgroud)

许多目录下src/cmd包含一个doc.go文件,其中包含目录内容的简短描述.

如果您打算修改语法,应该注意Bison语法有时不区分表达式和类型.