1. — массив и элементы этого массива;

  2. — переменная;

  3. — внутренняя функция;

  4. — встроенная функция;

  5. — внешняя функция;

  6. — подпрограмма.

(Измененная редакция, Изм. № 1).

  1. . Соотношения между классами. Если в программном модуле символическое имя из класса V встречается непосредст­венно после слова FUNCTION в заголовке функции, то оно обя­зано принадлежать также классу II того же программного модуля.

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

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

  1. . Эффект употребления символических имен в объявле­ниях спецификаций. Символическое имя принадлежит классу I тогда и только тогда, когда оно употребляется в описании мас­сива в качестве имени описания. Для каждого символического имени в одном модуле допускается только одно такое употребле­ние.

Символическое имя, употребляемое в объявлении общих объ­ектов, принадлежит либо классу I, либо классу II, но не клас­су V (п. 8.3.1). Для каждого символического имени в одном мо­дуле допускается только одно такое употребление.

Символическое имя, употребленное в объявлении эквивалент­ности, принадлежит либо классу I, либо классу II, но не клас­су V (п. 8.3.1).

  1. . Массив и элемент массива. За каждым вхождением символического имени, обозначающего какой-либо массив, дол­жен непосредственно располагаться индекс; исключение состав­ляют следующие вхождения:

в список оператора ввода/вывода;

в список формальных параметров;

в список фактических параметров при ссылке на внешнюю процедуру;

в объявление общих объектов.

Формальный параметр внешней процедуры может быть име­нем массива только в том случае, когда соответствующий фактический параметр при ссылке на эту внешнюю процеду­ру является именем массива. Если фактический параметр яв­ляется именем массива, то длина массива — формального па­раметра должна быть не больше длины массива — фактическо­го параметра.

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

  2. . Подпрограмма. Символическое имя принадлежит клас­су VI, если оно встречается непосредственно после слова SUBROUTINE в заголовке подпрограммы или непосредственно после слова CALL в операторе вызова подпрограммы.

  3. . Внутренняя функция. Символическое имя принадлежит классу III в некотором программном модуле, если оно:

не принадлежит ни классу I, ни классу IV;

за каждым его вхождением непосредственно следует левая скобка;

в рассматриваемом модуле имеется объявление внутренней функции (п. 8.1.1) с этим именем.

  1. . Встроенная функция. Символическое имя принадлежит классу IV в некотором программном модуле, если оно:

встречается в колонке имен табл. 3;

за каждым его вхождением непосредственно следует левая скобка.

Употребление встроенной функции в некотором программ­ном модуле не запрещает использования этого же симво­лического имени для обозначения какого-либо другого объек­та в другом программном модуле той же выполнимой про­граммы.

  1. . Внешняя функция. Символическое имя принадлежит классу V, если оно:

встречается непосредственно после слова FUNCTION в заго­ловке функции;

не принадлежит ни одному из классов I, III, IV или VI и име­ется хотя бы оно его вхождение, непосредственно за которым следует левая скобка. Левая скобка должна непосредственно сле­довать за каждым его вхождением.

( Измененная редакция, Изм. № 1).

  1. . Переменная. В программном модуле символическое имя принадлежит классу II, если оно:

не принадлежит классу VI;

за ним никогда непосредственно не следует левая скобка, ес­ли только это имя не следует непосредственно за словом FUNCTION в заголовке функции.

  1. . Имя блока — отсутствует; определение—по ГОСТ 23056—78.

  1. Понятие определения. Для числовых величин существует два уровня определения — первый и второй. Понятие определения на пер­вом уровне применимо к любым элементам массивов и переменным; понятие определения на втором уровне — только к переменным типа целый. Для объяснения смысла этих понятий необходимо рассмотреть выполнимую программу в процессе ее выполнения.

Необходимо отметить, что существует другой способ опреде­ления, позволяющий ссылаться на внешнюю процедуру. Он будет рассмотрен в п. 10.2.1.

В дальнейшем, говоря об определении и неопределении при­менительно к переменным и элементам массивов, мы всегда бу­дем подразумевать первый уровень определения.

  1. Определение процедур. Если выполнимая программа содержит информацию, описывающую внешнюю процедуру, то та­кая внешняя процедура с соответствующим символическим име­нем определена для использования в этой выполнимой программе. Ссылка на внешнюю функцию или ссылка на подпрограмму (вы­бирается подходящий случай) с этим символическим именем мо­жет встречаться в выполнимой программе, если число параметров в определении и ссылке совпадает. Остальные ограничения со­держаться в пп. 8.3.1, 8.3.2, 8.4.1, 8.4.2 и 10.1.3.

