private void processBinaryOperators(List<ExpressionElement> list,
			Set<ExpressionOperator> operators) throws ExpressionException {
		// can't have a valid binary operator at index 0, so start looking at index 1
		int operatorIndex = findValidBinaryOperator(list, operators, 1);
		while (operatorIndex >= 0) {
			// we can safely cast here because we checked in the findValidBinaryOperator method
			ExpressionOperator operator = (ExpressionOperator) list.get(operatorIndex);
			ExpressionValue value1 = (ExpressionValue) list.get(operatorIndex - 1);
			ExpressionValue value2 = (ExpressionValue) list.get(operatorIndex + 1);
			ExpressionValue newValue = value1.applyBinaryOperator(operator, value2);
			list.set(operatorIndex - 1, newValue);
			list.subList(operatorIndex, operatorIndex + 2).clear();

			// After the operator completed, the list has been changed and the sequence
			// "value operator value" has been replace with the resulting value of the operation.

			// Now look for the next operator in the current set of operators we are evaluating
			operatorIndex = findValidBinaryOperator(list, operators, operatorIndex);
		}

	}
Evaluates a list of valid expression elements into a single final value.
@param list the list of valid expression elements.
@return the final value the expression evaluates to
@throws ExpressionException if sequence of expression elements is not in a valid order such
that it evaluates to a single value. (such as two values not being separated by an operator)
Ghidra/Framework/Generic/src/main/java/generic/expressions/ExpressionEvaluator.java