Выбрать главу
Возобновление и выход

<инструкция возобновления>::=REPEAT <идентификатор>;

<инструкция выхода>::=REPENT <идентификатор>;

<Инструкция возобновления> вызывает возврат управления на начало объемлющего тела инструкции, помеченной <идентификатором>. Выполнение всех промежуточных объемлющих тел сегментов и инструкций, частями которых эти тела являются, завершается, как если бы произошел нормальный выход из них. Вся связанная с ними память разрушается. <Метка>, на которую выполняется переход, должна принадлежать той же процедуре, что и <инструкция возобновления>. Если не существует объемлющей инструкции с указанной меткой, <инструкция возобновления> рассматривается как семантически ошибочная. Семантика <инструкции выхода> аналогична, с той лишь разницей, что управление передается не на начало помеченной инструкции, а в точку, непосредственно следующую за помеченной объемлющей инструкцией. Заметим, что <инструкция возобновления> вызывает повторное выполнение инструкции, на начало которой передается управление.

Ввод и вывод

<инструкция ввода>::= INPUT <список ввода>;

<список ввода> ::= <переменная>

|<список ввода>, переменная>

<инструкция вывода>::== OUTPUT <список вывода>;

<список вывода>::= <выражение>

|<список вывода> <выражение>

<Инструкция ввода> вызывает передачу элементов данных из входного потока в <переменные> <списка ввода>. Вводимые элементы должны иметь базовый тип, совпадающий с типом соответствующей переменной. Вводимый элемент представляется так же, как константа этого типа. Элементы входного потока необходимо разделять литерами пробела или конца записи. Аналогично <инструкция вывода> вызывает передачу <выражений> из <списка вывода> в выходной поток. <Выражения> должны иметь базовый тип. Точный формат выходного потока определяется при реализации; требуется лишь, чтобы выводимая информация годилась для последующего ввода. Каждая <инструкция вывода> в конце своей работы выдает литеру конца записи.

Пустые инструкции и метки

<пустая инструкция>::=;

<метка>::=<идентификатор>:

<Пустая инструкция> не вызывает никаких действий. <Метка> — это <идентификатор>, который декларируется своим использованием и в данном <теле сегмента> не может декларироваться или определяться иначе, как имя поля.

Выражения

<выражение>::= <выражение один>

|<выражение>

| <выражение один>

|<выражение> XOR <выражение один>

<выражение один>::= <выражение два>

|<выражение один> & <выражение два>

<выражение два> ::= <выражение три>

| NOT <выражение три>

<выражение три> ::= <выражение четыре>

|<выражение три> <отношение> <выражение четыре>

<выражение четыре>::= <выражение пять>

|<выражение четыре> || <выражение пять>

<выражение пять>::= <выражение шесть>

|<выражение пять> <аддитивный оператор> <выражение шесть>

|<аддитивный оператор> <выражение шесть>

<выражение шесть>::= <выражение семь>

|<выражение шесть> <мультипликативный оператор> <выражение семь>

<выражение семь>::= FLOOR (<выражение>)

|LENGTH (<выражение>)

|SUBSTR (<выражение>, <выражение>, <выражение>)

|CHARACTER (<выражение>)

|NUMBER (<выражение>)

|FLOAT (<выражение>)

|FIX (<выражение>)

|<выражение восемь>

<выражение восемь>::= <переменная>|

<константа>

|<вызов функции>

|(<выражение>)

Выражения трактуются совершенно стандартным образом. Операнды операторов ||, XOR (исключающее или), & и NOT должны иметь тип BOOLEAN. Два произвольных элемента одного типа можно сравнить посредством <отношения> равенства и неравенства. Цепочки литер можно сравнить посредством любого <отношения>. Две цепочки равны тогда и только тогда, когда они в точности одинаковы. Цепочка А меньше цепочки В, если начало А равно началу В и в А больше нет литер или очередная литера А предшествует очередной литере В в алфавитной упорядоченности. Два любых целых или вещественных числа можно сравнивать посредством любого <отношения>; если целое сравнивается с вещественным, оно неявно преобразуется в вещественное. Результат любого сравнения имеет тип BOOLEAN.

Операндами <аддитивных операторов> и <мультипликативных операторов> могут быть только целые и вещественные значения. Если целые операнды сочетаются с вещественными, перед выполнением операции целые преобразуются в вещественные. В операции MOD нельзя использовать вещественные числа; при выполнении операций MOD и деления целых чисел частное выбирается так, чтобы остаток был неотрицательным. Операндами оператора конкатенации || обычно служат цепочки литер; результат также является цепочкой. Операнды других базовых типов перед выполнением конкатенации преобразуются в цепочки, соответствующие их представлению при выводе.