Package org.example.expression.evaluator
Class StackEvaluator
- java.lang.Object
-
- org.example.expression.evaluator.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 Summary
Constructors Constructor Description StackEvaluator()Создаёт эвалюатор с настройками по умолчанию (без переменных).StackEvaluator(VariableProvider variableProvider, FunctionRegistry functionRegistry)Создаёт эвалюатор с зависимостями.
-
-
-
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:
evaluatein interfaceEvaluator- Parameters:
rpn- список токенов в постфиксной нотации- Returns:
- результат вычисления
- Throws:
ExpressionException- если выражение некорректно
-
-