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

4. о пер агоры 39

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

go to Naples

START: CONTINUE :W:= 7.993 . Составной оператор:

begin л : = 0; for у : = 1 step 1 until ndo x= x-\-A[y]; if x>g then go to STOP else if л:> w-2 then go toS;

Aw:St:W:x-bob end

Блок:

Q : begin integer /, k; real w;

for i: = l step 1 until m do f or Л: = i -f 1 step 1 until m do

beginw:=A[i, k\; A[i, k]:=A[k, /]; A[k,

i]:=w

end /or i and k end Q ,

4.1.3. Семантика

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

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



которого begin и end заключают этот оператор. В этом отношении тело процедуры нужно рассматривать так, как если бы оно было заключено между begin и end, и трактовать как блок.

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

4.2. Операторы присваивания

4.2.1. Синтаксис

(левая часть) : : = (переменная) : == [(идентификатор процедуры): =

(список левой части):: = (левая часть)[(список левой части) (левая часть)

(оператор присваивания): : = (список левой части) (арифметическое выражение)[(список левой части) (логическое выражение)

4.2.2. Примеры -

s:=p\Q]: = n: - n+\+s п: = я+1

A:=B/C - v - qXS •

S[v, k+2]: = 3 - arctanisXzeta)

V:Q>rAZ

4.2.3. Семантика

Операторы присваивания служат для присваивания значения выражения одной или нескольким переменным или идентификаторам процедур. Присваивание идентификатору процедуры может встречаться только внутри тела процедуры, определяющей значение указателя функции (см. разд. 5.4.4). Подразумевается, что в общем случае этот процесс проходит в следующие три этапа: .



4.2.3.1. Значения всех индексных выражений, встречающихся в переменных левой части, вычисляются в порядке слева направо.

4.2.3.2. Вычисляется значение выражения в операторе.

4.2.3.3. Значение выражения присваивается всем переменным левой части, при этом индексные выражения имеют значения, вычисленные на шаге 4.2.3.1.

4.2.4. Типы

Все переменные и идентификаторы процедур списка левой части должны по описанию иметь один и тот же тип. Если это тип Boolean, то выражение также должно быть типа Boolean. Если этот тип real или integer, то выражение должно быть арифметическим. Если тип арифметического выражения отличается от типа переменных и идентификаторов процедур, то считают, что автоматически нужно применить соответствующие функции преобразования. Имеется в виду, что для преобразования из типа real в тип integer функция преобразования выдает результат, эквивалентный

entier {Е-{-0,5), . --

где Е - значение выражения. Тип идентификатора процедуры задается описателем, который является первым символом соответствующего описания процедуры (см. разд. 5.4.4).

4.3. Операторы перехода

4.3.1. Синтаксис

(оператор перехода):: = go to (именующее выражение)

4.3.2. Примеры , , go to 8

go to exit[n~\-l] .

go to 7offi)«[ifi/<Othen7VelseA+l] • go to iiAb<cthen 17elseq[Uw<0then2elsen\





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

0.0033