Статус документа
Статус документа

ГОСТ 27831-88 (ИСО 8652-87) Язык программирования АДА

     4.1. Имена


Имена могут обозначать понятия, описанные явно или неявно (см. 3.1). Имена могут обозначать также объекты, указанные ссылочными значениями, подкомпоненты и отрезки объектов и значений, одиночные входы, семейства входов и входы семейства входов. Наконец, имена могут обозначать атрибуты этих понятий и объектов.

имя : : = простое_имя

символьный_литерал

знак_операции

индексируемый_компонент

отрезок

именуемый_компонент

атрибут

простое_имя : : = идентификатор

префикс : : = имя вызов_функции


Простое имя понятия - это либо идентификатор, связанный с этим понятием его описанием, либо другой идентификатор, связанный с этим понятием описанием переименования.

Определенные формы имени (индексируемые и именуемые компоненты, отрезки и атрибуты) включают в себя префикс, который может быть именем или вызовом функции. Если тип префикса - ссылочный тип, то префикс не должен быть именем, которое обозначает формальный параметр вида out или его подкомпонент.

Если префикс имени - вызов функции, то имя обозначает компонент, отрезок, вход или семейство входов результата вызова функции либо (если результат - ссылочное значение) объект, указанный результатом.

Говорят, что префикс соответствует некоторому типу в любом из следующих случаев:

Тип префикса - это рассматриваемый тип.

Тип префикса - ссылочный тип, который указывает на рассматриваемый тип.

Вычисление имени определяет понятие, обозначенное этим именем. Для простого имени, символьного литерала или знака операции вычисление имени не имеет другого результата.

Вычисление имени, имеющего префикс, включает в себя вычисление префикса, т.е. соответствующего имени или вызова функции. Если тип префикса - ссылочный тип, то вычисление префикса включает в себя определение объекта, указанного соответствующим ссылочным значением; если значение префикса является пустым ссылочным значением, исключая случай префикса атрибута представления (см. 13.7.2), то возбуждается исключение CONSTRAINT_ERROR (см. 13.7.2).

Примеры простых имен:

ПИ

- - простое имя числа (см. 3.2.2)

ПРЕДЕЛ

- - простое имя константы (см. 3.2.1)

СЧЕТ

- - простое имя скалярной переменной (см. 3.2.1)

ПУЛЬТ

- - простое имя массива (см. 3.6.1)

МАТРИЦА

- - простое имя типа (см. 3.6)

СЛУЧАЙНОЕ

- - простое имя функции (см. 6.1)

ОШИБКА

- - простое имя исключения (см. 11.1)



4.1.1.Индексируемые компоненты

Индексируемый компонент обозначает компонент массива или вход семейства входов.

индексируемый компонент : : =

префикс (выражение {, выражение})


Для компонентов массива тип префикса должен соответствовать индексируемому типу. Значения индексов компонента задаются выражениями, каждой позиции индекса должно соответствовать одно такое выражение. Для входа из семейства входов префикс должен быть именем, которое обозначает семейство входов задачного объекта, а выражение (оно должно быть только одно) задает значения индекса конкретного входа.

Типом каждого выражения должен быть тип соответствующего индекса. В языке не определяется порядок вычисления префикса и выражений при вычислении индексируемого компонента. Если значение индекса не принадлежит диапазону индекса массива или семейства входов, определяемых префиксом, то возбуждается исключение CONSTRAINT_ERROR.

Примеры индексируемых компонентов:

МОЕ_РАСПИСАНИЕ (СБ)

- - компонент одномерного массива (см. 3.6.1)

СТРАНИЦА (10)

- - компонент одномерного массива (см. 3.6)

ПУЛЬТ (М, К+1)

- - компонент двумерного массива (см. 3.6.1)

СТРАНИЦА (10) (20)

- - компонент компонента (см. 3.6)

ЗАПРОС (СРЕДА)

- - вход семейства входов (см. 9.5)

СЛЕДУЮЩЕЕ_ОБРАМЛЕНИЕ (Л), (М, Н) - - компонент вызова функции (см. 6.1)


Примечание к примеру. Для компонентов многомерных массивов (таких как ПУЛЬТ) и массива массивов (таких как СТРАНИЦА) используются различные обозначения. Компонентами массива массивов являются массивы, и они могут быть индексированы. Так, СТРАНИЦА (10) (20) обозначает двадцатый компонент массива СТРАНИЦ (10). В последнем примере СЛЕДУЮЩЕЕ_ОБРАМЛЕНИЕ (Л) - вызов функции, возвращающий ссылочное значение, указывающее двумерный массив.