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