function ”&” (СЛЕВА: STRING; СПРАВА: ТЕКСТ) return ТЕКСТ;

function ”&” (СЛЕВА: ТЕКСТ; СПРАВА: CHARACTER) return ТЕКСТ;

function ”&” (СЛЕВА: CHARACTER; СПРАВА: ТЕКСТ) return ТЕКСТ;

function ”=” (СЛЕВА: ТЕКСТ; СПРАВА: ТЕКСТ) return BOOLEAN;

function ”<” (СЛЕВА: ТЕКСТ; СПРАВА: ТЕКСТ) return BOOLEAN;

function ”<=” (СЛЕВА: ТЕКСТ; СПРАВА: ТЕКСТ) return BOOLEAN;

function ”>” (СЛЕВА: ТЕКСТ; СПРАВА: ТЕКСТ) return BOOLEAN;

function ”>—” (СЛЕВА: ТЕКСТ; СПРАВА: ТЕКСТ) return BOOLEAN;

procedure ПОМЕСТИТЬ (ОБЪЕКТ: in out ТЕКСТ; ЗНАЧЕНИЕ: in ТЕКСТ) ; procedure ПОМЕСТИТЬ (ОБЪЕКТ: in out ТЕКСТ; ЗНАЧЕНИЕ: in STRING); procedure ПОМЕСТИТЬ (ОБЪЕКТ: in out ТЕКСТ; ЗНАЧЕНИЕ: in CHARACTER); procedure СОЕДИНИТЬ (ЧАСТЬ: in ТЕКСТ; К: in out ТЕКСТ);

procedure СОЕДИНИТЬ (ЧАСТЬ: in STRING; К: in out ТЕКСТ) ;

procedure СОЕДИНИТЬ (ЧАСТЬ: in CHARACTER; К: in out ТЕКСТ) ;

procedure ЗАМЕНИТЬ (ОБЪЕКТ: in out ТЕКСТ; HA: in ТЕКСТ;

ПОЗИЦИЯ: in ИНДЕКС),

procedure ЗАМЕНИТЬ (ОБЪЕКТ: in out ТЕКСТ; НА: in STRING;

ПОЗИЦИЯ: in ИНДЕКС);

procedure ЗАМЕНИТЬ (ОБЪЕКТ: in out ТЕКСТ; НА in CHARACTER; ПОЗИЦИЯ: in ИНДЕКС);

  • - заменяет часть объекта с заданной позиции на данный

  • - текст, строку или символ

  • unction ВСТАВИТЬ (ФРАГМЕНТ: ТЕКСТ; В: ТЕКСТ) return ИНДЕКС;

  • unction ВСТАВИТЬ (ФРАГМЕНТ: STRING; В: ТЕКСТ) return ИНДЕКС;

  • unction ВСТАВИТЬ (ФРАГМЕНТ: CHARACTER; В: ТЕКСТ) return ИНДЕКС;

  • - возвращают значение 0, если фрагмент не помещается

private

type ТЕКСТ (МАКСИМАЛЬНАЯ„ДЛИНА: ИНДЕКС) is record

ПОЗИЦИЯ: ИНДЕКС: = 0;

ЗНАЧЕНИЕ: STRING (1. . МАКСИМАЛЬНАЯ „ДЛИНА) ; end record;

end ОБРАБОТКА_ТЕКСТА;

Пример использования пакета обработки текста:

Программа открывает файл вывода, имя которого дается строкой ИМЯ. Эта строка имеет вид:

[УСТРОЙСТВО:] [ИМЯФАЙЛА [.РАСШИРЕНИЕ]]

Для устройства имени файла и расширения существуют стандартные зна­чения по умолчанию. Названное пользователем имя передается через пара­метр функции РАСШИРЕННОЕ_ИМЯ_ФАЙЛА, ее результатом является расширенная версия с необходимыми добавлениями по умолчанию.

function РАСШИРЕННОЕ „ИМЯ „ФАЙЛА (ИМЯ: STRING) return STRING is use ОБРАБОТКА_ТЕКСТА;

УСТРОЙСТВО „ПО „УМОЛЧАНИЮ: constant STRING: = ”SY:”; ИМЯ_ФАЙЛА_ПО_УМОЛЧАНИЮ: constant STRING: = ’’RESULTS”; РАСШИРЕННОЕ_ПО_УМОЛЧАНИЮ: constant STRING: = ’’DAT”;

МАКСИМАЛЬНАЯ_ДЛИНА_ИМЕНИ_ФАЙЛА: constant ИНДЕКС: = НЕКОТОРОЕ„ПОДХОДЯЩЕЕ_ЗНАЧЕНИЕ;

