Товары в корзине: 0 шт Оформить заказ
Стр. 1 

265 страниц

1308.00 ₽

Купить ГОСТ 27831-88 — бумажный документ с голограммой и синими печатями. подробнее

Распространяем нормативную документацию с 1999 года. Пробиваем чеки, платим налоги, принимаем к оплате все законные формы платежей без дополнительных процентов. Наши клиенты защищены Законом. ООО "ЦНТИ Нормоконтроль"

Наши цены ниже, чем в других местах, потому что мы работаем напрямую с поставщиками документов.

Способы доставки

  • Срочная курьерская доставка (1-3 дня)
  • Курьерская доставка (7 дней)
  • Самовывоз из московского офиса
  • Почта РФ

Устанавливает базовое описание языка программирования АДА, применяемого для разработки программ различного назначения, в том числе работающих в реальном масштабе времени, а также средств компиляции, тестирования и отладки программ. В процессе принятия решений при проведении испытаний и приемке систем программирования и программ на языке АДА стандарт является основанием для определения их полного соответствия языку АДА только при наличии и применении систем тестов, согласованных в установленном порядке.

 Скачать PDF

Оглавление

1. Общие положения

     1.1. Область действия стандарта

     1.1.1. Содержание стандарта

     1.1.2. Согласованность реализации со стандартом

     1.2. Структура стандарта

     1.3. Цели и источники разработки

     1.4. Обзор свойств языка

     1.5. Метод описания и синтаксические обозначения

     1.6. Классификация ошибок

2. Лексика

     2.1. Набор символов

     2.2. Лексемы, разделители и ограничители

     2.3. Идентификаторы

     2.4. Числовые литералы

     2.4.1. Десятичные литералы

     2.4.2. Литералы с основанием

     2.5. Символьные литералы

     2.6. Строковые литералы

     2.7 Комментарии

     2.8. Прагмы

     2.9. Зарезервированные слова

     2.10.  Допустимые замены символов

3. Описания и типы

     3.1. Описания

     3.2. Объекты и именованные числа

     3.2.1. Описания объектов

     3.2.2. Описание чисел

     3.3. Типы и подтипы

     3.3.1. Описания типов

     3.3.2. Описания подтипов

     3.3.3. Классификация операций

     3.4. Производные типы

     3.5. Скалярные типы

     3.5.1. Перечислимые типы

     3.5.2. Символьные типы

     3.5.3. Логические типы

     3.5.4. Целые типы

     3.5.5. Операции над дискретными типами

     3.5.6. Вещественные типы

     3.5.7. Плавающие типы

     3.5.8. Операции над плавающими типами

     3.5.9. Фиксированные типы

     3.5.10. Операции над фиксированными типами

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

     3.6.1. Ограничения индекса и дискретные диапазоны

     3.6.2. Операции над индексируемыми типами

     3.6.3. Строковый тип

     3.7. Именуемые типы

     3.7.1. Дискриминанты

     3.7.2. Ограничения дискриминантов

     3.7.3. Разделы вариантов

     3.7.4. Операции над именуемыми типами

     3.8. Ссылочные типы

     3.8.1. Неполные описания типов

     3.8.2. Операции над ссылочными типами

     3.9. Разделы описаний

4. Имена и выражения

     4.1. Имена

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

     4.1.2. Отрезки

     4.1.3. Именуемые компоненты

     4.1.4. Атрибуты

     4.2. Литералы

     4.3. Агрегаты

     4.3.1. Агрегаты записей

     4.3.2. Агрегаты массивов

     4.4. Выражения

     4.5. Операции и вычисление выражения

     4.5.1. Логические операции и формы управления промежуточной проверкой

     4.5.2. Операции отношения и проверки принадлежности

     4.5.3. Бинарные аддитивные операции

     4.5.4. Унарные аддитивные операции

     4.5.5. Мультипликативные операции

     4.5.6. Операции высшего приоритета

     4.5.7. Точность операций с вещественными операндами

     4.6. Преобразование типа

     4.7. Квалифицированные выражений

     4.8. Генераторы

     4.9. Статические выражения и статические подтипы

     4.10. Универсальные выражения

5. Операторы

     5.1. Простые и составные операторы. Последовательности операторов

     5.2. Операторы присваивания

     5 2.1. Присваивания массивов

     5.3. Условные операторы

     5.4. Операторы выбора

     5.5. Операторы цикла

     5.6. Операторы блока

     5.7. Операторы выхода

     5.8. Операторы возврата

     5.9. Операторы перехода

6. Подпрограммы

     6.1. Описание подпрограммы

     6.2. Виды формальных параметров

     6.3. Тела подпрограмм

     6.3.1. Правила согласования

     6.3.2. Подстановка подпрограмм

     6.4. Вызовы подпрограмм

     6.4.1. Сопоставления параметров

     6.4.2. Опущенные параметры

     6.5. Функции

     6.6. Профиль типов параметров и результатов. Совмещение подпрограмм

     6.7. Совмещение операций

7. Пакеты

     7.1. Структура пакета

     7.2. Спецификации и описания пакетов

     7.3. Тела пакетов

     7.4. Описания личных типов и субконстант

     7.4.1. Личные типы

     7.4.2. Операции над личным типом

     7.4.3. Субконстанты

     7.4.4. Лимитируемые типы

     7.5. Пример пакета работы с таблицами

     7.6. Пример пакета обработки текстов

8. Правила видимости

     8.1. Зона описания

     8.2. Области действия описаний

     8.3. Видимость

     8.4. Спецификаторы использования

     8.5. Описание переименования

     8.6. Стандартный пакет

     8.7. Контекст разрешения совмещения

9. Задачи

     9.1. Спецификации задач и тела задач

     9.2. Задачные типы и задачные объекты

     9.3. Выполнение и активизация задачи

     9.4. Зависимость и завершение задач

     9.5. Входы, вызовы входов и операторы принятия

     9.6. Операторы задержки, длительность и время

     9.7. Операторы отбора

     9.7.1. Отбор с ожиданием

     9.7.2. Условные вызовы входов

     9.7.3. Временные вызовы входов

     9.8. Приоритеты

     9.9. Атрибуты задач и входов

     9.10. Операторы прекращения

     9.11. Разделяемые переменные

     9.12. Пример использования задачи

