Table of Contents
Лабораторные работы (gram:labs)
Общее описание
Курс включает 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
- Реализация базовых оптимизаций
- Генерация объектного кода
- Создание исполняемого файла
Результат: Работающий компилятор для выбранного кейса.
Варианты кейсов по сложности
🟢 Начальный уровень
🟡 Средний уровень
🟠 Продвинутый уровень
| Номер | Название | Предметная область | Сложность |
|---|---|---|---|
| 010 | Динамика: законы Ньютона | Физика | 🟠 Продвинутая |
| 011 | Простой SQL-подобный язык | Информатика | 🟠 Продвинутая |
| 012 | Декларативный язык разметки | Информатика | 🟠 Продвинутая |
| 013 | Генератор задач по программированию | Информатика | 🟠 Продвинутая |
| 014 | Адаптивный генератор заданий | Педагогика | 🟠 Продвинутая |
🔴 Экспертный уровень
Рекомендации по выбору
Для начинающих:
- Кейсы 001-004: минимальный опыт программирования
- Фокус на базовые конструкции ANTLR4
- Простые грамматики с ясной семантикой
Для продолжающих:
- Кейсы 005-009: опыт работы с Python/C++
- Интеграция нескольких компонентов
- Работа с предметными областями
Для продвинутых:
- Кейсы 010-014: уверенное владение выбранным языком
- Сложные грамматики и системы типов
- Интеграция с внешними инструментами
Для экспертов:
- Кейсы 015-017: опыт разработки компиляторов
- Полный цикл от грамматики до генерации кода
- Работа с LLVM и оптимизациями
Требования к отчетам
Структура отчета
Каждый отчет должен содержать:
- Титульный лист (формат университета)
- Цель и задачи работы
- Описание реализации
- Исходный код (выложить в Git)
- Тестовые примеры
- Выводы и заключение
Критерии оценки
- Качество кода (40%): чистота, структура, документация
- Функциональность (30%): выполнение всех требований
- Тестирование (20%): покрытие тестами
- Отчет (10%): полнота и качество описания
