===== Лабораторные работы (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 - Реализация базовых оптимизаций - Генерация объектного кода - Создание исполняемого файла **Результат:** Работающий компилятор для выбранного кейса. === Варианты кейсов по сложности === ==== 🟢 Начальный уровень ==== ^ Номер ^ Название ^ Предметная область ^ Сложность ^ | [[gram:case-001|001]] | Арифметические выражения | Математика | 🟢 Базовая | | [[gram:case-002|002]] | Мини-калькулятор | Математика | 🟢 Базовая | | [[gram:case-003|003]] | Проверка алгебраических преобразований | Алгебра 7-9 класс | 🟢 Базовая | | [[gram:case-004|004]] | Генератор простых уравнений | Математика | 🟢 Базовая | ==== 🟡 Средний уровень ==== ^ Номер ^ Название ^ Предметная область ^ Сложность ^ | [[gram:case-005|005]] | Сокращение полиномов | Алгебра | 🟡 Средняя | | [[gram:case-006|006]] | Геометрические задачи | Геометрия 8-11 класс | 🟡 Средняя | | [[gram:case-007|007]] | Кинематика: равномерное движение | Физика | 🟡 Средняя | | [[gram:case-008|008]] | Язык конфигураций | Информатика | 🟡 Средняя | | [[gram:case-009|009]] | Проверка алгоритмов | Информатика | 🟡 Средняя | ==== 🟠 Продвинутый уровень ==== ^ Номер ^ Название ^ Предметная область ^ Сложность ^ | [[gram:case-010|010]] | Динамика: законы Ньютона | Физика | 🟠 Продвинутая | | [[gram:case-011|011]] | Простой SQL-подобный язык | Информатика | 🟠 Продвинутая | | [[gram:case-012|012]] | Декларативный язык разметки | Информатика | 🟠 Продвинутая | | [[gram:case-013|013]] | Генератор задач по программированию | Информатика | 🟠 Продвинутая | | [[gram:case-014|014]] | Адаптивный генератор заданий | Педагогика | 🟠 Продвинутая | ==== 🔴 Экспертный уровень ==== ^ Номер ^ Название ^ Предметная область ^ Сложность ^ | [[gram:case-015|015]] | Язык описания состояний | Информатика | 🔴 Экспертная | | [[gram:case-016|016]] | Domain-Specific Language | Информатика | 🔴 Экспертная | | [[gram:case-017|017]] | Полноценный мини-язык программирования | Информатика | 🔴 Экспертная | === Рекомендации по выбору === **Для начинающих:** - Кейсы 001-004: минимальный опыт программирования - Фокус на базовые конструкции ANTLR4 - Простые грамматики с ясной семантикой **Для продолжающих:** - Кейсы 005-009: опыт работы с Python/C++ - Интеграция нескольких компонентов - Работа с предметными областями **Для продвинутых:** - Кейсы 010-014: уверенное владение выбранным языком - Сложные грамматики и системы типов - Интеграция с внешними инструментами **Для экспертов:** - Кейсы 015-017: опыт разработки компиляторов - Полный цикл от грамматики до генерации кода - Работа с LLVM и оптимизациями === Требования к отчетам === ==== Структура отчета ==== Каждый отчет должен содержать: - **Титульный лист** (формат университета) - **Цель и задачи работы** - **Описание реализации** - **Исходный код** (выложить в Git) - **Тестовые примеры** - **Выводы и заключение** ==== Критерии оценки ==== - **Качество кода** (40%): чистота, структура, документация - **Функциональность** (30%): выполнение всех требований - **Тестирование** (20%): покрытие тестами - **Отчет** (10%): полнота и качество описания === Полезные ссылки === - [[gram:materials-antlr|Документация ANTLR4]] - [[gram:materials-llvm|Руководство по LLVM]] - [[gram:materials-examples|Примеры реализации]] - [[gram:materials-git|Инструкция по работе с Git]] ---- [[gram:cd|← Назад]] | [[gram:case-001|Кейс 001 →]] | [[gram:case-002|Кейс 002 →]]