Skip to content

Учебный проект, реализующий транслятор арифметических выражений

Notifications You must be signed in to change notification settings

vassyusha/mp2-lab3-translator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Транслятор арифметических выражений

Общая структура проекта

Структура проекта:

  • 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 и тд.)

Проблемы при масштабировании могут возникнуть преимущественно на этапе лексического и, возможно, синтаксического анализа.

About

Учебный проект, реализующий транслятор арифметических выражений

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published