Компиляторные технологии (КТ)

Весенний семестр, 2024 (3 курс)

Лекции 17 (34 часа), практика 136 часов (1 практика в неделю, 5 групп), курсовая работа, зачет

Осенний семестр (4 курс)

Лекции 9 (18 часов), практика 136 часов (1 практика в неделю, 4 группы), экзамен

Курсовая работа

Задание – реализация компилятора для заданного императивного языка программирования. Реализация должна быть выполнена на [C++|Go|Rust|Java|C#], включать лексический анализатор (hand-written, Flex++), синтаксический анализатор (hand-written, Bison, ANTLR), семантический анализатор, генератор кода. На выходе должен формироваться исполняемый файл для целевой архитекутры.

Выбор средств разработки, целевой архитектуры необходимо согласовать с лектором и отметить в журнале до 21.03.2024.

  • Базовый уровень: реализация основных стадий компилятора языка из практических работ и его описание в отчете
  • Продвинутный: расширение возможностей языка, альтернативная реализация основных стадий компилятора

Структура отчета приведена в шаблоне. Он может быть подготовлен в OnlyOffice, Markdown (pandoc ==> pdf), LaTeX.

Срок сдачи отчета и кода – 24.05.2024.

Материалы лекций

Практические работы

Лабораторные работы выполняются в операционной системе GNU/Linux на языках программирования C, C++.

  • Практическая работа 1. Регулярные выражения: задание, source code
  • Практическая работа 2. Регулярные выражения
  • Практическая работа 3. Генератор лексических анализаторов Flex задание
  • Практическая работа 4. Разработка лексического анализатора языка (Flex)
  • Практическая работа 5. Разработка лексического анализатора языка (Flex)
  • Практическая работа 6. Синтаксический анализ: введение в Bison задание
  • Практическая работа 7. Разработка синтаксического анализатора задание
  • Практическая работа 8. Разработка синтаксического анализатора
  • Практическая работа 9. Разработка синтаксического анализатора
  • Практическая работа 10. Семантический анализ (11.04.2024)
  • Практическая работа 11. Семантический анализ
  • Практическая работа 12. Семантический анализ
  • Практическая работа 13. Генерация кода (02.05.2024)
  • Практическая работа 14. Генерация кода
  • Практическая работа 15. Генерация кода

Материалы по курсу

  • [DragonBook] Ахо А., Сетхи Р., Ульман Дж. Компиляторы: принципы, технологии и инструменты (2-е изд., 2008)
  • Keith D. Cooper, Linda Torczon. Engineering a Compiler (3ed edition, 2022)
  • Хантер Р. Основные концепции компиляторов. — 2002
  • Вирт Н. Построение компиляторов. — 2010
  • Appel A. Modern Compiler Implementation in {C, Java}. — 1998
  • LLVM docs
  • GCC docs