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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

array

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

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

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

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

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

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

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

буква_или_цифра : : = буква I цифра сопоставление_компонентов : : =

[выбор ■£ I выбор]- = >] выражение

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

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

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

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

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

if условие then

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

{elsif условие then

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

[else

последовательность-операторов]

end if;

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

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

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

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

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

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

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

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

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

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

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

  1. ЛЕКСИКА

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

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

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

графический символ : : = основной—графический—символ

I строчная_буква | дополнительный_специальный_символ основной—графический—символ : : = прописная—буква

I цифра I специальный— символ I символ -Пробела основной—символ : : = основной—графический—символ

I символ-управления—форматом

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

  1. прописные буквы

ABCDEFGHIJKLMNOPQRSTUVWXYZ

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

  1. 0123456789специальные символы

”#&’()* + , — ./:;< = >_!

  1. символ пробела

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

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

  1. строчные буквы

abcdefghijklmnopqrstuvwxyz

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

  1. дополнительные специальные символы

! Й%?@ [] А' { } ’

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

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

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

Таблица 2.1

Символ

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

Символ

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


Кавычки


Больше

#

Номер

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

&

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

1

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


Апостроф

1

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

(

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

ц

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

)

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

%

Проценты

Звездочка

9

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

+

Плюс

@

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


Запятая

[

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

Минус

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


Точка

1

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

/

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

А

Сиркюмфлекс


Двоеточие

5

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


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

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

<

Меньше


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

=

Равно

Черта сверху