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: Лексический анализ

Цель: Реализация лексического анализатора для выбранного кейса.

Задачи:

  1. Разработать грамматику токенов
  2. Реализовать сканер на ANTLR4
  3. Обеспечить обработку ошибок
  4. Написать тестовое покрытие

Результат: Работающий лексический анализатор, разбивающий входной поток на токены.

Лабораторная 2: Синтаксический анализ

Цель: Построение синтаксического анализатора и формирование AST.

Задачи:

  1. Разработать КС-грамматику языка
  2. Реализовать парсер на ANTLR4
  3. Построить абстрактное синтаксическое дерево
  4. Валидация синтаксической корректности

Результат: Парсер, строящий AST для корректных программ.

Лабораторная 3: Семантический анализ

Цель: Реализация семантического анализа и подготовка к генерации кода.

Задачи:

  1. Реализовать обход AST
  2. Проверка типов и контекстных условий
  3. Построение таблицы символов
  4. Подготовка промежуточного представления

Результат: Семантически проверенное AST с таблицей символов.

Лабораторная 4: Генерация кода

Цель: Генерация исполняемого кода с использованием LLVM.

Задачи:

  1. Преобразование AST в LLVM IR
  2. Реализация базовых оптимизаций
  3. Генерация объектного кода
  4. Создание исполняемого файла

Результат: Работающий компилятор для выбранного кейса.

Варианты кейсов по сложности

🟢 Начальный уровень

Номер Название Предметная область Сложность
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 Полноценный мини-язык программирования Информатика 🔴 Экспертная

Рекомендации по выбору

Для начинающих:

  1. Кейсы 001-004: минимальный опыт программирования
  2. Фокус на базовые конструкции ANTLR4
  3. Простые грамматики с ясной семантикой

Для продолжающих:

  1. Кейсы 005-009: опыт работы с Python/C++
  2. Интеграция нескольких компонентов
  3. Работа с предметными областями

Для продвинутых:

  1. Кейсы 010-014: уверенное владение выбранным языком
  2. Сложные грамматики и системы типов
  3. Интеграция с внешними инструментами

Для экспертов:

  1. Кейсы 015-017: опыт разработки компиляторов
  2. Полный цикл от грамматики до генерации кода
  3. Работа с LLVM и оптимизациями

Требования к отчетам

Структура отчета

Каждый отчет должен содержать:

  1. Титульный лист (формат университета)
  2. Цель и задачи работы
  3. Описание реализации
  4. Исходный код (выложить в Git)
  5. Тестовые примеры
  6. Выводы и заключение

Критерии оценки

  1. Качество кода (40%): чистота, структура, документация
  2. Функциональность (30%): выполнение всех требований
  3. Тестирование (20%): покрытие тестами
  4. Отчет (10%): полнота и качество описания

Полезные ссылки


← Назад | Кейс 001 → | Кейс 002 →