private Double calculateExpressionValue() throws MalformedParenthesisException, InvalidOperandException, MalformedTokenException, MalformedDecimalException {

		if(this.expressionList==null) {
			
			tokenize();
		}
		
		//Magic happens here (i.e. PEMDAS)
		performParentheticalExpressionEvaluation();
		performExponentiationSubstitution();
		performMultiplicationAndDivisionSubstitution();
		performSubtractionSubstitution();
		performAdditionSubstitution();
		
		Double value = Double.valueOf(this.expressionList.get(0).getUnderlyingObject().toString());
		this.expressionValue = value;
		this.hasBeenEvaluated = true;
		//assume that we've burned it down to one object at this point
		return value;
		
	}