Value optimizeValue(Value s) {
		if(s instanceof ConstantValue) {
			
		} else if(s instanceof VariableAssign) {
			
		} else if(s instanceof Expression) {
			Expression exp = (Expression) s;
			
			if(exp.value.equals("+")) {
				List<Value> opr = new LinkedList<Value>();
				boolean firstConst = false;
				
				for(int i = 0; i < exp.operands.size(); i++) {
					exp.operands.set(i, optimizeValue(exp.operands.get(i)));
				}
				
				for(Value v : exp.operands) {
					if(v instanceof ConstantValue) {
						if(firstConst) {
							int value = Integer.valueOf(v.value)
										+ Integer.valueOf(opr.get(0).value);
							opr.set(0, new ConstantValue(Integer.toString(value), v.type));
							firstConst = true;
						} else {
							opr.add(0, v);
						}
					} else {
						
					}
				}
			}
		}
		return s;
	}