6.18.4.Общие правила

Для всех форматов:

  1. При просмотре (который включает цикл сравнения, уста­новление границ для фраз BEFORE (ДО) и AFTER (ПОСЛЕ) и механизм подсчета или замещения) данное, представленное иден­тификатором-1, независимо от его класса, просматривается, начи­ная от своей самой левой позиции литеры, слева направо до самой правой позиции; выполняемые при этом действия и область их применения оговорены в общих правилах (5) —(7).

  2. При просмотре содержимое данных, указанных идентифи­катором-1, идентификатором-3, идентификатором-4, идентифика­тором-5, идентификатором-6, идентификатором-?, трактуется сле­дующим образом:

  1. если какое-либо из данных, представленных идентификато­ром-!, идентификатором-3, идентификатором-4, идентификато­ром-5, идентификатором-6 или идентификатором-?, описано как буквенное или буквенно-цифровое, то оператор INSPECT (ПРО­СМОТРЕТЬ) обрабатывает значение каждого такого данного как строку литер;

  2. если какое-либо из данных, представленных идентификато­ром-1, идентификатором-3, идентификатором-4, идентификато­ром-5, идентификатором-6 или идентификатором-?, описано как буквенно-цифровое редактируемое, числовое редактируемое или числовое без знака, то оператор INSPECT (ПРОСМОТРЕТЬ) об­рабатывает значение каждого такого данного так, как переопреде­ленное на буквенно-цифровое (см. общее правило 2а);

  3. если какой-либо из перечисленных ранее идентификаторов представляет числовое данное со знаком, это данное рассматрива­ется при выполнении оператора так, как если бы оно было поме­щено в числовое данное без знака того же размера, после чего к нему применяется правило 26 (п. 6.19 настоящей части). Если идентификатор-1 представляет числовое данное со знаком, перво­начальное значение знака сохраняется после завершения операто­ра INSPECT (ПРОСМОТРЕТЬ).

х (3) При изложении ниже правил (5) — (17) все, оговоренное для литерала-1, литерала-2, литерала-3, литерала-4 и литерала-5, применяется в равной мере к значениям данных, представленных идентифИкатором-3, идентификатором-4, идентификатором-5, иден- тификіатором-6 и идентификатором-? соответственно.

  1. Индексы, связанные с любым идентификатором, вычисля­ются один раз в начале выполнения оператора INSPECT (ПРО­СМОТРЕТЬ).

В форматах 1 и 2

  1. При просмотре значения данного, представленного иденти­фикатором-1, каждое обнаруженное вхождение литерала-1 под­считывается (при использовании формата 1) или заменяется вхож­дением литерала-3 (при использовании формата 2).

  2. Проверка вхождения литерала-1 в идентификатор-1 для подсчета или замены осуществляется по следующим правилам:

а) операнды фраз TALLYING (СЧИТАЯ) и REPLACING (ЗА­МЕНЯЯ) рассматриваются в том порядке, в котором они представ­лены в операторе слева направо. Первый из литералов-1 сравни­вается с соответствующим количеством первых слева позиций ли­тер данного, представленного идентификатором-1. Литерал-1 сов­падает с порцией данного, представляемого идентификатором-1, если их литеры попарно совпадают и:

  1. если не определены ни LEADING (ВЕДУЩИЕ), ни FIRST (ПЕРВЫЙ) либо

  2. если LEADING (ВЕДУЩИЕ) относится к литералу-1, а ли­терал-1 является ведущим вхождением, как определено в общих правилах (10) и (13), либо

  1. если FIRST (ПЕРВЫЙ) относится к литералу-1, а лите­рал-1 является первым вхождением, как определено в общих пра­вилах (10) и (13);

  2. если для первого литерала-1 и первых позиций литер иден­тификатора-1 вхождение не найдено, проверяется вхождение сле­дующего литерала-1 и так далее для тех же позиций литер иден­тификатора-1.

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

  1. если вхождение найдено, выполняется подсчет или замеще­ние согласно правилам (10) и (13).

