Н. Джехани - Язык Ада (1988) (1160771), страница 71
Текст из файла (страница 71)
Вычисление каждого дискретного диапазона ограни. чения индекса и предвыполнение указания подтипа компонент осуществляются в порядке, не определяемом языком. Примеры описаний типа с определениями неограниченного индексируемого типа: 1уре честОЙ ь аггау(лчте6ей гапве <>! о! ЙеАы !ура МАТЙ!Х Ь апауЙМТЕОЕЙ сапре <>, !МТЕОЕЙ гапре <>) е( ЯЕАЦ !ура В!т ЧЕСтбй ! ° апаубМТЕОЕЯ гаере <>) о! ВООЬЕАМ; Ьре ЙОМАМ !е апау(РОЗ!Т!ЧЕ гапре <>) о! ЙОМАМ 016!Т; Примеры описаний типа с определениями ограниченного индексируемого типа: 1уре ТАВ1.Е !е апау(! ..
10) о( !МТЕОЕЯ; фуре ЗСНЕООЬЕ ! ° апау(ОАЧ) о! ВООЬЕАМ; гуре ОМЕ Ь агапу(1 .. МАХ ОМЕ 3!ЕЕ) о! СНАЯАСТЕЙ; 319 Описания и типы Примеры описаний объектов с определениями ограниченного индексируемого типа: ОН)0: апет(1 .. 80, 1 .. 1001 о! 800ЬЕАМ; М1Х: апет(СОЬОН геле« НЕО .. ОНЕЕМ! «1 800ЬЕАМ; РАОе: енот(1 .. 50! ы име: — массив массивов Примечание. Данное для одномерного массива правило означает, что описание с определением ограниченного индексируемого типа, например !тяе Т 1 ° мтет(Р081Т1ЧЕ геле« М1М ..
МАХ) от СОМРОМЕМТ: эквивалентно (при отсутствии некорректной зависимости от порядка] последовательности описаний: «,ытреподтнп индекса и РОЗ)т)че геле« мгм .. мАх; !тре индексируемый тип ь апай подтип индекса села« <>) о1 сОмРОмемт: ° оызп|е т 1 ° индексируемый тип (подгип индексе)1 где подгнп индекса и индексируемый тип оба анонимны.
Следовательно, Т вЂ” имя подтипа, и все объекты, описанные с этим обозначением типа, — массивы, имеющие одни и те же границы. Аналогичные преобразования применяются к многомерным массивам. Подобное преобразование применяется к объекту, описание которого включает определение ограниченного индексируемого типа. Следствием этого является то, что нет двух таких объектов одного и того же типа. Ссылки: анонимный тип 3.3.1, в некотором порядке 1.6, граница диапазона 3.5, диапазон 3.5, дискретный тип 3.5, имя 4.1, компонента 3.3, обозначение типа 3.3.2, объект 3.2, ограниче.
ние 3.3, описание типа 3.3.1, определение типа 3,3.1, подтип 3.3, предвыполнение 3.1, 3.9, тип 3.3, указание подтипа 3.3.2. 36,1. ОГРАНИЧЕНИЯ ИНДЕКСА И ДИСКРЕТНЫЕ ДИАПАЗОНЫ Ограничение индекса определяет диапазон возможных значений каждого индекса индексируемого типа и, таким образом, соответствующие границы массива. Для дискретного диапазона, использованного в определении ограниченного индексируемого типа и определенного диапазоном, неявное преобразование к предопределенному типу )МТЕВЕЯ производится в том случае, если каждая граница — это либо числовой литерал, либо именованное число, либо атрибут, а тип обеих границ (до неявного преобразования) является универсальным целым.
В остальных случаях обе границы должны быть одного и того же дискретного типа, отличного от типа универсальный целый; этот тип должен определяться независимо от контекста, но с учетом того, что тип должен быть дискретным и обе границы должны иметь один и тот же тип. Эти правила применимы также к дискретному диапазону, используемому в правиле итерации (см. 5.5) или в описании семейства входов (см. 9.5). Если ограничение индекса следует за обозначением типа в указании подтипа, то тип и подтип, указанныи обозначением типа, не должен содержать ограничение индекса. Обозначение типа должно указывать либо неограниченный индексируемый тип, либо ссылочный тип, указываемый тип которого — такой же индексируемый тип.
В любом случае ограничение индекса должно задавать дискретный диапазон для каждого индекса индексируемого типа и тип каждого дискретного диапазона должен быть тем же самым, что и у соответствующего индекса. Ограничение индекса совместимо с типом, указанным в обозначении типа, если и только если ограничение, определенное каждым дискретным диапазоном, совместимо с соответству. ющим подтипом индекса. Если какой-нибудь из дискретных диапазонов определяет пустой диапазон, то ограниченный таким образом массив является пустым массивом, не имеющим компонент. Значение массива удовлетворяет ограничению индекса, если в каждои позиции индекса значение массива и ограничение индекса имеют одни и те же границы индекса.(За.
метим, однако, что присваивание и некоторые другие операции над массивами включают неявное преобразование подтипа.) Границы каждого массива определены следующим образом: ° Для заданной описанием объекта переменной указание подтипа соответствующего описания объекта должно определять подтип ограниченного индексируемого типа (и, таким образом, границы). То же самое требуется от указания подтипа описания компоненты, если тип Глава Э компоненты записи — индексируемый тип, а также от указания подтипа компоненты опредепения индексируемого типа, если тип компонент массива является сам индексируемым типом.
° Дпя заданной описанием объекта константы индексируемого типа границы определены начальным значением, если подтип константы не ограничен; иначе они определены подтипом (в последнем случае начальное значение — зто результат неявного преобразования подтипа). То же правило применимо к формальному параметру настройки вида 1и. ° Для указанного ссылочным значением массива границы должны быть определены генератором, создающим массив. (Созданный объект ограничен соответствующими значениями границ.) ° Для формального параметра подпрограммы или входа границы получены от соответ. ствующего фактического параметра.
(Формальный параметр ограничен соответствующими зна. чениями границ.) ° Для описания переименования и для формального параметра настройки вида 1п ом! границы берутся у переименованного объекта или у соответствующего фактического параметра настройки. Порядок вычисления дискретных диапазонов при предвыполнении ограничения индекса в языке не определен. Примеры описания массивов, включающих ограничения индексов: ЫАТВ!ХП .. 8, 1 .. 8); — см.
3.6 ВЕСТАМ6!.Е: МАТВ(Х(1 .. 20. 1 .. 30): (мчеяве: мятя!х(1 .. м, 1 ., м1: — м необязательно статическое РП.ТЕВ: В!Т ЧЕСТОЯ(0 .. 31); Пример описания массива с ограниченным индексируемым подгнпом! му вснеоОье: вснебОье; — все массивы типа ЗснеоОье' имеют одни и те же границы Пример именуемого типа с компонентой нндекснруемого типа: зтрв ЧАВ ЫМЕ(ЬЕМВТН: (МТЕ6ЕВ! ! ° пмеге !ЫА6Е: ЕТВ!М6(1 .. ЬЕМВТН)! влд гелен(; МОО ОМЕ: ЧАВ ОМЕ(0); — МОЙ Ь(МЕЗМАВЕ пустей маосив Примечание. Предвыполнение указания подтипа, состоящего из обозначения типа, за которым следует ограничение индекса, контролирует совместимость ограничения индекса с обозначением типа (см.
3.3.2). Все компоненты массива имеют один и тот же подтип. В частности, для массива компонент, которые являются одномерными массивами, это означает, что все компоненты имеют одни и те же границы и, следовательно, одинаковую длину. Ссылки: вид 12.1.1, вход 9.5, выражение 4.4, генератор 4.8, граница диапазона 3.5, граница массива 3.6, диапазон 3.5, дискретный диапазон 3.6, имя 4.1, индекс 3.6, индексируемый тип З.б, компонента записи 3.7, компонента массива 3.6, константа 3.2.1, начальное значение 3.2.1, неограниченный индексируемый тип 3.6, неограниченный подтип 3.3, обозначение типа 3.3.2, объект 3.2, ограничение индекса 3.6.1, ограниченный индексируемый подтип 3.6, описание компоненты 3.7, описание объекта 3.2.1, описание переименования 8.5, описание семейства входов 9.5, определение индексируемого типа 3.6, определение ограниченного индексируемого типа 3.6, определение ссылочного типа 3.8, параметр настройки 12.1, переменная 3.2, подпрограмма 6, подтип индекса 3.6, подтип ограниченного индексируемого типа 3.6, подтнп результата 6.1, правило итерации 5.5, предопределенныи тип С, преобразование 4.6, преобразование подтипа 4.6, пустой диапазон 3.5, совместимый 3.3.2, ссылочное значение 3.8, ссылочный тип 3.8, тип универсальный целый 3.5, удовлетворять 3.3, указание подтипа 3.3.2, указываемый тип 3.8, указывать 3.8, универсальный тип 4.10, фактический параметр 6.4.1, фактический параметр настройки 12.3, формальный параметр 6.1, формальныи параметр настройки 12.1, 12.3, функция 6.5, целыи литерал 2.4, целый тип 3.5.4.
Описания и типы 321 3.8.2. ОПЕРАЦИИ НАД ИНДЕКСИРУЕМЫМИ ТИПАМИ А'Е)ВЗТ Вырабатывает нижнюю границу диапазона первого индекса. Значение этого атрибута имеет тот же тип, что и эта граница. А ' Е) ВЗТ(й) Вырабатывает значение нижнеи границы диапазона й-го индекса. Значение этого атрибута имеет тот же тип, что н эта нижняя граница. А'1.АЗТ Вырабатывает верхнюю границу диапазона первого индекса. Значение этого атрибута имеет тот же тип, что и эта верхняя граница.
А ' (.АЗТ(й) Вырабатывает верхнюю границу диапазона М-го ин- декса. Значение этого атрибута имеет тот же тип, что и эта верхняя граница. А'ВАМВЕ Вырабатывает диапазон первого индекса, т. е. диапа- зон А'Е)ВЗТ .. А'ЕАЗТ. А'ВАй6Е(й) Вырабатывает диапазон й-го индекса, т. е. диапазон А'Е)ВЗТ(й) .. А'(.АЗТ(М). А'СЕМВТН Вырабатывает количество значений в диапазоне пер- вого индекса (нуль для пустого диапазона). Значение этого атрибута имеет тип универсальный целый. А'1 Ей6ТН(М) Вырабатывает количество значений в диапазоне М-го индекса (нуль дпя пустого диапазона). Значение этого атрибута имеет тип универсальный целый.
Кроме того, для индексируемого типа или подтипа Т определены атрибуты Т'ВАЗЕ и Т'812Е (см. 3.3.3), а для массива А определены атрибуты А'812Е и А'АООВЕЗЗ (см. 13.7.2). Кроме базовых в состав операций над индексируемым типом входят предопределенные операции сравнения на равенство или неравенство, если индексируемый тип не является лимитируемым типом. Для одномерных массивов к этим операциям относится катенация, если индексируемый тип не является лимитируемым типом; если тип компоненты — дискретный тип, то операции включают также все предопределенные операции отношения; если тип компоненты — логический тип, то операции также включают унарную ломческую операцию отри.