Class Expression


  • public class Expression
    extends Object
    Публичный API для вычисления математических выражений.

    Класс предоставляет простой интерфейс для парсинга и вычисления арифметических выражений, включая поддержку:

    • Базовых арифметических операций: +, -, *, /
    • Скобок для группировки: ( )
    • Математических функций: sin, cos, tan, ln, log10, log2, sqrt, abs
    • Переменных (одиночные буквы): x, y, z и т.д.

    Архитектура: Класс реализует паттерн Facade, скрывая сложность токенизации, парсинга (Shunting Yard алгоритм) и вычисления (RPN через стек).

    Примеры использования:

    
     // Простое выражение
     Expression expr1 = new Expression("2 + 2 * (3 - 1)");
     double result1 = expr1.calc(); // 6.0
    
     // С функциями
     Expression expr2 = new Expression("sqrt(16) + abs(-5)");
     double result2 = expr2.calc(); // 9.0
    
     // С переменными (запрос значений в консоли)
     Expression expr3 = new Expression("x * x + y");
     double result3 = expr3.calc(); // запросит ввод x, затем y
    
     // С кастомным evaluator (для тестирования)
     StackEvaluator customEvaluator = new StackEvaluator(provider, registry);
     Expression expr4 = new Expression("x + y", customEvaluator);
     
    Since:
    1.0
    See Also:
    Tokenizer, Parser, StackEvaluator
    • Constructor Detail

      • Expression

        public Expression​(String expression)
        Создаёт выражение для вычисления с настройками по умолчанию.

        Использует стандартные компоненты:

        • Tokenizer — для лексического анализа
        • Parser — для преобразования в RPN
        • StackEvaluator — для вычисления без переменных
        Parameters:
        expression - строка математического выражения
        Throws:
        ExpressionException - если выражение содержит синтаксические ошибки
        See Also:
        Expression(String, StackEvaluator)
      • Expression

        public Expression​(String expression,
                          StackEvaluator evaluator)
        Создаёт выражение с кастомным вычислителем.

        Позволяет передать StackEvaluator с переменными с дополнительными функциями.

        Parameters:
        expression - строка математического выражения
        evaluator - вычислитель RPN с настроенными зависимостями
        Throws:
        ExpressionException - если выражение содержит синтаксические ошибки
    • Method Detail

      • calc

        public double calc()
                    throws ExpressionException
        Вычисляет значение математического выражения.

        Метод выполняет три этапа:

        1. Токенизация — разбиение строки на токены (числа, операторы, функции)
        2. Парсинг — преобразование инфиксной записи в обратную польскую (RPN)
        3. Вычисление — вычисление RPN через стек

        Поддержка переменных: Если выражение содержит переменные (например, "x + y"), и StackEvaluator был создан с VariableProvider, то при вычислении значения переменных будут запрошены у пользователя через консоль (если ещё не закэшированы).

        Returns:
        результат вычисления выражения
        Throws:
        ExpressionException - если:
        • выражение содержит синтаксические ошибки
        • происходит деление на ноль
        • используется неизвестная функция или переменная
        • некорректное количество аргументов у функции
        • переменные не поддерживаются (нет VariableProvider)
        See Also:
        Tokenizer.tokenize(String), Parser.parse(List), Evaluator.evaluate(List)