Структура проекта:
gtest— библиотека Google Test.include— директория для размещения заголовочных файлов.samples— директория для консольного приложения.src— директория с исходными кодами (cpp-файлы).test— директория с модульными тестами и основным приложением,git st инициализирующим запуск тестов.README.md— информация о проекте, которую вы сейчас читаете.- Служебные файлы
CMakeLists.txt— корневой файл для сборки проекта с помощью CMake. Может быть использован для генерации проекта в среде разработки, отличной от Microsoft Visual Studio.
В решении содержатся следующие модули:
- Модуль
Translator, содержащий реализацию класса транслятор арифметического выражения (файлы./include/Translator.h,./src/Translator.cpp). Модуль агрегирует классы LexicalAnalyzer, SintaxisAnalyzer, Solver, абстрактный класс Term и его наследники. - Модуль
LexicalAnalyzer, содержащий реализацию класса, который проверяет введенное выражение на корректность введенных символов и преобразует в массив терм (файлы./include/LexicalAnalyzer.h,./src/LexicalAnalyzer.cpp). - Модуль
SintaxisAnalyzer, содержащий реализацию класса, который проверяет введенное выражение на синтаксическую корректность (корректность скобок, корректность последовательности элементов) и переводит запись в польскую форму (файлы./include/SintaxisAnalyzer.h,./src/SintaxisAnalyzer.cpp). - Модуль
Solver, содержащий реализацию класса, вычисляющего значение выражения (файлы./include/Solver.h,./src/Solver.cpp). - Модуль
Term, содержащий реализацию абстрактного класса терма, и его наследников (файл./include/Term.h). Класс и его наследники - сущности, из которых может состоять выражение (скобки, число, переменные, функции(унарные и бинарные). - Модуль
SolutionManager, содержащий реализацию класса, реализующего консольное приложение (файлы./include/SolutionManager.h,./src/SolutionManager.cpp). - Консольное приложение (файл
./samples/console_app.cpp). - Тесты для класса транслятор (файлы ./test/test_translator.cpp).
Все числа, использующиеся в вычислениях, вещественные.
Поддерживается 3 формата ввода числа:
- Без точки: 123
- С точкой, но без дробной части: 12.
- Просто с точкой: 12.46
Имя переменной может включать символы "A - Z", "a - z", "0 - 9", но при этом имя переменной не может начинаться с цифры.
- Примеры допустимых имён: aa, a1, MyVar
Перед использованием переменной её необходимо инициализировать. Значение переменной можно менять. Присваивать значение переменной необходимо в формате: <имя переменной> = <новое значение(возможно вычисляемое)>.
Допустимые операции:
- Сложение: 1 + 2
- Вычитание: 3.5 - 2
- Умножение: 4 * 7.3
- Деление: 3.7 / 8.2
- Унарный минус: -a1
В вычислениях также можно использовать круглые скобки. При этом скобочная последовательность должна быть правильная.
Транслятор можно расширить:
- добавив возможность ввода чисел в формате .12 (= 0.12)
- добавив функции (sin(x), exp(x) и тд.)
- добавив константы (PI, E и тд.)
Проблемы при масштабировании могут возникнуть преимущественно на этапе лексического и, возможно, синтаксического анализа.