@@ -31,23 +31,27 @@ You may also be interested in the [grammar].
3131
3232## Unicode productions
3333
34- A few productions in Rust's grammar permit Unicode code points outside the ASCII
35- range. We define these productions in terms of character properties specified
36- in the Unicode standard, rather than in terms of ASCII-range code points. The
37- section [ Special Unicode Productions] ( #special-unicode-productions ) lists these
38- productions.
34+ A few productions in Rust's grammar permit Unicode code points outside the
35+ ASCII range. We define these productions in terms of character properties
36+ specified in the Unicode standard, rather than in terms of ASCII-range code
37+ points. The grammar has a [ Special Unicode Productions] [ unicodeproductions ]
38+ section that lists these productions.
39+
40+ [ unicodeproductions ] : grammar.html#special-unicode-productions
3941
4042## String table productions
4143
4244Some rules in the grammar &mdash ; notably [ unary
4345operators] ( #unary-operator-expressions ) , [ binary
44- operators] ( #binary-operator-expressions ) , and [ keywords] ( # keywords) &mdash ; are
46+ operators] ( #binary-operator-expressions ) , and [ keywords] [ keywords ] &mdash ; are
4547given in a simplified form: as a listing of a table of unquoted, printable
4648whitespace-separated strings. These cases form a subset of the rules regarding
4749the [ token] ( #tokens ) rule, and are assumed to be the result of a
4850lexical-analysis phase feeding the parser, driven by a DFA, operating over the
4951disjunction of all such string table entries.
5052
53+ [ keywords ] : grammar.html#keywords
54+
5155When such a string enclosed in double-quotes (` " ` ) occurs inside the grammar,
5256it is an implicit reference to a single member of such a string table
5357production. See [ tokens] ( #tokens ) for more information.
@@ -75,7 +79,7 @@ An identifier is any nonempty Unicode[^non_ascii_idents] string of the following
7579- The first character has property ` XID_start `
7680- The remaining characters have property ` XID_continue `
7781
78- that does _ not_ occur in the set of [ keywords] ( # keywords) .
82+ that does _ not_ occur in the set of [ keywords] [ keywords ] .
7983
8084> ** Note** : ` XID_start ` and ` XID_continue ` as character properties cover the
8185> character ranges used to form the more familiar C and Java language-family
@@ -401,7 +405,7 @@ Symbols are a general class of printable [token](#tokens) that play structural
401405roles in a variety of grammar productions. They are catalogued here for
402406completeness as the set of remaining miscellaneous printable tokens that do not
403407otherwise appear as [ unary operators] ( #unary-operator-expressions ) , [ binary
404- operators] ( #binary-operator-expressions ) , or [ keywords] ( # keywords) .
408+ operators] ( #binary-operator-expressions ) , or [ keywords] [ keywords ] .
405409
406410
407411## Paths
@@ -547,7 +551,7 @@ _name_ s that occur in its body. At the "current layer", they all must repeat
547551the same number of times, so ` ( $( $i: ident ),* ; $( $j: ident ),* ) => ( $(
548552($i,$j) ),* )` is valid if given the argument ` (a,b,c ; d,e,f)`, but not
549553` (a,b,c ; d,e) ` . The repetition walks through the choices at that layer in
550- lockstep, so the former input transcribes to ` ( ( a,d), (b,e), (c,f) ) ` .
554+ lockstep, so the former input transcribes to ` (a,d), (b,e), (c,f) ` .
551555
552556Nested repetitions are allowed.
553557
@@ -611,7 +615,7 @@ module needs its own source file: [module definitions](#modules) can be nested
611615within one file.
612616
613617Each source file contains a sequence of zero or more ` item ` definitions, and
614- may optionally begin with any number of [ attributes] (#Items and attributes)
618+ may optionally begin with any number of [ attributes] ( #items- and- attributes )
615619that apply to the containing module, most of which influence the behavior of
616620the compiler. The anonymous crate module can have additional attributes that
617621apply to the crate as a whole.
@@ -653,7 +657,7 @@ There are several kinds of item:
653657* [ ` use ` declarations] ( #use-declarations )
654658* [ modules] ( #modules )
655659* [ functions] ( #functions )
656- * [ type aliases ] ( #type-aliases )
660+ * [ type definitions ] ( grammar.html #type-definitions )
657661* [ structures] ( #structures )
658662* [ enumerations] ( #enumerations )
659663* [ constant items] ( #constant-items )
@@ -773,7 +777,7 @@ extern crate std as ruststd; // linking to 'std' under another name
773777A _ use declaration_ creates one or more local name bindings synonymous with
774778some other [ path] ( #paths ) . Usually a ` use ` declaration is used to shorten the
775779path required to refer to a module item. These declarations may appear at the
776- top of [ modules] ( #modules ) and [ blocks] ( #blocks ) .
780+ top of [ modules] ( #modules ) and [ blocks] ( grammar.html#block-expressions ) .
777781
778782> ** Note** : Unlike in many languages,
779783> ` use ` declarations in Rust do * not* declare linkage dependency with external crates.
@@ -1144,9 +1148,7 @@ let px: i32 = match p { Point(x, _) => x };
11441148```
11451149
11461150A _ unit-like struct_ is a structure without any fields, defined by leaving off
1147- the list of fields entirely. Such types will have a single value, just like
1148- the [ unit value ` () ` ] ( #unit-and-boolean-literals ) of the unit type. For
1149- example:
1151+ the list of fields entirely. Such types will have a single value. For example:
11501152
11511153```
11521154struct Cookie;
@@ -2436,11 +2438,6 @@ comma:
24362438(0); // zero in parentheses
24372439```
24382440
2439- ### Unit expressions
2440-
2441- The expression ` () ` denotes the _ unit value_ , the only value of the type with
2442- the same name.
2443-
24442441### Structure expressions
24452442
24462443There are several forms of structure expressions. A _ structure expression_
@@ -3281,7 +3278,7 @@ constructor or `struct` field may refer, directly or indirectly, to the
32813278enclosing ` enum ` or ` struct ` type itself. Such recursion has restrictions:
32823279
32833280* Recursive types must include a nominal type in the recursion
3284- (not mere [ type definitions] ( #type-definitions ) ,
3281+ (not mere [ type definitions] ( grammar.html #type-definitions) ,
32853282 or other structural types such as [ arrays] ( #array,-and-slice-types ) or [ tuples] ( #tuple-types ) ).
32863283* A recursive ` enum ` item must have at least one non-recursive constructor
32873284 (in order to give the recursion a basis case).
0 commit comments