10. Структура программы и результат компиляции

     10.1. Компилируемые модули. Библиотечные модули

     10.1.1. Спецификаторы контекста. Спецификаторы совместности

     10.1.2. Примеры компилируемых модулей

     10.2. Субмодули компилируемых модулей

     10.2.1. Примеры субмодулей

     10.3. Порядок компиляции

     10.4. Программная библиотека

     10.5. Предвыполнение библиотечных модулей

     10.6. Оптимизация программы

11. Исключения

     11.1. Описания исключений

     11.2. Обработчики исключений

     11.3. Операторы возбуждения

     11.4. Обработка исключения

     11.4.1. Исключения, возбуждаемые при выполнении операторов

     11.4.2. Исключения, возбуждаемые при предвыполнении описаний

     11.5. Исключения, возбуждаемые при взаимодействии задач

     11.6. Исключения и оптимизация

     11.7. Подавление, проверок

12. Настраиваемые модули

     12.1. Описание настройки

     12.1.1. Формальные объекты настройки

     12.1.2. Формальные типы настройки

     12.1.3. Формальные подпрограммы настройки

     12.2. Настраиваемые тела

     12.3. Конкретизация настройки

     12.3.1. Правила сопоставления для формальных объектов

     12.3.2. Правила сопоставления для формальных личных типов

     12.3.3. Правила сопоставления для формальных скалярных типов

     12.3.4. Правила сопоставления для формальных индексируемых типов

     12.3.5. Правила сопоставления для формальных ссылочных типов

     12.3.6. Правила сопоставления для формальных подпрограмм

     12.4. Пример настраиваемого пакета

13. Спецификаторы представления и особенности, зависящие от реализации

     13.1. Спецификаторы представления

     13.2. Спецификаторы длины

     13.3. Спецификаторы представления перечисления

     13.4. Спецификаторы представления записей

     13.5. Спецификаторы адреса

     13.5.1. Прерывания

     13.6. Изменение представления

     13.7. Системный пакет

     13.7.1. Зависящие от системы именованные числа

     13.7.2. Атрибуты представления

     13.7.3. Атрибуты представления вещественных типов

     13.8. Вставки машинных кодов

     13.9. Связь с другими языками

     13.10. Неконтролируемое программирование

     13.10.1. Неконтролируемое освобождение памяти

     13.10.2. Неконтролируемое преобразование типов

14. Ввод-вывод

     14.1. Внешние файлы и файловые объекты

     14.2. Файлы последовательного и прямого доступа

     14.2.1. Управление файлами

     14.2.2. Последовательный ввод-вывод

     14.2.3. Спецификация пакета последовательного ввода-вывода

     14.2.4. Прямой ввод-вывод

     14.2.5. Спецификация пакета прямого ввода-вывода

     14.3. Ввод-вывод текстов

     14.3.1. Управление файлами

     14.3.2. Файлы ввода и вывода по умолчанию

     14.3.3. Спецификации длин строчек и страниц

     14.3.4. Операции над столбцами, строчками и страницами

     14.3.5. Процедуры обмена

     14.3.6. Ввод-вывод символов и строк

     14.3.7. Ввод-вывод для целых типов

     14.3.8. Ввод-вывод для вещественных типов

     14.3.9. Ввод-вывод для перечислимых типов

     14.3.10. Спецификация пакета ввода-вывода текста

14.4. Исключения при вводе-выводе

     14.5. Спецификация пакета исключений ввода-вывода

     14.6. Ввод-вывод низкого уровня

     14.7. Пример ввода-вывода

Приложение 1. Атрибуты, предопределенные в языке

Приложение 2. Прагмы, предопределенные в языке

Приложение 3. Предопределенное окружение языка

Приложение 4. Характеристики, зависящие от реализации

Приложение 5. Термины и определения

Приложение 6. Сводка синтаксиса

Информационные данные

Стр. 1
стр. 1
Стр. 2
стр. 2
Стр. 3
стр. 3
Стр. 4
стр. 4
Стр. 5
стр. 5
Стр. 6
стр. 6
Стр. 7
стр. 7
Стр. 8
стр. 8
Стр. 9
стр. 9
Стр. 10
стр. 10
Стр. 11
стр. 11
Стр. 12
стр. 12
Стр. 13
стр. 13
Стр. 14
стр. 14
Стр. 15
стр. 15
Стр. 16
стр. 16
Стр. 17
стр. 17
Стр. 18
стр. 18
Стр. 19
стр. 19
Стр. 20
стр. 20
Стр. 21
стр. 21
Стр. 22
стр. 22
Стр. 23
стр. 23
Стр. 24
стр. 24
Стр. 25
стр. 25
Стр. 26
стр. 26
Стр. 27
стр. 27
Стр. 28
стр. 28
Стр. 29
стр. 29
Стр. 30
стр. 30

ГОСУДАРСТВЕННЫЙ СТАНДАРТ

СОЮЗА ССР

ЯЗЫК ПРОГРАММИРОВАНИЯ АДА

ГОСТ 27831-88 (ИСО 8652-87 )


БЗ 8-88/526


Издание официальное

ГОСУДАРСТВЕННЫЙ КОМИТЕТ СССР ПО СТАНДАРТАМ

Москва

УДК 681.3.06:006.354    Группа    П85

ГОСУДАРСТВЕННЫЙ СТАНДАРТ СОЮЗА ССР

ЯЗЫК ПРОГРАММИРОВАНИЯ АДА

(ИСО 8652-87)

Programming language Ada

ОКСТУ 4002

Дата введения 01.07.89

Настоящий стандарт устанавливает базовое описание языка программирования АДА, применяемого для разработки программ различного назначения, в том числе работающих в реальном масштабе времени, а также средств компиляции, тестирования и отладки программ.

В процессе принятия решений при проведении испытаний и приемке систем программирования и программ на языке Ада настоящий стандарт является основанием для определения их полного соответствия языку Ада только при наличии и применении систем тестов, согласованных в установленном порядке.

1. ОБЩИЕ ПОЛОЖЕНИЯ

1.1.    Область действия стандарта

В настоящем стандарте описаны форма представления и семантика программных модулей, написанных на языке Ада. Цель стандарта — повысить надежность и переносимость программ для разнообразных систем обработки данных.

1.1.1. Содержание стандарта

Стандарт определяет:

а)    Форму представления программного модуля, написанного на языке

Ада.

б)    Результаты трансляции и выполнения такого программного модуля.

в)    Способ получения Ада-программ из набора программных модулей.

г)    Предопределенные программные модули, которые должна обеспечивать согласованная со стандартом реализация (далее — согласованная реализация) .

Издание официальное ★

д)    Допустимые в рамках стандарта изменения языка и способы их задания.

