\begin{syntax}
  digit ::= "0" - "9"
  \
  hex-digit ::= "0" - "9" | "a" - "f" | "A" - "F"
  \
  oct-digit ::= "0" - "7"
  \
  bin-digit ::= "0" | "1"
  \
  integer ::= digit (digit | "_")*               ;
    | ("0x" | "0X") hex-digit (hex-digit | "_")* ;
    | ("0o" | "0O") oct-digit (oct-digit | "_")* ;
    | ("0b" | "0B") bin-digit (bin-digit | "_")* ;
  \
  real ::= digit+ exponent                      ;
    | digit+ "." digit* exponent?               ;
    | digit* "." digit+ exponent?               ;
    | ("0x" | "0X") hex-digit+ h-exponent                 ;
    | ("0x" | "0X") hex-digit+ "." hex-digit* h-exponent? ;
    | ("0x" | "0X") hex-digit* "." hex-digit+ h-exponent? ;
  \
  exponent ::= ("e" | "E") ("-" | "+")? digit+
  \
  h-exponent ::= ("p" | "P") ("-" | "+")? digit+ %
\end{syntax}