Соседняя справа позиция литеры по отношению к самой правой из рассматриваемых в предыдущем цикле сравнения позиций ли­тер данного, представленного идентификатором-1, становится са­мой левой рассматриваемой позицией этого данного, после чего снова выполняется цикл сравнений, начиная с первого литерала-1;

  1. процесс проверки вхождения продолжается до тех пор, пока самая правая позиция литеры данного, представленного иденти­фикатором-1, не будет рассмотрена как удовлетворяющая провер­ке вхождения или как самая левая позиция этого данного, после че­го оператор INSPECT (ПРОСМОТРЕТЬ) считается выполненным;

  2. если указана фраза CHARACTERS (ЛИТЕРЫ), в описан­ном выше цикле сравнения вместо литерала-1 всегда участвует од­нолитерный подразумеваемый операнд, значение которого в каж­дый момент совпадает с самой левой рассматриваемой позицией данного, представленного идентификатором-1.

(7) Операции сравнения, определенные правилами (6), огра­ничиваются фразами BEFORE (ДО) и AFTER (ПОСЛЕ) следую­щим образом:

  1. если не указаны фразы BEFORE (ДО) и AFTER (ПОСЛЕ), литерал-1 или подразумеваемый операнд фразы CHARACTERS (ЛИТЕРЫ) участвует в сравнении согласно предыдущему прави­лу с самой левой позиции идентификатора-1;

  2. если указана фраза BEFORE (ДО), то самая левая позиция литеры этого данного становится самой левой рассматриваемой' позицией; соседняя слева позиция литеры по отношению к перво­му вхождению литерала-2 в значение данного, представленного идентификатором-1, становится самой правой рассматриваемой позицией литеры этого данного;

  3. если указана фраза AFTER (ПОСЛЕ), то соседняя справа позиция литеры по отношению к первому вхождению литерала-2 в данное, представленное идентификатором-1, становится самой левой рассматриваемой позицией этого данного, а его самая пра­вая позиция становится самой правой рассматриваемой позицией.

Если вхождение литерала-2 в значение данного, представлен­ного идентификатором-1, не установлено, цикл сравнения в случае фразы BEFORE (ДО) выполняется так, как если бы фраза BE­FORE (ДО) не была задана; в случае фразы AFTER (ПОСЛЕ) считается, что вхождение литерала-1 в значение данного, представ­ленного идентификатором-1, не обнаружено.

В формате 1

  1. Слова ALL (ВСЕ), LEADING (ВЕДУЩИЕ) рассматривав ются как прилагательные, которые относятся ко всем последую-* щим литералам-1 до появления другого прилагательного.

  2. При выполнении оператора INSPECT (ПРОСМОТРЕТЬ) значение данного, представленного идентификатором-2, не уста­навливается в начальное состояние.

  3. Правила использования следующие:

  1. Если задана фраза ALL (ВСЕ), значение данного, пред­ставленного идентификатором-2, увеличивается на единицу при каждом вхождении литер ала-1 в значение данного, представлен­ного идентификатором-1;

если задана фраза LEADING (ВЕДУЩИЕ), значение дан­ного, представленного идентификатором-2, увеличивается на еди-ницу при каждом следующем вхождении литерала-1 в значение данного, на которое ссылается идентификатор-1, при условии, что слева не встретились позиции данного, представленного иден­тификатором-1, которые не совпали ни с одним из указанных ли­тералов-1;

  1. если задана фраза CHARACTERS (ЛИТЕРЫ), значение дан­ного, на которое ссылается идентификатор-2, увеличивается на единицу при каждом просмотре литеры данного, представленного идентификатором-1.

  1. При использовании формата 1 в случае, когда идентифи­катор-!, идентификатор-3 или идентификатор-4 занимают ту же область памяти, что и идентификатор-2, результат выполнения оператора INSPECT (ПРОСМОТРЕТЬ) не определен, даже если эти идентификаторы описаны одной и той же статьей описания дан­ных (см. п. 6.4.5 настоящей части).

