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 РАСШИРЕННОЕ-ИМЯ-ФАЙЛА;
ПРАВИЛА ВИДИМОСТИ
В этой главе описаны правила, определяющие область действия описания, и правила, определяющие видимость идентификаторов в различных точках текста программы. Формулировка правил видимости использует понятие зоны описания.
Зона описания
Зона описания является частью текста программы. Отдельная зона описания — это:
Описание подпрограммы, описание пакета, описание задачи или описание настройки с соответствующим телом (если оно есть). Если это тело — след тела, то зона описания включает также соответствующий субмодуль. Если программный модуль содержит субмодули, то они также включаются в зону описания.
Описание входа с соответствующими операторами принятия.
Описание именуемого типа с соответствующими описанием личного типа или неполным описанием типа (если они есть) и спецификатором представления записи (если он есть).
Описание переименования, содержащее раздел формальных параметров, или описание параметров настройки, включающее либо раздел формальных параметров, либо раздел дискриминантов.
Оператор блока или оператор цикла.
В каждом из перечисленных выше случаев говорят, что зона описания связана с соответствующим описанием или оператором. Описание находится непосредственно в зоне описания, если она является самой вложенной, охватывающей данное описание, без учета зоны описания (если она есть), связанной с самим описанием.
Описание, которое находится непосредственно в зоне описания, является локальным в этой зоне. Описания во внешних (охватывающих) зонах называются глобальными по отношению к внутренней (охватываемой) зоне описания. Локальные понятия - это те, которые описаны непосредственно локальными описаниями; глобальные понятия — это те, которые описаны посредством глобальных описаний.
Некоторые из упомянутых выше форм зон описания включают несколько разъединенных разделов (например, между описанием пакета и его телом могут быть помещены другие элементы описания). Тем не менее, каждая зона описания рассматривается как непрерывная часть текста программы (логически). Следовательно, если какое-либо правило определяет часть текста, расположенного от некоторой выделенной точки зоны описания до конца зоны, то эта часть является соответствующим подмножеством данной зоны описания (в нее не включаются, например, промежуточные элементы описания, расположенные между двумя разделами пакета).
Примечание. Как определено в разд. 3.1, в термин описание включаются основные описания, неявные описания и описания, являющиеся разделом основных описаний, например, спецификации дискриминантов и параметров. Из определения зоны описания следует, что спецификация дискриминанта находится непосредственно в зоне, связанной с охватывающим описанием именуемого типа. Аналогично, спецификация параметра находится непосредственно в зоне, связанной с телом охватывающей подпрограммы или оператором принятия.
Пакет STANDARD образует зону описания, которая охватывает все библиотечные модули; предполагается, что неявное описание каждого библиотечного модуля находится непосредственно в этом пакете (см. разд. 8.6 и 10.1.1).
Зоны описания могут быть вложены в другие зоны описания. Например, подпрограммы, пакеты, заданные модули, настраиваемые модули и операторы блока могут быть вложены друг в друга и содержать описания именуемого типа, оператор цикла, а также операторы принятия.
Области действия описаний
Для каждой формы описания правила языка определяют конкретную часть текста программы, называемую областью действия описания или областью действия описанного понятия. Более того, если описание сопоставляет некоторое обозначение с описанным понятием, то эта часть текста также называется областью действия этого обозначения (либо идентификатора, либо символьного литерала, либо знака операции, либо обозначения базовой операции). В области действия понятия, и только в ней, есть места, в которых будет правильным использовать сопоставленное обозначение для ссылки на описанное понятие. Эти места определены правилами видимости и совмещения.
Область действия описания, находящегося непосредственно в зоне описания, распространяется от начала описания до конца зоны описания; этот раздел области действия описания называется непосредственной областью действия. Более того, для любого из описаний, перечисленных ниже, область действия описаний распространяется за пределы непосредственной области действия:
описание, которое находится непосредственно в видимом разделе описания пакета;
описание входа;
описание компонента;
спецификация дискриминанта;
спецификация параметра;
описание параметра настройки.
В каждом из этих случаев данное описание находится непосредственно в некотором охватывающем описании, а область действия данного описания распространяется до конца области действия охватывающего описания.
При отсутствии описания подпрограммы спецификация подпрограммы, заданная в теле подпрограммы или в следе тела, действует как описание, и в этом случае применимо правило д.
Примечание. Приведенные правила, определяющие область действия, применяются для всех форм описаний, определенных в разд. 3.1; они применяются, в частности, и к неявным описаниям. Правило а применяется к описанию пакета и тем самым неприменимо к спецификации пакета в описании настройки. Для вложенных описаний правила от а до е применяются на каждом уровне. Например, если заданный модуль описан в видимом разделе пакета, то область действия входа заданного модуля распространяется до конца области действия этого заданного модуля, т. е. до конца области действия охватывающего пакета. Область действия спецификатора использования определена в разд. 8.4.
Видимость
Правила видимости, а в случае совмещенных описаний и правила совмещения трактуют вхождение идентификатора в данной точке текста программы. Под идентификатором в данной главе подразумевают любой идентификатор, кроме зарезервированных слов, обозначений атрибутов, идентификаторов прагм и аргументов прагм. Под точкой текста программы в этой главе понимают место вхождения лексемы (например, идентификатора), а под совмещенными описаниями — описания подпрограмм, литералов перечисления, одиночных входов.
Для каждого идентификатора и в каждой точке текста программы правила видимости определяют набор описаний (с этим идентификатором), т. е. варианты трактовки идентификатора. Говорят, что описание видимо в данной точке текста, когда, согласно правилам видимости, оно определяет возможные трактовки его вхождения. Возникают два случая:
Правила видимости определяют не более одной трактовки идентификатора. В таком случае правил видимости достаточно для выявления описания, определяющего трактовку вхождения идентификатора, или, при отсутствии такого описания, для выявления того, что это вхождение в данной точке не является правильным.
Правила видимости определяют более чем одну трактовку. В таком случае вхождение идентификатора является правильным в данной точке, если и только если точно одно видимое описание выбирается правилами совмещения в соответствии с данным контекстом (см. разд. 6.6 для правил совмещения и разд. 8.7 для контекста, используемого при разрешении совмещения) .
Описание видимо только в определенной части своей области действия; эта часть начинается в конце описания, а в спецификации пакета эта часть начинается с зарезервированного слова is, следующего за идентификатором пакета. (Это правило применяется, в частности, для неявных описаний.)*'
Видимость может быть прямой или видимостью по имени. Описание видимо по имени в местах, которые определены следующим образом:
для описания, находящегося в видимом разделе описания пакета, - на месте постфикса после точки в расширенном имени, префикс которого обозначает пакет;
для описания входа конкретного задачного типа - на месте постфикса после точки в именованном компоненте, префикс которого соответствует заданному типу;
для описания компонента конкретного описания именуемого типа — на месте постфикса после точки в именованном компоненте, префикс которого соответствует этому типу, а также на месте простого имени компонента (перед составным ограничителем =>) в именованном сопоставлении компонентов агрегата этого типа;
для спецификации дискриминанта конкретного описания типа — в местах, предназначенных для описания компонента и простого имени дискриминанта (перед составным ограничителем =>) в именованном сопоставлении дискриминанта в ограничении дискриминанта для этого типа;
для спецификации параметра данной спецификации подпрограммы или описания входа — на месте формального параметра (перед составным ограничителем =>) в именованном сопоставлении параметра соответствующей подпрограммы или вызова входа;
для описания параметра настройки данного настраиваемого модуля — на месте формального параметра настройки (перед составным ограничителем =>) в именованном сопоставлении соответствующей конкретизации настройки.
Наконец, в зоне описания, связанной с конструкцией, не являющейся описанием именуемого типа, любое описание видимо по имени на месте постфикса после точки в расширенном имени, префикс которого обозначает эту конструкцию.
Там, где нет видимости по имени, говорят, что видимое описание видимо непосредственно (прямо видимо). Описание видимо непосредственно в определенном разделе его непосредственной области действия; этот раздел распространяется до конца непосредственной области действия описания, за исключением тех мест, где это описание скрыто, как поясняется ниже. Кроме того, описание, находящееся непосредственно в видимом разделе пакета, может быть сделано непосредственно видимым с помощью спецификатора использования по правилам, описанным в разд. 8.4 (см. также разд. 8.6 о видимости библиотечных модулей).
Описание скрыто во внутренней зоне описания, если она содержит омограф этого описания; внешнее описание является тогда скрытым в непосредственной области действия этого внутреннего омографа. Каждое из двух описаний является омографом другого, если оба описания имеют один и тот же идентификатор и не более чем для одного из них допустимо совмещение. Если совмещение допустимо для обоих описаний, то каждое из двух является омографом другого, в случае если они имеют одинаковый идентификатор, символ операции или символьный литерал, а также одинаковый профиль типа параметров и результата (см. разд. 6.6).
В спецификации подпрограммы скрыто каждое описание с таким же обозначением, как у подпрограммы; данное положение справедливо для конкретизации настройки, которая описывает подпрограмму, и в описании входа или в разделе формальных параметров оператора принятия. В этих случаях описание не является видимым ни по имени, ни непосредственно.