Это приложение-калькулятор, разработанное на Flutter с использованием архитектуры BLoC (Business Logic Component). Калькулятор принимает на вход математические выражения в виде строки (например, "2+2"
), токенизирует их, преобразует в постфиксную запись с помощью алгоритма сортировочной станции (Shunting Yard Algorithm) и рассчитывает результат.
- Архитектура BLoC: логика и состояние приложения разделены, что упрощает тестирование и поддержку.
- Парсинг выражений: поддержка операций с приоритетами и скобок.
- Алгоритм сортировочной станции: преобразование инфиксной записи выражений в постфиксную (обратную польскую нотацию).
- Токенизация: входная строка разбивается на токены для дальнейшей обработки.
- Поддержка основных математических операций: сложение, вычитание, умножение, деление и работа со скобками.
- Flutter: для разработки пользовательского интерфейса.
- Flutter BLoC: для управления состоянием приложения.
- Dart: основной язык разработки.
-
Убедитесь, что у вас установлен Flutter SDK.
-
Клонируйте репозиторий:
git clone https://github.com/F0rgenet/flutter-calculator.git cd flutter-calculator
-
Установите зависимости:
flutter pub get
-
Запустите приложение:
flutter run
lib/
bloc/
: содержит файлы для управления состоянием (BLoC и события).core/
: содержит основные модули, такие как токенизация и парсинг.ui/
: пользовательский интерфейс приложения.main.dart
: точка входа в приложение.
Введённая строка (например, "2+2"
) разбивается на токены, которые содержат:
- Значение токена (число или оператор).
- Тип токена (число, оператор, скобка и т.д.).
- Входная строка преобразуется в инфиксное выражение (список токенов).
- Алгоритм сортировочной станции преобразует это выражение в постфиксную запись, соблюдая приоритет операций и ассоциативность.
- Постфиксная запись передаётся на расчёт результата.
Постфиксное выражение обрабатывается с использованием стека, чтобы выполнить вычисления.
- Пользователь вводит:
"2+2"
. - Токенизация создаёт следующий список:
[ 2, +, 2]
- Алгоритм сортировочной станции преобразует в:
[ 2, 2, + ]
- Вычисляется результат:
4
.
bloc/calculator_bloc.dart
: управляет событиями и состоянием калькулятора.core/utils/tokenizer.dart
: модель для токенов выражений.core/utils/parser.dart
: содержит реализацию алгоритма сортировочной станции.
- Автор: Павел Елисеев
- GitHub: github.com/f0rgenet
- Email: forgenet@inbox.ru