Н. Джехани - Язык Ада (1988) (1160771), страница 76
Текст из файла (страница 76)
3.1). Имена могут обозначать также объекты, указанные ссылочными значениями, подкомпоненты и отрезки объектов и значений, одиночные входы, семейства входов и входы семейства входов. Наконец, имена могут обозначать атрибуты этих понятий и объектов. описание 3.1, описание переименования 8.5, отрезок 4.12, подкомпонента 3.3, понятие 3.1, при- надлежит типу 3.3, ссылочное значение лвй 3.8, семейство входов 9Л, символьный литерал 2.5, ссылочное значение 3.8, ссылочный тип 3.8, тип 3.3, формальный параметр 6.1, указанный тип 3.8, указывать 3.8. 4.1.1. ИНДЕКСИРУЕМЫЕ КОМПОНЕНТЫ Индексируемая компонента обозначает компоненту массива или вход семейства входоа индексируемая компонента::= префикс(выражение (, выражение)) Для компонент массива тип префикса должен соответствовать индексируемому типу.
Значения индексов компоненты задаются выражениями, каждой позиции индекса должно соответствовать одно такое выражение. Для входа семейства входов префикс должен быть именем, которое обозначает семейство входов эадачного объекта, а выражение (оно должно быть только одно) задает значение индекса конкретного входа. Тип каждого выражения должен соответствовать типу индекса В языке не определяется порядок вычисления префикса и выражений при вычислении индексируемой компоненты.
Ес. ли значение индекса не принадлежит диапазону индекса массива или семейства входов, опре. деляемых префиксом, то возбуждается исключение СОНЗТЙА(НТ ЕЙЙОЙ. Примеры индекснруемых компонент: Примечание к примеру. Для компонент многомерных массивов(таких, как ВОАЙО) и массива массивов (таких, как РАВЕ) используются различные обозначения. Компонентами массива массивов являются массивы, и они могут быть индексированы. Так, РАВЕ(10)(20] задает двадцатую компоненту массива РАВЕ(10). В последнем примере НЕХТ РЙАМЕ(Ц вЂ” вызов функции, возвращающей ссылочное значение, указывающее двумерный массив.
Ссылки: возбуждение исключения 11, возвращаемое значение 5.8, 6.5, вход 9.5, вызов функ. ции 64, выражение 4.4, вычисление 4.5, имя 4.1, индекс 3.6, индексируемый тип 3.6, исключение СОМЗТЙА)НТ ЕЙЙОЙ 11.1, компонента 3.3, компонента массива 3.6, объект задачного типа 9.2, префикс 4.1, размерность 3.6, семейство входов 9.5, соответствует типу 4.1. 4.1.2. ОТРЕЗКИ Отрезок обозначает одномерный массив нескольких последовательных компонент одномерного массива Отрезок переменной — переменная, отрезок константы — константа, отре.
зок значения — значение. отрезок:;= префикс(дискретный диапазон) Префикс отрезка должен соответствовать одномерному индексируемому типу. Тип отре> ка — зто базовый тип этого индексируемого типа. Границы дискретного диапазона определяют границы отрезка и должны быть того же типа, что и тип индекса; отрезок является пустым, т.
е. обозначает пустой массив, если дискретный диапазон является пустым. Порядок вычисления префикса и дискретного диапазона при вычислении имени отрезка в языке не определяется. Если при вычислении отрезка хотя бы одна из границ дискретного диапазона не принадлежит диапазону индексов, определяемому префиксом отрезка, то(кроме случая пустого отрезка) возбуждается исключение СОНЗТЙА(НТ ЕЙЙОЙ.
(Границы пустого отрезка могут не принадлежать подтипу индекса.) МУ ЗСНЕОО(.Е(ЗАТ) РАВЕ(10) ВОАЙО(М, 4 + 1) РАВЕ(10) (20) ЙЕООЕЗТ(М ЕО)()М! НЕХТ РЙАМЕ(Ц (М, Н) компонента одномерного массива компонента одномерного массива компонента двумерного массива компонента компоненты вход семейства входов компонента вызова функции (см.
3.6.1) (см. 3.6) (см. 3.6.1) (см. 3.6) (см. 9.5) (см. 6.1) Ишане и в жения Примеры отрезков: (см. 3.6) Примечание. Для одномерного массива А имя А(М..М) задает отрезок, состоящий из одной компоненты; его тип соответствует базовому типу массива А. С другой стороны, А(М) — компонента массива и имеет соответствующий тип. Ссылки: базовый тип 3.3, возбуждение исключения 11, вычисление 4.5, граница дискретно.
го диапазона 3.6.1, диапазон индекса 3.6, дискретный диапазон 3.6, значение массива 3.6, имя 4.1, индекс 3.6, индексируемый тип 3.6, исключение СОМВТЙА(МТ ЕЙЙОЙ 11.1, компонента 3.3, константа 3.2.1, массив 3.5, ограничение 3.3, переменная 3.2.1, префикс 4.1, принадлежит подтипу 3.3, пустой диапазон 3.5, пустой массив 3.6.1, размерность 3.6, соответствует типу 4.1, тип 3.3, тип компоненты 3.3.
4.1.3. ИМЕНУЕМЫЕ КОМПОНЕНТЫ Именуемые компоненты используются для обозначения компонент записей, входов, семейств входов и объектов, указанных ссылочными значениями; они используются также в ка. честве расширенных имен, как это описано ниже. именуемая компонента:: = префикс.постфикс постфикс з= простое имя ) символьный литерал знак операции ) а(! Для обозначения дискриминанта, компоненты записи, входа или объекта, указанного ссылочным значением, используются следующие четыре формы именуемых компонент: а. Дискриминант. Постфикс должен быть простым именем, обозначающим дискриминант объекта или значения. Префикс должен соответствовать типу этого объекта или значения.
б. Компонента записи. Постфикс должен быть простым именем, обозначающим компоненту именуемого объекта или значения. Префикс должен соответствовать типу этого объекта или значения. Для компонент варианта делается проверка: являются ли значения дискриминантов такими, что запись имеет эту компоненту. В противном случае возбуждается исключение СОМВТЙА!МТ ЕЙЙОЙ. в. Одиночный вход или семейство входов задачи. Постфикс должен быть простым именем, обозначающим одиночный вход или семейство вхо- дов задачи. Префикс должен соответствовать типу этой задачи.
г. Объект, указанный ссылочным значением. Постфикс должен быть зарезервированным словом а(!. Значение префикса должно принадле. жать ссылочному типу. Именуемая компонента одной из двух нижеуказанных форм называется расширенным именем. В каждом случае постфикс должен быть либо простым именем, либо символьным лите. ралом, либо знаком операции. Вызов функции в качестве префикса расширенного имени не допускается. Расширенное имя может обозначать; д.
Понятие, описанное в видимом разделе описания пакета. Префикс должен обозначать пакет. Постфикс должен быть простым именем, символьным ли- тералом или знаком операции понятия. 8ТАЙ8(1..15) РАВЕ(10..10 + 8125) РАВЕ(Ц (А..В) 8ТАЙ8(1..0) МУ ВСНЕООЕЕ0ЙЕЕКОАУ) ВТАЙ8(5..15) (К) отрезок из 15 символов отрезок из (1 + 812Е) компонент отрезок массива РАВЕ(Ц пустой отрезок границы задаются подтипом аналогично ВТАЙ8(К), если К в диапазоне 5..15 (см. 3.6.3) (см.
3.6 и 3.2.1) (см. 3.6) (см. 3.6.3) (см. 3.6 и 3.5.1) Гяава 4 е. Понятие, описание которого находится непосредственно в поименованной конструкции. Префикс должен обозначать конструкцию, т.е. программный модуль, оператор блока, оператор цикла или оператор принятия. Для оператора принятия префикс должен быть либо простым именем входа или семейства входов, либо расширенным именем, заканчивающимся таким простым именем (т.
е. не допускается индекс). Постфикс должен быть простым именем, символьным литералом или знаком операции такого понятия, чье описание находится непосредственно в конструкции. Данная форма расширенного имени допустима только в самой конструкции (включая тело и любые субмодули в случае программного модуля). Не допускается использование в качестве префикса имен, описанных с помощью описания переименования. Если префикс — это имя подпрограммы или оператора принятия и если существует более одной видимой объемлющей подпрограммы или оператора принятия с таким именем, то расширенное имя не определено, независимо от постфикса. Если в соответствии с правилами видимости возможна по крайней мере одна интерпретация префикса именуемой компоненты как имени объемлющей подпрограммы или оператора принятия, то рассматриваются только те интерпретации, которые соответствуют правилу е, т.е.
расширенные имена. (Интерпретация префикса как вызова функции не рассматривается). Вычисление имени, являющегося именуемои компонентой, включает вычисление префикса. Примеры именованных ТОМОВВОЧЧ.МОМТН МЕХТ САВ.ОЧЧМЕВ МЕХТ САЙ,ОЧЧМЕВ.АОЕ ЧЧЙ1ТЕЙ.ОМ(Т М1М СЕ(.~(Н).НА! 0Е компонент: (см. 3.7) (см. 3.8.1) (см. 3.8.1) (см . 3.7.3) (см. 6.1 и 3.8.1) (см. 9.1 и 9.2) (см. 9.1 и 9.2) СОМТВО~.ЗЕ(ЗЕ РОО(4К) ЧЧВ(ТЕ МЕХТ САй.а1! (см. 3.8.1) Примечание. Для записей, компонентами которых являются другие записи, перечисленные правила означают, что простое имя должно быть дано для каждого уровня имени подкомпоненты. Например, имя МЕХТ САВ.ОЧЧМЕВ.В1ВТН.МОМТН не может быть укорочено (имя МЕХТ САЙ.ОИ!МЕЙ.МОМТН недопустимо).
Ссылки: вариант 3.7.3, видимость 8.3, видимый раздел 3.7.3, возбуждение исключений 11, вход 9.5, вызов функции 6.4, дискриминант 3.3, задача 9, эадачный модуль 9, запись 3.7, зарезервированное слово 2.9, знак операции 6.1, именуемая компонента 3.7, индекс 3.6, исключение СОМЗТВА(МТ ЕЙВОЯ 11.1, компонента записи 3.7, непосредственно входит в 8.1, объект 3.2.1, объект задачного типа 9.2, оператор блока 5.6, оператор принятия 9.5, оператор цикла 5.5, операция 4.5, описание 3.1, описание переименования 8.5, пакет 7, переменная 3.7.3, подпрограмма 6, понятие 3.1, предопределенный тип С, префикс 4.1, программный модуль 6, простое имя 4.1, семейство входов 9.5, символьный литерал 2.5, совмещение 8.3, соответствует типу 4.1, субмодуль 10.2, ссылочное значение 3.8, ссылочный тип 3.8, тело программного модуля 3.9, тело процедуры 6.3, указывать 3.8.
Примеры расширенньж имен: ТАВЕЕ МАМАОЕЙЛМЗЕВТ КЕУ МАМАОЕй. < СОТ РЙОООСТ.ЗОМ 80РЕЕЯ.РООЕ ВОРРЕВ.ЙЕАО ЗЧЧАР.ТЕМ Р ЗТАМОАВО.ВОО(.ЕАМ компонента записи компонента записи компонента записи компонента записи (дискриминант) компонента записи результата вызова функции вход задачи СОМТВОЕ вход задачи Р001.(К) объект, указанный ссылочной пере- менной МЕХТ САВ процедура видимого раздела пакета (см.