Н. Вирт - Программирование на языке Модула-2 (1160777), страница 30
Текст из файла (страница 30)
ОперацииСинтаксис операций определяет старшинство операций в соответствии с четырьмяклассами операций. Операция NOT имеет наивысший приоритет, за ней следуют так называемыеоперации типа умножения, затем операции типа сложения и, наконец, с низшим приоритетом,операции отношения. Последовательности операций одного приоритета выполняются слеванаправо.$$$$Выражение = ПростоеВыражение[Отношение ПростоеВыражение].Отношение = "=" | "#" | "<" | "<="| ">" | ">=" | IN.149$ПростоеВыражение = ["+"|"-"] Слагаемое${ОперацияТипаСложения Слагаемое}.$ОперацияТипаСложения = "+" | "-" | OR.$Слагаемое = Множитель$${ОперацияТипаУмножения Множитель}.ОперацияТипаУмножения = "*" | "/" | DIV$$| MOD | AND.Множитель = Число | Цепочка | Множество |$Обозначение [ФактическиеПараметры] |$"(" Выражение ")" | NOT Множитель.$Множество = [КвалИдент]"{"[Элемент{","Элемент}]"}".$Элемент = Выражение [".." Выражение].
(!)$ФактическиеПараметры = "(" [СписВыражений]")".Имеющиеся операции перечислены ниже в таблице. В некоторых случаях одним и тем жезнаком операции обозначаются несколько различных операций. В этих случаях конкретнаяоперация определяется типами операндов.8.2.1. Арифметические операцииСимволОперация+Сложение-Вычитание*Умножение/Действительное делениеDIVЦелое делениеMODОстаток от деленияЭти операции (за исключением /) применимы к операндам типа INTEGER, CARDINAL илиих диапазонов. Оба операнда должны быть типа CARDINAL или диапазон с базовым типомCARDINAL, и в этом случае результат имеет тип CARDINAL, или они оба должны иметь типINTEGER или диапазон базового типа INTEGER, и в этом случав результат имеет тип INTEGER.Операции +, - и * применимы также к операндам типа REAL.
В этом случае оба операндадолжны иметь тип REAL и результат имеет тип REAL. Операция деления / применима только коперандам типа REAL. При использовании в качестве одноместной операции "-" означаетизменение знака, а "+" - тождественную операцию. Изменение знака применимо только коперандам типа INTEGER и REAL. Операции DIV и MOD определяются следующими правилами:х DIV у равно округленному частному х/ух MOD у равно остатку от деления х DIV у (для у>0)х=(х DIV y)*y+(x MOD у)1508.2.2. Логические операцииСимволОперацияORЛогическое сложениеANDЛогическое умножениеNOTОтрицаниеЭти операции применимы к операндам типа BOOLEAN, и их результат имеет типBOOLEAN.р OR q означает "если р, то TRUE, иначе q"р AND q означает "если р, то q, иначе FALSE"8.2.3.
Операции над множествамиЭти операции применимы к операндам любого типа множества, и результат операции имеет тот жетип.Символ Операция+Объединение множеств-Разность множеств*Пересечение множеств/Симметрическая разность множествх IN (sl+s2) эквивалентно (х IN s1)OR(x IN s2)x IN (si-s2) эквивалентно (x IN s1)AND NOT(x IN s2)x IN (sl*s2) эквивалентно (х IN s1)AND(x IN s2)x IN (si/s2) эквивалентно (х IN s1)#(x IN s2)8.2.4. ОтношенияОтношения дают логический результат. Отношения порядка применимы к основнымтипам INTEGER, CARDINAL, BOOLEAN, CHAR, REAL, к перечислениям и диапазонам.СимволОтношение=Равно#Не равно<Меньше<=Меньше или равно (включение множеств)>Больше>=Больше или равно (включение множеств)INСодержится в (членство во множестве)151Отношения "=" и "#" применимы, кроме того, к множествам и указателям. В применении кмножествам "<=" .
и ">= " означают (собственное) включение. Отношение IN означает членство вмножестве. В выражении вида х IN s выражение s должно быть типа SET OF Т, где Т - тип(совместимый с) х. Примеры выражений (см. примеры в гл. 7):1980(CARDINAL)k DIV 3(INTEGER)NOT p OR q(BOOLEAN)(i+j)*(i-j)(CARDINAL)s-{8,9,13}(BITSET)a[i]+a[j](CARDINAL)a[i+j]*a[i-j](CARDINAL)(0<=k)&(k<100)(BOOLEAN)t^.ключ=0(BOOLEAN)(13..15}<=s(BOOLEAN)i IN {0,5..8,15}(BOOLEAN)9.
ОПЕРАТОРЫОператоры означают действия. Имеются простые и структурные операторы. В простыеоператоры в качестве составных частей не входят другие операторы. Простые операторы присваивание, вызов процедуры, возврат и выход. Структурные операторы состоят из частей,являющихся операторами. Они используются для организации выполнения последовательности,условий, выбора и повторений.$Оператор = [Присваивание | ВызовПроцедуры |$УсловныйОператор | ОператорВыбора |$ЦиклПока | ПиклДо | БезусловныЦикл |$ЦиклСШагом | ОператорПрисоединения |$EXIT | RETURN [Выражение]].Оператор может быть пустым, и в этом случае он соответствует отсутствию каких-либодействий.9.1.
ПрисваиванияПрисваивание служит для замены текущего значения переменной новым значением,определяемым значением выражения. Знаком операции присваивания служит ":=", которыйчитается "присвоить".$Присваивание - Обозначение ":=" Выражение.Слева от знака присваивания находится переменная. После исполнения присваиванияпеременная имеет значение, полученное в результате вычисления выражения. Старое значениетеряется (затирается). Тип переменной должен быть совместим по присваиванию с типомвыражения. Говорят, что типы операндов совместимы по присваиванию,если они либо152совместимы, либо оба имеют тип INTEGER или CARDINAL, либо являются диапазонамиосновных типов INTEGER или CARDINAL.Цепочка длины n1 может быть присвоена переменной типа цепочка длины n2 > n1. В этомслучае цепочка дополняется пустой литерой (0С). Цепочка длины 1 совместима с типом CHAR (!).Примеры присваиваний:i:=kp:=i=jj:=log2(i+j)F:=log2s:={2,3,5,7,11,13}a[i]:=(i+j)*(i-j)t^.ключ:= i w[i+1].ch:="A"9.2.
Вызовы процедурВызов процедуры служит для активации процедуры. Вызов процедуры может содержатьсписок Фактических параметров, которые подставляются вместо соответствующих Формальныхпараметров, определенных в описании процедуры (см. гл. 10). Это соответствие устанавливаетсяпо позициям параметров в списках Фактических и Формальных параметров соответственно.Имеется два вида параметров: параметры-переменные и параметры-значения.В случае параметров-переменных Фактический параметр должен быть обозначениемпеременной. Если он обозначает компоненту структурной переменной, селектор вычисляется приподстановке Фактического параметра на место Формального, т.е.
до исполнения процедуры. Вслучае параметра—значения соответствующий Фактический параметр должен быть выражением.Это выражение вычисляется до активации процедуры, и получающееся значение присваиваетсяФормальному параметру, который в этом случае представляет собой локальную переменную.Типы соответствующих Формальных и Фактических параметров должны быть идентичны вслучае параметров-переменных и совместимы по присваиванию в случае параметров-значений.$ВызовПроцедуры =$Обозначение [ФактическиеПараметры].Примеры вызовов процедур:Read(i)(см.
гл. 10)Write(a*2+1,6)INC(a[i])9.3. Последовательности операторовПоследовательность операторов означает последовательное выполнениеопределяемых входящими в нее операторами, разделяемых точкой с запятой.$действий,ПослОператоров = Оператор {";" Оператор}.9.4. Условный оператор$УсловныйОператор * IF Выражение THEN ПослОператоров153${ELSIF Выражение THEN ПослОператоров}$[ELSE ПослОператоров] END.Выражения, следующие за символами IF и ELSIF, имеют тип BOOLEAN.
Онивычисляются в порядке их следования, пока какое-либо из них не даст значения TRUE. В этомслучае исполняется соответствующая ему последовательность операторов.Если присутствует предложение ELSE, соответствующая ему последовательностьоператоров исполняется тогда и только тогда, когда все логические выражения дали значениеFALSE. Пример:IF( литера> = "А")&(литера<="Z")THENЧтениеИдентиФикатораELSIF(литера> = "0")&(литера<=")")THEN ЧтениеЧислаELSIF литера='"' THEN ЧтениеЦепочки('"')ELSIF литера="'" THEN ЧтениеЦепочки("'")ELSE СпецЛитераEND9.5. Оператор выбораОператор выбора определяет выбор и исполнение последовательности операторов всоответствии со значением выражения.
Сначала вычисляется выражение выбора, после чегоисполняется та последовательность операторов, список меток выбора которой содержитполученное значение. Типом выражения выбора должен быть либо основной тип (за исключениемREAL), либо перечислимый тип, либо тип диапазон, и все метки должны быть совместимы с этимтипом. Метки выбора должны быть константами, и ни одно из значений не может встретитьсяболее одного раза.
Если среди меток выбора ни одного из вариантов нет значения выражения,выбирается последовательность операторов, следующая за символом ELSE.$ОператОрВыбора - CASE Выражение OF Альтернатива$${"|" Альтернатива} [ELSE ПослОператоров] END.Альтернатива • [СписокМетокВарианта ":"$ПослОператоров]. (!)Пример:CASE i OF0:p:=p OR q; x:=x+У |l:p:=p OR q; x:=x-y |2:p:=p AND q; x:=x*yEND9.6. Цикл с условием продолженияЦикл с условием продолжения определяет повторяющееся исполнение последовательностиоператоров в зависимости от значения логического выражения. Это выражение вычисляется до154очередного исполнения последовательности операторов.
Повторение прекращается, как толькорезультатом этого вычисления становится значение FALSE.$ЦиклПока = WHILE Выражение DO ПослОператоров END.Примеры:WHILE j>0 DOj:=j DIV 2; i: = i+lENDWHILE i#j DOIF i>j THEN i:=i-jELSE j:=j-iENDENDWHlLE(t#NIL)&(t^.ключ#i) DOt:=t^. левыйEND9.7. Цикл с условием окончанияЦикл с условием окончания определяет повторяемое исполнение последовательностиоператоров в зависимости от значения логического выражения. Это выражение вычисляется послекаждого исполнения последовательности операторов, и повторение прекращается, как толькорезультатом этого вычисления становится значение TRUE.