(* Entry Point *) ::= ( ( | ) ( | ))* (* Translation Unit *) ::= | (* Variables *) ::= 'var' ':' ? ::= 'const' ':' ::= ::= '=' (* Functions *) ::= 'fn' '(' ( | ) ')' ':' ::= ::= ':' ( ',' )* ::= ::= ::= '{' ? ( )* ? '}' ::= ( ',' )* ::= '(' ( | ) ')' ::= | | | | | ::= 'if' ( 'else' ( | ) )? ::= 'while' ::= 'return' (* Statements *) ::= ';' | ::= | | ::= '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '&=' | '^=' | '|=' (* Expressions *) ::= ::= ::= ( )* ::= ( '||' )* ::= ( '&&' )* ::= ( '|' )* ::= ( '^' )* ::= ( '&' )* ::= ( ('==' | '!=') )* ::= ( ('<' | '>' | '<=' | '>=') )* ::= ( ('<<' | '>>') )* ::= ( ('+' | '-') )* ::= ( ('*' | '/' | '%') )* ::= ( )* ::= '&' | '*' | '+' | '-' | '~' | '!' ::= | | | '(' ')' (* Identifiers *) ::= ('u8' | 'u16' | 'u32' | 'u64') ( '*')* ::= ( | '_') ( | | '_')* (* Literals *) ::= | ::= #'[1-9]' ( | '_')* | '0' ::= #'0[Xx]' ( | '_')* (* Utilities *) ::= '#' #'[^\n]*' ::= + ::= * ::= | ::= #'[\n\v\f\r]' | '\r\n' ::= #'[ \t]' ::= #'[a-zA-Z]' ::= #'[0-9]' ::= | #'[a-fA-F]' ::= #'$'