Н. Джехани - Язык Ада (1988) (1160771), страница 96
Текст из файла (страница 96)
Также если переменная — формальный параметр, то переименование недопустимо, если заданное в спецификации параметра обозначение типа обозначает неограниченный тип, чьи дискриминанты имеют выражения по умолчанию. Вторая форма описания переименования используется для переименования исключений; третья форма — для переименования пакетов. Посладняя форма описания переименования используется для переименования подпрограмм и входов. Переименованная подпрограмма или вход и спецификация подпрограммы, заданная в описании переименования, должны иметь один и тот же профиль типа парамет.
ров и результата (см. 6.6). Описание переименования правильно только в том случае, если точно одна видимая подпрограмма или вход удовлетворяют упомянутым выше требованиям и могут быть обозначены конкретным именем подпрограммы или входа. Кроме того, виды параметров должны совпадать с видами соответствующих по позиции формальных пара. метров. Переименование не оказывает влияния на подтипы параметров и результата (если он есть) переименованной подпрограммы или входа. Эти подтипы заданы в первоначальном опи.
сании подпрограммы, конкретизации настройки или описании входа (но не в описании переименования), а также для вызовов, которыв используют новое имя. С другой стороны, описа. ние переименования может вводить имена параметров и выражения по умолчанию, которые отличаются от заданных для переименованной подпрограммы; именованные сопоставления в вызовах с новым именем подпрограммы должны использовать новое имя параметра; высо. вы со старым именем подпрограммы должны использовать старые имена параметров. Процедура может быть переименована только как процедура Функция либо операция мш тут быть переименованы как функция либо как операция; при переименовании функции или операции операцией спецификация подпрограммы, заданная в описании переименования, подчиняется правилам равд.
6.7 для описаний операции. Литералы перечисления могут быть переименованы как функции; аналогично атрибуты, определенные как функции (такие, как ЗССС или РЙЕО), могут быть переименованы как функции. Вход может быть переименован только как процедура; новое имя допускается только в контексте, допускающем имя процедуры. Вход иэ семейства может быть переименован, но семейство входов не может быть переименовано целиком. Примеры: Ивс(агв Ь . РЕЙЗОН гвпмпаа ЬЕРТМОЗТ РЕВЗОН; — см. 3.8.1 ьавм САЗЕ:= (.АЗЕ + 1; впд; Р((ЬЬ: авсареоп топалова ТАЗЬЕ МАНАЗЕЯ.ТАВЬЕ НЛ.Ь вЂ” см.
7.6 рвсьпвв ТМ гапапмв ТАЗЬЕ МАНАОЕВ; ЬпсгЬп ВЕА1 РЬОЗ(ЬЕРТ, Я!ЗНТ: ЙЕАЬ 1 мьгп ЯЕАЬ пвагпав "+"; ьпсгьп (нТ Ршз (ьеэт, В(бнт: !нтЕЗея) гапггп !Йтебей гвпагпав +: !ппслоп НОООЕ ь(пгп СОЬОН гапагпав НЕО; — см. 3.6.1 Ьпсвсп ЯОТ топал СОЬОЯ гепапгав НЕО; Ьпсяоп ВОЗЗО !ваап СОЬОЯ гвавгпав ЙОООЕ: ьпсяоп нехт(х: соьбн! гаьь сбьбя гапагпаа соьой'Зшсс; — см. 3.6.6 Примеры описания переименования с новыми именами параметров: Ьпсаоп "*" (ХУ; ЧЕСТОЙ! галоп ЙЕАЬ геьгпвв ООТ РЙОООСТ; — см. 6.1 Пример описания переименования с новым выражением по умолчанию: ьпсвоп м!н!м(гм(ь: шнк: неАО) го!мог сеьь мпапмв м1н сеьь — см 81 П вила и» яшастн Примечание.
Переименование может быть использовано для разрешения конфликта имен и введения сокращении. Переименование другим идентификатором или символом операции не скрывает старое имя; новое и старое имена (символ операции) не обязательно видимы в одних и тех же точках. Атрибуты РОЗ и ЧА~ не моПгг быть переименованы, так как не могут быть написаны соответствующие спецификации; это положение справедливо для предопределенных мультипликативных операций с результатом универсального фиксированного типа. Вызовы переименованного входа с новым именем являются операторами вызова процеду.
ры и недопустимы в местах, где синтаксис требует оператора вызова Ехода в условном и временном вызовах входа; аналогично атрибут СООМТ нельзя применить к новому имени. Объект задачного типа, описанный посредством описания объекта, может быть переиме. нован как объект. Однако одиночная задача не может быть переименована, так как соответствующии задачный тип является анонимным.
По тем же причинам не может быть переименован объект анонимного индексируемого типа. Не существует синтаксической формы для пере. именования настраиваемого модуля. Для достижения эффекта переименования типа (включая задачный тип) может быть использован подтип, например: вяитре МООЕ Ь ТЕХТ (О.Я(.Е МООЕ; Ссылки: атрибут 4.1.4, базовый тип 3.3, вид 6.1, видимость 8.3, временный вызов входа 9.7.3, вход 9.5, вызов входа 9.5, вызов подпрограммы 6.4, выражение по умолчанию 6.1, вычио ление имени 4.1, дискриминант 3.7.1, допустимый 1.6, зависеть от дискриминанта 3.7.1, задач.
ный объект 9.2, зарезервированное слово 2.9, знак операции 6.1, идентификатор 2.3, имя 4.1, исключение 11, константа 3.2.1, литерал перечисления 3.5.1, обозначение типа 3.3.2, объект 3.2, ограничение 3.3, ограниченный подтип 3.3, оператор вызова входа 9.5, оператор вызова процедуры 6.4, операция 6.7, описание 3.1, описание входа 9.5, описание объекта 3.2, описание операции 6.7, описание подпрограммы 6.1, пакет 7, параметр 6.2, переменная 32.1, подкомпонента 3.3, подпрограмма 6, подтип 3.3.2, правильно 1.6, предвыполнение 3.1, процедура 6.1, семейство входов 9.5, спецификация параметра 6.1, спецификация подпрограммы 6.1, тип 3.3, условный вызов входа 9.7.2, формальный параметр 6.1, функция 6.5.
86. СТАНДАРТНЫЙ ПАКЕТ Предопределенные типы (например, ВООЕЕАМ, СНАНАСТЕН и (МТЕОЕВ) описаны в предопределенном пакете, называемом ЗТАМОАНО; этот пакет включает также описания предопре. деленных для них операций. Пакет ЗТАМОАНО описан в приложении С. Спецификация пакета ЗТАМОАНО, за исключением предопределенных числовых типов, должна быть одинаковой для всех реализаций языка. Пакет ЗТАМОАВО образует зону описания, которая охватывает каждый библиотечный мо. дуль и, следовательно, главную программу; предполагается, что описание каждого библиотеч. ного модуля находится непосредственно в этом пакете.
Предполагается также, что неявные описания библиотечных модулей упорядочены таким образом, что область действия данного библиотечного модуля включает в себя любой компилируемый модуль, который упоминает в спецификаторе совместности этот библиотечный модуль. Однако видимыми в данном компилируемом модуле являются библиотечные модули, упомянутые в каких-либо спецификаторах совместности при данном модуле, а если он является вторичным модулем некоторого библиотечного модуля, то и этот модуль является видимым для него. Примечание.
Если все вложенные операторы блока программы поименованы, то имя каждого программного модуля, вложенного в блок, всегда может быть записано как расширенное имя, начинающееся с идентификатора ЗТАМОАНО (в случае когда этот пакет не является скрытым). Если тип описан в видимом разделе библиотечного пакета, то из правил видимости следует, что базовая операция (например, присваивание) над этим типом непосредственно видима в точке, где сам тип невидим (либо по имени, либо непосредственно). Однако эта операция может быть применена только к тем операндам, которые являются видимыми, и описание этих операндов требует видимости либо типа, либо одного из его подтипов. Ссылки: библиотечный модуль 10.1, видимость 8.3, вторичный модуль 10.1, главная программа 10.1, должно 1.6, зона описания 8.1, идентификатор 2.3, имя 4.1, имя блока 5.6, находится непосредственно в 8.1, неявное описание 3.1, оператор блока 5.6, оператор цикла 8.5, операция 6.7, описание 3.1, пакет 7, подтип З.З, применяемый спецификатор совместности 10.1.1, программный модуль 6, расширенное имя 4.1.3, скрытие 8.3, спецификатор совместности 10.1.1, тип 3.3.
Глава 6 З.Т. КОНТЕКСТ РАЗРЕШЕНИЯ СОВМЕЩЕНИЯ Совмещение определено для программ, литералов перечисления, символов операций и одиночных входов, а также для тех операций, которые присущи обычным базовым операциям, например присваивание, проверка принадлежности, генератор, литерал пмй, агрегаты и строковые литералы. Для совмещенных понятий разрешение совмещения определяет фактический смысл, кото. рый имеет вхождение идентификатора, когда в соответствии с правилами видимости выясня.