Перепечатка воспрещена ©Издательство стандартов, 1989

г) Некорректная зависимость от порядка выполнения.

Когда в стандарте указывается, что различные части данной конструкции должны быть выполнены в порядке, который не определен в языке, это означает, что реализация может выполнять эти части в любом порядке, но не параллельно. Более того, конструкция некорректна, если выполнение этих частей в различном порядке дает различный результат. Во время компиляции и во время выполнения программы (этот процесс называется выполнением) компилятор не обязан обеспечивать проверку некорректной зависимости результата от порядка. Термин выполнение в равной мере применим к процессам, которые называются вычислением и предвыполнением.

Если компилятор способен распознать во время компиляции, что конструкция ошибочна или содержит некорректную зависимость от порядка, то допускается, чтобы компилятор генерировал код, заменяющий конструкцию кодом, возбуждающим предопределенное исключение PROGRAM_ER-ROR. Компилятор также может сгенерировать код, который во время выполнения проверяет ошибочность конструкции, некорректную зависимость от порядка или и то и другое. Предопределенное исключение PROGRAMMER-ROR возбуждается, если проверка покажет наличие такой ошибки.

2. ЛЕКСИКА

Текст программы состоит из текстов одной или нескольких компиля-ций.Текст компиляции — это последовательность лексических элементов (лексем), каждый из которых состоит из символов. В этой главе приведены правила составления лексем. Кроме того, в ней описаны прагмы, задающие определенную информацию для компилятора.

2.1. Набор символов

Символами текста программы должны быть только графические символы и символы управления форматом. Каждый графический символ представляется (визуально) графическим знаком. Описание определения языка в этом документе использует стандартный набор графических символов по ГОСТ 27465-87.

графический символ : : = основной_графический_символ | строчная_буква | дополнительный_специальный__символ основной_графический_символ : : = прописная_6уква I цифра | специальный_ символ I символ „пробела основной_символ : : = основной_графический_символ | символ_управления_форматом Набор основных символов достаточен для написания любой программы. Основные графические символы подразделяются на следующие подклассы:

а)    прописные буквы

ABCDEFGHIJKLMNOPQRSTUVWXYZ

АБ ВГ ДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ

б)    цифры 0123456789

ГОСТ 27831-88 С. 11

в)    специальные символы

г)    символ пробела

Символы управления форматом (часть символов формата) — это символы по ГОСТ 27465-87, называющиеся: горизонтальная табуляция, вертикальная табуляция, возврат каретки, перевод строчки и перевод формата.

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

д)    строчные буквы

abed efghijklmnopqrstuvwxyz

абвгдеёжзийклмнопрстуфхцчшщъыьэюя

е)    дополнительные специальные символы ! »%?@ [\] А' Т > '

