Class StackEvaluator

  • All Implemented Interfaces:
    Evaluator

    public class StackEvaluator
    extends Object
    implements Evaluator
    Интерпретатор математических выражений в обратной польской записи (RPN).

    Реализует паттерн Interpreter. Вычисление происходит за один проход (O(N)) с использованием стека для операндов.

    Алгоритм: 1. Если токен — число: положить на стек. 2. Если токен — переменная: получить значение из VariableProvider и положить на стек. 3. Если токен — оператор: извлечь операнды, вычислить результат, положить обратно. 4. Если токен — функция: извлечь аргумент, вычислить, положить обратно.

    See Also:
    Evaluator, VariableProvider
    • Constructor Detail

      • StackEvaluator

        public StackEvaluator​(VariableProvider variableProvider,
                              FunctionRegistry functionRegistry)
        Создаёт эвалюатор с зависимостями.
        Parameters:
        variableProvider - провайдер для получения значений переменных
        functionRegistry - реестр доступных функций
      • StackEvaluator

        public StackEvaluator()
        Создаёт эвалюатор с настройками по умолчанию (без переменных). Полезен для простых выражений вида "2 + 2".
    • Method Detail

      • evaluate

        public double evaluate​(List<Token> rpn)
                        throws ExpressionException
        Description copied from interface: Evaluator
        Вычисляет значение выражения.
        Specified by:
        evaluate in interface Evaluator
        Parameters:
        rpn - список токенов в постфиксной нотации
        Returns:
        результат вычисления
        Throws:
        ExpressionException - если выражение некорректно