Go использует Go для разбора самого себя? - PullRequest
12 голосов
/ 27 марта 2012

Я запускаю проект класса, который касается добавления некоторых функций в Go.

Однако я полностью запутался в структуре Го. У меня сложилось впечатление, что Go использует flex и bison, но я не могу найти ничего знакомого в исходном коде Go.

С другой стороны, в каталоге go / src / pkg / go есть папки со знакомыми именами (ast, token, parser и т. Д.), Но все они содержат файлы .go. Я в замешательстве!

Моя просьба, от любого, кто знаком с Go, не могли бы вы дать мне обзор того, как Go лексируется, анализируется и т. Д. И где найти файлы для редактирования грамматики и еще много чего?

Ответы [ 3 ]

8 голосов
/ 28 марта 2012

Структура каталогов:

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 (нет flex).Грамматика написана на бизоне:

src/cmd/gc/lex.c
src/cmd/gc/go.y

Многие каталоги в src/cmd содержат файл doc.go с кратким описанием содержимого каталога.

Если вы планируете изменить грамматику,следует отметить, что грамматика бизонов иногда не различает выражения и типы.

4 голосов
/ 27 марта 2012
3 голосов
/ 27 марта 2012

Компиляторы Go написаны на c, поэтому вам нужны flex и bison.Пакет Go для разбора не используется.Если вы хотите написать собственный компилятор на Go, вы можете использовать пакет парсинга Go.

...