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
Семинары: nsu-syspro/compiler-seminars (24126)

Занятия

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

Дата Тема Презентация
  Введение Introduction
07.09.2026 Compiler architecture, Lexer  
14.09.2026 Parser  
21.09.2026 LLVM IR  
28.09.2026 AST traversal AST traversal
05.10.2026 LLVM IR practice  

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

Функции

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

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