private static bool MergeAddition(ExpressionBase left, ExpressionBase right, out ExpressionBase result) { // if either side is a string, combine to a larger string if (left.Type == ExpressionType.StringConstant || right.Type == ExpressionType.StringConstant) { var builder = new StringBuilder(); left.AppendStringLiteral(builder); right.AppendStringLiteral(builder); result = new StringConstantExpression(builder.ToString()); return(true); } // if either side is a float, convert both to float if (left.Type == ExpressionType.FloatConstant || right.Type == ExpressionType.FloatConstant) { if (!ConvertToFloat(ref left, ref right, out result)) { return(false); } result = new FloatConstantExpression(((FloatConstantExpression)left).Value + ((FloatConstantExpression)right).Value); return(true); } if (left.Type == ExpressionType.IntegerConstant && right.Type == ExpressionType.IntegerConstant) { result = new IntegerConstantExpression(((IntegerConstantExpression)left).Value + ((IntegerConstantExpression)right).Value); return(true); } result = new ParseErrorExpression("Cannot add expressions"); return(false); }