Проектная лаборатория

Собственный интерпретатор

0 / 84этапов пройдено

Этап 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 go

2. Откройте папку в IDE

cd ./my-interpreter

Реализуйте требования этапа в созданном проекте.

Запустите из папки проекта

node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage sc2

Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.

Результат проверки

go / ЛОКАЛЬНО

Подключение к локальной проверке…

Здесь появится результат

Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.

GraphLMS — инженерная лаборатория роста