Modula-3: Numeric literals

## Numeric literals

Numeric literals denote constant non-negative integers or reals. The types of these literals are `INTEGER`, `REAL`, `LONGREAL`, and `EXTENDED`.

A literal `INTEGER` has the form `base_digits`, where `base` is one of "`2`", "`3`", ..., "`16`", and `digits` is a non-empty sequence of the decimal digits `0` through `9` plus the hexadecimal digits `A` through `F`. The "`base_`" can be omitted, in which case `base` defaults to `10`. The digits are interpreted in the given base. Each digit must be less than `base`. For example, `16_FF` and `255` are equivalent integer literals.

If no explicit base is present, the value of the literal must be at most `LAST(INTEGER)`. If an explicit base is present, the value of the literal must be less than `2^Word.Size`, and its interpretation uses the convention of the `Word` interface. For example, on a sixteen-bit two's complement machine, `16_FFFF` and `-1` represent the same value.

A literal `REAL` has the form `decimal E exponent`, where `decimal` is a non-empty sequence of decimal digits followed by a decimal point followed by a non-empty sequence of decimal digits, and `exponent` is a non-empty sequence of decimal digits optionally beginning with a `+` or `-`. The literal denotes `decimal` times `10^exponent`. If "`E exponent`" is omitted, `exponent` defaults to `0`.

`LONGREAL` and `EXTENDED` literals are like `REAL` literals, but instead of `E` they use `D` and `X` respectively.

Case is not significant in digits, prefixes or scale factors. Embedded spaces are not allowed.

For example, `1.0` and `0.5` are valid, `1.` and `.5` are not; `6.624E-27` is a `REAL`, and `3.1415926535d0` a `LONGREAL`.

    Last modified on Wed Apr  3 09:39:02 PST 1996 by heydon
         modified on Mon Apr 18 14:04:55 PDT 1994 by kalsow