team-work-it-SofiaL

0
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
README.md

Вариант 6

Проект: Система парсинга и выполнения простых команд

Участники:

• Student1 - SofiaL • Student2 - anastskl • Student3 - katherinesiv

У кого я была student 2 - katherinesiv

🚀 Процесс работы над проектом

Интерпретатор команд с историей и поиском


1. Student 1

Создаёт и коммитит файл спецификации

spec.md
в папку
spec/
, в котором описывает:

  • Концепцию проекта: консольный интерпретатор команд на C#
  • Поддерживаемые команды:
    calc
    ,
    sort
    ,
    search
    ,
    filter
    ,
    history
    ,
    help
  • Обязательные требования:
    • Рекурсивный парсинг вложенных команд (
      $(...)
      )
    • Хранение истории последних 100 выполненных команд
    • Бинарный поиск по ключевому слову в истории
    • Чёткая OOP-архитектура с интерфейсами
      ICommand
      ,
      IParser
      ,
      IExecutor
    • Валидация входных данных и обработка ошибок через иерархию исключений
  • Форматы ввода и вывода
  • Список основных классов и методов для реализации

2. Student 2

На основе спецификации реализует полный код в файле

solution.cs
, помещает его в папку
dev/
, и создаёт Pull Request (PR) в основную ветку.


3. Student 3

Проводит ревью кода в рамках PR:

  • Проверяет соответствие реализации требованиям из
    spec.md
  • Оценивает читаемость, структуру и качество кода
  • Убеждается, что реализованы:
    • Рекурсивный парсинг
    • Алгоритм «shunting-yard» для вычислений
    • Бинарный поиск в истории (через отсортированный список)
    • Обработка всех типов исключений
  • Оставляет комментарии, предлагает улучшения или запрашивает исправления

4. Обсуждение

Группа обсуждает замечания из ревью:

  • Принимает PR, если всё соответствует спецификации
  • Или вносит изменения и повторно отправляет на проверку
  • Фиксирует окончательную версию кода

5. Демонстрация (
demo/
)

Создаётся папка

demo/
с артефактами, подтверждающими работоспособность:

  • Примеры вывода с временем выполнения и метками времени
  • Доказательство корректной работы бинарного поиска по истории

6. Документация (
README.md
)

В корне репозитория создаётся файл

README.md
, содержащий:

  • GitVerse-аккаунты всех участников
  • Описание ролей: кто был Student 1, 2, 3
  • Краткое техническое описание проекта и архитектуры
  • Инструкцию по запуску (интерактивный и пакетный режимы)
  • Указание, у кого вы выполняли роль Student 2

7. Слияние (Merge)

После успешного ревью и подготовки всех артефактов — PR сливается в ветку

main
.



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

Структура репозитория

. ├── dev/ │ └── solution.cs # Исходный код консольного приложения ├── spec/ │ └── codex.md # Детальная спецификация задания ├── demo/ │ └── artifacts.md # Папка для демонстрационных артефактов (скриншоты, примеры ввода/вывода) └── README.md # Общее описание проекта, инструкции по сборке/запуску и высокоуровневое описание архитектуры

Описание созданного кода

Краткое описание кода из dev/solution.cs:

Command Interpreter (C#)

Интерпретатор командной строки на C#, реализующий набор встроенных команд с поддержкой вложенных выражений, валидации, истории выполнения и чёткой архитектуры.

📌 Основные команды

КомандаНазначение
calc <выражение>
Вычисляет математическое выражение (поддержка
+
,
-
,
*
,
/
, скобок)
sort <числа...>
Сортирует целые числа (алгоритм — быстрая сортировка)
search <ключ> <элементы...>
Ищет ключ в списке (регистронезависимо), возвращает индексы
filter <числа...> <оператор> <значение>
Фильтрует числа по условию (
>
,
<
,
>=
,
<=
,
==
,
!=
)
history [all|clear|search <ключ>|repeat <индекс>]
Управление историей команд
help
Вывод справки

Поддерживаются вложенные команды через синтаксис

$(command ...)
, например:
calc $(sort 5 2 8 1 | head -1) + 10
calc 1 + 10
.

🏗️ Архитектура

  • Интерфейсы:
    ICommand
    ,
    IParser
    ,
    IExecutor
    — обеспечивают разделение ответственности.
  • Исключения: иерархия на основе
    CommandException
    :
    • ParseException
      — ошибка синтаксического анализа
    • ValidationException
      — ошибка валидации входных данных
    • ExecutionException
      — ошибка выполнения
  • Неизменяемые данные: используются
    record
    (
    CommandResult
    ,
    HistoryEntry
    ).
  • Валидация: проверка скобок, деления на ноль, недопустимых символов и пустых входов.

⚙️ Особенности

  • Рекурсивный парсер с ограничением глубины (
    MAX_RECURSION_DEPTH = 10
    ).
  • Вычисление выражений через алгоритм «shunting-yard» → RPN → стековая машина.
  • История команд (макс. 100 записей) с возможностью:
    • Просмотра (
      history all
      )
    • Очистки (
      history clear
      )
    • Поиска по префиксу (
      history search calc
      )
    • Повторного выполнения (
      history repeat 2
      )
  • Оптимизация поиска в истории — бинарный поиск по отсортированному списку команд.
  • Поддержка пакетного режима: передача команд как аргументов при запуске.

🧪 Тестирование

Включены unit-тесты (в

#if DEBUG
) для ключевых команд:

  • calc
  • sort
  • search
  • filter

▶️ Режимы запуска

  • Интерактивный: запуск без аргументов → REPL-оболочка.
  • Пакетный: передача команд как аргументов → выполнение по очереди.

Проект демонстрирует чистую архитектуру, обработку ошибок, рекурсивный парсинг и оптимизацию работы с историей. Легко расширяем добавлением новых команд.