Главная Промышленная автоматика.

4.1. Составные операторы и блоки 4.1.1. Синтаксис

(непомеченный оснювной оператор): : = оператор присваивания)! (оператор перехода)!(пустой оператор)! (оператор процедуры)

(основной оператор): : = (непомеченный основной оператор) !(метка):(основной оператор)

(безусловный оператор):: = (основной оператор)! (составной оператор)!(блок)

(оператор): : = (безусловный оператор)((условный оператор)! (оператор цикла)

(конец составного) : : = (оператор) end (оператор); (конец составного)

(начало блока) ::= begin (описание)!(начало блока); (описание)

(непомеченный составной :: = begin (конец составного)

(непомеченный блок):: = (начало блока); (конец составного)

(составной оператор) : : = (непомеченный составной)!

(метка): (составной оператор) (блок): : = (непомеченный блок) (метка) : (блок) (программа) :: = (блок) I (составной оператор)

Этот синтаксис можно проиллюстрировать следующим образом. Обозначим произвольные операторы, описания и метки буквами S, D и L соответственно. Тогда основные синтаксические ед11ицы примут следующий вид:

Составной оператор:

L : L : ... begin S; S; ... S; S end

Блок:

L : L : ... begin D; D; ... D; S; S; ... S; S end

При этом нужно помнить, что каждый из операторов S может в свою очередь быть полным составным оператором или блоком.



4. Операторы 39 -"Т-"-

4.1.2. Примеры Основные операторы:

go to Naples

START: CONTINUE : U: = 7-993 Составной оператор:

begin л: =0; fory : = 1 step 1 until ndo x - -х+А\у\\ if x>q then go to STOP else if л:>да-2 then go toS; Aw. St: W:=x + bob end

Блок:

Q: begin integer /, k\ real w\

for /: = 1 step 1 until m Ao

for A : == 1 step 1 until m do

begins: =Л1/, k]; A[i, k\x=A{k, i]\ A[k,

i\:-w

end /or i ojid k end block Q • ,

4.1.3. Семантика

Каждый блок автоматически вводит новый уровень обозначений. Это реализуется следующим образом. Любой идентификатор, встречающийся внутри блока, можно определить посредством соответствующего описания (см. гл. 5. Описания) как локальный в данном блоке. Это означает (а), что объект, представленный этим идентификатором внутри данного блока, не существует вне блока и (б) что любой объект, представленный тем же идентификатором вне данного блока, нельзя использовать внутри блока.

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



. t t i

if BI then Sl else if B2 then S2 else S3; S4

i t I : ;t

BI ложно B2 ложно

4.5.4. Переход внутрь условного опера- тора

Результат работы оператора перехода, ведущего внутрь условного оператора, непосредственно следует из объясненного выше действия ограничителя else.

4.6. Операторы цикла

4.6.1. Синтаксис (элемент списка цикла): : = (арифметическое выражение) [(арифметическое выражение) step (арифметическое выражение) until (арифметическое

будет найдено выражение, имеющее значение true. После этого выполняется безусловный оператор, следующий непосредственно за этим логическим выражением. Если этот оператор не определит своего преемника, то следующим выполняемым оператором будет S4, т. е. оператор, следующий за полным условным оператором. Таким образом, действие ограничителя else можно охарактеризовать, сказав, что он определяет в качестве преемника оператора, за которым он (ограничитель. - Ред.) следует, оператор, следующий за полным условным оператором.

Конструкция

else (безусловный оператор) эквивалентна конструкции

else if true then (безусловный оператор)

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

Для дальнейших пояснений может быть полезна следующая схема:





0 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17 18 19 20 21 22

0.0022