В формате 2

  1. Фразы ALL (ВСЕ), LEADING (ВЕДУЩИЕ), FIRST (ПЕРВЫЙ) применяются к каждой следующей за ними фразе BY (НА) до появления очередного вхождения одной из перечис­ленных фраз.

  2. Правила замещения следующие:

  1. если задана фраза CHARACTERS (ЛИТЕРЫ), каждая лите­ра значения данного, представляемого идентификатором-1, заме­няется на литерал-3;

  2. если задана фраза ALL (ВСЕ), каждое вхождение литера­ла-1 в значение данного, представляемого идентификатором-1, за­меняется на литерал-3;

  3. если задана фраза LEADING (ВЕДУЩИЕ), каждое смеж­ное вхождение литерала-1 в значение данного, представляемого идентификатором-1, заменяется на литерал-3 при условии, что сле­ва не были обнаружены позиции этого данного, которые не совпа­ли ни с одним из литералов-1;

  4. когда задана фраза FIRST (ПЕРВЫЙ), самое левое вхож­дение литерала-1 в значение данного, представляемого идентифи­катором-1, заменяется литералом-3.

Это правило применяется ко всем последующим указаниям фра­зы FIRST (ПЕРВЫЙ) независимо от значения литерала-1.

  1. При использовании формата 2 в случае, когда идентифи­катор-3, идентификатор-4 или идентификатор-5 занимают одну и ту же область памяти, результат выполнения оператора INSPECT (ПРОСМОТРЕТЬ) не определен, даже если эти идентификаторы описаны одной и той же статьей описания данных (см. п. 6.4.5 нас­тоящей части).

В формате 3

Оператор INSPECT (ПРОСМОТРЕТЬ) интерпретируется и выполняется так, как будто заданы два следующих друг за дру- 348гом оператора INSPECT (ПРОСМОТРЕТЬ) для одного и того же идентификатора-1, один из которых имеет формат 1 с фразой TALLYING (СЧИТАЯ), тождественной соответствующей фразе оператора в формате 3, а другой — формат 2 с фразой REPLA­CING (ЗАМЕНЯЯ), тождественной соответствующей фразе опе­ратора в формате 3. К оператору в формате 1 применяются общие правила сравнения и подсчета. К оператору в формате 2 применя­ются общие правила сравнения и замены.

Индексы, связанные с любым идентификатором в операторе формата 2, вычисляются только один раз до выполнения операто­ра в формате 1.

В формате 4

  1. Оператор INSPECT (ПРОСМОТРЕТЬ) интерпретиру­ется и выполняется так, как будто задан оператор INSPECT (ПРОСМОТРЕТЬ) в формате 2 для одного и того же иденти­фикатора-1 с последовательностью фраз ALL (ВСЕ) — по од­ной для каждой литеры литерала-4. Результат оператора такой же, как если бы в каждой фразе ALL (ВСЕ) в качестве литера­ла-1 указывалась единственная литера литерала-4, а в качест­ве литерала-3 — соответствующая единственная литера лите­рала-5. Соответствие между литерами литерала-4 и литерами литерала-5 осуществляется по порядковому номеру литеры в данном.

  2. Если идентификатор-4, идентификатор-6 или идентифи­катор-7 занимают одну и ту же область памяти, результат вы­полнения оператора INSPECT (ПРОСМОТРЕТЬ) не определен, даже если эти идентификаторы определены одной и той же ста­тьей описания данных.

6.18.5. Примеры

В каждом из следующих примеров оператора INSPECT (ПРО­СМОТРЕТЬ) предполагается, что непосредственно перед выпол­нением оператора значения всех данных СО-О, СО-1, СО-2, СО-3, СО-4 равны нулю. В каждом примере, кроме последнего, приводят­ся результаты работы двух операторов INSPECT (ПРОСМОТ­РЕТЬ).

Пример 1.

INSPECT ТЕМ TALLYING

СО-О FOR ALL «АВ», ALL «D»

CO-1 FOR ALL «ВС»

CO-2 FOR LEADING «EF»

CO-3 FOR LEADING «В»

