Переменная — наименование, данное некоторому отдельному значению. Это значение может использоваться в выражениях для образования других значений. Его можно изменять посредством операторов присваивания (см. п. 4.2, а также ограничения на использование внешних идентификаторов в п. 5.2.6).
Тип значения данной переменной определяется описанием самой переменной (см. п. 5.1) или соответствующего идентификатора массива (см. п. 5.2).
Индексы
Переменные с индексами именуют значения, которые являются компонентами многомерных массивов (см. п. 5.2).
Каждое арифметическое выражение из списка индексов занимает одну индексную позицию переменной с индексами и называется индексом. Полный список индексов заключается в индексные скобки []. Какая именно компонента массива упоминается при помощи переменной с индексами, определяется по фактическому числовому значению ее индексов (см. п. 3.3)
Каждая индексная позиция воспринимается как переменная типа integer, и вычисление индекса понимается как присваивание значения этой фиктивной переменной (см. п. 4.2.4). Значение переменной с индексами определено только в том случае, когда значение индексного выражения находится в пределах границ индексов массива (см. п. 5.2).
Указатели функций
Синтаксис
<идентификатор процедуры> : : = <идентификатор>
<фактический параметр> : : = <строка> |<выражение>| <ид- ентификатор массива> | <идентификатор переключателя> |
-^идентификатор процедуры>
<строка букв> :: = <буква>/<строка букв> <буква>
<ограничитель параметра> :: | ) <строка букв>:(
<список фактических параметров> :: = <фактический пара- метр> I <список фактических параметров> <ограничитель параметра> <фактический параметр>
<совокупность фактических параметров> : : = <пусто> (<спи- сок фактических параметров>)
<указатель функции> : : = <идентификатор процедуры> <со- вокупность фактических параметров>
Примеры5
SIN (А—В)
J (V + S, N)
R
S(T—5) температура: (Т) давление: (Р)
COMPILE (':=’) STACK : (Q)
Семантика
Указатели функций определяют отдельные числовые или логические значения, которые получаются в результате применения заданных совокупностей правил, определяемых описанием процедуры (см. п. 5.4), к фиксированным совокупностям фактических параметров. Правила, регулирующие задание фактических парамет* ров, дамы в п. 4.7. Не каждое описание процедуры определяет значение какого-либо указателя фупкпии.
Стандартные функции
(См. п. 6.1).
Арифметические выражения
Синтаксис
<знак операции типа сложения> : : = + / —
<знак операции типа умножения>: : = Х|/
<первичное выражение> :: = <число без знака>) <перемен- ная> I <указатель функции> / (<арифметическое выражение >)
<множитель> : : = <первичное выражением»! <множитель>| <первичпое выражение>
<терм> : : = <множитель>| <терм><знак операции типа ум- Н0ЖЄНИЯ> <МіН0ЖИТЄЛЬ>
<простое арифметическое выражение> :: = <терм> | <знак операции типа сложения> <терм> | <простое арифметическое выражением» <знак операции типа сложениям» <термМ» <условие> :: = if <логическое выражением» then <арифметическое выражение> : : = <простое арифметическое выражение> I <услов.ие> <простое арифметическое выражением» else <арифметическое выражение>
Примеры
Первичные выражения
7.39410—8
SUM
W[I + 2,8]
COS (Y + XX3) ,
(A—3/Y + VU fS)
Множители:
OMEGA
SUM t COS(Y + ZX3)
7.39410—8 f W[l+2,8] f (A—3/Y + VU f 8)
Термы:
U
OMEGAXSUM t COS(Y + ZX3)/7.394io—8 f
W[I + 2,8] t (A—3/Y + VU t 8)
Простое арифметическое выражение:
U—YU + OMEGAXSUM fCOS(Y + Zx3)/
7.39410—8 T W[I + 2,8] ? (A—3/Y + VU f 8)
Арифметические выражения:
WXU—Q(S + CU) t 2
ifQ>0 then S + 3XQ/A else 2XS + 3XQ
ifA<0 then U + V else if AXB>17
then U/V else if K¥=Y then V/U else 0
AXSIN (OMEGAXT)
2 Зак. 1485
0.57i012XA[NX (N—1 )/2,0]
(AXARCTAN (Y)+Z) t (7 + Q)
if Q then N—1 else N
if A<0 then Л/B else if D = 0 then В/A else Z
Семантика
Арифметическое выражение является правилом для вычисления числового значения. В случае простых арифметических выражений это значение получается посредством выполнения указанных арифметических операций над фактическими числовыми значениями первичных выражений, входящих в данное выражение (см. п. 3.3.4).
Что такое фактическое числовое значение первичного выражения, ясно в случае чисел. Для переменных оно является текущим значением (последним по времени присвоенным значением), а для указателей функций оно является значением, полученным по правилам вычислений, определяющих процедуру (см. п. 5.4.4), примененным к текущим значениям параметров процедуры, заданных в выражении. Наконец, значение арифметического выражения, заключенного в скобки, совпадает со значением арифметического выражения, полученного из исходного удалением заключающих его скобок. В конечном счете это значение должно выразиться посредством рекурсивного анализа, исходя из значений ос- тальпых трех видов первичных выражений. Значение арифметического выражения <условие> <простое арифметическое, выра- жепие> else <арифметическое выражение> определяется следующим образом.
Вычисляется фактическое значение логического выражения (см. п. 3.4), входящего в условие. Если это значение есть true, то значение рассматриваемого арифметического выражения определяется как значение простого арифметического выражения, стоящего между условием и ограничителем else . Если же вычисленное значение логического выражения есть false , то значение исходного арифметического выражения определяется как значение арифметического выражения, следующего за ограничителем else . Однако в обоих случаях значению исходного арифметического выражения приписывается тип согласно п. 3.3.4.4.
Операции и типы
Составные части простых арифметических выражений (не считая логических выражений, употребляемых в условиях) должны иметь тип real или integer (см. и. 5.1). Смысл основных операций и типы выражений, к которым они приводят, определяются следующими правилами.
Знаки операций +, — и X имеют обычный смысл (сложение, вычитание и умножение). Результат имеет тип integer, если оба операнта имеют тип integer, в противном случае — real.
Операция <терм>/<множитель> означает деление, понимаемое как умножение терма на обратную величину множителя с соответствующим учетом правил старшинства (см. п. 3.3.5). Таким образом, например
a/bX7/(p—q) Xv/s
означает
( ( ( (аХ(Ь~‘) )Х7)Х( (р-q)”1) )Xv)X(s~').
Знак операции / определен для всех четырех комбинаций типов real и integer и в любом случае результат типа real.
Операция <множитель> 4 Спервичное выражение> означает возведение в степень, где множитель есть основание, а первичное выражение — показатель степени. Таким образом, например,
2 ) п t к означает (2”)к,
тогда как
2 f (n t m) означает 2<П™Х
Если писать I вместо выражения типа integer, R вместо выражения типа real, А вместо выражения типа integer или real, а соответствующими малыми буквами (І, г, а) обозначить значения этих выражений, то результат возведения в степень (конечно, в предположении, что 1 и R — первичные выражения, а А — множитель) определяется следующими правилами:
A t I Если i>0, то аХаХ ... Ха (і раз) того же типа, что и А, если I — целое без знака, и типа real в противном случае
Если i=0 и ад=0. то 1 того же типа, что и А. если I — целое без знака, и типа real в противном случае.
Если i<0 и а = 0, то не определено.
Если i<0 и а=/=0, то I/(aXаX . . . Xа) (знаменатель имеет —і множителей) типа reai.
A f R Если а>0, то EXP (rXLN(a) ) типа real.
Если а = 0 и г>0, то 0.0 типа real.
Если а=0 и г<_ 0, то не определено.
Если а<0, то не определено.
Тип выражения if В then Al else А2 есть integer, если Al и А2 оба типа integer, и real в противном случае.
Старшинство операций
Операции в пределах одного выражения выполняются в последовательности слева направо с учетом следующих дополнительных правил.
Согласно синтаксису (см. и. 3.3.1), выдерживается следующий порядок старшинства:
первый: 7
второй: X/
третий: —
Значение выражения между левой скобкой и соответствующей правой скобкой вычисляется самостоятельно и используется в дальнейших вычислениях. Следовательно, желаемый порядок выполнения операций в пределах выражения всегда может быть достигнут соответствующей расстановкой скобок.
Арифметика величин типа real.
Числа и переменные типа real должны интерпретироваться в смысле численного анализа, то есть как объекты, определенные с присущей им конечной точностью. Аналогично в любом арифметическом выражении явно подразумевается возможность отклонения от математически определяемого результата. Тем не менее никакая точная арифметика не определяется и, конечно, считается, что в зависимости от различных конкретных представлений значения арифметических выражений могут вычисляться по-разному. Контроль за возможными последствиями таких различий должен проводиться методами численного анализа. Этот контроль должен рассматриваться как часть описываемого процесса и, следовательно, выражаться в терминах самого языка.
Логические выражения
Синтаксис
<знак операции отношения> : : = < ( < | = 1211 > |#= <отношение> :: = <простое арифметическое выражение> <знак операции отношения> Апростое арифметическое вы- ражение>
<первичное логическое выражение> :: = Алогическое значе- ние> I <переменная> | <указатель функции> | Аотноше- ние> / (<логическое выражение>)
Авторичное логическое выражение> :: = <первичное логическое выражение> I <первичное логическое выражение> Алогический одночлеп> :: = Авторичное логическое выраже- ние> (Алогический одночлен> Д Авторичное логическое вы- ражение>
Алогический терм> :: = Алогический одночлен> (Алогический терм> V Алогический одночлен>
Аимпликация> :: = Алогический терм> | Аимпликация> Э Алогический терм>
Апростое логическое выражение> : : = Аимпликация> I Апро- стое логическое выражение> = Аимпликация>
Алогическое выражение> :: = Апростое логическое выраже- пие> I Аусловие > Апростое логическое выражение> else Алогическое выражение>
Примеры
Х = —2
Y V ./Z Q
А В - 5/Z - D Q f 2
P/QVX=^Y
Q^HAABA JCVDVE ") jF
if K<1 then S>W else HA C
if if if A then В else C then D else F then G else H<K
Семантика
Логическое выражение является правилом для вычисления логического значения. Принципы вычисления полностью аналогичны правилам, данным в п. 3.3.3 для арифметических выражений.
Типы
Переменные и указатели функций, используемые в качестве первичных логических выражений, должны быть описаны как имеющие тип Boolean (см. пп. 5.1 и 5.4.4).
Операции
Отношения принимают значение true в том случае, когда соответствующее отношение удовлетворяется для входящих в него выражений; в противном случае они принимают значение false.
Значения знаков логических операций | (не), А (и), V (или), -j (влечет) и (эквивалентно) даются следующей функциональной таблицей:
ы |
false |
false |
true |
true |
Ь2 |
false |
true |
false |
free |
П ы |
true |
true |
false |
false |
Ы АЬ2 |
false |
false |
false |
true |
bl Vb2 |
false |
true |
true |
true |
Ы23 Ь2 |
true |
true |
false |
true |
bib:.' |
true |
false |
false |
true |
Старшинство операций
Операции в пределах одного выражения выполняются в последовательности слева направо с учетом следующих дополнительных правил:
Согласно синтаксису (см. п. 3.4.1), выдерживается следующий порядок старшинства:
первый: арифметические выражения согласно п. 3.3.5
второй: <<- третий: четвертый: А пятый: /
шестой: седьмой: =с
Применение скобок интерпретируется в смысле, данном в и. 3.3.5.2.
И м е н у ю щ и е в ы р а ж е и и я
Синтаксис
< метка > : : = ^идентификатор>
<идентификатор части> : : = PART / <идентификатор части> <буква> I < идентификатор части> <цифра>
<идентификатор переключателя> :: = <идентификатор >
<указатель переключателя>:: = <идентификатор переключателя > [-Синдексное выражение>]
Сименующее выражение>:: = <метка> [ <идентификатор ча- сти> I <указатель переключателя>
Примеры
Z
Р9
выбрать [N—1]
TOWN [if Y<0 then N else N+ 1]
Семантика
Именующее выражение является правилом для определения метки или идентификатора части. Если именующее выражение есть метка или идентификатор части, то желаемый результат уже получен. Указатель переключателя отсылает к описанию соответствующего переключателя (см. п. 5.3) и по числовому значению его индексного выражения выбирает одну из меток, содержащихся в переключательном списке описания переключателя. Выбор осуществляется пересчетом этих меток слева направо.