Н. Джехани - Язык Ада (1988) (1160771), страница 74
Текст из файла (страница 74)
Тип дискриминанта раздела вариантов не должен быть настраиваемым формальным типом настройки. Если подтип дискриминанта статическии, то каждое значение этого подтипа должно быть представлено в наборе выборов раздела вариантов один и только один раз и другие значения недопустимы. Другими словами, каждое значение (базового) типа дискриминанта должно быть представлено один и только один раз в наборе вариантов. Простые выражения и дискретные диапазоны, данные как выборы в разделе вариантов, должны быть статическими. Определенный дискретным диапазоном выбор задает все значе. ния соответствующего диапазона (и ни одного, если диапазон пустой).
Выбор о!Веге допустим только для последнего варианта и только как его единственный выбор; он задает все остальные значения (возможно, и ни одного), не упомянутые в выборах предыдущих вариантов. Простое имя компоненты недопустимо в качестве выбора варианта (хотя оно присутствует в синтаксисе выбора). Значение записи содержит значения компонент данного варианта тогда и только тогда, когда значение дискриминанта равно одному иэ значений, заданных выборами варианта. Это правило применимо в свою очередь к любому вложенному варианту, который сам включен в список компонент данного варианта. Если список компонент варианта задан как пм11, то вариант не имеет компонент. Примеры именуемого типа с разделом вариантов: ауРе ОЕЧ1СЕ Ь (РЯНЧТЕЯ, 0[ЗК, ОЯЦЬЯ; !урв 5ТАТЕ 1 ° (ОРЕМ, СЕОЗЕО1; !урв РЕН[РНЕВАЦОМ[Т: ОЕЧ[СЕ: О[ЗК) Ь мае«1 ЗТАТОЗ; ЗТАТЕ; впав ЦМ17 1 ° «Ьеп Рй!МТЕН => ЫМЕ СОЦМТ: [МТЕОЕН аапае 1 ..
РАОЕ 8[ЕЕ: плмп впмга => СУЦМОЕй: СУЦМОЕЯ [МОЕХ; ТВАСК; ТВАСК МЦМЗЕЯ; впе вазе; впв геев«5 Примеры лодтнпов записей: апь!уре Ойцм Ом[т [а Рей[рненАцОяцм)! а«Ь!урв 018К ЦМ17 [а РЕй!РНЕВАЦО[ЗКВ Примеры ограниченных переменных именуемого типа: \юн1тея; Рей[рненАЕ[цкчт => РН1мтей); АВСН[ЧЕ: О[ЗК ЦМ1Т: Примечание. Выборы с дискретными значениями используются также в операторах выСора и в агрегатах массива.
Выборы с простыми именами компонент используются в агрегатах записей. Ссылки: агрегат записи 4.3.1, агрегат массива 4.32, базовый тип З.З, выражение 4.4, дискретный диапазон 3.6, диапазон 3.5, дискриминант 3.3, именуемый тип 3.7, компонента 3.3, настраиваемый формальный тип 12,1.2, подтип 3.3, простое выражение 4.4, простое имя 4.1, пустой диапазон 3.5, список компонент 3.7, статическое выражение 4.9, статический дискретный диапазон 4.9, статический подтип 4.9. 328 Главе 3 3.7.4. ОПЕРАЦИИ НАД ИМЕНУЕМЫМИ ТИПАМИ Базовые операции над именуемым типом включают присваивание и агрегаты (если тип не лимитируемый тип), проверку принадлежности, именование компонент записи, квалифика.
цию и преобразование типа (для производных типов). Для любого объекта А типа с дискриминантами базовые операции включают также следующий атрибут: А'СОМВТЛА)МЕО Вырабатывает значение ТВОЕ, если ограничение диск. рнминанта наложено на объект А или если объект— константа (включая формальный параметр или фор мапьныи параметр настройки вида )п); вырабатывает значение РАЕВЕ в противном случае. Если А — формальный параметр настройки вида )л огд или если А— формальныи параметр вида!и ом( ипи ом( и данное в соответствующей спецификации параметра обозначение типа обозначает неограниченныи тип с дискриминантами, то значение этого атрибута получается из значения атрибута соответствующего фактического параметра. Значение этого атрибута имеет предопределенныи тип 8001 ЕАМ.
Кроме того, атрибуты Т'ВАЗЕ и Т'812Е опеределены для именуемого типа или подтипа Т (см. 3.3.3); атрибуты А'812Е и А'АООЛЕ88 определены дпя записи А (см. 13.7.2). Кроме базовых операции над именуемым типом включают предопределенное сравнение на равенство и неравенство, если тип не является лимитируемым. Примечание. Именуемый тип — лимитируемый, если тип хотя бы одной из его компонент — лимитируемый (см. 7.4.4).
Ссылки: агрегат 4.3, атрибут 4.1.4, базовая операция 3.3.3, вид 6.1, дискриминант 3.3, именуемая компонента 4.1.3, именуемыи тип 3.7, квалифицированное выражение 4.7, константа 3.2П, лимитируемый тип 7.4.4, логический тип 3.5.3, объект 3.2.1, ограничение дискриминанта 3.7.2, операция 3.3, операция отноаения 4.5, 4.5.2, подкомпонента 3.3, подтип 3.3, предопределенная операция 4.5, предопределенныи тип С, преобразование 4.6, присваивание 5.2, провер. ка принадлежности 4.5, 4.5.2, производный тип 3.4, тип 3.3, фактический параметр 6.4.1, фактический параметр настройки 12.3, формальный параметр 6.1, формальный параметр настройки 12.1, 12.3. 3.8.
ССЫЛОЧНЫЕ ТИПЫ Объявленный описанием объект создается предвыполнением этого описания и обозначается простым именем или некоторой другой формои имени. В противоположность этому суще. ствуют объекты, создаваемые вычислением генераторов (см, 4.8) и не имеющие простого имени. Доступ к такому объекту осуществляется посредством возвращаемого генератором ссылочного значения; говорят, что ссылочное значение указывает объект. определение ссылочного типа::= евсеев указание подтипа Для каждого ссылочного типа существует литерал пм11, имеющий пустое ссылочное значение, вообще не указывающее объект.
Пустое значение ссылочного типа — начальное значение этого типа по умолчанию. Другие значения ссыпочного типа получаются вычислением специальной операции над типом, называемой генератором. Каждое такое ссылочное значение указывает объект подтипа, обозначенного указанием подтипа определения ссыпочного типа; этот подтип называется указываемым лодтипом; базовый тип этого подтипа называется указываемым типом. Указанные значением ссылочного типа объекты образуют набор, нЕявно свяЗан. ный с типом. Предвыполнение определения ссылочного типа состоит из предвыполнения указания подтипа и создания ссылочного типа. Если ссылочный объект — константа, то ссылочное значение не может быть изменено и всегда указывает один и тот же объект.
С другой стороны, значение указываемого объекта 329 Описания и типы не обязательно остается одним и тем же (присваивание указываемому объекту допустимо, если указываемый тип нелимитируемый). Единственные формы ограничения, которые допустимы после имени ссылочного типа в указании подтипа, — это ограничения индексов и ограничения дискриминантов (см. равд. 3 6.! и 3.7.2 для правил, применимых к этим указаниям подтипа). Ссылочное значение принадлежит соответствующему подтипу ссылочного типа, если либо ссыпочное значение — пустое значе. ние, либо если значение указываемого объекта удовлетворяет ограничению.
Примеры: Пвм ЕЯАМЕ 1 ° вссввв МАТЙ1Х; — см. 3.6 зтяв Вцгеея мАме 1 ° вссввв ВОееея; — см. 3.7.1 Примечание. Ссылочное значение, передаваемое генератором, может быть присвоено не. скольким ссылочным объектам. Следовательно, объект, созданный генератором, может быть указан более чем одной переменной или константой ссылочного типа. Ссылочное значение может указывать только объект, созданный генератором, в частности, оно не может указывать объект, объявленный описанием объекта.
Если тип объектов, указанных ссылочными значениями, — индексируемый тип ипи тип с дискриминантами, то эти объекты ограничены либо границами массива, либо значениями дискриминантов, заданными неявно или явно соответствующими генераторами (см. 4.8). Ссылочные значения в некоторых других языках называются указателями или ссылками. Ссылки: генератор 4.8, зарезервированное слово 2.9, имя 4.1, индексируемый тип 3.6, константа 3.2.1, лимитируемый тип 7.4.4, литерал 4.2, объект 3.2.1, ограничение 3.3, ограничение дискриминанта 3.7.2, ограничение индекса 3.6.1, описание объекта 3.2.1, переменная 3.2.1, подкомпонента 3.3, подтип 3.3, предвыполнение 3.9, принадлежит подтипу 3.3, присваивание 6.2, простое имя 4.1, спецификация индекса 3.6, тип 3.3, удовлетворять 3.3, указание подтипа 3.3.2.
3.8.1. НЕПОЛНЫЕ ОПИСАНИЯ ТИПОВ Никаких конкретных ограничений на тип, указываемый ссылочным типом, не существует. В частности, тип компоненты указываемого типа может быть другим ссылочным типом или даже тем же самым ссылочным типом. Зто позволяет вводить взаимозависимые и ракурсна.
ные ссылочные типы. Их описания требуют предварительного неполного описания типа (ипи описания личного типа) дпя одного или нескольких типов. неполное описание типа::= Фуре идентификатор [раздел дискриминантов); Для каждого неполного описания типа должно быть соответствующее описание типа с тем же идентификатором. Соответствующее описание должно быть либо полным описанием, либо описанием задачного типа. В оставшейся части главы пояснения даны в терминах полных описаний типа; те же правила применяются к описаниям задачного типа. Если неполное описание типа встречается непосредственно в разделе описаний или видимом разделе специфи.
кации пакета, то полное описание типа должно встретиться позже непосредственно в этом разделе описаний или видимом разделе. Если неполное описание типа встречается непосредственно в личном разделе пакета, то полное описание типа должно быть позже непосред. ственно в самом личном разделе или же в разделе описаний соответствующего тела пакета. Раздел дискриминантов должен быть дан в полном описании типа тогда и только тогда, когда он дан в неполном описании типа; если разделы дискриминантов даны, то они должны быть согласованы (см. 6.3.1 дпя правил согласования). До конца полного описания типа использование имени, обозначающего" тип, объявленный неполным описанием типа, допустимо только как обозначение типа в указании подтипа определения ссылочного типа; единственной формой ограничения, допустимой в указании подтипа, являются ограничения дискриминанта.
Предвыполнение неполного описания типа создает тип. Если неполное описание типа имеет раздел дискриминантов, то это предвыполнение включает предвыполнение раздела дискриминантов: в этом случае раздел дискриминантов полного описания типа не предвыполняется. в явно или неявно, прямо или косвенно.