Cтраница 1
Метка блока MB указывает его тип ( характер протекаемо-го в нем процесса), уровень математической модели и ее номер. Ряд переменных управляет печатью диагностической информации в процессе расчета, указывает, есть ли перечень проектных переменных и задано ли их значение, необходим ли синтаксический и семантический контроль введенной информации, структурный анализ схемы информационных графов, наличие сформированных сегментов программы и массивов данных. [1]
Здесь ADCB - метка блока управления областью вывода, предназначенного для размещения промежуточных результатов; N - целое число, которое выдае тся на печать перед выводимыми данными и может быть использовано для их и идентификации, если в задаче использовано несколько операторов SNAP; REGS - параметр, задающий включение в состав выводимых данных содержимого всех регистров; АН АКг - начальный и конечный адрес выводимых полей основной памяти, задаваемые в форме меток или относительных выражений. [2]
В, ибо метка Q блока D недоступна этому оператору перехода, как находящемуся вне блока D, а метка Q блока А недоступна потому, что такая же метка уже есть в наименьшем, охватывающем оператор перехода, блоке В. [3]
С - номер или метка блока назначения транзакта, если условие сравнения не выполняется. [4]
При этом выдерживается совмещение начальной и завершающей меток блока по вертикали. При соблюдении такого порядка размещения блоков в программе ясно просматривается структура программы и глубина вложенности блоков. [5]
Блоки Расширения - Для того, чтобы отметить начало блока, за которым следует метка блока Расширения, используется код Представления Расширения, идентифицирующий тип расширения. Коды Расширения - числа в изменяющиеся в диапазоне от 0x00 до OxFF включительно. [6]
В, ибо метка Q блока D недоступна этому оператору перехода, как находящемуся вне блока D, а метка Q блока А недоступна потому, что такая же метка уже есть в наименьшем, охватывающем оператор перехода, блоке В. [7]
Описание начинается с номера строки ( №), отсчет которых начинается сверху вниз, после пробела ( указан символ) помещается по необходимости метка блока, которая должна начинаться с буквы и содержать не более пяти алфавитно-цифровых символов. Далее после одного пробела располагаются операнды, разделенные запятыми. [8]
В отличие от процедурного блока, выполнение операторов которого производится по оператору CALL, простои блок начинает выполняться в тот момент, когда закончилось выполнение непосредственно предшествующего оператора ( или простого блока), а также в том случае, когда был осуществлен переход на метку блока по оператору GO TO. Отметим, что, в отличие от простых блоков, внутренние процедурные блоки, если они расположены [ среди операторов процедуры ( что допускается в PL / 1, хотя и не рекомендуется) последовательно не выполняются, а просто обходятся. Выход из простого блока происходит после выполнения оператора END, ограничивающего блок, или ( что обычно не рекомендуется) по оператору GO ТО, выполняющему переход на метку, расположенную вне данного блока. [9]
Это достигается точно так же, как и для схемы примера 2.1, однако блоки В и С устроены теперь более сложно, так как они должны прослеживать не только состояние вычисления ( используя и и до), но помнить также определяющие соотношения, которые должны применяться следующими к v и до; дважды индексированные метки блоков В и С предназначены именно для этой цели. [10]
Имя процедуры А является глобальным по отношению к телу этой же процедуры. Метка блока В неизвестна внутри него, так как внутри блока имя В является именем переменной, объявленной в этом блоке явно. Имя процедуры С известно только в блоке В. Имя С в блоке А ( см. С) объявляется контекстуально как имя процедуры-функции, и ему присваиваются по умолчанию атрибуты EXTERNAL и STATIC; то есть должна существовать еще и внешняя процедура ( см. ниже 2.4.3) с именем С. Внешнее имя Y известно везде, кроме той части блока В, которая не входит в процедурный блок С. Имя Z объявлено неявно в блоке А и явно в блоке В. Имя метки L объявляется явно и в блоке А, и в блоке С. [11]
С помощью комментариев показаны недопустимые переходы, так как если осуществляется вход внутрь блока, минуя его описание, то значения и тип используемых в блоке переменных не определяются. Однако переходы на метки блоков M, Ml, M2 допустимы отовсюду. [12]
Идентификаторы, не описанные ни явно, ни контекстуально, считаются неявно описанными как переменные ( а не указатели функций без списка аргументов), с атрибутами по умолчанию. Напомним, что метки ( обычные, не массивные), описываются явно, своим появлением с двоеточием в качестве префикса какого-либо оператора; метки блоков ( для процедурного блока-имя процедуры) считаются описанными ЯВНОЕ окаймляющем блоке. [13]
Язык Си содержит достаточно малый, но тем не менее вполне достаточный для соответствия философии структурного программирования набор средств. Хотя при использовании языка Си необходимость в использовании оператора перехода goto возникает чрезвычайно редко, но есть небольшое число ситуаций, когда без оператора перехода goto обойтись просто невозможно. Одной из таких ситуаций является необходимость преждевременного выхода из оператора цикла в том случае, когда имеется вложенный цикл произвольной глубины, а выход необходим на охватывающий этот вложенный цикл оператор из произвольного по глубине вложенности уровня этого вложенного цикла. Использование оператора завершения break в этой ситуации не помогает, поскольку оператор завершения break позволяет выйти лишь на предыдущий по глубине вложенности уровень этого вложенного цикла. В языке Ада первая проблема решается за счет использования меток блоков, а вторая - за счет возможности обработки исключительных ситуаций. [14]
Всякое прерывание программы, связанное с запросом к операционной системе или возникшее в результате появления внешних событий, интерпретируется в машинах Барроуз как обращение к некой подпрограмме, чаще всего работающей от имени прерванной программы. Соответственно в оперативной памяти всегда присутствует стек управляющей программы и словарь ее программных сегментов. Очень важной функцией механизма стека является хранение истории переходов от выполнения одних процедур к другим, точнее, хранение истории вложенности одних процедур или блоков в другие. Блочная структура алгола предполагает, что внутренний блок может пользоваться переменными, описанными во внешних блоках, и может передавать управление на метку, локализованную во внешнем блоке, причем эти переменные или метки могут находиться в блоках, отстоящих по уровню вложенности на несколько ступеней. В транслирующих системах традиционных машин функции управления доступом к данным и меткам блоков внешних уровней возлагаются на административные системы. В машинах Барроуз эти функции административных систем переложены, главным образом, на аппаратуру. [15]