Операторы языка PL/1

Основной конструкцией PL-программы является оператор. Оператор (statement) в PL/1 образуется из идентификаторов, разделителей, операций и констант. В общем виде оператор можно представить следующим образом

pms;

Здесь p – либо пусто, либо список префиксов состояний; m – либо пусто, либо конструкция вида m1:m2:…:mk (k1), где mi (i=1,…,k) – метка оператора; s – собственно оператор (иногда s называют телом оператора); ; - признак конца оператора.

Операторы используются для указания некоторых действий, описания свойств величин, определения структуры программы. Единственным оператором, не задающим никаких сведений, является пустой оператор. Тело этого оператора не содержит никаких символов. Например, пустой оператор с метками М1 и М2 имеет вид

М1: М2: ;

Программа с простейшей структурой представляет собой последовательность операторов

s1s2…sk (k2),

где si (i=1,…k) – оператор. Оператор s1 является оператором заголовка процедуры, имеющим в простейшем случае вид

m1: m2: …: mn: PROCEDURE OPTIONS (MAIN)

где mi (i= 1,…,n) –метка. Оператор sn является оператором конца; в простейшем случае тело этого оператора состоит из ключевого слова END. Например, формально допустима следующая программа, не задающая выполнения каких-либо действий:

NULL: PROCEDURE OPTIONS(MAIN);

END;

Идентификатор (identifier) есть последовательность символов вида

ab1b2…bn,

где 30n0; a – либо буква, либо один из символов $, @, #, _ ; bj (j=1,2,…,n) – либо буква, либо цифра, либо один из символов $, @, #, _. Идентификаторы являются последовательностями символов, не включенных в комментарии и не являющиеся константами.

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

Ключевое слово (keyword) является идентификатором, имеющим специальное значение в языке PL/1. Ключевое слово может определять действия, которые необходимо выполнить, или атрибуты данных. Например, READ, DECIMAL и ENDFILE являются ключевыми словами. Некоторые ключевые слова могут быть сокращены.

Имена (name) в PL/1 даются переменным и данным, используемым для управления программой, и могут даваться константам. Существуют также встроенные имена, имена условий, общие имена. Имя должно иметь только одно значение в программном блоке. В именах удобно использовать символ _ (подчёркивания) для придания ему большего смысла.

Комментарий есть последовательность символов вида /*a1a2…an*/, где n0 и в последовательность a1…an не входит пара символов */ или /*. Символы /* означают начало комментария, а символы */ - его конец. Символы ai – могут быть любыми символами, допустимыми для конкретной ЭВМ, в частности символами русского алфавита.

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

Пример:

/*Комментарий можно вставить в любое место программы на PL/1.*/

ab+bc эквивалентно Ab + Bc

First.Second эквивалентно first. Second

Table(10) эквивалентно TEBLE ( 10)

AtoB не эквивалентно A to B

Префикс состояния указывает возможность возникновения некоторой ситуации, требующей каких-либо особых действий, не предусмотренных в нормальной последовательности операторов. В основном такие ситуации возникают из-за ошибок, например, при делении на ноль. Возникновение подобных ситуаций приводит к прерыванию процесса выполнения программы, а затем выполняются действия, которые «обрабатывают» данное прерывание. Обработка прерывания может состоять либо из стандартных действий, предусмотренных языком PL/1, либо из действий, заданных программистом. Для ряда состояний имеется возможность запретить или разрешить прерывание при возникновении данного состояния в процессе выполнения определённой части программы. Если прерывание разрешено, то компилятор генерирует код для обнаружения состояния, если нет, то компилятор не генерирует соответствующий код. Запрет или разрешение прерываний задается с помощью списка префиксов состояний вида

(p11,…,p1 n1) : ( p21,…,p2 n 2) : … : (pm1,…,pm nm) :

где m1; ni1 (i=1,2,…,m); pij (i=1,…m; j=1,…,ni) – либо имя состояния, либо буквы NO, за которым сразу же, без пробела, следует имя состояния. Список префиксов состояний может быть размещен практически перед любым оператором; список префиксов состояний должен предшествовать всем меткам оператора, если таковые имеются. Действие списка распространяется (за исключением некоторых случаев) на часть программы, определяемую оператором, перед которым помещён список префиксов состояний (отдельный оператор, процедура, блок). При этом если в списке указано имя состояния без букв NO, то прерывание для данного состояния разрешается; если с буквами NO, то прерывание для данного состояния запрещается. Например, при выполнении оператора

(SUBRG, ZDIV) : (NOUNDERFLOW) : M : X=Y(I,J)/(X-Y);

разрешены прерывания для состояний SUBSCRIPTRANGE и ZERODIVIDE и запрещено прерывание для состояния UNDERFLOW.

Метка идентифицирует оператор для обращения к нему из любой точки программы. Любой оператор, за исключением операторов DECLARE, DEFAULT, WHEN, OTHERWISE, может иметь метку. Метки операторов, как правило, не должны совпадать с именами переменных.

Если оператор начинается с символа %, то он является оператором препроцессора. Операторы языка препроцессора имеют вид

% m t;

Здесь t – тело оператора; m –либо пусто либо список меток вида

m1: m2: …: mk:

где mi (i=1,…,k) – произвольный идентификатор, обозначающий метку оператора. Пробелы и комментарии могут быть включены в любой оператор языка препроцессора по тем же правилам, что и для операторов языка PL/1. Никакие фрагменты текста операторов языка препроцессора, включая комментарии, не переносятся в текст, порождаемый препроцессором.

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

READ FILE(IN) INTO INPUT; /*оператор, определяемый ключевым словом READ*/

%DECLARE TEXT CHAR; /*оператор, определяемый ключевым словом %DECLARE*/

Оператор присваивания состоит из одного или нескольких идентификаторов (слева), затем знака присваивания = и выражения (справа).

A = B+C;

%SIZE = 15;

Пустой оператор состоит только из символа ; и не приводит к выполнению каких-либо действий.

;

label ;

% ;

Сложные операторы все начинаются с ключевого слова, которое указывает назначение оператора. Сложный оператор состоит из одного или нескольких простых или сложных операторов. В PL/1 имеется четыре сложных оператора: IF, ON, WHEN, OTHERWISE .

В тех случаях, когда действия, подлежащие выполнению при определенном условии, не могут быть записаны одним оператором, удобно применять группы операторов. По определению группа операторов есть последовательность, начинающаяся с оператора начала группы и заканчивающаяся оператором конца группы. Различают DO-группу и SELECT-группу. Первая из них ограничена ключевым словом начала группы DO и ключевым словом завершения группы END. SELECT-группа операторов является последовательностью WHEN и OTHERWISE операторов, ограниченных ключевыми словами SELECT и END.

Отправить комментарий

  • Доступны HTML теги: <b> <i> <u> <br> <hr> <div> <span> <code> <pre>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <pli>.

Подробнее о форматировании

  _____   _____ 
|___ / |___ /
|_ \ |_ \
___) | ___) |
|____/ |____/
Enter the code depicted in ASCII art style.