В разд. 2.10 определены допустимые замены для специальных символов вертикальной черты (|), номера (#) и кавычки ('*).

Примечание. Шрифтовые выделения графических символов (например, курсив или полужирный шрифт) не являются частью стандартного набора.

Для ссылок на специальные и дополнительные специальные символы в табл. 2.1 приведены их наименования.

Таблица 2.1

Символ

Наименование

Символ

Наименование

Кавычки

>

Больше

#

Номер

-

Подчеркивание

&

Коммерческое И

1

Вертикальная черта

Апостроф

!

Восклицательный знак

(

Круглая скобка левая

к

Знак денежной единицы

)

Круглая скобка правая

%

Проценты

*

Звездочка

9

Вопросительный знак

+

Плюс

Коммерческое ЭТ

у

Запятая

1

Квадратная скобка левая

-

Минус

\

Обратная дробная черта

.

Точка

1

Квадратная скобка правая

/

Дробная черта

Л

Сиркюмфлекс

:

Двоеточие

>

Слабое ударение

1

Точка с запятой

■с

Фигурная скобка левая

<

Меньше

>

Фигурная скобка правая

=

Равно

Черта сверху

2.2. Лексемы, разделители и ограничители

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

В некоторых случаях необходим явный разделитель между соседними лексемами (в противном случае они могут быть восприняты как одна).

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

Конец строчки всегда является разделителем. Язык не определяет, что является концом строчки. Однако, если в данной реализации конец строчки обозначается одним или несколькими символами, то эти символы должны быть символами управления форматом, отличными от символа горизонтальной табуляции. Во всяком случае, последовательность из одного или нескольких символов управления форматом, отличных от символа горизонтальной табуляции, должна означать по крайней мере один конец строчки.

Один или несколько разделителей допустимы между любыми двумя соседними лексемами, перед первой или после последней лексемами каждой компиляции. По крайней мере один разделитель необходим между идентификатором или числовым литералом и соседними идентификаторами или числовыми литералами.

Ограничитель — это один из следующих специальных символов из набора основных символов

или один из так называемых составных ограничителей, представляющих собой пару специальных символов

=>..** :=/=>=<=«» О

Каждый специальный символ является простым ограничителем, за исключением тех случаев, когда он встречается в составном ограничителе, в комментарии, в строковом, символьном или числовом литералах.

Остальные формы лексем описаны в других разделах этой главы.

Примечание. Каждая лексема должна располагаться в одной строчке, поскольку конец строчки - разделитель. Символы кавычки, номера, подчеркивания и два соседних дефиса не являются ограничителями, но могут входить в лексемы в качестве ее частей.

Наименования составных ограничителей даны в табл, 2.2.

Таблица 2.2

Ограничитель

Наименование

= >

Стрелка

. .

Двойная точка

* *

Двойная звездочка (возведение в степень)

: =

Присваивание (читается: „становится равным”)

/ =

Неравенство (читается: „не равно”)

> =

Больше или равно

< =

Меньше или равно

< <

Левая скобка метки

»

Правая скобка метки

< >

Бокс (коробка)

ГОСТ 27831-88 С. 13

2.3.    Идентификаторы

Идентификаторы используются в качестве имен и зарезервированных слов.

идентификатор : : = буква { [подчеркивание] буква_или_цифра>

буква_или_цифра : : = буква | цифра

буква : : = прописная__ буква! строчная_буква

Все символы идентификатора существенны, включая символ подчеркивания между соседними буквами или цифрами. Идентификаторы, различающиеся только размерами букв и использованием графически совпадающих букв русского и латинского алфавитов, считаются совпадающими. Примеры:

СЧЕТЧИК X дай_символ Эвелина Марион

СНОБОЛ 4 XI СчетчикСтраниц ЗАПАСТИ_СЛЕДУЮЩИЙ_ЭЛЕМЕНТ

Примечание. Пробел внутри идентификатора недопустим, поскольку он является разделителем.

2.4.    Числовые литералы

Числовые литералы подразделяются на два класса: вещественные и целые. Вещественный литерал — это числовой литерал, который включает точ-ку; целый литерал — это числовой литерал без точки. Вещественные литералы являются литералами типа универсальный ^вещественный. Целые литералы — литералы mm универсальный целый.

числовой^литерал : : = десятичный_дштерал | литерал_с_основанием 2.4.1 .Десятичные литералы

Десятичный литерал — это числовой литерал, выраженный в общепринятой десятичной системе (основание по умолчанию равно десяти). десятичный_литерал : : = целое [. целое] [порядок] целое : : — цифра { [подчеркивание] цифра} порядок : : = Е [+] целое | Е — целое

Символ подчеркивания между соседними цифрами десятичного литерала не влияет на значение числового литерала. Буква Е в порядке может быть строчной или прописной буквой с одним и тем же назначением.

Для получения значения десятичного литерала с порядком следует умножить значение десятичного литерала без порядка на степень десяти, заданную порядком. Порядок для целого литерала не должен содержать знак минус.

Примеры:

12 О    1Е6    123_456    --целые литералы

12.0    0.0    0.456    3.14159_26    -- вещественные литералы

1.34Е-12    1.0Е+6    - - вещественные литералы с порядком

Примечание. Ведущие нули допускаются. Пробел в числовом литерале недопустим даже между составными частями порядка, поскольку пробел является разделителем. Нулевой порядок для целого литерала допустим.

2.4.2. Литералы с основанием

Литерал с основанием — это числовой литерал, в котором явно указано основание. Основание должно принимать значение от двух до шестнадцати.

С. 14 ГОСТ 27831-88

литерал_с_основанием : : = основание # целое_с__основанием [. целое„с_основанием] # [порядок] основание : : = целое целое_с_основанием : : = расширенная_цифра{[подчеркивание] расширенная_цифра} расширенная__цифра : : = цифра | буква Символ подчеркивания, заключенный между соседними цифрами литерала с основанием, не влияет на значение этого числового литерала. Основание и порядок, если они есть, записываются в десятичной системе. В качестве расширенных цифр от десяти до пятнадцати допускаются только латинские буквы от А до F. Буква в литерале с основанием (расширенная цифра или буква Е в порядке) может быть строчной или прописной с одним и тем же смыслом.

Предполагается обычный смысл обозначения литерала с основанием; в частности, значение каждой расширенной цифры литерала с основанием должно быть меньше основания. Для получения значения литерала с основанием и порядком следует умножить значение литерала с основанием без порядка на основание, возведенное в указанную порядком степень. Гримеры:

2#1111_1111#    16#FF#    016#0FF#

-    - целые литералы со значением 255

16#Е#Е1    2#1110__0000#

-    - целые литералы со значением 224

16#F.FF#E+2    2#1.1111_1111 111 #Е 11

-    - вещественные литералы со значением 4095.0

2.5.    Символьные литералы

Символьный литерал - это какой-либо из 161 графических символов (включая пробел), заключенный между двумя символами апострофа. Символьный литерал имеет значение некоторого символьного типа. символьный_литерал : : — 'графический_символ Примеры:

t Д '    '* '    "    '    "

2.6.    Строковые литералы

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

строковый литерал : : = ” {графический_символ}”

Строковый литерал имеет значение, являющееся последовательностью значений символов, соответствующих графическим символам строкового литерала, кроме внешних символов кавычки. Для представления кавычки в последовательности значений символов необходимо в соответствующем месте внутри строкового литерала поместить пару соседних символов кавычки. (Это означает, что строковый литерал, включающий два соседних символа кавычки, никогда не рассматривается как два строковых литерала.)

ГОСТ 27831-88 С. 15

Дайна строкового литерала — это количество значений символьного типа в последовательности, его представляющей. (Каждые два соседних символа кавычки в строке считаются одним символом.)

Примеры:

” Дневное сообщение”

””    --пустой строковый литерал

” ”    "А” ””””    -    -    три    строковых    литерала    длиной    1

’’Символы, такие, как % и I допустимы в строковых литералах”.

Примечание. Строковый литерал должен помещаться на одной строчке, поскольку он является лексемой (см. 2.2). Более длинные последовательности значений графических символов могут быть получены катенацией строковых литералов. Равным образом, катенация констант, описанных в пакетах ASCII и ГОСТ (см. приложение 3), может быть использована для получения последовательности значений символьного типа, которая включает значения неграфических символов (так называемых управляющих символов). Ниже даны примеры использования катенации:

’’ПЕРВАЯ ЧАСТЬ ПОСЛЕДОВАТЕЛЬНОСТИ СИМВОЛОВ,” &

’’КОТОРАЯ ПРОДОЛЖАЕТСЯ НА СЛЕДУЮЩЕЙ СТРОЧКЕ”

’’последовательность, которая включает” & ГОСТ. ДА & ’’управляющий символ”

2.7.    Комментарии

Комментарий начинается с двух соседних дефисов и продолжается до конца строчки. Комментарий может помещаться в любой строчке программы. Присутствие или отсутствие комментария не влияет ни на правильность, ни на неправильность программы. Более того, комментарии не влияют на результат программы; их единственное назначение - сделать программу более понятной.

Примеры:

-    - последнее предложение выражает ту же мысль, что и

-    - в языке Алгол 68

end; - - обработка СТРОЧКИ завершена

-    - длинный комментарий может быть разбит на две или

-    - несколько последовательных строчек .......первые два дефиса начинают комментарий

Примечание. Горизонтальная табуляция может быть использована в комментариях после двух дефисов; это эквивалентно одному или нескольким пробелам (см. 2.2).

2.8.    Прагмы

Прагма используется для задания информации компилятору. Прагма начинается зарезервированным словом pragma, за которым следует идентификатор - имя прагмы.

прагма : : — pragma идентификатор [(сопоставление_аргумента {, сопоставление_аргумента})] ; сопоставление_аргумента : : =

[идентификатор_яргу.мен7Я =>] имя I [идентификатор_аргул<енга =>] выражение Прагмы допустимы только в следующих местах программы:

• После ограничителя точки с запятой, но не внутри раздела формальных параметров или раздела дискриминантов;

• В любом месте, где синтаксические правила допускают синтаксические понятия, в названии которых содержатся слова „описание”, „оператор”, „спецификатор” или „альтернатива”, или одно из синтаксических понятий: вариант и обработчик исключений, но не вместо соответствующих конструкций, а также в любом месте, где допустим компилируемый модуль.

На месторасположение отдельных прагм могут накладываться дополнительные ограничения.

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

Предопределенные прагмы описаны в обязательном приложении 2; они должны поддерживаться в каждой реализации. Реализация может определить дополнительные прагмы. Они должны быть описаны в соответствии с обязательным приложением 4. Реализация не должна допускать определение прагм, наличие или отсутствие которых влияет на правильность текста программы. Следовательно, правильность программы не зависит от наличия или отсутствия прагм, определенных реализацией.

Прагма, не определенная в языке, не дает никакого результата, если ее идентификатор не распознан (данной) реализацией. Более того, прагма (как определенная в языке, так и определенная реализацией) не дает никакого результата, если ее размещение или ее аргументы не соответствуют допустимым для этой прагмы. Участок текста, на который распространяется действие прагмы, зависит от прагмы.

Примеры:

pragma LIST (OFF),

pragma OPTIMIZE (TIME),

pragma INLINE (УСТАНОВИТБМАСКУ);

pragma SUPPRESS (RANGE_CHECK, ON ИНДЕКС);

Примечание. Рекомендуется (но не требуется), чтобы реализация выдавала предупреждающие сообщения о прагмах, которые не распознаны, и поэтому проигнорированы.

2.9. Зарезервированные слова

Перечисленные в табл. 2.3 идентификаторы называются зарезервированными словами. Они зарезервированы в языке для специальных целей и в стандарте изображаются строчными буквами полужирным шрифтом (после тире приведено наименование на русском языке).

Таблица 2.3

Зарезервированные слова


Зарезервированные слова


access - ссылка_на all - все and -и


abort - прекращение


abs - абсолютная величина accept - принятие

Продолжение табл. 2.3

Зарезервированные слова

Зарезервированные слова

array -массив

not - не

at -положение

null - пусто

begin - начало

of - из

body - тело

ог -или

case - выбор

others - другие

constant - константа

out - выходной

declare - описание

package - пакет

delay — задержка

pragma - прагма

delta - дельта

private - личный

digits - цифр

procedure - процедура

do - выполнение

raise - возбуждение

else - иначе

range - диапазон

elsif - инесли

record - запись

end - конец

rem - остаток

entry - вход

renames - синоним

exception — исключение

return - возврат

exit - выход

reverse - в_обратном_порядке

for - для

select - отбор

function - функция

separate - отдельно

generic - настройка

subtype - подтип

goto — переход_на

task - задача

if - если

terminate - завершение

in - в

then - то

in - входной

type - тип

is - есть

use - использовать

limited - лимитируемый

when — когда

loop - цикл

while - пока

mod - по_модулю

\tfith - совместно _с

new - новый

хог - либо

Зарезервированные слова не должны использоваться в качестве описываемого идентификатора.

Примечание. Зарезервированные слова, отличающиеся только соответствующими строчными или прописными буквами, рассматриваются как одинаковые (см. 2.3). Идентификаторы некоторых атрибутов, стоящие после апострофа, совпадают с зарезервированными словами (DELTA, DIGITS и RANGE).

2.10. Допустимые замены символов

Для основных символов вертикальной черты, номера и кавычки допустимы следующие замены:

*    символ вертикальной черты (|) можно заменить восклицательным знаком (!) там, где он используется как ограничитель;

•    символ номера (#) в литерале с основанием можно заменить двоеточием (:) при условии, что в этом литерале заменяются оба символа номера;

С. 18 ГОСТ 27831-88

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

Эти замены не изменяют смысла программы.

Примечание. Рекомендуется, чтобы замена символов вертикальной черты, номера и кавычки была ограничена случаями, когда соответствующих графических символов нет на терминалах. Заметим, что вертикальная черта изображается на некоторых устройствах прерывистой линией, замена в этом случае не рекомендуется.

Правила для идентификаторов и числовых литералов таковы, что строчные и прописные буквы эквивалентны; эти лексемы могут быть записаны только символами основного набора. Если строковый литерал предопределенного типа STRING содержит символы не из основного набора, та же самая последовательность значений символов может быть получена катена-цией строковых литералов, содержащих символы основного набора, и символьных констант, описанных в предопределенных пакетах ASCII и ГОСТ. Таким образом, строковый литерал ”АБ Й ВГ” можно заменить на ”АБ” & ГОСТ.ДЕНЕЖНЫЙ_ЗНАК&”ВГ”, а строковый литерал ”ABcd” со строчными буквами можно заменить на ”AB”&ASCII. LC_C&ASCII.LC_D.

3. ОПИСАНИЯ и типы

Эта глава описывает типы и правила описания констант, переменных и именованных чисел.

3.1. Описания

В языке определены некоторые сорта понятий, объявляемые явно и неявно описаниями.

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

Существует несколько форм описаний. Основное описание — это форма описания, определенная следующим образом:

основное_описание : : =

описание_объекта    |    описание_числа

I описание_типа    |    описание_подтипа

I описание_подпрограммы | описание_пакета I описание_задачи    |    описание_настройки

ГОСТ 27831-88 С. 19

| описание„исключения    |    конкретизация_настройки

I описание_переименования | описание„субконстанты

Некоторые формы описания всегда являются (явно) частью основного описания, а именно: спецификация дискриминантов, описание компонентов, описание входов, спецификация параметров, описание параметров настройки и спецификации литералов перечисления. Спецификация параметра цикла — это конструкция, которая входит только в некоторые формы оператора цикла.

Остальные формы описания являются неявными: имя блока, имя цикла и метка оператора. Некоторые операции описываются неявно (см. 3.3.3).

Для каждой формы описания правила языка определяют некоторый участок текста, называемый областью действия описания (см. 8.2) . Некоторые формы описания связывают с описанным понятием идентификатор. Внутри области действия, и только в ней, существуют места, где возможно использование идентификатора для связи его с описанным понятием; эти места определяются правилами видимости (см. 8.3). В таких местах идентификатор называется именем понятия (простым именем); говорят, что имя обозначает связанное с ним понятие.

Некоторые формы спецификации литерала перечисления связывают символьный литерал с соответствующим описываемым понятием. Некоторые фо)эмы описаний связывают символ операции или другие обозначения с явно или неявно описанной операцией.

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

Говорят, что после своего предвыполнения описание становится пред-выполненным. До завершения своего предвыполнения (как и до его начала) описание считается еще не предвыполненным. Предвыполнение любого описания дает всегда по крайней мере один эффект: описание из еще не предвыполненного становится (меняет статус) предвыполненным. Фраза: „предвыполнение не дает другого эффекта” используется тогда, когда происходит только изменение статуса описания. Процесс предвыполнения определяется также для разделов описаний, элементов описания и компилируемых модулей (см. 3.9 и 10.5).

Описания объекта, числа, типа и подтипа даны в этой главе. Остальные основные описания изложены в последующих главах.

Примечание. Синтаксические правила используют термин идентификатор для первого вхождения идентификатора в некоторую форму описания; термин простое имя используется для любого вхождения идентификатора, который уже обозначает какое-либо описанное понятие.

3.2. Объекты и именованные числа

Объект — это понятие языка. Объект имеет (содержит) значение данного типа. Объектом может быть:

• Объект, объявленный описанием объекта или описанием одиночной задачи;

е)    Те нарушения стандарта, которые обязана обнаруживать согласованная реализация, а также результат попытки транслировать или выполнять программный модуль, содержащий такие нарушения.

ж)    Те нарушения стандарта, которые согласованная реализация не обязана обнаруживать.

