Spec-Zone.ru › Ada 95
Справочник Ada 95

A.1 Пакет Standard

Этот пункт описывает спецификацию пакета Standard, содержащего все предопределенные идентификаторы языка. Соответствующий пакет тела не определён языком.
Операторы, предопределённые для типов, объявленных в пакете Standard, приведены в комментариях, так как они неявно объявлены. Курсив используется для псевдоимен типов без имени (таких как root_real) и для неопределённой информации (такой как implementation-defined).

Статическая семантика

Пакет библиотеки Standard имеет следующее объявление:
package Standard is
pragma Pure(Standard);
type Boolean is (False, True);
-- Предопределённые реляционные операторы для этого типа:
-- function "=" (Left, Right : Boolean'Base) return Boolean;
-- function "/=" (Left, Right : Boolean'Base) return Boolean;
-- function "<" (Left, Right : Boolean'Base) return Boolean;
-- function "<=" (Left, Right : Boolean'Base) return Boolean;
-- function ">" (Left, Right : Boolean'Base) return Boolean;
-- function ">=" (Left, Right : Boolean'Base) return Boolean;
-- Предопределённые логические операторы и оператор логического
-- отрицания:
-- function "and" (Left, Right : Boolean'Base) return Boolean;
-- function "or" (Left, Right : Boolean'Base) return Boolean;
-- function "xor" (Left, Right : Boolean'Base) return Boolean;
-- function "not" (Right : Boolean'Base) return Boolean;
-- Предопределён тип целых чисел root_integer.
-- Соответствующий универсальный тип — universal_integer.
type Integer is range implementation-defined;
subtype Natural is Integer range 0 .. Integer'Last;
subtype Positive is Integer range 1 .. Integer'Last;
-- Предопределённые операторы для типа Integer:
-- function "=" (Left, Right : Integer'Base) return Boolean;
-- function "/=" (Left, Right : Integer'Base) return Boolean;
-- function "<" (Left, Right : Integer'Base) return Boolean;
-- function "<=" (Left, Right : Integer'Base) return Boolean;
-- function ">" (Left, Right : Integer'Base) return Boolean;
-- function ">=" (Left, Right : Integer'Base) return Boolean;
-- function "+" (Right : Integer'Base) return Integer'Base;
-- function "-" (Right : Integer'Base) return Integer'Base;
-- function "abs" (Right : Integer'Base) return Integer'Base;
-- function "+" (Left, Right : Integer'Base) return Integer'Base;
-- function "-" (Left, Right : Integer'Base) return Integer'Base;
-- function "*" (Left, Right : Integer'Base) return Integer'Base;
-- function "/" (Left, Right : Integer'Base) return Integer'Base;
-- function "rem" (Left, Right : Integer'Base) return Integer'Base;
-- function "mod" (Left, Right : Integer'Base) return Integer'Base;
-- function "**" (Left : Integer'Base; Right : Natural)
-- return Integer'Base;
-- Спецификация каждого оператора для типа
-- root_integer или для любого дополнительного предопределённого
-- типа целых чисел получается заменой Integer на имя типа
-- в спецификации соответствующего оператора типа
-- Integer. Правый операнд оператора возведения в степень
-- остаётся подтипом Natural.
-- Предопределённый тип чисел с плавающей точкой root_real.
-- Соответствующий универсальный тип — universal_real.
type Float is digits implementation-defined;
-- Предопределённые операторы для этого типа:
-- function "=" (Left, Right : Float) return Boolean;
-- function "/=" (Left, Right : Float) return Boolean;
-- function "<" (Left, Right : Float) return Boolean;
-- function "<=" (Left, Right : Float) return Boolean;
-- function ">" (Left, Right : Float) return Boolean;
-- function ">=" (Left, Right : Float) return Boolean;
-- function "+" (Right : Float) return Float;
-- function "-" (Right : Float) return Float;
-- function "abs" (Right : Float) return Float;
-- function "+" (Left, Right : Float) return Float;
-- function "-" (Left, Right : Float) return Float;
-- function "*" (Left, Right : Float) return Float;
-- function "/" (Left, Right : Float) return Float;
-- функция "**" (Left : Вещественное; Right : Целое'Base) возвращает Вещественное;
-- Определение каждого оператора для типа root_real или для
-- любого дополнительного предопределённого типа с плавающей точкой получается путём
-- замены Float на имя типа в определении соответствующего оператора типа Float.
-- Кроме того, для корневых числовых типов определены следующие операторы:
функция "*" (Left : root_integer; Right : root_real)
возвращает root_real;
функция "*" (Left : root_real; Right : root_integer)
возвращает root_real;
функция "/" (Left : root_real; Right : root_integer)
возвращает root_real;
-- Тип universal_fixed предопределён.
-- Единственные операторы умножения, определённые между
-- типами с фиксированной точкой, это
функция "*" (Left : universal_fixed; Right : universal_fixed)
возвращает universal_fixed;
функция "/" (Left : universal_fixed; Right : universal_fixed)
возвращает universal_fixed;
-- Предопределённые операторы для типа Character такие же, как и для
-- любого типа перечисления.

-- Объявление типа Wide_Character основано на стандартном наборе символов ISO 10646 BMP.
-- Первые 256 позиций имеют такое же содержимое, как тип Character. См. 3.5.2.

тип Wide_Character является (nul, soh ... FFFE, FFFF);

пакет ASCII является ... конец ASCII; --Устаревший; см. J.5

-- Предопределённые типы строк:

тип String является массивом(Положительное диапазон <>) из Character;
pragma Pack(String);
-- Предопределённые операторы для этого типа следующие:
-- функция "=" (Left, Right: String) возвращает Boolean;
-- функция "/=" (Left, Right: String) возвращает Boolean;
-- функция "<" (Left, Right: String) возвращает Boolean;
-- функция "<=" (Left, Right: String) возвращает Boolean;
-- функция ">" (Left, Right: String) возвращает Boolean;
-- функция ">=" (Left, Right: String) возвращает Boolean;
-- функция "&" (Left: String; Right: String) возвращает String;
-- функция "&" (Left: Character; Right: String) возвращает String;
-- функция "&" (Left: String; Right: Character) возвращает String;
-- функция "&" (Left: Character; Right: Character) возвращает String;
тип Wide_String является массивом(Положительное диапазон <>) из Wide_Character;
pragma Pack(Wide_String);
-- Предопределённые операторы для этого типа соответствуют операторам для String
тип Duration является дельта определяемое реализацией диапазон определяемое реализацией;
-- Предопределённые операторы для типа Duration такие же, как и для
-- любого типа с фиксированной точкой.
-- Предопределённые исключения:
Constraint_Error: исключение;
Program_Error : исключение;
Storage_Error : исключение;
Tasking_Error : исключение;
конец Standard;
Стандарт не имеет частной части.
В каждом из типов Character и Wide_Character символьные литералы для пробела (позиция 32) и неразрывного пробела (позиция 160) соответствуют различным значениям. Если не указано иное, каждый символ ' ' в данном Международном стандарте относится к пробелу. Аналогично, символьные литералы для тире (позиция 45) и мягкого тире (позиция 173) соответствуют различным значениям. Если не указано иное, каждый символ '-' в данном Международном стандарте относится к тире.

Динамическая семантика

Разработка тела Standard не оказывает никакого влияния.

Разрешения для реализации

Реализация может предоставить дополнительные предопределённые целочисленные типы и дополнительные предопределённые типы с плавающей точкой. Не все эти типы должны иметь имена.

Рекомендации для реализации

Если реализация предоставляет дополнительные именованные предопределенные целочисленные типы, то имена должны оканчиваться на «Integer», как в «Long_Integer». Если реализация предоставляет дополнительные именованные предопределенные типы с плавающей запятой, то имена должны оканчиваться на «Float», как в «Long_Float».
ПРИМЕЧАНИЯ
1 Некоторые аспекты предопределенных сущностей не могут быть полностью описаны самим языком. Например, хотя тип перечисления Boolean может быть записан, показывая два литерала перечисления False и True, краткие управляющие конструкции не могут быть выражены в языке.
2 Как объяснено в 8.1, «Декларативная область» и 10.1.4, «Процесс компиляции», декларативная область пакета Standard охватывает каждый модуль библиотеки и, следовательно, главную подпрограмму; объявление каждого модуля библиотеки предполагается происходящим в этой декларативной области. Элементы_библиотеки предполагается упорядоченными таким образом, что нет обратных семантических зависимостей. Однако, как объяснено в 8.3, «Видимость», единственными модулями библиотек, которые видны в данном модуле компиляции, являются модули библиотек, указанные всеми with-определениями, которые применяются к данному модулю, и, кроме того, в декларативной области данного модуля библиотеки, сам этот модуль библиотеки.
3 Если все блочные_операторы программы имеют имена, то имя каждого блока программы всегда можно записать как развернутое имя, начиная со Standard (если сам Standard не скрыт). Имя модуля библиотеки не может быть омографом имени (например, Integer), уже объявленного в Standard.
4 Исключение Standard.Numeric_Error определено в J.6.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API