User Tools

Site Tools


gram:labs

This is an old revision of the document!


Лабораторные работы

Общее описание

Курс включает 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. Создание исполняемого файла

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

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

Доступно 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

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

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

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

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

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

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

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

gram/labs.1763088959.txt.gz · Last modified: by eugeneai