Numeric literals denote constant non-negative integers or reals. The types of these literals are INTEGER, LONGINT, 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 LONGINT has the form integer L, where integer has the same form as a literal INTEGER. If no explicit base is present, the value of the literal must be at most LAST(LONGINT). If an explicit base is present, the value of the literal must be less than 2^Long.Size, and its interpretation uses the convention of the Long interface. For example, the LONGINT having the value zero would be written 0L.
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.