Н. Джехани - Язык Ада (1988) (1160771), страница 95
Текст из файла (страница 95)
8.4 (см. также равд. 8.6 о видимости библиотечных модулей). Описание скрыто во внутренней зоне описания, если она содержит омоним этого описания; внешнее описание является тогда скрытым в непосредственной области действия этого внутреннего омонима. Каждое из двух описаний является омонимом другого, если оба описания имеют один и тетив идентификатор и не более чем для одного из них допустимо совме. щение. Если совмещение допустимо для обоих описаний, то каждое из двух является омони. мом другого в случае, если они имеют одинаковый идентификатор, символ операции или сим.
вольный литерал, а также одинаковый профиль типа параметров и результата (см. 6.6). В спецификации подпрограммы скрыто каждое описание с таким же обозначением, как у подпрограммы; данное положение справедливо для конкретизации настройки, которая описывает подпрограмму, и в описании входа или в разделе формальных параметров оператора принятия. В этих случаях описание не является видимым ни по имени, ни непосредственно. Два описания, которые находятся непосредственно в одной и той же зоне описания, не должны быть омонимами, за исключением тех случаев, когда выполнены одно или оба следующих требования: а) точно одно из них является неявным описанием предопределенной операции; б) точно одно из них является неявным описанием производной подпрограммы.
В таких случаях предопределенная операция всегда скрыта другим омонимом; производная подпрограмма скрывает предопределенную операцию, но скрыта сама любым другим омонимом. )7 вила е» ииоеги Там, где скрытие осуществляется таким образом, неявное описание скрыто во всей области действия другого описания (независимо от того, какое описание стоит первым); неявное спи.
саине не видимо ни по имени, ни непосредственно. Всегда, когда описание с определенным идентификатором видимо в данной точке, говорят, что идентификатор и описанное понятие (если оно есть) видимы в этой точке. Непосредственная видимость и видимость по имени для символьных литералов и символов операций определяются аналогично.
Операция, обозначенная знаком, непосредственно видима тогда и только тогда, когда описание соответствующей операции непосредственно видимо. Наконец, обозначения, связанные с баювой операцией, непосредственно видимы во всей области дей. стеня этой операции. Пример: рюоаейее Р ! ° А, В: ВОО!.ЕАН; ромеечге 0 Ь 0: 800!.ЕАМ; 8; ВООЬЕАИ; — внутренний омоним В ьщ(м в:= А; — означает ав:= Р.А; с:= Р.в; — означает б.с:= р.в; ей ьевм А = В; — означаетрй:= Р.В; еов; Примечание о видимости библнотечньи модулей.
Видимость библиотечных модулей определена спецификаторами совместности (см. 10.1.1) и тем фактом, что библиотечные модули неявно описаны в пакете ЗТАМОАВО (см. 8.6). Примечание об омонимах. Один и тот же идентификатор может находиться в различных описаниях и, таким образом, соответствовать различным понятиям, даже если области действия описаний перекрываются. Перекрытие областей действия описаний с одним и тем же идентификатором может получиться из-за совмещения подпрограмм и литералов перечисле.
ния. Такое перекрытие может произойти для понятий, описанных в видимых разделах пакета, а также входов, компонент записей и параметров, где имеется перекрытие областей действия охватывающих описаний пакета, описаний задачи, описаний именуемого типа, описаний подпрограмм, описаний первимвнований и описаний настройки. Наконец, перекрытие областей действия может быть результатом вложенности. Примечание к непосредственной области действия, скрытию н видимости.
Правила, определяющие непосредственную область действия, скрытия и видимости, предусматривают, что ссылка на идентификатор в его собственном описании является неправильной (исключая слу. чаи пакетов и настраиваемых пакетов). Идентификатор скрывает внеание омонимы в соб. ственной непосредственной области действия, т.е. от начала описаний; с другой стороны, идентификатор является видимым только после конца описания. По этой причине (кроме последнего) все следующие описания являются неправильными. К: (МТЕОЕй:= К е К; -- неправильно Т: Т: -- неправильно р 4 Р(Х: Р); -- неправильно рпмейие й(й; ЙЕАО; р о ого 0(Х: йЕАь:= О); - - неправильно,даже если существует функция с именем О -. правильное, хотя создает путаницу. Ссылки: агрегат 4.3, аргумент 2.8, базовая операция 3.3.3, библиотечный модуль 10.1, видимый раздел 7.2, вызов входа 9.5, вызов подпрограммы 6.4, эадачный модуль 9, звдачный тип 9.1, зарезервированное слово 2.9, знак операции 6.1, зона описания 8.1, идентификатор 2.3, именованная компонента 4.1.3, именуемый тип 3.7, конкретизация настройки 12.3, лексема 2.2, литерал 2.5, настраиваемый модуль 12, настраиваемый пакет 12.1, находится непосредственно в 8.1, непосредственная область действия 8.2, неявное описание 3.1, область действия 8.2, объект 3.2, ограничение дискриминанта 3.7.2, оператор принятия 9.5, операция 4.5, описание 3.1, описание входа 9.5, описание компоненты 3.7, описание параметра настройки 12.1, описание подпрограммы 6.1, описание типа 3.3.1, пакет 7, параметр 6.2, подпрограмма 6, постфикс 392 Глава В 4.1.3, прагма 2.8, программный модуль 6, простое имя 4.1, распространяется 8.1, расширенное имя 4.1.3, семейство входов 9.5, совмещение 6.6, 8.7, соответствует типу 4.1, сопоставление компонент 4.3, сопоставление параметров 6.4, сопоставление параметров настроики 12.3, составной ограничитель 2.2, спецификатор использования 8.4, спецификация дискриминанта 3.7.1, спецификация литерала перечисления 3.5.1, спецификация параметра 6.1, спецификация подпрограммы 6.1, тип 3.3, указывать 3.8, формальный параметр 6.1, формальный параметр наст.
ройки 12.1. '8.4. СПЕЦИФИКАТОРЫ ИСПОЛЬЗОВАНИЯ Спецификатор использования обеспечивает непосредственную видимость описаний, ко. торые находятся в видимых разделах пакетов с именами, упомянутых в спецификаторе испо. льзования. спецификатор использования с = мве имя пакета (, имя пакета); Для каждого спецификатора использования существует определенная зона текста, называемая областью действия спецификатора использования. Эта зона начинается непосредственно после спецификатора использования. Если спецификатор испопыювания является элементом описания некоторой зоны описания, то область действия спецификатора использования распространяется до конца этой зоны описания.
Если спецификатор использования находится в спецификаторе контекста компилируемого модуля, то область действия специфика. тора использования распространяется до конца зоны описания, связаннои с данным компилируемым модулем. Чтобы определить, какие описания становятся прямо видимыми в данном месте с по.
мощью спецификатора использования, рассмотрим пакеты, упомянутые в спецификаторах ис. пользования, области действия которых охватывают это место. Описанием, которое может быть сделано прямо видимым с помощью спецификатора использования (потенциально видимое описание), является такое описание, которое находится непосредственно в видимом раз. депе одного из этих пакетов. Потенциально видимое описание становится фактически прямо видимым, за исключением двух случаев: ° Потенциально видимое описание не становится прямо видимым, если рассматриваемое место программы находится непосредственно в области действия описания омонима.
° Потенциально видимые описания с одинаковыми идентификаторами не становятся пря. мо видимыми, если только каждое из них не является спецификацией литерала перечисления или описанием подпрограммы (представляющим собой описание подпрограммы, описание переименования, конкретизацию настройки или неявное описание). Предвыполнение спецификатора использования не имеет другого эффекта. Примечание. Приведенные выше правила гарантируют, что описание, которое стало пря. мо видимым с помощью спецификатора использования, не может скрывать другое прямо видимое описание.
Эти правила сформулированы в терминах набора пакетов, упомянутых в спе. цификаторах использования. Следовательно, приведенные ниже строчки текста дают один и тот же эффект (в предположении существования единственного пакета Р). нае Р; нае Р; нае Р, Р; Пример противоречия имен в двух пакетаю рпкаенге й ! ° рааааее ТНАРИС Ь аура СОЬОН ! ° (йЕО, АМВЕН, ВНЕЕМ); еев тйАРГЧС; раеьаве ЧЧАТЕй СОЬОНВ ! ° аЧРе СО!.Ой Ь ВИН!ТЕ, НЕО. ЧЕИ.ОЧЧ, ОНЕЕМ, ВЬОЕ, ВНОЧЧМ, В(АСК); еаЬ ЧЧАТЕН СОЬОНЗ; нае ТНАЕР!С; сОЕОн, йеО, АмВен, и Онеем непосредственно видимы нае ччАтен сОЕОнв; — два омонима Онеем непосредственно видимы, Ьн! СОЬОН не является более непосредственно видимым 393 П вила еи имости евьзтрв ыбнт 1 ° тя*РР1с.сОьОВ; — подтип использован для разрешения ивьттрв Внлое ыФАтея сОЬОВВ.ООЬОВ; — противоречия, связанного с именем типа.
соьОВ 5!ОНА!.: Ь16НТ; РА1МТ: 5НАОЕ; Ьвеш 5!Омль:- ОВЕем; — из пакета тВАРР1С РА1МТ ;= ОВЕЕМ: — из пакета ЧЧАТЕВ СОЬОВВ впд В; Пример идентификации имени со специфнкатором использования: Рввввев О 1 ° Т, О, Ч: ВООЬЕАМ; впа О; Ргеввдвгв Р 1в рваьвве Е 1в В, ЧЧ, Ч: 1МТЕЙЕВ; еяа Е: Рюввечге 0 1 ° Т, Х: ВЕАЫ иве О, Е; — имя ТозначаетОТ, по! О.Т вЂ” имя ОозначаетО.Π— имя ВозначаетЕ. — имя ЧуозначаетЕЧЧ вЂ” имя ХозначаетО.Х вЂ” имя неправильно: должно быть использовано О.ч или впа 0; Ьееш впд Р; Ссылки: видимый раздел 7.2, зона описания 8.1, идентификатор 2.3, имя 4.1, компилируемыи модуль 10.1, находиться непосредственно в 8.1, непосредственная видимость 8.3, непо. средственная область действия 8.2, область деиствия 8.2, омоним 8.3, описание 3.1, описание подпрограммы 8.1, пакет 7, предвыполнение 3.1, 3.9, предвыполнение не имеет другого эффек.
та 3.1, распространение 8.1, скрытие 8.3, спецификатор контекста 10.1, спецификация литера. ла перечисления 3.5.1, элемент описания 3.9. 8.5. ОПИСАНИЯ ПЕРЕИМЕНОВАНИЯ Описание переименования задает другое имя для понятия. описание переименования::= идентификатор: обозначение типа гепаглеа имя объекта; (идентификатор: ехсербоп гепагпеа имя исключения; (расваВе идентификатор гепаглев имя пакета; (спецификация подпрограммы гепаглеа имя подпрограммы или входа; Предвыполнение описания переименования вычисляет имя, которое следует после зарезервированного слова гепвглев, и таким образом определяет понятие, обозначенное этим именем (переименованное понятие). В любой точке, где описание переименования видимо, идентификатор или знак операции, заданный в этом описании, обозначает переименованное понятие.
Первая форма описания переименования используется для переименования объектов. Переименованное понятие должно быть объектом базового типа обозначения типа. Описание переименования не изменяет свойств переименованного объекта. В частности, описание переименования не оказывает влияния на значение объекта и на то, является ли он константой или нет; аналогично переименования не затрагивают ограничения, накладываемые на объект (любое ограничение, которое следует из обозначения типа, входящего в описание переимено.
Глава Е вания, игнорируется). Описание переименования правильно только в том случае, если точно один объект имеет этот тип и может быть обозначен этим именем объекта. Существуют следующие ограничения, связанные с переименованием подкомпоненты переменной, которая зависит от дискриминантов. Переименование недопустимо, если подтип переменной, как зто определено в соответствующем описании объекта, описании компоненты или указании подтипа компоненты, является неограниченным типом или если переменная — это формальный объект настройки (вида 1п ом1).