# Range expressions
+> **<sup>Syntax</sup>**
+> _RangeExpression_ :
+> _RangeExpr_
+> | _RangeFromExpr_
+> | _RangeToExpr_
+> | _RangeFullExpr_
+>
+> _RangeExpr_ :
+> [_Expression_] `..` [_Expression_]
+>
+> _RangeFromExpr_ :
+> [_Expression_] `..`
+>
+> _RangeToExpr_ :
+> `..` [_Expression_]
+>
+> _RangeFullExpr_ :
+> `..`
+
The `..` operator will construct an object of one of the `std::ops::Range` (or
-`core::ops::Range`) variants.
+`core::ops::Range`) variants, according to the following table:
+
+| Production | Syntax | Type | Range |
+|------------------------|---------------|------------------------------|-----------------------|
+| _RangeExpr_ | start`..`end | [std::ops::Range] | start ≤ x < end |
+| _RangeFromExpr_ | start`..` | [std::ops::RangeFrom] | start ≤ x |
+| _RangeToExpr_ | `..`end | [std::ops::RangeTo] | x < end |
+| _RangeFullExpr_ | `..` | [std::ops::RangeFull] | - |
+
+Examples:
```rust
1..2; // std::ops::Range
assert_eq!(x, y);
```
+
+Ranges can be used in `for` loops:
+
+```rust
+for i in 1..11 {
+ println!("{}", i);
+}
+```
+
+[_Expression_]: expressions.html
+
+[std::ops::Range]: https://doc.rust-lang.org/std/ops/struct.Range.html
+[std::ops::RangeFrom]: https://doc.rust-lang.org/std/ops/struct.RangeFrom.html
+[std::ops::RangeTo]: https://doc.rust-lang.org/std/ops/struct.RangeTo.html
+[std::ops::RangeFull]: https://doc.rust-lang.org/std/ops/struct.RangeFull.html