3 курс, 5 семестр
Язык: русский

Описание

В данном курсе обучающиеся создадут свой собственный компилятор, используя LLVM для генерации кода.

Ключевые особенности:

  • Свободный выбор языка для реализации компилятора
  • Постепенное расширение возможностей исходного языка
  • Автоматическое тестирование каждой стадии компиляции
  • Созданный компилятор послужит основой для следующего семестра

Преподаватель

  • Трепаков Иван Сергеевич

Организация курса

Данный курс состоит из 5 модулей, заключающихся в реализации компилятора для постепенно расширяющегося языка:

  • Бестиповый язык выражений (6 недель)
  • Управляющие конструкции (2 недели)
  • Функции (2 недели)
  • Типовая система (2 недели)
  • Структуры и массивы (2 недели)

В первом модуле происходит знакомство с инфраструктурой, первая реализация лексера, парсера и генерации LLVM IR. В остальных модулях происходит расширение языка функциональностью, которая требует поддержки на различных стадиях текущей версии компилятора.

Итоговая оценка

Итоговая оценка выставляется по результатам выполнения модулей:

  • 5 — выполнены все 5 модулей
  • 4 — выполнены 4 из 5 модулей
  • 3 — выполнены 3 из 5 модулей

Практика

Практическая часть данного курса заключается в разработке компилятора, на базе стартового репозитория nsu-syspro/compiler-base. Каждый студент создает собственный fork стартового репозитория, и всю дальнейшую разработку ведет в нем.

Стартовый репозиторий содержит грамматики для всех 5 модулей, систему тестирования, а также набор тестов к каждому модулю на результаты работы каждой стадии компиляции (поток токенов и AST в виде JSON, код возврата и ожидаемый вывод). Обучающимся настоятельно рекомендуется добавлять свои тесты для улучшения тестового покрытия собственного компилятора.

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

Саму разработку каждого модуля необходимо вести в отдельной ветке (в процессе можно делать PR в эту ветку, если нужно), на которую в итоге должен быть создан PR, который должен будет пройти ревью преподавателя.

В связи со свободным выбором языка для реализации, ревью будет проводиться с точки зрения архитектуры компилятора, а не качества кода реализации.

Материалы

Презентации: nsu-syspro/compiler-slides
Стартовый репозиторий: nsu-syspro/compiler-base

Занятия

Бестиповый язык выражений

Дата Тема Презентация
  Введение Introduction
07.09.2026 Знакомство с архитектурой  

Управляющие конструкции

Функции

Типовая система

Структуры и массивы