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