Выбрать главу

|<инструкция выбора>

|<инструкция возобновления>

|<инструкция выхода>

|<инструкция ввода>

|<инструкция вывода>

|<пустая инструкция>

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

Присваивания

<инструкция присваивания>::= SET <список целей> <выражение>;

<список целей>::=<цель>

|<список целей> <цель>

<цель> ::=<переменная> <заменить на>

<заменить на>::—:=

В <инструкции присваивания> <тип> всех <целей> и <тип> присваиваемого <выражения> должен быть одним и тем же. <Цели> обрабатываются слева направо, чтобы определить адреса в памяти, и только затем вычисляется выражение, чтобы найти запоминаемое значение. Структуры и массивы можно присваивать в случае совпадения <типов>. Использование ключевого слова SET служит примером многословности Мини. Данная избыточность помогает исправлению, когда неправильно записано другое ключе вое слово (распространенная ошибка).

Вызовы процедур

<инструкция вызова>::= CALL <обращение к процедуре>;

<обращение к процедуре> ::= <идентификатор процедура>

|<идентификатор процедуры> <список фактических параметров>

<идентификатор процедуры>::= <идентификатор>

<список фактических параметров> ::= <заголовок фактических параметров>)

<заголовок фактических параметров>::=(<<выражение>

|<заголовок фактических параметров>, <выражение>

Можно вызывать только процедуры, получившие определения а областью действия, содержащей <инструкцию вызова>. Количество, порядок и типы фактических и формальных параметров должны совпадать. После того как в вызываемой процедуре выполнится <инструкция возврата>, управление будет передано на следующую за вызовом инструкцию. Ключевое слово CALL используется по тем же соображениям, что и SET в <инструкции присваивания>.

Возвраты

<инструкция возврата> ::= RETURN;

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

<Инструкция возврата> может употребляться только в процедуре. Она возвращает управление в вызывающую инструкцию, В конце подпрограммы имеется неявная <инструкция возврата>. При возврате из подпрограммы значение указывать нельзя. При возврате из функции значение указывать обязательно. Оно должно иметь тот же тип, что и функция.

Инструкции завершения

<инструкция завершения>::= EXIT;

Данная инструкция вызывает нормальное завершение всей программы и возврат в супервизор. Она должна быть последней выполненной (не обязательно последней написанной) инструкцией <программы>.

Условные инструкции

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

|<метка> <простая условная инструкция>

<простая условная инструкция>::= <спецификация условия> <истинная ветвь> FI;

|<спецификация условия> <истинная ветвь> <ложная ветвь> FI;

<спецификация условия> ::= IF <выражение>

<истинная ветвь>::=THEN <тело условной инструкции>

<ложная ветвь> ::= <иначе> <тело условной инструкции>

<иначе>::= ELSE

<тело условной инструкции> ::= <тело сегмента>

В <условной инструкции> выбирается и выполняется <истинная ветвь> или <ложная ветвь> в зависимости от истинности <выражения> типа BOOLEAN. Каждая ветвь представляет собой <тело сегмента> и может содержать все необходимые определения, декларации и инструкции без дополнительных скобок. После выполнения выбранной ветви управление передается на инструкцию, следующую за условной.

Составные инструкции

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

|<метка> <простая составная инструкция>

<простая составная инструкция>::<заголовок составной инструкции> <тело составной инструкции> <конец составной инструкции>

<заголовок составной инструкции>::= BEGIN

<тело составной инструкции> ::= <тело сегмента>

<конец составной инструкции> ::= END;

|END <идентификатор>;

Другие возможности, заложенные в синтаксисе Мини, делают <составные инструкции> не особенно необходимыми. Однако <составные инструкции> полезны в сочетании с инструкциями REPEAT и REPENT. В начало составной инструкции можно поместить декларации и определения. Если после END записан <идентификатор>, он должен быть <меткой>, причем <метка> и <идентификатор> обязаны совпадать.