Стандарт не определяет:

з)    Средства преобразования программного модуля, написанного на языке Ада, в объектный код, выполняемый процессором.

и)    Средства инициализации трансляции, выполнения программных модулей и управления ими.

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

л)    Форму и содержание любых листингов, предусмотренных реализациями, в частности, форму и содержание сообщений об ошибках или предупреждающих сообщений.

м)    Результат выполнения программного модуля, содержащего любое нарушение стандарта, которое согласованная реализация не обязана обнаруживать.

н)    Предельный для конкретной согласованной реализации размер программы или программного модуля.

Там, где стандарт предписывает, что программный модуль, написанный на языке Ада, имеет точный результат, этот результат является функциональным значением данного программного модуля, и его должны обеспечивать все согласованные реализации. Там, где стандарт допускает неоднозначность результата выполнения программного модуля, под функциональным значением программного модуля в целом понимается множество возможных результатов, и согласованная реализация может обеспечить любой из возможных результатов. Примерами допустимых неоднозначностей являются:

•    Значения фиксированных и плавающих числовых величин, а также результаты операций над ними;

•    Порядок выполнения операторов в различных параллельных задачах при отсутствии явной синхронизации.

1.1.2. Согласованность реализации, со стандартом

Согласованная реализация должна:

а)    Корректно транслировать и выполнять правильные программные модули, написанные на языке Ада, если только их объем находится в допустимых для реализации пределах.

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

