Н. Джехани - Язык Ада (1988) (1160771), страница 72
Текст из файла (страница 72)
цания и логические операции. Примеры (использующие массивы, описанные в примерах раздела 3.6.1): — — Г1ьтея'е1лвт — 0 е)ьтея')Авт — 31 В)ТЕВЪЕМЗТН = 32 — — ЯЕСТАМ6ЬЕЧАЗТ(1) = 20 ВЕСТАМ61.Е'1АЗТ(2) = 30 Примечание. Атрибуты А'Е)ВЗТ и А'Е)ВЗТ(1) вырабатывают одно и то же значение. То же можно сказать об атрибутах А') АЗТ, А'ВАМВЕ и А'СЕМОТН. Для приведенных атрибутов Базовые операции нвд индексируемым типом включают присваивание, агрегаты (если ин. дексируемый тип не является лимитируемым личным типом], проверку принадлежности, ин. дексируемые компоненты, квалификацию и явное преобразование; для одномерных массивов базовые операции включают также отрезки и строковые литералы, если тип компонент —.
символьный тип. Если А — объект, являющийся массивом, значением массива или подтипом ограниченно. го индексируемого типа, то базовые операции включают также атрибуты, которые перечисле. ны ниже. Эти атрибуты недопустимы для неограниченного индексируемого типа. Аргумент й, использованный в обозначении атрибута для М-го измерения массива, должен быть положительным статическим выражением типа универсальный целый и не больше размерности массива. Глава 3 удовлетворяются следующие соотношения (исключая пустой массив) если тип индекса — це. лый тип: АЪЕМОТН = А'(,АЗТ - А'ЯЯЗТ + 1 АЪЕМОТН(й! = А'!АЗТ(й) - АШ1ЯЗТ(й) + 1 Индексируемый тип — лимитируемый, если тип его компонент — лимитируемый (см.
7.4.4). Ссылки: агрегат 4.3, атрибут 4.1.4, базовая операция 3.3.3, граница диапазона 3.5, индекс 3.6, индексированная компонента 4.1.1, индексируемый тип 3.6, квалифицированное выражение 4.7, лимитируемый тип 7.4.4, логическая операция 4.5, 4.5.1, неограниченный индексируемый тип 3.6, обозначение 6.1, объект 3.2, ограниченный индексируемый тип 3.6, операция кате. нации 4.5, 4.5.2, операция отношения 4.5, 4.5.2, операция отрицания 4.5, 4.5.6, отрезок 4.1.2, подкомпонента 3.3, предопределенная операция 4.5, преобразование 4.Б, присваивание 5.2, проверка принадлежности 4.5, 4.5.2, пустои диапазон 3.5, размерность 3.6, символьный тип 3.5.2, статическое выражение 4.9, строковый литерал 2.6, тип З.З, универсальный тип 4.10, универсальный целый тип 3.5.4.
3.6.3. СТРОКОВЫЙ ТИП Значения предопределенного типа ВТЯ1МΠ— это одномерные массивы компонент предо. пределенного типа СНАЯАСТЕЯ, индексируемые значениями предопределенного подтипа РОБ(Т)НЕ: еив!Тра РОМТ1ЧЕ 1 ° ПЧТЕОЕЯ гаева 1 .. ПЧТЕОЕЯ'(АЗТ; еуле ЗТЯ(МО 1 ° апву!Р081Т)ЧЕ !аале <>! е! СНАЯАСТЕЯ; Примеры: ЗТАЯЗ: ЗТЯ1йО(1 .. 1201: (1 .. 120 => Ъ' ): ОчЕВТ10М: ееееьеи ЗТЯ)МО: 'НОЧЧ МАМУ СНАЯАСТЕЯЗ!"; ООЕЗТЮМ'Р)ЯЗТ = 1, ООЕЗТЮМ'!АЗТ = 20 (ЧИСЛО СИМВОЛОВ) АЗК ТЧЧ1СЕ: аале!апз ЗТЯ)МО: ООЕЗТЮМ Б ООЕВТЮМ: МПЧЕТУ 81Х; аеяееааз ЯОМАМ: ХСЧГ! — см.
З.Б Приме~ание. Строковые литералы (см. 2.6 и 4.2) — базовые операции над типом ВТЯ(МО и любым другим одномерным индексируемым типом, тип компонент которого — символьныи тип. Операция катенации — предопределенная операция над типом БТЯ!МО и для одномерных индексируемых типов; она представляется знаком Б. Операции отношения <, < =, > и > = определены дпя значений этих типов в соответствии с лексикографическим порядком (см. 4.5.2). Ссьики: агрегат 4.3, индекс 3.6, лексикографический порядок 4.5.2, массив 3.6, операция катенации 4.5, 4.5.3, операция отношения 4.5, 4.5.2, подтип 3.3, позиционный агрегат 4.3, предопределенная операция 4.5, предопределенный тип С, размерность 3.6, символьный тип 3.5.2, строковый литерал 2.6, тип З.З, тип компоненты (массива) 3.6. 3.7.
ИМЕНУЕМЫЕ ТИПЫ Объект именуемого типа (запись) — это составной объект, состоящий из именованных компонент. Значение записи — составное значение, состоящее из значений своих компонент. определение именуемого типа::= гвсотб список компонент епд засол) список компонент::= описание компоненты (описание компоненты) )(описание компоненты! раздел вариантов[пм11; описание компоненты:: = список идентификаторов:определение подтипа компоненты [:= выражение); определение подтипа компоненты::= указание подтипа 323 Описания и типы Квкдое описание компоненты задает компоненту именуемого типа. Кроме этих компо. нент в компоненты именуемого типа включаются любые компоненты, описанные спецификациями дискриминантов описания именуемого типа.
Идентификаторы всех компонент именуемого типа должны быть различными. Использование имени, обозначающего компоненту запи. си, отличную от дискриминанта, недопустимо в определении именуемого типа, который описывает эту компоненту. Описание компоненты с несколькими идентификаторами эквивалентно последовательности единичных описаний компонент, как пояснено в равд. 3.2.
Каждое единичное описание компоненты объявляет компоненту записи, подтип которой задан определением подтипа ком. поненты. Если описание компоненты включает составной ограничитель присваивания, за которым следует выражение, то это выражение является выражением по умолчанию компоненты записи; выражение по умолчанию должно иметь тип компоненты.
Выражения по умолчанию недо. пустимы для компонент лимитируемого типа. Если именуемый тип не имеет раздела дискриминантов, то одни и те же компоненты присутствуют во всех значениях этого типа. Если список компонент именуемого типа определен зарезервированным словом пи11 и раздел дискриминантов отсутствует, то именуемый тип не имеет компонент и все записи этого типа — пустые записи. Предвыполнение определения именуемого типа создает именуемый тип; оно состоит из предвыполнения соответствующих (единичных) описаний компонент в порядке их следования, включая описания компонент в разделе вариантов.
Предвыполнение описания компоненты состоит из предвыполнения определения подтипа компоненты. Для предвыполнения определения подтипа компоненты в случае, когда ограничение не зависит от дискриминанта, предвыполняется указание подтипа. Если, с другой стороны, ограничение зависит от дискриминанта, то предвыполнение состоит из вычисления каждого вхо.
дящего в ограничение выражения, которое не является дискриминантом. Примеры описаний именуемого типа: суре ОАТЕ 1 ° иеесд ОАУ: !МТЕОЕЯ инде 1 .. 31; МОНТН: МОМТН МАМЕ; УЕАЯ: 1НТЕОЕЯ сведя 0 .. 4000: епв ивен!; суре СОмрьех 1 ° ЯЕ: НЕАЬ с 0.0: !М: ЯЕА1.:= 0.0; епд сеееы: Примеры переменных именуемого типа: ТОМОЯЯОУУ, УЕЕТЕЯОАУ: ОАТЕ; А. В, С: СОМР1.ЕХ; — компоненты А, В и С неявно инициализированы нулем Примечание. Выражения по умолчанию для компоненты записи при отсутствии явной инициализации неявно вычисляются предвыполнением описания записи (см.
3.2.1). Если описание компоненты имеет несколько идентификаторов, то выражение вычисляется один раз для каждои такой компоненты записи (поскольку это описание эквивалентно последовательности единичных описаний компонент). В отличие от компонент массива компоненты записи не обязательно имеют один и тот же тип.
Ссылки: выражение 4.4, дискриминант 3.3, зависит от дискриминанта 3.7.1, идентификатор 2.3, имя 4.1, компонента З.З, лимитируемый тип 7.4.4, обозначение типа 3.2.2, объект 3.2, ограничение 3.3, описание 3.1, подтип З.З, предвыполнение 3.9, раздел вариантов 3.7.3, раздел дискриминантов 3.7, 3.7.1, составное значение З.З, составной ограничитель присваивания 2.2, список идентификаторов 3.2, тип 3.3. 11" 1 Глава 3 324 3.7.1. ДИСКРИМИНАНТЫ Раздел дискриминантов специфицирует дискриминанты типа. Дискриминант записи— это компонента записи. Тип дискриминанта должен быть дискретным. раздел дискриминантов з = (спецификация дискриминанта [; спецификация дискриминанта)) \уре 80ОАНЕ(81ОЕ; 1МТЕОЕН! 1 ° мозга МАТ: МАТН1Х(1 ..
81ОЕ, 1 .. 81ОЕ): воа гвоопз; --см. 3.6 эурв ОООВЬЕ 80ОАЯЕ(МОМВЕН: 1МТЕОЕН! )е геооп) ьерт; 80ОАне (мцмВенн Я16НТ . "50ОАЯЕ (МОМВЕЯ): еоа геооащ спецификация дискриминанта с= список идентификаторов: обозначение типа [:= выражение) Раздел дискриминантов допустим только в описании именуемого типа, в описании лично. го типа или в неполном описании типа (соответствующее полное описание должно тогда описывать именуемый тип), а также в описании параметра настройки для формального личного типа. Спецификация дискриминанта с несколькими идентификаторами эквивалентна гюследо. вательности единичных спецификаций дискриминантов, как пояснено в равд. 3.2.