Подтвердить что ты не робот

Go использует Go для самостоятельного анализа?

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

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

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

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

4b9b3361

Ответ 1

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

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). Грамматика написана в Bison:

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

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

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

Ответ 3

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