Основные внешние функции, перечисленные в п. 8.3.3, опреде­лены всегда и на них можно ссылаться при условии выполнения ограничений, указанных выше.

Для указанного использования определено символическое имя из класса III или IV.

  1. Связи, обеспечивающие определение. Объекты могут стаДь связанными посредством:

связи через общий блок;

связи через эквивалентность;

подстановки параметров.

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

С точки зрения определения в любом программном модуле между двумя объектами, каждый из которых встречается в объ­явлении общих объектов, не существует никакой связи. Кроме того, для общих и эквивалентных объектов не существует никакой связи, кроме установленной в пп. 7.2.1.3.1 и 7.2.1.4.

Если фактический параметр при ссылке на внешнюю проце­дуру является именем массива, именем элемента массива или именем переменной, то в соответствии с пп. 10.1.3 и 10.2.1 связь формальных параметров с фактическими определена лишь на время от начала выполнения первого оператора этой процедуры и до начала выполнения первого встреченного оператора возвра­та этой процедуры. Заметим особо, что эта связь может переда­ваться более чем через один уровень ссылок на внешние проце­дуры.

В дальнейшем переменные и элементы массивов, связанные на основании пп. 7.2.1.3.1 и 7.2.1.4, будут считаться эквивалент­ными только при условии совпадения типов.

Если объект данного типа становится определенным, то в этот же момент все связанные с ним объекты иного типа становятся неопределенными, а все связанные с ним объекты того же само­го типа становятся, если не оговорено противное, определенными.

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

  1. События, обеспечивающие определение. Любой объект является неопределенным к началу первого выполнения первого оператора головного модуля. Переопределение определенного объекта допускается всегда, за исключением некоторых случаев для переменных типа целый (пп. 7.1.2.8 и 7.1.3.2.1), а также объектов программных модулей (пп. 5.4, 8.3.2 и 8.4.2).

    1. Переменные и элементы массивов становятся опреде­ленными (или переопределенными) в следующих случаях:

завершение выполнения арифметического оператора присваи­вания вызывает определение объекта, расположенного слева от знака равенства

;при выполнении оператора ввода каждый объект, которому присваивается значение соответствующего типа из внешней сре­ды ввода, становится определенным в момент этого присваивания. Связанные объекты одинакового типа становятся определенными лишь по завершении выполнения этого оператора ввода;

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

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

  1. Переменные и элементы массивов становятся неопре­деленными в следующих случаях:

в момент завершения оператора цикла способом, приведенным в п. 7.1.2.8.2 г, управляющая переменная этого цикла становится неопределенной;

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

когда объект, связанный с данным объектом и имеющий иной тип, становится определенным;

когда объект, связанный с данным объектом и имеющий такой же тип, становится неопределенным.

  1. Объекты непомеченного общего блока — отсутствует; определение — по ГОСТ 23056—78.

  2. Объекты помеченного общего блока — отсутствует; определение — по ГОСТ 23056—78.

  3. Объекты не из общего блока. Любой объект не из об­щего блока начально неопределен.

Такие объекты, ставшие однажды определенными по любому из приведенных выше правил, остаются определенными до тех пор, пока не станут неопределенными в соответствии с этими же правилами.

Если такой объект используется в программном модуле, то за­вершение выполнения оператора возврата этого модуля вызыва­ет неопределенность всех таких объектов и связанных с ними в этот момент объектов.

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

  1. Основа. Основой в программном модуле называется последовательность, состоящая из одного или более операторов и определяемая следующим образом.

    1. Конечными операторами основы являются:

оператор цикла;

оператор вызова подпрограммы;

оператор перехода любого типа;

условный арифметический оператор;

оператор останова;

оператор возврата;

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

арифметический оператор присваивания, в котором слева от знака равенства стоит переменная типа целый;

оператор ввода, в списке которого содержится переменная типа целый.

  1. Начальными операторами основы являются:

первый оператор в программном модуле;

первый из операторов (если он существует), непосредственно следующий за конечным оператором некоторой другой основы.

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

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

  1. Второй уровень определения. В момент использования в индексах и вычисляемых операторах перехода переменные ти­па целый должны быть определены на втором уровне.

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

В момент выполнения начального оператора основы перемен­ная типа целый является определенной на втором уровне, если выполняются следующие условия:

,в этой основе указанная переменная употребляется в индексе или вычисляемом операторе перехода;

в момент выполнения начального оператора этой основы ука­занная переменная определена на первом уровне.

  1. Такое определение сохраняется до тех пор, пока не произойдет одно из следующих событий:

завершение выполнения конечного оператора этой основы;

указанная переменная становится неопределенной или переоп­ределяется на первом уровне.

В этот момент указанная переменная становится неопределен­ной на втором уровне.

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