ИМЯ_ФАЙЛА: ТЕКСТ (МАКСИМАЛЬНАЯ_ДЛИНА_ИМЕНИ_ФАЙЛА);

begin

ПОМЕСТИТЬ (ИМЯ_ФАЙЛА, ИМЯ);

if ПУСТО (ИМЯ_ФАЙЛА) then

ПОМЕСТИТЬ (ИМЯ-ФАЙЛА, ИМЯ_ФАЙЛА_ПО_УМОЛЧАНИЮ): end if;

if ВСТАВИТЬ ИМЯ_ФАЙЛА) = 0 then

ПОМЕСТИТЬ (ИМЯ_ФАЙЛА, УСТРОЙСТВО_ПО_УМОЛЧАНИЮ & ИМЯ-ФАЙЛА);

end if;

if ВСТАВИТЬ ИМЯ_ФАЙЛА) = 0 then

СОЕДИНИТЬ (РАСШИРЕНИЕ _ПО-УМОЛЧАНИЮ, К => ИМЯ_ФАЙЛА); end if;

return ЗНАЧЕНИЕ (ИМЯ-ФАЙЛА);

end РАСШИРЕННОЕ-ИМЯ-ФАЙЛА;

  1. ПРАВИЛА ВИДИМОСТИ

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

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

Зона описания является частью текста программы. Отдельная зона опи­сания — это:

  • Описание подпрограммы, описание пакета, описание задачи или описа­ние настройки с соответствующим телом (если оно есть). Если это тело — след тела, то зона описания включает также соответствующий субмодуль. Если программный модуль содержит субмодули, то они также включаются в зону описания.

  • Описание входа с соответствующими операторами принятия.

  • Описание именуемого типа с соответствующими описанием личного типа или неполным описанием типа (если они есть) и спецификатором пред­ставления записи (если он есть).

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

  • Оператор блока или оператор цикла.

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

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

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

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

Пакет STANDARD образует зону описания, которая охватывает все библиотечные модули; предполагается, что неявное описание каждого библиотечного модуля нахо­дится непосредственно в этом пакете (см. разд. 8.6 и 10.1.1).

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

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

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

Область действия описания, находящегося непосредственно в зоне опи­сания, распространяется от начала описания до конца зоны описания; этот раздел области действия описания называется непосредственной областью действия. Более того, для любого из описаний, перечисленных ниже, об­ласть действия описаний распространяется за пределы непосредственной об­ласти действия:

  1. описание, которое находится непосредственно в видимом разделе описания пакета;

  2. описание входа;

  3. описание компонента;

  4. спецификация дискриминанта;

  5. спецификация параметра;

  6. описание параметра настройки.

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

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

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

  1. Видимость

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

Для каждого идентификатора и в каждой точке текста программы пра­вила видимости определяют набор описаний (с этим идентификатором), т. е. варианты трактовки идентификатора. Говорят, что описание видимо в данной точке текста, когда, согласно правилам видимости, оно определя­ет возможные трактовки его вхождения. Возникают два случая:

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

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

Описание видимо только в определенной части своей области действия; эта часть начинается в конце описания, а в спецификации пакета эта часть на­чинается с зарезервированного слова is, следующего за идентификатором пакета. (Это правило применяется, в частности, для неявных описаний.)*'

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

  1. для описания, находящегося в видимом разделе описания пакета, - на месте постфикса после точки в расширенном имени, префикс которого обозначает пакет;

  2. для описания входа конкретного задачного типа - на месте постфик­са после точки в именованном компоненте, префикс которого соответству­ет заданному типу;

  3. для описания компонента конкретного описания именуемого типа — на месте постфикса после точки в именованном компоненте, префикс кото­рого соответствует этому типу, а также на месте простого имени компонен­та (перед составным ограничителем =>) в именованном сопоставлении компонентов агрегата этого типа;

  4. для спецификации дискриминанта конкретного описания типа — в местах, предназначенных для описания компонента и простого имени дис­криминанта (перед составным ограничителем =>) в именованном сопо­ставлении дискриминанта в ограничении дискриминанта для этого типа;

  5. для спецификации параметра данной спецификации подпрограммы или описания входа — на месте формального параметра (перед составным ограничителем =>) в именованном сопоставлении параметра соответствую­щей подпрограммы или вызова входа;

  6. для описания параметра настройки данного настраиваемого моду­ля — на месте формального параметра настройки (перед составным ограни­чителем =>) в именованном сопоставлении соответствующей конкретиза­ции настройки.

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

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

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

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