Приложение C. ПРЕДОПРЕДЕЛЕННОЕ ОКРУЖЕНИЕ ЯЗЫКА

Ниже дана спецификация пакета STANDARD, содержащая все предопределенные в языке идентификаторы. Соответствующее тело пакета определено реализацией и не показано.

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

package STANDARD is    type BOOLEAN is (FALSE, TRUE);    -- Предопределенными операциями отношения   -- для этого типа являются следующие:   -- function "="   (LEFT, RIGHT : BOOLEAN) return BOOLEAN;   -- function "/="  (LEFT, RIGHT : BOOLEAN) return BOOLEAN;   -- function "<"   (LEFT, RIGHT : BOOLEAN) return BOOLEAN;   -- function "<="  (LEFT, RIGHT : BOOLEAN) return BOOLEAN;   -- function ">"   (LEFT, RIGHT : BOOLEAN) return BOOLEAN;   -- function ">="  (LEFT, RIGHT : BOOLEAN) return BOOLEAN;   -- Предопределенными логическими операциями   -- для этого типа являются следующие:   -- function "and" (LEFT, RIGHT : BOOLEAN) return BOOLEAN;   -- function "or"  (LEFT, RIGHT : BOOLEAN) return BOOLEAN;   -- function "xor" (LEFT, RIGHT : BOOLEAN) return BOOLEAN;    -- function "not" (RIGHT : BOOLEAN) return BOOLEAN;      -- Предопределен универсальный тип универсальный, целый.   type INTEGER is определен-реализацией;    -- Для этого типа предопределены следующие операции:   -- function "="  (LEFT, RIGHT : INTEGER) return BOOLEAN;   -- function "/=" (LEFT, RIGHT : INTEGER) return BOOLEAN;   -- function "<"  (LEFT, RIGHT : INTEGER) return BOOLEAN;   -- function "<=" (LEFT, RIGHT : INTEGER) return BOOLEAN;   -- function ">"  (LEFT, RIGHT : INTEGER) return BOOLEAN;     -- function ">=" (LEFT, RIGHT : INTEGER) return BOOLEAN;                                                           -- function "+"   (RIGHT : INTEGER) return INTEGER;   -- function "-"   (RIGHT : INTEGER) return INTEGER;   -- function "abs" (RIGHT : INTEGER) return INTEGER;    -- function "+"   (LEFT, RIGHT : INTEGER) return INTEGER;   -- function "-"   (LEFT, RIGHT : INTEGER) return INTEGER;   -- function "*"   (LEFT, RIGHT : INTEGER) return INTEGER;   -- function "/"   (LEFT, RIGHT : INTEGER) return INTEGER;   -- function "rem" (LEFT, RIGHT : INTEGER) return INTEGER;   -- function "mod" (LEFT, RIGHT : INTEGER) return INTEGER;    -- function "**"  (LEFT : INTEGER; RIGHT : INTEGER) return INTEGER;    -- Реализация может обеспечить другие предопределенные целые типы. Рекомендуется, чтобы   -- имена этих дополнительных типов оканчивались на INTEGER, например, SHORT_INTEGER или   -- LONG_INTEGER. Спецификация каждой операции для типа универсальный-целый или для    -- любого дополнительного предопределенного целого типа может быть получена заменой   -- идентификатора INTEGER на имя этого типа в спецификации соответствующей операции для    -- типа INTEGER исключая правый операнд операции возведения в степень.   -- Универсальный тип универсальный-вещественный предопределен.   type FLOAT is определен-реализацией;    -- Для этого типа предопределены следующие операции:   -- 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;    -- function "**"  (LEFT : FLOAT; RIGHT : INTEGER) return FLOAT;    -- Реализация может обеспечить дополнительные предопределенные плавающие типы.   -- Рекомендуется, чтобы имена таких дополнительных типов оканчивались на FLOAT,   -- например SHORT_FLOAT  или  LONG_FLOAT.  Спецификация  каждой  операции  для   -- типа универсальный-вещественный или для любого дополнительного   -- предопределенного плавающего типа может быть получена заменой идентификатора FLOAT    -- на имя этого типа в спецификации соответствующей операции для типа FLOAT.   -- Кроме того, для универсальных типов предопределены следующие операции:   -- function "*" (LEFT : универсальный целый;; RIGHT : универсальный-вещественный)      return универсальный-вещественный;   -- function "*" (LEFT : универсальный-вещественный;    RIGHT : универсальный целый;)      return универсальный-вещественный;   -- function "/" (LEFT : универсальный-вещественный;    RIGHT : универсальный целый;)      return универсальный-вещественный;   -- Тип универсальный-фиксированный предопределен. Единственными операциями, описанными   -- для этого типа, являются   -- function "*" (LEFT : любой-фиксированный-тип; RIGHT : любой-фиксированный-тип)      return universal_fixed;   -- function "/" (LEFT : любой-фиксированный-тип; RIGHT : любой-фиксированный-тип)      return universal_fixed;   -- Следующие символы образуют стандартный набор символов   -- ASCII. Символьные литералы, соответствующие управляющим символам, идентификаторами не   -- являются. В этом определении они выделены курсивом.       type CHARACTER is           (nul,  soh,  stx,  etx,     eot,  enq,  ack,  bel,           bs,   ht,   lf,   vt,      ff,   cr,   so,   si,           dle,  dc1,  dc2,  dc3,     dc4,  nak,  syn,  etb,           can,  em,   sub,  esc,     fs,   gs,   rs,   us,            ' ',  '!',  '"',  '#',     '$',  '%',  '&',  ''',           '(',  ')',  '*',  '+',     ',',  '-',  '.',  '/',           '0',  '1',  '2',  '3',     '4',  '5',  '6',  '7',           '8',  '9',  ':',  ';',     '<',  '=',  '>',  '?',            '@',  'A',  'B',  'C',     'D',  'E',  'F',  'G',           'H',  'I',  'J',  'K',     'L',  'M',  'N',  'O',           'P',  'Q',  'R',  'S',     'T',  'U',  'V',  'W',           'X',  'Y',  'Z',  '[',     '\',  ']',  '~',  '_',           '`',  'a',  'b',  'c',     'd',  'e',  'f',  'g',           'h',  'i',  'j',  'k',     'l',  'm',  'n',  'o',           'p',  'q',  'r',  's',     't',  'u',  'v',  'w',           'x',  'y',  'z',  '{',     '|',  '}',  '~',  del);    for CHARACTER use  --  128 ASCII character set without holes       (0, 1, 2, 3, 4, 5, ..., 125, 126, 127);   -- Предопределенные операции для типа CHARACTER те же самые, что и для любого перечислимого типа.  package ASCII is      --  Управляющие символы:      NUL   : constant CHARACTER := nul;     SOH   : constant CHARACTER := soh:      STX   : constant CHARACTER := stx;     ETX   : constant CHARACTER := etx;      EOT   : constant CHARACTER := eot;     ENQ   : constant CHARACTER := enq:      ACK   : constant CHARACTER := ack;     BEL   : constant CHARACTER := bel;      BS    : constant CHARACTER := bs;      HT    : constant CHARACTER := ht;      LF    : constant CHARACTER := lf;      VT    : constant CHARACTER := vt;      FF    : constant CHARACTER := ff;      CR    : constant CHARACTER := cr;      SO    : constant CHARACTER := so;      SI    : constant CHARACTER := si;      DLE   : constant CHARACTER := dle;     DC1   : constant CHARACTER := dc1;      DC2   : constant CHARACTER := dc2;     DC3   : constant CHARACTER := dc3;      DC4   : constant CHARACTER := dc4;     NAK   : constant CHARACTER := nak;      SYN   : constant CHARACTER := syn;     ETB   : constant CHARACTER := etb;      CAN   : constant CHARACTER := can;     EM    : constant CHARACTER := em:      SUB   : constant CHARACTER := sub;     ESC   : constant CHARACTER := esc;      FS    : constant CHARACTER := fs;      GS    : constant CHARACTER := gs;      RS    : constant CHARACTER := rs;      US    : constant CHARACTER := us;      DEL   : constant CHARACTER := del;      -- Другие символы:      EXCLAM   : constant CHARACTER := '!';  QUOTATION : constant CHARACTER := '"';      SHARP    : constant CHARACTER := '#';  DOLLAR    : constant CHARACTER := '$';      PERCENT  : constant CHARACTER := '%';  AMPERSAND : constant CHARACTER := '&';      COLON    : constant CHARACTER := ':';  SEMICOLON : constant CHARACTER := ';';      QUERY    : constant CHARACTER := '?';  AT_SIGN   : constant CHARACTER := '@';      L_BRACKET: constant CHARACTER := '[';  BACK_SLASH: constant CHARACTER := '\';      R_BRACKET: constant CHARACTER := ']';  CIRCUMFLEX: constant CHARACTER := '~';      UNDERLINE: constant CHARACTER := '_';  GRAVE     : constant CHARACTER := '`';      L_BRACE  : constant CHARACTER := '{';  BAR       : constant CHARACTER := '|';      R_BRACE  : constant CHARACTER := '}';  TILDE     : constant CHARACTER := '~';      -- Строчные буквы:      LC_A : constant CHARACTER := 'a';      ...      LC_Z : constant CHARACTER := 'z';    end ASCII;         -- Предопределенные подтипы:       subtype NATURAL  is INTEGER range 0 .. INTEGER'LAST;       subtype POSITIVE is INTEGER range 1 .. INTEGER'LAST;                                  -- Предопределенный строковой тип:       type STRING is array(POSITIVE range <>) of CHARACTER;        pragma PACK(STRING);         -- Следующие операции для этого типа предопределены:       -- function "="  (LEFT, RIGHT : STRING) return BOOLEAN;       -- function "/=" (LEFT, RIGHT : STRING) return BOOLEAN;       -- function "<"  (LEFT, RIGHT : STRING) return BOOLEAN;       -- function "<=" (LEFT, RIGHT : STRING) return BOOLEAN;       -- function ">"  (LEFT, RIGHT : STRING) return BOOLEAN;       -- function ">=" (LEFT, RIGHT : STRING) return BOOLEAN;        -- function "&" (LEFT : STRING;    RIGHT : STRING)    return STRING;       -- function "&" (LEFT : CHARACTER; RIGHT : STRING)    return STRING;       -- function "&" (LEFT : STRING;    RIGHT : CHARACTER) return STRING;       -- function "&" (LEFT : CHARACTER; RIGHT : CHARACTER) return STRING;   type DURATION is delta определен-реализацией range определен-реализацией;    -- Для типа DURATION предопределены все те операции,    -- что и для любого фиксированного типа    -- Предопределены следующие исключения:   CONSTRAINT_ERROR : exception;   NUMERIC_ERROR    : exception;   PROGRAM_ERROR    : exception;   STORAGE_ERROR    : exception;   TASKING_ERROR    : exception; end STANDARD; 

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

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