- (1)
- An enumeration_type_definition defines an enumeration type.
(2)
enumeration_type_definition ::=
(enumeration_literal_specification {, enumeration_literal_specification})
(3)
enumeration_literal_specification ::= defining_identifier | defining_character_literal
(4)
defining_character_literal ::= character_literal
Legality Rules
- (5)
- The defining_identifiers and defining_character_literals listed in an
enumeration_type_definition shall be distinct.
Static Semantics
- (6)
- Each enumeration_literal_specification is the explicit declaration of the
corresponding enumeration literal: it declares a parameterless function,
whose defining name is the defining_identifier or defining_character_literal,
and whose result type is the enumeration type.
- (7)
- Each enumeration literal corresponds to a distinct value of the
enumeration type, and to a distinct position number. The position number of
the value of the first listed enumeration literal is zero; the position
number of the value of each subsequent enumeration literal is one more than
that of its predecessor in the list.
- (8)
- The predefined order relations between values of the enumeration type
follow the order of corresponding position numbers.
- (9)
- If the same defining_identifier or defining_character_literal is specified
in more than one enumeration_type_definition, the corresponding enumeration
literals are said to be overloaded. At any place where an overloaded enumeration
literal occurs in the text of a program, the type of the enumeration literal
has to be determinable from the context (see 8.6).
Dynamic Semantics
- (10)
- The elaboration of an enumeration_type_definition creates the
enumeration type and its first subtype, which is constrained to the base
range of the type.
- (11)
- When called, the parameterless function associated with an enumeration
literal returns the corresponding value of the enumeration type.
-
- (12)
(22) If an enumeration literal occurs in a context that does not otherwise
suffice to determine the type of the literal, then qualification by the
name of the enumeration type is one way to resolve the ambiguity (see
4.7).
Examples
- (13)
- Examples of enumeration types and subtypes:
(14)
type Day is (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
type Suit is (Clubs, Diamonds, Hearts, Spades);
type Gender is (M, F);
type Level is (Low, Medium, Urgent);
type Color is (White, Red, Yellow, Green, Blue, Brown, Black);
type Light is (Red, Amber, Green); -- Red and Green are overloaded
(15)
type Hexa is ('A', 'B', 'C', 'D', 'E', 'F');
type Mixed is ('A', 'B', '*', B, None, '?', '%');
(16)
subtype Weekday is Day range Mon .. Fri;
subtype Major is Suit range Hearts .. Spades;
subtype Rainbow is Color range Red .. Blue; -- the Color Red, not the Light
-- Email comments, additions, corrections, gripes, kudos, etc. to:
Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12