A constant-definition shall introduce an identifier to denote a value.
constant-definition = identifier '=' constant .
constant = [ sign ] ( unsigned-number ½ constant-identifier ) ½ character-string .
constant-identifier = identifier .
The occurrence of an identifier in a constant-definition of a constant-definition-part of a block shall constitute its defining-point for the region that is the block. The constant in a constant-definition shall not contain an applied occurrence of the identifier in the constant-definition. Each applied occurrence of that identifier shall be a constant-identifier and shall denote the value denoted by the constant of the constant-definition. A constant-identifier in a constant containing an occurrence of a sign shall have been defined to denote a value of real-type or of integer-type. The required constant-identifiers shall be as specified in 6.4.2.2 and 6.7.2.2.
Type-definitions
General
A type-definition shall introduce an identifier to denote a type. Type shall be an attribute that is possessed by every value and every variable. Each occurrence of a new-type shall denote a type that is distinct from any other new-type.
type-definition = identifier '=' type-denoter .
type-denoter = type-identifier ½ new-type .
new-type = new-ordinal-type ½ new-structured-type ½ new-pointer-type .
The occurrence of an identifier in a type-definition of a type-definition-part of a block shall constitute its defining-point for the region that is the block. Each applied occurrence of that identifier shall be a type-identifier and shall denote the same type as that which is denoted by the type-denoter of the type-definition. Except for applied occurrences in the domain-type of a new-pointer-type, the type-denoter shall not contain an applied occurrence of the identifier in the type-definition.
Types shall be classified as simple-types, structured-types or pointer-types. The required type-identifiers and corresponding required types shall be as specified in 6.4.2.2 and 6.4.3.5.
simple-type-identifier = type-identifier .
structured-type-identifier = type-identifier .
pointer-type-identifier = type-identifier .
type-identifier = identifier .
A type-identifier shall be considered as a simple-type-identifier, a structured-type-identifier, or a pointer-type-identifier, according to the type that it denotes.
Simple-types
General
A simple-type shall determine an ordered set of values. A value of an ordinal-type shall have an integer ordinal number; the ordering relationship between any two such values of one type shall be the same as that between their ordinal numbers. An ordinal-type-identifier shall denote an ordinal-type. A real-type-identifier shall denote the real-type.
simple-type = ordinal-type ½ real-type-identifier .
ordinal-type = new-ordinal-type ½ ordinal-type-identifier .
new-ordinal-type = enumerated-type ½ subrange-type .