в)    Не выполнять программные модули, содержащие ошибки, обнаружение которых предусмотрено стандартом;

г)    Включать предусмотренные стандартом предопределенные программные модули.

С. 20 ГОСТ 27831-88

•    Формальный параметр подпрограммы, входа или настраиваемой подпрограммы;

•    Формальный объект настройки;

•    Параметр цикла;

•    Объект, указанный значением ссылочного типа;

•    Компонент или отрезок другого объекта.

Описание числа — это специальная форма описания объекта, которая связывает идентификатор со значением типа универсальный_целый или универсальный „вещественный.

описание_объекта : : = список_идентификаторов : [constant] указание_подтипа [: = выражение] ;

I список идентификаторов : [constant]

определение_ограниченного_индексируемого„типа [: = выражение] ;

описание _числа : : — список „идентификаторов : constant : = универсальное „статическое „выражение;

список_идентификаторов ; : = идентификатор {, идентификатор}

Описание объекта называется единичным описанием объекта, если список его идентификаторов имеет единственный идентификатор; оно называется групповым описанием объектов, если его список имеет два или несколько идентификаторов. Групповое описание объектов эквивалентно последовательности соответствующего числа единичных описаний объектов. Для каждого идентификатора из списка в такой эквивалентной последовательности единичное описание объекта формируется из идентификатора, двоеточия и всего того, что стоит справа от двоеточия в групповом описании объекта; описания в эквивалентной последовательности идут в том же порядке, что и список идентификаторов.

Аналогичная эквивалентность имеет место также для списка идентификаторов описания числа, описаний компонентов, спецификаций дискриминантов, спецификаций параметров и описаний параметров настройки, исключений и субконстант.

В остальной части описания языка все пояснения даны для описаний с единственным идентификатором; соответствующие пояснения для описаний с несколькими идентификаторами следуют из эквивалентности, установленной выше.

Примеры:

-    - групповое описание объектов

ИВАН, ПЕТР: ИМЯ_ПЕРСОНЫ : = new ПЕРСОНА (ПОЛ => М) ;

-- см. 3.8.1

-    - эквивалентно единичным описаниям объектов,

-    - следующим в данном порядке

ИВАН: ИМЯ „ПЕРСОНЫ: = new ПЕРСОНА (ПОЛ => М) ;

ПЕТР: ИМЯ_ПЕРСОНЫ: = new ПЕРСОНА (ПОЛ => М) ;

ГОСТ 27831-88 С. 3

д)    Содержать только те изменения, которые допускает стандарт.

е)    Описывать допустимые изменения способом, разрешенным стандартом.

1.2.    Структура стандарта

Стандарт содержит четырнадцать глав, четыре обязательных и два справочных приложения.

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

Примеры предназначены для иллюстрации возможных форм описанных конструкций. Примечание предназначено для пояснения следствий из правил, описанных в данном или других разделах.

Определение стандарта языка программирования Ада предполагает следующее ограничение: материал каждого из перечисленных ниже пунктов носит информативный характер и не является частью определения стандарта языка.

•    Разд. 1.3. Цели и источники разработки.

—    Разд. 1.4. Обзор свойств языка.

•    Примеры и примечания, приведенные в конце любого раздела.

•    Каждый раздел, заголовок которого начинается со слов „Пример” или „Примеры”.

1.3.    Цели и источники разработки

Язык был разработан исходя из трех противоречивых требований:

—    обеспечить надежность и сопровождение программ;

—    поддерживать программирование как вид человеческой деятельности;

—    обеспечить эффективность программ.

