Проектная лаборатория
Собственный интерпретатор
Этап 01 · Основные этапы
Лексический анализ: пустой файл
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
Первая задача интерпретатора — превратить исходный текст программы в токены (минимальные значимые единицы кода). На этом этапе вы обработаете простейшие входные данные: пустой файл .lox.
Команда tokenize
Команда tokenize разбивает программу Lox на токены и выводит их в stdout. Мы будем использовать её для проверки
всех этапов главы Лексический анализ.
Если есть файл с именем test.lox и следующим содержимым:
var language = "lox";Команда tokenize вернёт следующее:
$ ./your_program.sh tokenize test.lox
VAR var null
IDENTIFIER language null
EQUAL = null
STRING "lox" lox
SEMICOLON ; null
EOF nullЭтот формат вывода соответствует спецификации в репозитории книги.
Каждая строка соответствует токену в файле (изображение из раздела 4.2: Лексемы и токены):

Формат каждой строки:
<token_type> <lexeme> <literal><token_type>: тип токена.- Примеры:
VAR,IDENTIFIER,STRING,EOFи т. д.
- Примеры:
<lexeme>: фактическая последовательность символов, образовавшая токен.- Примеры:
var,breakfast,"bagels"и т. д. - Для токена
EOFлексема — пустая строка.
- Примеры:
<literal>: значение литерала токена.- Для большинства токенов это
null. - Для токенов
STRING/NUMBERздесь хранится значение строки/числа.
- Для большинства токенов это
Токен EOF — специальный токен, обозначающий конец файла. Все вызовы tokenize будут включать токен EOF в конце.
Проверки
Тестирующая система создаст пустой файл test.lox. Затем она запустит вашу программу следующим образом:
$ ./your_program.sh tokenize test.lox
EOF nullПоскольку файл пуст, в выводе ожидается только один токен: EOF. Тестирующая система проверит, что в stdout напечатано EOF<space><space>null.
Примечания
- Этот формат вывода соответствует спецификации в репозитории книги
- Между
EOFиnullнаходятся два пробела. Это связано с тем, что часть<lexeme>для токенаEOF— пустая строка. - На этом этапе лексическому анализатору достаточно обрабатывать только пустые файлы. На следующих этапах вы постепенно расширите его возможности.
Проверка в вашей IDE
Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.
Настройка проекта и IDE
1. Создайте проект один раз
node '/opt/graphlms/tools/project-lab/cli.mjs' init interpreter ./my-interpreter --language go2. Откройте папку в IDE
cd ./my-interpreterРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage ry8Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.