Проектная лаборатория
Собственный интерпретатор
Этап 16 · Синтаксический анализ выражений
Логические значения и nil
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы реализуете поддержку команды parse и синтаксический анализ литералов true, false и nil.
Ссылка на книгу
Перед началом этого этапа обязательно прочитайте главу Представление кода (глава 5).
Код из этой главы (AstPrinter) потребуется для формирования вывода, проверяемого на этом этапе.
Код для этого этапа реализован в разделе 6.2: Синтаксический анализ методом рекурсивного спуска.
Команда parse
На предыдущих этапах тестирующая система использовала команду tokenize для проверки вашей реализации лексического анализатора. В этом расширении ей потребуется проверить
реализацию синтаксического анализатора, поэтому она будет использовать другую команду: parse.
Команда parse принимает путь к файлу (например, test.lox) и выводит AST-представление его содержимого в stdout.
Например, если test.lox содержит следующее:
2 + 3Команда parse вернёт следующее:
$ ./your_program.sh parse test.lox
(+ 2.0 3.0)Этот формат вывода соответствует спецификации в репозитории книги.
Для того же файла вывод команды tokenize выглядел бы так:
$ ./your_program.sh tokenize test.lox
NUMBER 2 2.0
PLUS + null
NUMBER 3 3.0
EOF nullПроверки
Тестирующая система выполнит серию проверок с файлами test.lox, содержащими логические значения true и false, а также литерал nil.
Например, если test.lox содержит следующее:
trueТестирующая система запустит вашу программу следующим образом:
$ ./your_program.sh parse test.lox
trueТестирующая система проверит, что stdout вашей программы соответствует приведённому выше формату.
Список токенов, для которых нужно реализовать синтаксический анализ на этом этапе:
| Входные данные | Ожидаемый вывод |
|---|---|
true |
true |
false |
false |
nil |
nil |
Примечания
- Этот формат вывода соответствует спецификации в репозитории книги
Проверка в вашей 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 sc2Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.