Необходимость в языках, повышающих надежность и упрощающих сопровождение программ, является установленным фактом. В языке Ада предпочтение было отдано удобочитаемости программы по сравнению с легкостью ее написания. Например, правила языка требуют, чтобы все переменные и их типы были явно описаны в программе. Так как тип переменной неизменен, компилятор может гарантировать совместимость операций над переменными со свойствами, присущими объектам этого типа. Более того, чтобы избежать обозначений, которые могут привести к ошибкам, в синтаксисе языка было отдано предпочтение конструкциям, которые ближе к естественному языку. Язык поддерживает раздельную компиляцию программных модулей способом, облегчающим разработку и сопровождение программ и обеспечивающим один и тот же уровень контроля для межмодульных и внутримодульных связей.

Человеческий фактор программирования также повлиял на разработку языка. Прежде всего была сделана попытка ограничить язык настолько, насколько это позволяла широкая область его применения. Язык охватывает всю область применения небольшим числом основных понятий путем систе-

С. 4 ГОСТ 27831-88

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

Как и многие другие виды человеческой деятельности, разработка программ становится все более децентрализованной и разобщенной. Следовательно, одной из центральных идей при разработке языка было обеспечить возможность составлять программу из независимо разработанных компонентов. Концепции пакетов, личных типов и настраиваемых модулей прямо служат этой идее, которая повлияла на многие другие аспекты языка.

При создании любого языка необходим учет проблемы эффективности. Языки, которые требуют сверхсложных компиляторов или приводят к неэффективному использованию памяти и времени выполнения программы, дают неэффективные результаты на всех машинах и для всех программ. Каждая конструкция языка оценивалась с точки зрения современных методов реализации. Отвергались все те конструкции, которые были недостаточно ясными или требовали чрезмерных машинных ресурсов.

Ни одна из указанных выше целей разработки языка не откладывалась на будущее. Все они учитывались одновременно и с самого начала разработки языка.

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

Другое обстоятельство, существенно упростившее разработку, было следствием приобретенного ранее опыта реализации удачных проектов на базе языка Паскаль, созданного с целями, аналогичными указанным выше. Такими языками являются языки Евклид, Лис, Меса, Модула и Сью. Многие из ключевых идей и синтаксических форм этих языков имеют аналоги в языке Ада. Некоторые существующие языки, такие как Алгол 68 и Симу-ла, а также современные проекты языков Альфард и Клу, также повлияли на разработку языка, хотя и в меньшей степени, чем языки семейства Паскаль.

1.4. Обзор свойств языка

Ада-программа представляет собой один или несколько программных модулей, которые могут компилироваться раздельно. Программные модули — это подпрограммы (определяющие выполняемый алгоритм), пакеты (определяющие наборы понятий), задачные модули (определяющие параллельные вычисления) или настраиваемые модули (определяющие параметризованные пакеты и подпрограммы). Каждый модуль обычно состоит из двух частей: спецификации, содержащей видимую для других модулей информацию, н тела, содержащего детали реализации, о которых другие модули не обязаны знать.

Это различие между спецификацией и телом, а также возможность компилировать модули раздельно позволяют разрабатывать, записывать и тес-

ГОСТ 27831-88 С. 5

тировать программу как множество в достаточной степени независимых программных компонентов.

Ада-программа может использовать библиотеку программных модулей общего назначения.

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

Программные модули. Подпрограмма является основным модулем для представления алгоритма. Существуют два вида подпрограмм: процедуры и функции. Процедура — это средство вызова последовательности действий. Например, она может считывать данные, изменять значения переменных или выводить информацию. Процедура может иметь параметры для управления механизмом передачи информации между процедурой и точкой вызова.

Функция — это средство вызова действий по вычислению значения. Она подобна процедуре, но в результате выполнения еще и возвращает результат.

Пакет — это основной модуль для определения набора логически связанных понятий. Например, пакет может быть использован для определения общей группы данных и типов, набора взаимосвязанных подпрограмм или же множества описаний типов и соответствующих операций. Части пакета могут быть скрыты от пользователя, следовательно, доступ будет разрешен только к тем логическим свойствам, которые описаны в спецификации пакета.

Задачный модуль — это основной модуль для определения задачи, последовательность действий которой может выполняться параллельно с выполнением других задач. Такие задачи могут быть реализованы на многомашинной или многопроцессорной системе, либо чередованием выполнения задач на одном процессоре. Задачный модуль может определить или одну выполняемую задачу или задачный тип, позволяющий создать любое количество подобных задач.

Настраиваемый модуль — это шаблон, по которому можно получить конкретизацию в виде подпрограммы или пакета.

Описания и операторы. Тело программного модуля, как правило, содержит две части: раздел описаний, который определяет логические понятия, используемые в программном модуле, и последовательность операторов, определяющая выполнение этого программного модуля.

Раздел описаний связывает имена с описанными понятиями. Например, имя может обозначать тип, константу, переменную или исключение. Раздел описаний также может вводить имена и параметры других вложенных подпрограмм, пакеты, задачные модули и настраиваемые модули, используемые в программном модуле.

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

С. 6 ГОСТ 27831 -88

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

Оператор выбора и условный оператор позволяют выполнить одну из входящих в них последовательностей операторов, определяемую значением выражения или значением условия.

Оператор цикла обеспечивает основной итерационный механизм в языке. Оператор цикла указывает, что повторение некоторой последовательности операторов выполняется по заданной итерационной схеме или до выполнения оператора выхода.

Оператор блока включает в себя последовательность операторов, которым предшествуют описания локальных понятий, используемых в этих операторах.

Некоторые операторы применимы только к задачам. Оператор задержки приостанавливает выполнение задачи на указанный интервал времени. Оператор вызова входа записывается как оператор вызова процедуры; он показывает, что выполнившая этот вызов задача готова для рандеву с другой задачей, имеющей указанный вход. Вызываемая задача готова принять вызов входа, когда ее выполнение достигает соответствующего оператора принятия, который определяет выполняемые далее действия. После завершения рандеву обе задачи как вызывающая, так и имеющая вход, продолжают свое параллельное выполнение. Одна из форм оператора отбора допускает отбор с ожиданием для одного из нескольких альтернативных рандеву. Другие формы оператора отбора допускают условные или временные вызовы входа.

Выполнение программного модуля может привести к ошибочным ситуациям, вследствие чего продолжение нормального выполнения программы невозможно. Например, когда результат арифметического вычисления превышает максимальное допустимое числовое значение или когда делается попытка доступа к компоненту массива с неправильным значением индекса. Для работы с такими ошибочными ситуациями текстуально за операторами программного модуля могут следовать обработчики исключений, определяющие предпринимаемые при возникновении ошибочных ситуаций действия. Исключения могут быть возбуждены и явно оператором возбуждения.

