ELABORATE (ПРЕДВЫПОЛНИТЬ). В качестве аргументов используются одно или несколько простых имен, обозначающих библиотечные модули. Эта прагма до­пустима только непосредственно после спецификатора контекста компилируемого модуля (перед библиотечным или вторичным модулем). Каждый аргумент прагмы должен быть простым именем библиотечного модуля, упомянутого в спецификаторе контекста. Эта прагма указывает, что тело соответствующего библиотечного моду­ля должно быть предвьшолнено до предвыполнения данного компилируемого мо­дуля. Если данный компилируемый модуль является субмодулем, то тело библиотеч­ного модуля должно быть предвьшолнено до предвыполнения тела родительского (по отношению к этому субмодулю) библиотечного модуля (см. разд. 10.5).

INLINE (ПОДСТАВИТЬ). В качестве аргументов используется одно или нес­колько имен; каждое имя является либо именем подпрограммы, либо именем наст­раиваемой подпрограммы. Эта прагма допустима только на месте элемента описания в разделе описаний или в спецификации пакета, либо же после библиотечного модуля в компиляции, но до любого следующего компилируемого модуля. Прагма указы­вает на возможную подстановку тела подпрограммы вместо каждого его вызова; в случае настраиваемой подпрограммы, эта прагма относится к вызовам ее конкрети­заций (см. разд. 6.3.2).

INTERFACE (СВЯЗАТЬ). В качестве аргументов используются имя языка и имя подпрограммы. Эта прагма допустима на месте элемента описания и должна приме­няться по отношению к подпрограмме, описанной ранее в виде элемента описания того же самого раздела описаний или спецификации пакета. Эта прагма допустима также для библиотечного модуля; в этом случае прагма должна помещаться после описания подпрограммы и перед любым следующим компилируемым модулем. Эта прагма указывает другой язык (и тем самым соглашения по вызову) и инфор­мирует компилятор о том, что для соответствующей подпрограммы будет представ­лен объектный модуль (см. разд. 13.9).

LIST (ЛИСТИНГ). В качестве единственного аргумента используется один из идентификаторов ON (ВКЛ) или OFF (ВЫК). Эта прагма допустима в любом месте, где допустимы прагмы. Прагма указывает, что необходимо продолжить или прек­ратить вывод листинга компиляции до тех пор, пока в той же компиляции не встре­тится прагма LIST с другим аргументом. Текст самой прагмы печатается всегда, если компилятор выводит листинг.

MEMORY_SIZE (РАЗМЕР-ПАМЯТИ). В качестве единственного аргумента ис­пользуется числовой литерал. Эта прагма допустима только в начале компиляции, до ее первого компилируемого модуля (если он есть). Применение этой прагмы приводит к использованию указанного числового литерала для определения имено­ванного числа MEMORY_SIZE (см. разд. 13.7).

OPTIMIZE (ОПТИМИЗИРОВАТЬ). В качестве единственного аргумента исполь­зуется один из идентификаторов TIME (ВРЕМЯ) или SPACE (ПАМЯТЬ). Эта праг­ма допустима только внутри раздела описаний и относится к блоку или телу, охва­тывающему этот раздел описаний. Она указывает главный критерий оптимизации - время выполнения или занимаемую память.

РАСК (УПАКОВЫВАТЬ). В качестве единственного аргумента используется простое имя именуемого или индексируемого типа. Допустимое положение этой прагмы в программе и ограничения, относящиеся к именуемому типу, определяются теми же правилами, что и для спецификатора представления. Прагма указывает, что при выборе представления значений данного типа главным критерием оптимизации обязан быть минимум занимаемой памяти (см. разд. 13.1).

PAGE (СТРАНИЦА). Эта прагма не имеет аргументов и допустима везде, где допустимы прагмы. Она указывает, что текст программы, следующий за прагмой, должен начинаться с новой страницы (если компилятор параллельно выводит лис­тинг).

PRIORITY (ПРИОРИТЕТ). Единственным аргументом этой прагмы является статическое выражение предопределенного целого подтипа PRIORITY. Эта прагма допустима только в спецификации задачи или непосредственно внутри самого внешне­го раздела описаний главной программы. Она указывает приоритет этой задачи (или задач этого задачного типа) или приоритет главной программы (см. разд. 9.8).

