Выбор проекта

Выбор проекта #

Цель курса #

Цель курса ТАиФЯ — разработать интерпретатор со всеми фазами фронтенда компилятора:

  • Лексический анализ — ручной разбор с генерацией потока токенов
  • Синтаксический анализ — рекурсивный спуск с построением AST
  • Семантический анализ — добавление атрибутов в AST и проверка семантической корректности программы

Итерации и оценка #

Проект имеет от 3 до 7 итераций:

  • На оценку 5 (отлично) нужно сделать 7 итераций и набрать 90 баллов РИТМ
  • На оценку 4 (хорошо) нужно сделать 5 итераций и набрать 75 баллов РИТМ
  • На оценку 3 (посредственно) нужно сделать 3 итерации и набрать 60 баллов РИТМ

Баллы начисляются за итерации проекта и посещение лекций:

  1. Посещение лекции — 2 балла
  2. Принятая итерация проекта — 12 баллов

Преподаватель может добавить до 2 бонусных баллов на итерацию на своё усмотрение.

Языки программирования #

Доступно три на выбор: Go, C#, C++.

Выбор можно поменять в процессе, но придётся всё переписывать и заново устранять замечания по коду.

Три дорожки #

Есть три варианта — три дорожки разного уровня сложности.

  1. 🟢 Зелёная дорожка — интерпретатор без VM — команда до 2 человек
    • фронтенд языка: лексический, синтаксический, семантический анализ
    • recursive interpreter с AST
  2. 🟡 Жёлтая дорожка — интерпретатор со своей VM — команда до 3 человек
    • фронтенд языка: лексический, синтаксический, семантический анализ
    • кодогенерация из AST в байт-код VM
    • своя VM
  3. 🔴 Красная дорожка — интерпретатор со своей VM + IDE — команда до 5 человек
    • фронтенд языка: лексический, синтаксический, семантический анализ
    • кодогенерация из AST в байт-код VM
    • своя VM
    • LSP-сервер
    • плагин для VSCode

Личный вклад #

Каждый член команды должен внести свой вклад и иметь не менее одной зоны ответственности:

  • Вклад — это конкретный результат, а не просто «почитал, изучил» или «попытался сделать»;
  • Все коммиты в Git нужно делать от своего лица, иначе вклад не засчитаем;
  • В конце курса — пишем одностраничный отчёт (личный вклад + самооценка).

Примеры зон ответственности #

  1. Спецификация языка
  2. Приёмочные тесты
  3. Лексер
  4. Парсер
  5. AST
  6. Интерпретация AST без VM
  7. Кодогенерация для VM
  8. Спецификация VM
  9. Реализация VM
  10. LSP-сервер
  11. VSCode