Н. Джехани - Язык Ада (1988) (1160771), страница 84
Текст из файла (страница 84)
ца диапазона 3.5, дискретный диапазон 3.6, дискретный тип 3.5, именованное число 3.2, инициализация 3.2.1, исключение 11, квалифицированное выражение 4.7, константа 3.2.1, литерал перечисления 3.5.1, модельное число 3.5.8, неявное описание 3.1, обозначение типа 3.3.2, ограничение диапазона 3.5, описание константы 3.2.1, подтип 3.3, предопределенная операция 4.5, символьный литерал 2.5, скалярный тип 3.5, фактический параметр 6.4.1, фактический параметр настройки 12.3, формальный параметр настройки 12.1.2, функция 6.5, хранимое число3.5.8, числовой литерал 2.4. 4.10. УНИВЕРСАЛЬНЫЕ ВЫРАЖЕНИЯ Универсальное выражение — это выражение, вырабатывающее результат универсального целого или универсального вещественного типа.
Для универсального-целого типа предопределены те же операции, что и для любого цело. го типа. Для универсального вещественного типа предопределены те же операции, что и для любого плавающего типа Кроме того, эти операции включают операции умножения и деления. Знак Операция Тнп левого операции операнда Тип правого операнда Тнп результата Универсальный целый Универсальный вещественный Универсальный вещест.
Универсальный вещественный еенный Умножение Универсальный ве. щественный Универсальный це. лый Деление Универсальный ве. Универсальный целый Универсальный вещестщественный еенный Примеры: 1 е 1 — 2 аве1-10НЗ вЂ” ЗО КП.О: еппе!апз — 1000; МЕЗА: ЕЕПЕЬВИ: К!ЬОек!ЬО: — 1 000 000 ЕОНЗ: пепе!апз '= еьОАтб!01т8е2! Точность вычисления универсального выражения типа универсальный вещественный обязана быть не ниже точности любого из предопределенных плавающих типов, поддержанных в реализации, исключая сам универсальный вещественный тип.
Более того, если универсальное выражение — статическое, то вычисление также должно быть точным. При вычислении операций универсального выражения, не являющегося статическим, возбуждение исключения Н1)МЕЛ!С ЕЯЯОЯ реализацией допускается только в том случае, если результат операции — вещественное число с абсолютным значением, превышающим наибольшее хранимое число самого точного предопределенного плавающего типа (исключая универсальныи вещественный), или целое значение, большее, чем ЗТЗТЕМ.МАХ )НТ, либо меньшее, чем ЗУЗТЕМ.М1Н 1НТ. Примечание.
Следствием приведенных выше правил является то, что тип универсального выражения — универсальный целый, если этот тип имеет каждое первичное, содержащееся в выражении !исключая фактические параметры атрибутов — функций и правые операнды операций возведения в степень), в противном случае тип универсального выражения— универсальный вещественный. Имена н вы желия НЯЬР Р1: сепе1ал1:= Р92; — — см. 3.2.2. ОЕО-ТО-ЙАО: еепв1ая1:= НАЬР Риво; пар то ОЕО: сепе1еп~;= 1.01056 тО йАО; -- е иеелен 01.01119.14159 2653612У901 Ссылки: атрибут 4.1.4, вещественный тип 3.5.6, вычисление выражения 4.5, мультипликативная операция 4.5, 4.5.5, первичное 4.4, плавающий тип 3.5.9, предопределенная операция типа3.33, ЗУЗТЕМ.МАХ 1НТ 13.7, ЗУЗТЕМ.М!Н 1ЙТ 13.7, тип 3.3, универсальный вещественный тип 3.5.6, универсальный целый тип 3.5.4, фактический параметр 6.4.1, функция 6.5, хранимое число 3.5.6, целый тип 3.5.4.
Глава 5 ОПЕРАТОРЫ Оператор определяет действие, которое предстоит выполнить; процесс реализации етого действия называется выполнением оператора. В данной главе описываются общие правила, применимые ко всем операторам, и некоторые операторы. Оператор вызова процедуры описывается в гл. 6. Операторы вызова входа, задержки, принятия, отбора и прекращения описываются в гл. 9, оператор возбуждения— в гл. 11, а оператор кода — в гл. 13. Ссылки: оператор возбуждения 11.3, оператор вызова входа 9.5, оператор вызова процедуры 6.4, оператор задержки 9.8, оператор кода 13.8, оператор отбора 9.7, оператор прекращения 9.10, оператор принятия 9.8. 8.1.
ПРОСТЫЕ И СОСТАВНЫЕ ОПЕРАТОРЫ. ПОСЛЕДОВАТЕЛЬНОСТИ ОГ(ЕРАТОРОВ Оператор может быть или простым, или составным. Простой оператор не содержит дру. тих операторов. Составной опвратор содержит простые операторы и другие составные операторы. последовательность операторов с= оператор (оператор) оператор с = (метка) простой опвратор (метка) составной оператор и оператор ростои оператор .. — пустои оператор присваивания оператор выхода оператор перехода ( оператор задержки оператор возбуждения оператор вызова процедуры оператор возврата оператор вызова входа оператор прекращения оператор кода составной оператор::= условный оператор ) оператор выбора ) оператор цикла ) оператор блока ) оператор принятия ) оператор отбора метка зм « простое имя метки» пустой оператор з = пвд; Говорят, что имя каждой метки, стоящей перед оператором, помечает этот оператор. Имя метки (а также имя цикла или блока) неявно описано в конце раздела описаний самого внутреннего блока, тела подпрограммы, тела пакета, тела задачи илн настраиваемого тела, которые содержат данный помеченный оператор (именованный оператор цикла ипи именованный оператор блока).
При отсутствии в операторе блока раздела описаний подразумевается, что оператор блока содержит неявный раздел описаний (с предшествующим бес!аге). Имена меток, циклов и блоков неявно описываются в порядке появления в тексте про. граммы начал соответствующих помеченных операторов, операторов цикла и операторов блока. Дпя имен меток, циклов и блоков, неявно описанных в тепе программного модуля, включая вложенные в это тело операторы блока, но исключая другие вложенные программные модули (т.
е. подпрограммы, пакеты, задачи или настраиваемые модули), должны использоваться раз. личные идентификаторы. Выполнение пустого оператора заключается в переходе к выполнению следующего оператора. Опе ы Выполнение последовательности операторов состоит в поочередном выполнении отдельных операторов последовательности, пока они все не будут закончены или пока не произойдет передача управления. Передача управления вызывается выполнением операторов выхода, возврата или перехода, выбором альтернативы завершения, возбуждением исключения или (неявно) выполнением оператора прекращения.
Примеры помеченных операторов: «НЕЙЕ» «)С)» «АОО)» «Н)ЕЙ» пиа; «АРТЕН» Х: 1; 52. ОПЕРАТОРЫ ПРИСВАИВАНИЯ Оператор присваивания заменяет текущее значение переменной новым значением,задаваемым выражением. Переменная в левой части оператора присваивания и выражение в его правой части должны быть одного и того же типа, однако он не должен быть лимитируемым. оператор присваивания::= имя переменной:= выражение; При выполнении оператора присваивания вначале вычисляются имя переменной и выра. жение в порядке, не определенном в языке. Затем, если переменная не является массивом, проверяется принадлежность значения выражения подтипу переменной (если же переменная — массив, то при присваивании производится преобразование подтипа, как описано в равд.
5.2.1). Наконец, значение выражения становится новым значением переменной. При отрицательном результате упомянутой выше проверки принадлежности подтипу возбуждается исключение СОНЗТЙА)НТ ЕЙЙОЙ, а текущее значение переменной не изменяется. Выполнение присваивания ошибочно, если переменная является подкомпонентой, зависящей от дискриминантов неограниченной именуемой переменной, и при этом выполнении изменяется значение любого из упомянутых дискриминантов.
Примерьс ЧАЬОЕ := МАХ ЧАЬОЕ - 1; $НАОЕ:= ВОО; -- см. 4.1.1 -- см. 6.5 йЕХТ РНАМЕ(РХМ, й):= 2.5; О:= 00Т РНОООСТ(Ч, Ч)0; ЧЧН)ТЕН:= ($ТАТО$ => ОРЕй, Ой)Т => РН)МТЕЙ, ОМЕ СООМТ => 60); — СМ. 3.7.3 МЕХТ САН.ев:= (72074, лею; -- СМ. 3.8.1 Примеры проверок ограничении: ), Э; ) МТЕО ЕЙ ге лев 1 .. 10; К: )МТЕ0ЕЙгзпае1 .. 20; Примечание. Область действия описания начинается самим описанием (см. 8.2]. Область действия неявного описания имени метки, цикла или блока начинается до первого явного появления соответствующего имени, поскольку это появление возможно лишь в качестве метки оператора, в операторе блока, операторе цикла или операторе перехода.
Неявное описание е операторе блока может скрыть описание, данное во внешнем программном модуле или опе. раторе блока (согласно обычным правилам скрытия, изложенным в равд. 8.3]. Ссылки: альтернатива завершения 9.7.1, возбуждение исключений 11, завершенная зада. ча9.4, задача 9, задачный модуль 9.1, идентификатор 2.3, имя блока 5.6, имя цикла 5.5, исклю. чение 11, настраиваемое тело 12.1, настраиваемый модуль 12, неявное описание 3.1, область действия 8.2, оператор блока 5.6, оператор возбуждения 11.3, оператор возврата 5.8, оператор выбора 5.4, оператор вызова входа 9.5, оператор вызова процедуры 6.4, оператор выхода 5.7, оператор задержки 9.6, оператор кода 13.8, оператор отбора 9.7, оператор перехода 5.9, опера. тор прекращения 9.10, оператор принятия 9.5, оператор присваивания 5.2, оператор цикла 5.5, описание 3.1, пакет 7, подпрограмма 6, программный модуль 6, простое имя 4.1, раздел описа.
ний 3.9, скрытие 8.3, тело задачи 9.1, тело пакета 7.1, тело подпрограммы 6.3, условный оператор 5.3. 1:= щ — -одинаковые диапазоны К:ш д; — — совместимые диапазоны Э:= К вЂ” — при Кс!0 возбудится исключение СОМЗТЯА!Мт Ейяоя Примечание. Значения дискриминантов объекта, укаэанного ссылочным значением, не мо. гут быть изменены (даже присваиванием составного значения всему объекту), поскольку такие объекты, созданные генераторами, всегда являются ограниченными (см. 4.8); подкомпоненты таких объектов могут и не быть ограниченными. Если выражение в правой части является числовым литералом, именованным числом или атрибутом, вырабатывающим результат типа универсальный целый или универсальный ве. щественный, то производится неявное преобразование типа, описанное в равд.
4.6. Определение типа переменной в лавой части оператора присваивания может потребовать рассмотрения выражения, если имя переменной может интерпретироваться как имя переменной, укаэанной ссылочным значением, возвращаемым вызовом функции, а также как компо. нента или отрезок такой переменной (см. Равд. 8.7 о контексте разрешения совмещения). Ссылки: вызов функции 6.4, выражение 4.4, вычисление 4.5, генератор 4.8, дискриминант 3.7.1, имя 4.1, исключение СОМЗТЯА(МТ ЕЯЯОЯ 11.1, компонента 3.6, 3.7, массив 3.6, неявное преобразование типа 4.6, объект 3.2, отрезок 4Л.2, ошибочный 1.6, переменная 3.2.1, подкомпонента 3.3, подтип 3.3, преобрашэванне подтипа 4.6, присваивание массива 5.2.1, совмещение 6.6, 6.7, ссылочный тип 3.8, тип 3.3, указывать 3.8, универсальный вещественный тип 3.5.6, универсальный целый тип 3.5.4, числовой литерал 2.4.
5.2.1. ПРИСВАИВАНИЯ МАССИВОВ Если переменная в левой части оператора присваивания является индексируемой (в частности, отрезком), значение выражения неявно преобразуется в значение подтипа индексируемой переменной, после чего результат преобразования становится новым значением пере. менной. Это значит, что новое значение каждой компоненты индексируемой переменной задается сопоставляемой ей компонентой индексируемого значения, полученного при вычислении выражения (см.
определение сопоставляемых компонент в 4.5.2). При преобразовании подтипа для каждой компоненты индексируемой переменной проверяется наличие сопоставляемой компоненты индексируемого значения, и наоборот. При отрицательном результате этой проверки возбуждается исключение СОМЗТЯА(МТ ЕЯЯОЯ, а значение каждой компоненты пере. менной не изменяется. Примеры: А: ЗТЙ!МЗ(1 ..