Lexical

ident ::= (LETTER | "_") { LETTER | DIGIT | "_" } ;

WS ::= { " " | "\t" | NEWLINE } ;
WS1 ::= ( " " | "\t" | NEWLINE ) { " " | "\t" | NEWLINE } ;

NEWLINE ::= "\n" | "\r\n" ;

LETTER ::= "a"…"z" | "A"…"Z" ;
DIGIT ::= "0"…"9" ;

Literals (summary):

bool_lit   ::= "true" | "false" ;
int_lit    ::= [ "-" ] DIGIT { DIGIT } [ ("u8"|"u16"|"u32"|"u64"|"i8"|"i16"|"i32"|"i64") ] ;
string_lit ::= "\"" { string_char } "\"" | raw_string_lit ;