SHARED (РАЗДЕЛЕННАЯ). В качестве единственного аргумента этой прагмы используется простое имя переменной. Эта прагма допустима только для переменной, описанной посредством описания объекта скалярного или ссылочного типа. И опи­сание переменной и прагма должны находиться (в указанном порядке) в одном и том же разделе описаний или в спецификации пакета. Эта прагма указывает, что каждое чтение или изменение значения этой переменной является ее точкой синхронизации. Реализация должна ограничивать круг объектов, для которых допустимо исполь­зование этой прагмы теми, прямое чтение или прямое изменение значения которых реализуются как неделимые операции (см. разд. 9.11).

STORAGE_UNIT (КВАНТ_ПАМЯТИ). В качестве единственного аргумента используется числовой литерал. Эта прагма допустима только в начале компиля­ции, до первого ее компилируемого модуля (если он есть). Применение этой праг­мы приводит к использованию для определения именованного числа STORAGE_UNIT значения заданного числового литерала (см. разд. 13.7).

SUPPRESS (ПОДАВИТЬ). В качестве аргументов используются идентификатор проверки, а также имя объекта, типа или подтипа, подпрограммы, задачного модуля или настраиваемого модуля. Эта прагма допустима только непосредственно либо в разделе описаний, либо в спецификации пакета. В последнем случае единственным допустимым вариантом является использование имени, обозначающего понятие (или несколько совмещенных подпрограмм), описанное непосредственно внутри этой спецификации. Разрешение подавить указанную проверку действует от прагмы до конца области действия описаний, соответствующей самому вложенному опера­тору блока или программному модулю. Для прагмы, используемой в спецификации пакета, это разрешение действительно до конца области действия описания заданного своим именем понятия. Если в качестве аргумента прагмы используется имя, то разрешение на подавление указанной проверки ограничивается следующими прави­лами: это разрешение распространяется только на операции над указанными объек­тами базового типа указанного типа или подтипа, на вызовы указанной подпрограммы, на активизацию задач указанного задачного типа, на конкретизацию указанного наст­раиваемого модуля (см. разд. 11.7).

SYSTEM_NAME (ИМЯ_СИСТЕМЫ). Единственным аргументом прагмы являет­ся литерал перечисления. Эта прагма допустима только в начале компиляции, до пер­вого ее компилируемого модуля (если он есть). Применение прагмы приводит к использованию литерала перечисления, заданного идентификатором, для определения константы SYSTEM_NAME. Прагма допустима только в том случае, если указанный в ней идентификатор соответствует одному из литералов перечисления типа NAME, описанного в пакете SYSTEM (см. разд. 13.7).

ПРИЛОЖЕНИЕ 3 Обязательное

ПРЕДОПРЕДЕЛЕННОЕ ОКРУЖЕНИЕ ЯЗЫКА

Ниже дана характеристика спецификации пакета 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) retutn 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 ’’rent” (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 универсальный-фиксированный;

  • - function (LEFT : любой-фиксированный-тип; RIGHT : любой-фиксиро- ванный-тип)

return универсальный-фиксированный;

  • - Следующие символы образуют стандартный набор символов ASCII и ГОСТ - - 27465-87. Символьные литералы, соответствующие управляющим символам, - - идентификаторами не являются.

  • - В этом определении они выделены курсивом. Символьные литералы латинско-

- - го алфавита также выделены курсивов

л, чтобы отличить их от символьных ли-

- - тералов русского алфавита, type CHARACTER is (hul, soh, stx, etx,

eot,


аск,

bel,

bs,

ht,

If,

gVt,

ff,

СГ,

SV,

si,

die,

del,

dc2,

dc3,

dc4,

пак,

syn,

etb,

can.

em,

sub,

esc,


gs,

rs,

us,

1 t


t H t


'%',

'&',



')',’

r * '


t r

f f

і t


'o',

'1',

'2',

'3',

'4',

'5',

'б',

'7',

'8',

'9',

1 I

! tf

'd,


t t




'А’,

'в’,

'd',

'е',

е',

'g',


і',

'Ґ,

'к',

'l',

'м',

'n',

'O',

'р',

'Q'l

'r',

's',

'т',

'и',

'v',

'w',

'х',

'y',

'z',

'Г.

V,

т,

'a',

f t

IS’

1 1 d ,

'b',

1 t c,

'd',

t t е,



'h',

t .f

I,

1,

%',

і'.


Л >


'р'


'4r,

S ,

't',

и

v ,


1 1 X ,

f t 7,

1 r* Z ,

t f £ »

'1',

'1',

>_ і f

del,