Компиляторные технологии (КТ)
Весенний семестр, 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.
Материалы лекций
- Лекция 01. Введение в компиляцию
- Лекция 02. Основные понятия теории формальных языков
- Лекция 03. Flex: генератор лексических анализаторов
- Лекция 04. Cинтаксически управляемая трансляция (1)
- Лекция 05. Cинтаксически управляемая трансляция (2)
- Лекция 06. Cинтаксически управляемая трансляция (3)
- Лекция 07. Лексический анализ (1)
- Лекция 08. Разбор практики – построение AST
- Лекция 09. Лексический анализ (2)
- Лекция 10. Синтаксический анализ (1): top-down
- Лекция 11. Синтаксический анализ (2): bottom-up
- Лекция 12. Синтаксически управляемая трансляция
- Лекция 13. Генерация промежуточного кода (1)
Практические работы
Лабораторные работы выполняются в операционной системе 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