@@ -225,6 +225,52 @@ reserved for future extension, that is, the above gives the lexical
225
225
grammar, but a Rust parser will reject everything but the 12 special
226
226
cases mentioned in [ Number literals] ( #number-literals ) below.
227
227
228
+ #### Examples
229
+
230
+ ##### Characters and strings
231
+
232
+ | | Example | Number of ` # ` pairs allowed | Available characters | Escapes | Equivalent to |
233
+ | ---| ---------| -----------------------------| ----------------------| ---------| ---------------|
234
+ | [ Character] ( #character-literals ) | ` 'H' ` | ` N/A ` | All unicode | ` \' ` & [ Byte escapes] ( #byte-escapes ) & [ Unicode escapes] ( #unicode-escapes ) | ` N/A ` |
235
+ | [ String] ( #string-literals ) | ` "hello" ` | ` N/A ` | All unicode | ` \" ` & [ Byte escapes] ( #byte-escapes ) & [ Unicode escapes] ( #unicode-escapes ) | ` N/A ` |
236
+ | [ Raw] ( #raw-string-literals ) | ` r##"hello"## ` | ` 0... ` | All unicode | ` N/A ` | ` N/A ` |
237
+ | [ Byte] ( #byte-literals ) | ` b'H' ` | ` N/A ` | All ASCII | ` \' ` & [ Byte escapes] ( #byte-escapes ) | ` u8 ` |
238
+ | [ Byte string] ( #byte-string-literals ) | ` b"hello" ` | ` N/A ` | All ASCII | ` \" ` & [ Byte escapes] ( #byte-escapes ) | ` &'static [u8] ` |
239
+ | [ Raw byte string] ( #raw-byte-string-literals ) | ` br##"hello"## ` | ` 0... ` | All ASCII | ` N/A ` | ` &'static [u8] ` (unsure...not stated) |
240
+
241
+ ##### Byte escapes
242
+
243
+ | | Name |
244
+ | ---| ------|
245
+ | ` \x7F ` | 8-bit character code (exactly 2 digits) |
246
+ | ` \n ` | Newline |
247
+ | ` \r ` | Carriage return |
248
+ | ` \t ` | Tab |
249
+ | ` \\ ` | Backslash |
250
+
251
+ ##### Unicode escapes
252
+ | | Name |
253
+ | ---| ------|
254
+ | ` \u7FFF ` | 16-bit character code (exactly 4 digits) |
255
+ | ` \U7EEEFFFF ` | 32-bit character code (exactly 8 digits) |
256
+
257
+ ##### Numbers
258
+
259
+ | [ Number literals] ( #number-literals ) ` * ` | Example | Exponentiation | Suffixes |
260
+ | ----------------------------------------| ---------| ----------------| ----------|
261
+ | Decimal integer | ` 98_222i ` | ` N/A ` | Integer suffixes |
262
+ | Hex integer | ` 0xffi ` | ` N/A ` | Integer suffixes |
263
+ | Octal integer | ` 0o77i ` | ` N/A ` | Integer suffixes |
264
+ | Binary integer | ` 0b1111_0000i ` | ` N/A ` | Integer suffixes |
265
+ | Floating-point | ` 123.0E+77f64 ` | ` Optional ` | Floating-point suffixes |
266
+
267
+ ` * ` All number literals allow ` _ ` as a visual separator: ` 1_234.0E+18f64 `
268
+
269
+ ##### Suffixes
270
+ | Integer | Floating-point |
271
+ | ---------| ----------------|
272
+ | ` i ` (` int ` ), ` u ` (` uint ` ), ` u8 ` , ` i8 ` , ` u16 ` , ` i16 ` , ` u32 ` , ` i32 ` , ` u64 ` , ` i64 ` | ` f32 ` , ` f64 ` |
273
+
228
274
#### Character and string literals
229
275
230
276
``` {.ebnf .gram}
@@ -253,15 +299,21 @@ nonzero_dec: '1' | '2' | '3' | '4'
253
299
| '5' | '6' | '7' | '8' | '9' ;
254
300
```
255
301
302
+ ##### Character literals
303
+
256
304
A _ character literal_ is a single Unicode character enclosed within two
257
305
` U+0027 ` (single-quote) characters, with the exception of ` U+0027 ` itself,
258
306
which must be _ escaped_ by a preceding U+005C character (` \ ` ).
259
307
308
+ ##### String literals
309
+
260
310
A _ string literal_ is a sequence of any Unicode characters enclosed within two
261
311
` U+0022 ` (double-quote) characters, with the exception of ` U+0022 ` itself,
262
312
which must be _ escaped_ by a preceding ` U+005C ` character (` \ ` ), or a _ raw
263
313
string literal_ .
264
314
315
+ ##### Character escapes
316
+
265
317
Some additional _ escapes_ are available in either character or non-raw string
266
318
literals. An escape starts with a ` U+005C ` (` \ ` ) and continues with one of the
267
319
following forms:
@@ -281,6 +333,8 @@ following forms:
281
333
* The _ backslash escape_ is the character ` U+005C ` (` \ ` ) which must be
282
334
escaped in order to denote * itself* .
283
335
336
+ ##### Raw string literals
337
+
284
338
Raw string literals do not process any escapes. They start with the character
285
339
` U+0072 ` (` r ` ), followed by zero or more of the character ` U+0023 ` (` # ` ) and a
286
340
` U+0022 ` (double-quote) character. The _ raw string body_ is not defined in the
@@ -322,12 +376,16 @@ raw_byte_string : '"' raw_byte_string_body '"' | '#' raw_byte_string '#' ;
322
376
323
377
```
324
378
379
+ ##### Byte literals
380
+
325
381
A _ byte literal_ is a single ASCII character (in the ` U+0000 ` to ` U+007F `
326
382
range) enclosed within two ` U+0027 ` (single-quote) characters, with the
327
383
exception of ` U+0027 ` itself, which must be _ escaped_ by a preceding U+005C
328
384
character (` \ ` ), or a single _ escape_ . It is equivalent to a ` u8 ` unsigned
329
385
8-bit integer _ number literal_ .
330
386
387
+ ##### Byte string literals
388
+
331
389
A _ byte string literal_ is a sequence of ASCII characters and _ escapes_
332
390
enclosed within two ` U+0022 ` (double-quote) characters, with the exception of
333
391
` U+0022 ` itself, which must be _ escaped_ by a preceding ` U+005C ` character
@@ -347,6 +405,8 @@ following forms:
347
405
* The _ backslash escape_ is the character ` U+005C ` (` \ ` ) which must be
348
406
escaped in order to denote its ASCII encoding ` 0x5C ` .
349
407
408
+ ##### Raw byte string literals
409
+
350
410
Raw byte string literals do not process any escapes. They start with the
351
411
character ` U+0062 ` (` b ` ), followed by ` U+0072 ` (` r ` ), followed by zero or more
352
412
of the character ` U+0023 ` (` # ` ), and a ` U+0022 ` (double-quote) character. The
0 commit comments