Справочник по Ada 95
4.1.4 Атрибуты
Атрибут — это характеристика сущности, которую можно запросить через ссылку_на_атрибут или ссылку_на_атрибут_диапазона.
Синтаксис
ссылка_на_атрибут ::= префикс'имя_атрибута
имя_атрибута ::=
идентификатор[(статическое_выражение)]
| Access | Delta | Digits
идентификатор[(статическое_выражение)]
| Access | Delta | Digits
ссылка_на_атрибут_диапазона ::= префикс'имя_атрибута_диапазона
имя_атрибута_диапазона ::= Range[(статическое_выражение)]
Правила разрешения имен
В ссылке_на_атрибут, если имя_атрибута относится к атрибуту, определённому для (по крайней мере некоторых) объектов типа доступа, то префикс никогда не интерпретируется как явное_разыменование; в противном случае (и для всех ссылок_на_атрибут_диапазона), если тип имени в префиксе — тип доступа, то префикс интерпретируется как явное_разыменование. Аналогично, если имя_атрибута относится к атрибуту, определённому для (по крайней мере некоторых) функций, то префикс никогда не интерпретируется как безаргументный вызов_функции; в противном случае (и для всех ссылок_на_атрибут_диапазона), если префикс состоит из имени, обозначающего функцию, он интерпретируется как безаргументный вызов_функции.
Ожидается, что выражение, если оно есть, в имя_атрибута или имя_атрибута_диапазона, будет целого типа.
Правила легальности
Выражение, если оно есть, в имя_атрибута или имя_атрибута_диапазона, должно быть статическим.
Статическая семантика
ссылка_на_атрибут обозначает значение, объект, подпрограмму или какой-либо другой вид программной сущности.
ссылка_на_атрибут_диапазона X'Range(N) эквивалентна диапазону X'First(N) .. X'Last(N), за исключением того, что префикс вычисляется только один раз. Аналогично, X'Range эквивалентно X'First .. X'Last, за исключением того, что префикс вычисляется только один раз.
Динамическая семантика
Вычисление ссылка_на_атрибут (или ссылка_на_атрибут_диапазона) состоит из вычисления префикса.
Разрешения для реализации
Реализация может предоставить атрибуты, определённые реализацией; идентификатор атрибута, определённого реализацией, должен отличаться от идентификаторов языковых атрибутов, если только он не предоставлен для совместимости с предыдущей версией данного международного стандарта.
ПРИМЕЧАНИЯ
4 Атрибуты определены в этом международном стандарте и обобщены в приложении К.
5 В общем случае имя в префиксе ссылка_на_атрибут (или ссылка_на_атрибут_диапазона) должно быть разрешено без использования контекста. Однако в случае атрибута Access ожидаемый тип для префикса должен быть единственным типом доступа, а если это тип доступа к подпрограмме (см. 3.10.2), то разрешение имени может использовать тот факт, что профиль вызываемой сущности, обозначаемой префиксом, должен соответствовать типу назначенной подпрограммы.
Примеры
Примеры атрибутов:
Color'First -- минимальное значение перечислимого типа Color (см. 3.5.1)
Rainbow'Base'First -- то же, что и Color'First (см. 3.5.1)
Real'Digits -- точность типа Real (см. 3.5.7)
Board'Last(2) -- верхняя граница второго измерения Board (см. 3.6.1)
Board'Range(1) -- диапазон индексов первого измерения Board (см. 3.6.1)
Pool(K)'Terminated -- True, если задача Pool(K) завершена (см. 9.1)
Date'Size -- количество бит для записей типа Date (см. 3.8)
Message'Address -- адрес переменной записи Message (см. 3.7.1)
Rainbow'Base'First -- то же, что и Color'First (см. 3.5.1)
Real'Digits -- точность типа Real (см. 3.5.7)
Board'Last(2) -- верхняя граница второго измерения Board (см. 3.6.1)
Board'Range(1) -- диапазон индексов первого измерения Board (см. 3.6.1)
Pool(K)'Terminated -- True, если задача Pool(K) завершена (см. 9.1)
Date'Size -- количество бит для записей типа Date (см. 3.8)
Message'Address -- адрес переменной записи Message (см. 3.7.1)