This is an old revision of the document!
Table of Contents
Лабораторные работы
Общее описание
Курс включает 4 сквозные лабораторные работы, выполняемые в рамках выбранного кейса. Каждая последующая лабораторная расширяет функциональность предыдущей.
Структура лабораторных
| № | Тема | Срок сдачи | Баллы |
|---|---|---|---|
| ЛР1 | Лексический анализ | 15.10.2025 | 25 |
| ЛР2 | Синтаксический анализ | 15.11.2025 | 25 |
| ЛР3 | Семантический анализ и AST | 05.12.2025 | 25 |
| ЛР4 | Генерация кода | 25.12.2025 | 25 |
Описание лабораторных
Лабораторная 1: Лексический анализ
Цель: Реализация лексического анализатора для выбранного кейса.
Задачи:
- Разработать грамматику токенов
- Реализовать сканер на ANTLR4
- Обеспечить обработку ошибок
- Написать тестовое покрытие
Результат: Работающий лексический анализатор, разбивающий входной поток на токены.
Лабораторная 2: Синтаксический анализ
Цель: Построение синтаксического анализатора и формирование AST.
Задачи:
- Разработать КС-грамматику языка
- Реализовать парсер на ANTLR4
- Построить абстрактное синтаксическое дерево
- Валидация синтаксической корректности
Результат: Парсер, строящий AST для корректных программ.
Лабораторная 3: Семантический анализ
Цель: Реализация семантического анализа и подготовка к генерации кода.
Задачи:
- Реализовать обход AST
- Проверка типов и контекстных условий
- Построение таблицы символов
- Подготовка промежуточного представления
Результат: Семантически проверенное AST с таблицей символов.
Лабораторная 4: Генерация кода
Цель: Генерация исполняемого кода с использованием LLVM.
Задачи:
- Преобразование AST в LLVM IR
- Реализация базовых оптимизаций
- Генерация объектного кода
- Создание исполняемого файла
Результат: Работающий компилятор для выбранного кейса.
Варианты кейсов
Доступно 17 вариантов кейсов различной сложности:
| № | Название | Сложность | Язык реализации |
|---|---|---|---|
| 001 | Арифметические выражения | 🟢 Начальная | Python/C++ |
| 002 | Мини-калькулятор | 🟢 Начальная | Python/C++ |
| 003 | Язык конфигураций | 🟡 Средняя | Python/Java |
| 004 | Простой SQL-подобный язык | 🟡 Средняя | Java/C++ |
| 005 | Декларативный язык разметки | 🟡 Средняя | Python/Java |
| 006 | Язык описания состояний | 🟠 Сложная | Java/C++ |
| 007 | Domain-Specific Language | 🟠 Сложная | Java/C++ |
| … | … | … | … |
| 017 | Полноценный мини-язык | 🔴 Эксперт | C++/Rust |
Требования к отчетам
Структура отчета
Каждый отчет должен содержать:
- Титульный лист (формат университета)
- Цель и задачи работы
- Описание реализации
- Исходный код (выложить в Git)
- Тестовые примеры
- Выводы и заключение
Критерии оценки
- Качество кода (40%): чистота, структура, документация
- Функциональность (30%): выполнение всех требований
- Тестирование (20%): покрытие тестами
- Отчет (10%): полнота и качество описания