CO-4 FOR CHARACTERS;

ПРОСМОТРЕТЬ ТЕМ СЧИТАЯ

В СО-О, ВСЕ «АВ», ВСЕ «D»

В СО-1 ВСЕ «ВС»

В СО-2 ВЕДУЩИЕ «EF»

В СО-3 ВЕДУЩИЕ «В»

В СО-4 ЛИТЕРЫ;

INSPECT ТЕМ REPLACING

ALL «АВ» BY «XY», «D» BY «X»

ALL «ВС» BY «VW»

LEADING «EF» BY «TU»

LEADING «В» BY «S»

FIRST «G» BY «Р»

CHARACTERS BY «Z»

ПРОСМОТРЕТЬ ТЕМ ЗАМЕНЯЯ

ВСЕ «АВ» НА «XY», «D» НА «X»

ВСЕ «ВС» НА «VW»

ВЕДУЩИЕ «EF» НА «TU»

ВЕДУЩИЕ «В» НА «S»

ПЕРВЫЙ «G» НА «Р»

ЛИТЕРЫ НА «Z»

Результаты действия оператора показаны ниже.

Начальное значение данного ТЕМ

с 0-0

СО-1

СО-2

СО-3

СО-4

Результирующее значе­ние данного ТЕМ

EFABDBCGABEFGG

3

1

1

0

5

TUXYXVWRXYZZPZ

ВАВАВС

2

0

0

1

1

SXYXYZ

ВВВС

0

1

0

2

0

SSVW



Пример 2

INSPECT ТЕМ TALLYING

CO-O FOR CHARACTERS

CO-O FOR ALL «А»

ПРОСМОТРЕТЬ ТЕМ СЧИТАЯ

В СО-О ЛИТЕРЫ

В СО-1 ВСЕ «А»

INSPECT ТЕМ REPLACING

CHARACTERS BY «Z»

ALL «А» BY «X»

ПРОСМОТРЕТЬ ТЕМ ЗАМЕНЯЯ

ЛИТЕРЫ НА «Z»

ВСЕ «А» НА «X»

Результаты работы операторов показаны ниже.Исходное значение данного ТЕМ

СО-О

СО-1

Результирующее значение данного ТЕМ

ввв

3

0

ZZZ

АВА

3

0

ZZZ



Пример 3

INSPECT ТЕМ TALLYING

CO-O FOR ALL «АВ» BEFORE «ВС»

CO-1 FOR LEADING «В» AFTER «D»

CO-2 FOR CHARACTERS AFTER «А» BEFORE «С» ПРОСМОТРЕТЬ ТЕМ СЧИТАЯ ,

В СО-О ВСЕ «АВ» ДО «ВС»

В СО-1 ВЕДУЩИЕ «В» ПОСЛЕ «D»

В СО-2 ЛИТЕРЫ ПОСЛЕ «А» ДО «С»

INSPECT ТЕМ REPLACING

ALL «АВ» BY «XY» BEFORE «ВС»

LEADING «В» BY «W» AFTER «D»

FIRST «Е» BY «V» AFTER «D»

CHARACTERS BY «Z» AFTER «А» BEFORE «С»

ПРОСМОТРЕТЬ ТЕМ ЗАМЕНЯЯ

ВСЕ «АВ» НА «XY» ДО «ВС»

ВЕДУЩИЕ «В» НА «W» ПОСЛЕ «D»

ПЕРВЫЙ «Е» НА «V» ПОСЛЕ «D»

ЛИТЕРЫ НА «Z» ПОСЛЕ «А» ДО «С»

Результаты работы операторов показаны ниже.

Начальное значение ТЕМ

СО-О

СО 1

СО-2

Результирующее значение ТЕМ

BBEABDABABBCABEE

3

а

2

BBEXYZXYXYZCABVE

ADDDDC

0

0

4

AZZZZC

ADDDDA

(I

0'

5

AZZZZZ

CDDDDC

0

0

0

CDDDDC

BDBBBDB

0.

3

0

BDWWWDB