Spec-Zone.ru › Ada 95
Справочник по Ada 95

3.5.1 Типы перечислений

Определение enumeration_type_definition задаёт тип перечисления.

Синтаксис

enumeration_type_definition ::=
(enumeration_literal_specification {, enumeration_literal_specification})
enumeration_literal_specification ::= defining_identifier | defining_character_literal
defining_character_literal ::= character_literal

Правила допустимости

Идентификаторы defining_identifier и символьные литералы defining_character_literal, перечисленные в enumeration_type_definition, должны быть уникальными.

Статическая семантика

Каждое enumeration_literal_specification является явным объявлением соответствующей литералы перечисления: оно объявляет безаргументную функцию, имя которой совпадает с defining_identifier или defining_character_literal, а тип результата — тип перечисления.
Каждая литерла перечисления соответствует одному значению типа перечисления и уникальному номеру позиции. Номер позиции первого перечисленного значения равен нулю; номер позиции каждого последующего значения на единицу больше, чем у его предшественника в списке.
Предопределённые отношения порядка между значениями типа перечисления следуют порядку соответствующих номеров позиций.
Если один и тот же defining_identifier или defining_character_literal указан в нескольких enumeration_type_definition, соответствующие литералы перечисления считаются перегруженными. В любом месте программы, где встречается перегруженная литерла перечисления, тип этой литерлы должен быть определим из контекста (см. 8.6).

Динамическая семантика

При обработке enumeration_type_definition создаётся тип перечисления и его первый подтип, который ограничен базовым диапазоном типа.
При вызове безаргументная функция, связанная с литерой перечисления, возвращает соответствующее значение типа перечисления.
ПРИМЕЧАНИЯ
22 Если литерла перечисления встречается в контексте, который не определяет тип литерлы, то квалификация именем типа перечисления — один из способов разрешения неоднозначности (см. 4.7).

Примеры

Примеры типов и подтипов перечисления:
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 и Green перегружены
type Hexa is ('A', 'B', 'C', 'D', 'E', 'F');
type Mixed is ('A', 'B', '*', B, None, '?', '%');
subtype Weekday is Day range Mon .. Fri;
subtype Major is Suit range Hearts .. Spades;
subtype Rainbow is Color range Red .. Blue; -- цвет Красный, а не свет


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API