Типы данных. Каждый объект языка имеет тип, характеризующий множество значений и множество применимых к ним операций. Основные классы типов — это скалярные типы (включающие перечислимые и числовые типы) , составные, ссылочные и личные типы.

Перечислимый тип определяет упорядоченное множество различных литералов перечисления, например, список состояний или перечень символов. Перечислимые типы BOOLEAN и CHARACTER предопределены.

Числовые типы обеспечивают средства выполнения точных или приближенных числовых вычислений. Для точных вычислений используются целые

ГОСТ 27831-88 С. 7

типы, которые обозначают множество последовательных целых чисел. В приближенных вычислениях используются либо фиксированные типы (типы чисел с фиксированной точкой), представимые с абсолютной погрешностью, либо плавающие типы (типы чисел с плавающей точкой), представимые с относительной погрешностью. Числовые типы INTEGER, FLOAT и DURATION предопределены.

Составные типы допускают определения структурных объектов из сгруппированных компонентов. Составные типы в языке представлены массивами и записями. Массив — это объект с индексируемыми компонентами одного и того же типа. Запись — это объект с именованными компонентами, возможно, различных типов. Индексируемый тип STRING предопределен.

Запись может иметь специальные компоненты, называемые дискриминантами. В записях можно определить альтернативные структуры, зависящие от значений дискриминантов.

Ссылочные типы позволяют вычислением генератора создавать связанные ссылками структуры данных. Они позволяют нескольким переменным ссылочного типа указывать на один и тот же объект, а компонентам одного объекта указывать на тот же самый или другие объекты. Элементы такой связанной структуры данных и их связи с другими элементами могут быть изменены во время выполнения программы.

Личные типы могут быть определены в пакете, скрывающем внутреннюю структуру, несущественную вне пакета. Пользователю таких типов видны лишь логически существенные их свойства (включая дискриминанты).

Концепция типа уточняется концепцией подтипа, благодаря чему пользователь может ограничить набор допустимых значений данного типа. Подтипы могут быть использованы для определения поддиапазонов скалярных типов, массивов с ограниченным множеством значений индексов, а также именованных и личных типов с конкретными значениями дискриминантов.

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

Ввод-вывод в языке определен средствами предопределенных библиотечных пакетов. Предоставляются средства для ввода-вывода значений типов, определенных пользователем, а также значений предопределенных типов; обеспечивается представление изображений значений в стандартной форме.

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

С. 8 ГОСТ 27831-88

1.5. Метод описания и синтаксические обозначения

Контекстно-свободный синтаксис программных модулей языка Ада вместе с контекстно-зависимыми требованиями выражаются в повествовательной форме.

Семантика программных модулей описана правилами определения результата выполнения каждой конструкции и правилами их построения. В изложении используются термины, точное определение которых дано в тексте.

Все другие понятия имеют свое естественное значение, определенное в словаре русского языка Ушакова1.

Контекстно-свободный синтаксис языка описывается с помощью простого варианта форм Бэкуса-Наура, в частности:

а)    Записанные строчными буквами слова, возможно содержащие в некоторых случаях символ подчеркивания, используются для обозначения синтаксических понятий, например:

аддитивная операция

В названиях синтаксических понятий, используемых вне контекста синтаксических правил, вместо символа подчеркивания используется пробел, например:

аддитивная операция

б)    Полужирным шрифтом выделены зарезервированные слова, например:

array

в)    В квадратные скобки заключены необязательные элементы. Поэтому два следующих правила эквивалентны:

оператор возврата : : = return [выражение] ;

оператор возврата : : = return ; | return выражение;

г)    Повторяющиеся элементы заключаются в фигурные скобки. Этот элемент может встретиться нуль или более раз; повторение осуществляется слева направо в соответствии с правилом левой рекурсии. Таким образом, два следующих правила эквивалентны:

слагаемое : : = множитель {операция_умножения множитель}

слагаемое : : — множитель | слагаемое операция умножения множитель

д)    Вертикальная черта разделяет альтернативные элементы, кроме случаев, когда черта встречается непосредственно за открывающей фигурной, скобкой, тогда она обозначает знак вертикальной черты:

6уква_или_цифра : : = буква! цифра

сопоставление_компонентов : : =

[выбор {I выбор} = >] выражение

е)    Если название какого-нибудь синтаксического понятия содержит выделенную курсивом часть, оно эквивалентно названию синтаксического по-

ГОСТ 27831-88 С. 9

нятия без выделенной курсивом части. Выделенная курсивом часть предназначена для выражения некоторой семантической информации. Например, имя_тыпа и къля^задачи эквивалентны просто понятию имя.

Примечание. Описывающие структурные конструкции синтаксические правила представлены в форме, соответствующей рекомендованному делению на абзацы. Например, условный оператор определяется так:

условный оператор : : = if условие then

поел едовательность_операто ров •felsif условие then

последовательность_операторов}

[else

последовательность_операторов] end if;

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

1.6. Классификация ошибок

Определение языка делит ошибки на несколько различных категорий:

а)    Ошибки, которые должны быть обнаружены во время компиляции любым компилятором с языка Ада.

Эти ошибки соответствуют любому нарушению правил, данных в этом стандарте, кроме нарушений, соответствующих подпунктам б и в. В частности, к этой категории относятся нарушения правил, в которых использованы слова должно, допустимо (или недопустимо), правильный или неправильный. Любая содержащая такую ошибку Ада-программа не является правильной; с другой стороны, тот факт, что программа правильна в этом смысле, не означает, что в ней нет других ошибок.

б)    Ошибки, которые должны быть обнаружены во время выполнения Ада-программы.

Соответствующим ошибочным ситуациям сопоставлены имена предопределенных исключений. Каждый компилятор с языка Ада должен генерировать код, возбуждающий соответствующее исключение, если такая ошибочная ситуация обнаружится во время выполнения программы. Если исключение обязательно будет возбуждаться при выполнении данной программы, то компиляторы могут (но не обязательно) сообщить об этом во время компиляции.

в)    Ошибочное выполнение.

В языке определен ряд правил, которым должна подчиняться Ада-программа, хотя от компилятора и не требуется обнаружение нарушений этих правил ни во время компиляции, ни во время выполнения программы. Слово ошибочный квалифицирует выполнение конструкций, содержащих ошибки этой категории. Результат выполнения ошибочной конструкции - непредсказуем.

1

Толковый словарь русского языка/Под ред. Д.Н. Ушакова. - М.: Государственное издательство иностранных и национальных словарей, 1938.