team-work-it-SofiaL
Вариант 6
Проект: Система парсинга и выполнения простых команд
Участники:
• Student1 - SofiaL
• Student2 - anastskl
• Student3 - katherinesiv
У кого я была student 2 - katherinesiv
🚀 Процесс работы над проектом
Интерпретатор команд с историей и поиском
1. Student 1
Создаёт и коммитит файл спецификации в папку , в котором описывает:
- Концепцию проекта: консольный интерпретатор команд на C#
- Поддерживаемые команды:
,calc,sort,search,filter,historyhelp - Обязательные требования:
- Рекурсивный парсинг вложенных команд (
)$(...) - Хранение истории последних 100 выполненных команд
- Бинарный поиск по ключевому слову в истории
- Чёткая OOP-архитектура с интерфейсами
,ICommand,IParserIExecutor - Валидация входных данных и обработка ошибок через иерархию исключений
- Рекурсивный парсинг вложенных команд (
- Форматы ввода и вывода
- Список основных классов и методов для реализации
2. Student 2
На основе спецификации реализует полный код в файле , помещает его в папку , и создаёт Pull Request (PR) в основную ветку.
3. Student 3
Проводит ревью кода в рамках PR:
- Проверяет соответствие реализации требованиям из spec.md
- Оценивает читаемость, структуру и качество кода
- Убеждается, что реализованы:
- Рекурсивный парсинг
- Алгоритм «shunting-yard» для вычислений
- Бинарный поиск в истории (через отсортированный список)
- Обработка всех типов исключений
- Оставляет комментарии, предлагает улучшения или запрашивает исправления
4. Обсуждение
Группа обсуждает замечания из ревью:
- Принимает PR, если всё соответствует спецификации
- Или вносит изменения и повторно отправляет на проверку
- Фиксирует окончательную версию кода
5. Демонстрация (demo/)
Создаётся папка с артефактами, подтверждающими работоспособность:
- Примеры вывода с временем выполнения и метками времени
- Доказательство корректной работы бинарного поиска по истории
6. Документация (README.md)
В корне репозитория создаётся файл , содержащий:
- GitVerse-аккаунты всех участников
- Описание ролей: кто был Student 1, 2, 3
- Краткое техническое описание проекта и архитектуры
- Инструкцию по запуску (интерактивный и пакетный режимы)
- Указание, у кого вы выполняли роль Student 2
7. Слияние (Merge)
После успешного ревью и подготовки всех артефактов — PR сливается в ветку .
✅ Итог: Рабочий, тестируемый, документированный и архитектурно чистый интерпретатор команд, полностью соответствующий заданной спецификации.
Структура репозитория
.
├── dev/
│ └── solution.cs # Исходный код консольного приложения
├── spec/
│ └── codex.md # Детальная спецификация задания
├── demo/
│ └── artifacts.md # Папка для демонстрационных артефактов (скриншоты, примеры ввода/вывода)
└── README.md # Общее описание проекта, инструкции по сборке/запуску и высокоуровневое описание архитектуры
Описание созданного кода
Краткое описание кода из dev/solution.cs:
Command Interpreter (C#)
Интерпретатор командной строки на C#, реализующий набор встроенных команд с поддержкой вложенных выражений, валидации, истории выполнения и чёткой архитектуры.
📌 Основные команды
| Команда | Назначение |
|---|---|
| Вычисляет математическое выражение (поддержка , , , , скобок) |
| Сортирует целые числа (алгоритм — быстрая сортировка) |
| Ищет ключ в списке (регистронезависимо), возвращает индексы |
| Фильтрует числа по условию (, , , , , ) |
| Управление историей команд |
| Вывод справки |
Поддерживаются вложенные команды через синтаксис
, например:$(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-тесты (в ) для ключевых команд:
- calc
- sort
- search
- filter
▶️ Режимы запуска
- Интерактивный: запуск без аргументов → REPL-оболочка.
- Пакетный: передача команд как аргументов → выполнение по очереди.
Проект демонстрирует чистую архитектуру, обработку ошибок, рекурсивный парсинг и оптимизацию работы с историей. Легко расширяем добавлением новых команд.