Notation
Unicode productions
A few productions in Rust's grammar permit Unicode code points outside the ASCII range. We define these productions in terms of character properties specified in the Unicode standard, rather than in terms of ASCII-range code points. The grammar has a Special Unicode Productions section that lists these productions.
String table productions
Some rules in the grammar — notably unary operators, binary operators, and keywords — are given in a simplified form: as a listing of printable strings. These cases form a subset of the rules regarding the token rule, and are assumed to be the result of a lexical-analysis phase feeding the parser, driven by a DFA, operating over the disjunction of all such string table entries.
When such a string in monospace
font occurs inside the grammar,
it is an implicit reference to a single member of such a string table
production. See tokens for more information.
Grammar
The following notations are used by the Lexer and Syntax grammar snippets:
Notation | Examples | Meaning |
---|---|---|
CAPITAL | KW_IF, INTEGER_LITERAL | A token produced by the lexer |
CamelCase | HexDigit, BlockCommentOrDoc | An auxiliar production that does not generate a token |
ItalicCamelCase | LetExpression, Item | A syntactical production |
string | x , while , * | The exact character(s) |
\x | \n, \r, \t, \0 | The character represented by this escape |
x ? | pub ? | An optional item |
x * | OuterAttribute * | 0 or more of x |
x + | XID_Continue + | 1 or more of x |
x a..b | HEX_DIGIT 1..6 | a to b repetitions of x |
| | u8 | u16 , Block | Item | Either one or another |
[ ] | [b B ] | Any of the characters listed |
[ - ] | [a -z ] | Any of the characters in the range |
~[ ] | ~[a -z ] | Any characters, except those listed |
~string | ~\n , ~*/ | Any characters, except this sequence |
( ) | (, Parameter)? | Groups items |