ГОСТ 21551-76

ОбозначениеГОСТ 21551-76
НаименованиеЯзык программирования АЛГАМС
СтатусДействует
Дата введения06/30/1977
Дата отмены-
Заменен на-
Код ОКС35.060
Текст ГОСТа

Цена IS коп.

ГОСУДАРСТВЕННЫЙ СТАНДАРТ

СОЮЗА ССР

ЯЗЫК ПРОГРАММИРОВАНИЯ

АЛГАМС

ГОСТ 21551-76

Издание официальное

ГОСУДАРСТВЕННЫЙ КОМИТЕТ СССР ПО СТАНДАРТАМ

Москва

УДК 681.3.065.4:006.354 Группа П85

ГОСУДАРСТВЕННЫЙ СТАНДАРТ СОЮЗА ССР

ЯЗЫК ПРОГРАММИРОВАНИЯ

АЛГАМС

Programming languages ALGAMS

ГОСТ

21551—76

Постановлением Государственного комитета стандартов Совета Министров СССР от 6 февраля 1976 г. № 353 срок действия установлен

с 01.07.1977 г. до 01.07.1982 г.

Настоящий стандарт устанавливает описание языка программирования АЛГАМСА, предназначенного для автоматизации программирования при решении научных и инженерно-технических задач, а также для обмена алгоритмами.

Установленное настоящим стандартом описание языка АЛ ГАМС должно применяться при создании алгоритмов па языке АЛГАМС и трансляторов с АЛГАМСа.

В алгоритмах на АЛГАМСс должны использоваться только те языковые средства, которые установлены настоящим стандартом.

Транслятор с АЛГАМСа должен обеспечивать трансляцию любого алгоритма, разработанного в соответствии с настоящим стандартом.

Указатель определенных в стандарте понятий и синтаксических единиц приведен в справочном приложении 1.

1. СТРУКТУРА ЯЗЫКА

Назначением алгоритмического языка является списание вычислительных процессов. Описания правил гы числений основываются на хорошо известном понятии арифметического выражения, соде ржа ни'го в качестве составных частей числа, переменные и функции. Из таких выражений п^тсм применения правил апифме-

I К I U[ 1 fо соч пггия npun 'зон1 1 и сП|);моччь \

Издание официальное ★

я-;ыкл АЛГ\.МС и его отличил от язпка АЛГОЛ-60 приложениям 4 и 3.

Перепечатка воспрещена

Переиздание. Февраль 1979 г.

©Издательство стандартов, 1979

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

Для того, чтобы указать ход вычислительных процессов, добавляются некоторые неарифметические и условные операторы, которые могут, например, описывать альтернативы или циклические повторения вычислительных операторов. Ввиду того, что для функционирования этих операторов возникает необходимость их взаимосвязи, операторы могут снабжаться метками. Чтобы образовать составной оператор, последовательность операторов можно заключить в операторные скобки begin* и end.

Операторы дополняются описаниями, которые сами по себе не являются предписаниями о вычислениях, но информируют транслятор о существовании и некоторых свойствах объектов, фигурирующих в операторах. Этими свойствами могут быть, например, класс чисел, используемых в качестве значений переменной, размерность массива чисел или даже совокупность правил, определяющих некоторую функцию. Последовательность описаний и следующая за ней последовательность операторов, заключенные между begin и end, составляют блок. Каждое описание вводится в блоки таким путем и действительно только для этого блока.

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

Ниже будут приведены синтаксис и семантика языка

1.1. Формализм для синтаксического описания Синтаксис описывается с помощью металингвистических формул. Их интерпретацию лучше всею можно обьяснить на примере: :: ( I [ i ( i

Последовательности знаков, заклю кмшые в скобки , представляют собой металингвистические переменные, значениями которых являются последовательности символов. Знаки и 1 (последний со значением «или») —это мсi алингвистическис связки. Любой знак в формуле, который нс является переменной или связкой, обозначает самого себя (или класс знаков, ему подобных). Соединение знаков и (или) переменных в формуле означает соединение обозначаемых последовательностей. Заким образом, формула, приведенная выше, задает рекурсивное правило для обра

* Соответствие меж ту английскими и русскими служебными словами указа if о в справочном приложении 2

^ It hi утверждаемы1 чго точность арифметических действий, вообще говоря, ие указана, тли когда результат некоторого процесса остается или объявляется неопределенным, следует понимать, что программа станет полностью определять некоторый вычислительный процесс только в том случае, если дополнительная информация укажет как подразумеваемые точность и вид арифметических действий, так и последовательность выполняемых действий для всех случаев, которые могут встретиться в процессе вычислений.

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

[ ( ( ( м 3 7 (

( 1 2 3 4 5 (

( ( (

[ 8 6

Чтобы облегчить изучение, символы, используемые для различения металингвистических переменных (то есть последовательностей знаков, стоящих внутри скобок , подобно ab, в приведенном выше примере), выбраны в виде слов, приблизительно описывающих природу соответствующей геременпой. Там, где слова, введенные таким способом, используются где-либо в тексте, они всегда, если не оговорено противное, относятся к соответствующему синтаксическому определению. Кроме того, некоторые формулы приведены по нескольку раз.

Определение:

:: =

(то есть строка, не содержащая символов).

2. ОСНОВНЫЕ СИМВОЛЫ, ИДЕНТИФИКАТОРЫ, ЧИСЛА И СТРОКИ.

ОСНОВНЫЕ ПОНЯТИЯ

Язык строится из следующих основных символов:

:.= ква> | | раничитель>

2.1. Буквы : : =

Л | В | С | D | Е | F | О | 11111 J | К | L | М | N | О | Г |0 | [ S | Т |Е|\ | W|X|Y|Z

Буквы нс имеют индивидуально!о смысла. Они используются для образования идентификаторов и строк (см. пи. 2.4 и 2.6;.

2.2. Цифр ы. Л о 1 и ч с с к и с з и а ч с л и я 2.2 1. Цифры

: : = 0 [ 1 | 2 | 3 | 4 | Ъ | 6 \7 ] 8 j 9

Цифры используются для образования чисел, идентификаторов и строк.

2.2.2. Логические значения

: : = true I false Логические значения имеют фиксированный очевидный смысл*.

2.3. Ограничители

;: = / f J t <слецификаторХ ;: — | <знак операции отношениях/ <зпак логической операциях!

:: — + j — 1X1/

<знак операции отношениях:: = < | . | >

<знак логической операцииХ:: = лее I да I V I A I П <знак операции следованиях = go to |if | then [else |f or [do :: = , |.(1()|: ||: =| ■—-|step (until (while | comment < скобках :-=(|)|[|]|<|,| begin ( end

<очисательХ :: = Boolean (integer [real [array [switch | procedure Спецификатор X :: — string [ label | value

Ограничители имеют фиксированный смысл, который в большинстве случаев очевиден*, а в остальных случаях будет указан ниже. Пробел или переход на новую строку, в языке не принимаются во внимание. Однако для облегчения чтения их можно свободно использовать

Для возможности включения текста между символами программы имеют место следующие правила для примечании:

Пос if дон п ( л поен, о и' вш I ч сим к кni ч )к i леи г i

; comment <лгобля noCj;eioBaTe.ibhocTb, i е содержащая символа “XX;

begin comment ; begin

end < побая последовательность, нс со цлч ” сом

вола , end44, , ни символа “ , ни ciimbohi , else > end

Эквивалентность здесь озшчлег, что ,лобуо из ipe\ конструкций, указанных в левой колонке, есп i ' ча всгрсчаскч вис некоторой строки, молпю заменять сочне к [ ид ющпм сн символом, у лизанным в правой колонке Эга замена пг оказывает пик кчого влияния на работу программы. При ькы считается, что конструкцию примечания, встретивши юсч р'чл>1го грк чтении текста слева направо, следует заменять пред п , не ко ш более поздние конструкции, содержащиеся в этой плекю юга с. ьпости.

* Перевод английская слов, тображ'лощчх j чт, основных; символов* go to — перейти к, if— ос ьь then — io, else— иначе, * — дл ь do— выполнить, step шаг, until— до, while— пока, comment— примечание, begin— начало, end — конец, Boolean— булевский, или логический, integer— целый, real вещественный, array— массив, switch— переключатель, procedure— процедура, string — строка, label—■ метка, value— значение

2.4. Идентификаторы

2.4.1. Синтаксис

^идентификатор> :: = | -Идентификатор> | j

2.4.2. Примеры

Q

SOUP

V17A

A34KTMNS

MARILYN

2.4.3. Семантика

Для описания языка удобно под термином идентификатор понимать не только определенную в п. 2.4.1 и дальнейшим синтаксисом синтаксическую единицу, по и специальные последовательности букв и цифр, начинающиеся с букв ЕХ или PART и изображающие синтаксические единицы (пп. 3.1.1 и 5.2.6) и (пи. 4.1.1 и 4.1.3).

Идентификаторы не имеют неизменно присущего им смысла, а служат для обозначения простых переменных, массивов, меток, идентификаторов части, процедур и формальных параметров. Их можно выбирать произвольно (рекомендуется при этом учитывать разд. 6, а также указанные в пп. 4.1.3 и 5.2.6 ограничения на употребление идентификаторов с первыми буквами ЕХ или PART).

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

2.5. Ч и с л а

2.5.1. Синтаксис

: : = | <ци-

фра>

: :[ -г

::= .

: : = ю

::== J |

: : = j |

: : = [ Н- [

2.5.2. Примеры

О

177

5384 + 0.7300

—200.084 + 07.43108 9.3410+1О 2\о—4

—,083ю—02 —к)7

ю~4 + ю + 5

2.5.3. Семантика

Десятичные числа имеют свой обычный смысл. Порядок — это масштабный множитель, выраженный как делая степень десяти. 2 5.4. Типы

Целые имеют тип integer. Остальные числа имеют тип real (п. 5.1).

2.6. Строки

2.6.1. Синтаксис

:: = ‘ ’ |

2.6.2. Пример

THIS ujISl^A STRING'

2.6.3. Семантика

Для того, чтобы в языке можно было иметь дело с произвольными последовательностями основных символов, введены кавычки для строк: 'и'. Символ l_j обозначает пробел. Вне строк он не имеет смысла.

Строки используют в качестве фактических параметров процедур (см. пп. 3.2 и 4.7).

2.7. Величины, классы и области действия

Различают следующие классы величин: простые переменные,

массивы, метки, идентификаторы части, переключатели и процедуры

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

2.8. Значения и типы

Значение — некоторое упорядоченное множество чисел (частный случай: отдельное число), некоторое упорядоченное множество логических значений (частный случай: отдельное логическое значение) или некоторая метка (идентификатор части).

Некоторые синтаксические единицы обладают значениями. Во время выполнения программы эти значения могут изменяться. Значения выражений и их составных частей определяются в разд. 3. Значение идентификатора массива есть упорядоченное множество значений соответствующего массива переменных с индексами (см. п. 3.1.4.1).

Различные типы (integer, real, Boolean) в основном обозначают свойства значений. Типы, связанные с синтаксическими единицами, относятся к значениям этих единиц.

3. ВЫРАЖЕНИЯ

В языке АЛГАМС первичными составными частями программ, описывающих алгоритмические процессы, являются арифметические, логические и именующие выражения. Составными частями этих выражений, помимо некоторых ограничителей, являются логические значения, числа, переменные, указатели функций, элементарные арифметические и логические операции, а также некоторые операции отношения и следования. Поскольку синтаксическое определение как переменных, так и указателей функций содержит выражения, определение выражений и их составных частей по необходимости является рекурсивным.

:: = ) |

3.1. Переменные

3.1.1. Синтаксис

:: = :: = :: =

:: = / ,

:: = |

:: = ЕХ| |

:: = []

: : = |

3.1.2. Примеры

EPSILON

DELTA

А17

Q

X[SIN(NXPI/2),Q[3, N, 4]]

3.1.3. Семантика

Переменная — наименование, данное некоторому отдельному значению. Это значение может использоваться в выражениях для образования других значений. Его можно изменять посредством операторов присваивания (см. п. 4.2, а также ограничения на использование внешних идентификаторов в п. 5.2.6).

Тип значения данной переменной определяется описанием самой переменной (см. п. 5.1) или соответствующего идентификатора массива (см. п. 5.2).

3.1.4. Индексы

3.1.4.1. Переменные с индексами именуют значения, которые являются компонентами многомерных массивов (см. п. 5.2).

Каждое арифметическое выражение из списка индексов занимает одну индексную позицию переменной с индексами и называется индексом. Полный список индексов заключается в индексные скобки []. Какая именно компонента массива упоминается при помо* щи переменной с индексами, определяется по фактическому числовому значению ее индексов (см. п. 3.3)

3.1.4.2. Каждая индексная позиция воспринимается как переменная типа integer, и вычисление индекса понимается как присваивание значения этой фиктивной переменной (см. п. 4.2.4). Значение переменной с индексами определено только в том случае, когда значение индексного выражения находится в пределах границ индексов массива (см. п. 5.2).

3.2. Указатели функций

3.2.1. Синтаксис

: : =

: : = | J | |

:: — / : : —, j ) : ( : : = /

: : = ()

: : =

3.2.2. Примеры*

SIN (А—В)

J (V + S, N)

R

S(T—5) температура: (Т) давление: (Р)

COMPILE (*:=') STACK : (Q)

3.2.3. Семантика

Указатели функций определяют отдельные числовые или логические значения, которые получаются в результате применения заданных совокупностей правил, определяемых описанием процедуры (см. п. 5 4), к фиксированным совокупностям фактических параметров. Правила, регулирующие задание фактических парамет*

* В данном примере и далее в некоторых случаях, когда идентификатор имеет мнемоническое значение, он записывается русскими словами. При этом будет предполагаться, что алфавит расширен введением строчных русских букв.

ров, да|Ны в п. 4.7. Не каждое описание протт^т^ры определяет значение какого-либо указа ю^я (Ь'нпс™!’!

3.2.4. Стандартные финкгрщ (См. п. 6.1).

3 3. Арифметические выражения

3.3.1. Синтаксис

: : = + / —

: : = X / /

: : = | | / (<арифметическое выражение^

: : = | f

: : = |

:: = | | : : = if then : : = | else

3 3.2. Примеры Первичные выражения 7.39410—8 SUM W[I + 2,8]

COS (Y + XX3)

(А—3/Y + VU t 8)

Множители:

OMEGA

SUM t COS(Y-bZX3)

7.394ю—8 f W[1 +2,8] f (A—3/Y + VU f 8)

Термы

U

OMEGAXSUM f COS(Y + ZX3)/7.394i0—8 f

W[ 1 + 2,8] t (A—3/Y + VU t 8) Простое арифметическое выражение U—YU +OMEGAXSUM fCOS(Y + Zx3)/

7.39410—8 t W[I + 2,8] T (A—3/Y + VU f 8)

Арифметические выражения:

WXU—Q(S + CU) t 2

ifQ>0 then S + 3XQ/A else 2XS + 3XQ

if A 17

then U/V else if K+=Y then V/U else 0 AXSIN (OMEGAXT)

2 Зак 1485

0.571012XA[NX (N — 1)/2,0]

(AxARCTAN (Y)+Z) t (7 + Q)

if Q then N—-1 else N

if АжО then A/В else if D = 0 then В/A else Z

3.3.3. Семантика

Арифметическое выражение является правилом для вычисления числового значения. В случае простых арифметических выражений это значение получается посредством выполнения указанных арифметических операций над фактическими числовыми значениями первичных выражений, входящих в данное выражение (см. п. 3.3.4).

Что такое фактическое числовое значение первичного выражения, ясно в случае чисел. Для переменных оно является текущим значением (последним по времени присвоенным значением), а для указателен функций оно является значением, полученным по правилам вычислений, определяющих процедуру (см. гт. 5.4.4), примененным к текущим значениям параметров процедуры, заданных в выражении. Наконец, значение арифметического выражения, заключенного в скобки, совпадает со значением арифметического выражения, полученного из исходного удалением заключающих его скобок. В конечном счете это значение должно выразиться посредством рекурсивного анализа, исходя из значений остальных трех видов первичных выражений. Значение арифметического выражения else определяется следующим образом.

Вычисляется фактическое значение логического выражения (см. п. 3.4), входящего в условие. Если это значение есть true, то значение рассматриваемого арифметического выражения определяется как значение простого арифметического выражения, стоящего между условием и ограничителем else . Если же вычисленное значение логического выражения есть false , то значение исходного арифметического выражения определяется как значение арифметического выражения, следующего за ограничителем else . Однако в обоих случаях значению исходного арифметического выражения приписывается тип согласно п. 3.3.4.4.

3.3.4. Операции и типы

Составные части простых арифметических выражений (нс считая логпчегщ’Т выражении, употребляемых в условиях) должны иметь тип -са! иди i Седег (см. и. 5.1). Смысл основных операций и тины выражении, к которым они приводят, определяются следующими правилами.

3.3.4.1. Злаки операций -Ь, — и X имеют обычный смысл (сложение, вычитание п умножение). Результат имеет тип integer, если оба операнта имеют тип integer, в противном случае — real.

3.3.4.2. Операция / означает деление, понимаемое как умножение терма на обратную величину множителя с соответствующим учетом правил старшинства (см. п. 3.3.5). Таким образом, например

а/ЬХ7/(р—q) Xv/s

означает

( ( ( (aX(b-«) )Х7)Х( (p-q)-1) )Xv)X(s-').

Знак операции / определен для всех четырех комбинаций типов real и integer и в любом случае результат типа real.

3.3.4.3. Операция f Спервичное выражение> означает возведение в степень, где множитель есть основание, а первичное выражение — показатель степени. Таким образом, например,

2 Т n t к означает (2г1)к,

тогда как

2 f (n f ш) означает 2<лт\

Если писать I вместо выражения типа integer, R вместо выражения типа real, А вместо выражения типа integer или real, а соответствующими малыми буквами (i, г, а) обозначить значения этих выражений, то результат возведения в степень (конечно, в предположении, что I и R — первичные выражения, а А — множитель) определяется следующими правилами:

A t I Если i>0, то аХаХ ... Ха (i раз) того же типа, что и А, если I — целое без знака, и типа real в противном случае Если i=0 и а^=0, то 1 того же типа, что и А, если I — целое без знака, и типа real в противном случае.

Если i<0 и а = 0, то не определено.

Если i<0 и афО, то 1/(аХаХ ... Ха) (знаменатель имеет —i множителей) типа real.

A f R Если а>0, то EXP (rXLN(a) ) типа real.

Если а = 0 и г>0, то 0.0 типа real.

Если а = 0 и г_ 0, то не определено.

Если а<0, то не определено.

3.3.4.4. Тип выражения if В then A) else А2 есть integer, если А1 и А2 оба типа integer, и real в противном случае.

3.3.5. Старшинство операций

Операции в пределах одного выражения выполняются в последователе носги слева направо с учетам следующих дополшыель-пых правил.

3.3.5.1. Согласно синтаксису (см. и. 3.3.1), выдерживается следующий порядок старшинства:

первый: у второй: X третий: -Ь —

о

3.3.5.2. Значение выражения между левой скобкой и соответствующей правой скобкой вычисляется самостоятельно и используется в дальнейших вычислениях. Следовательно, желаемый порядок выполнения операций в пределах выражения всегда может быть достигнут соответствующей расстановкой скобок.

3.3.6. Арифметика величин типа real.

Числа и переменные типа real должны интерпретироваться в смысле численного анализа, то есть как объекты, определенные с присущей им конечной точностью. Аналогично в любом арифметическом выражении явно подразумевается возможность отклонения от математически определяемого результата. Тем не менее никакая точная арифметика не определяется и, конечно, считается, что в зависимости от различных конкретных представлений значения арифметических выражений могут вычисляться по-разному. Контроль за возможными последствиями таких различий должен проводиться методами численного анализа. Этот контроль должен рассматриваться как часть описываемого процесса и, следовательно, выражаться в терминах самого языка.

3.4. Логические выражения

3.4.1. Синтаксис

: : = А | А | = | А I А I А : : = Апростое арифметическое выражение^

: : = I | | Аотноше-ние> / ()

: : = | j Алогический одночлен> : : = / А

Алогический терм> :: = Алогический одночлен>/Алогический терм> V Алогическим одночлен>

Аимпликация> Алогический терм> | Аимпликация> Э Алогический терм>

Апростое логическое выражение> : : = Аимпликация> | Апро-стое логическое выражение> = Аимпликация>

Алогическое выражепие> :: = Апростое логическое выраже-иие> / Аусловие > Апростое логическое выражение> else Алогическое выражение>

3.4.2. Примеры Х = — 2

Y V /Z Q

A-I-B 5/\Z D Q f 2

PAQVX^Y

Q ”]ЛДВ л. 1CVDVE ; |F if KW else H< С

if if if A then В else C then D else F then G else H

3.4.3. Семантика

Логическое выражение является правилом для вычисления логического значения. Принципы вычисления полностью аналогичны правилам, данным в п. 3.3.3 для арифметических выражений.

3.4.4. Типы

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

3.4.5. Операции

Отношения принимают значение true в том случае, когда соответствующее отношение удовлетворяется для входящих в него выражений; в противном случае они принимают значение false.

Значения знаков логических операций -) (не), А (и), V (или), тэ (влечет) и = (эквивалентно) даются следующей функциональной таблицей:

ы

false

false

true

true

Ь2

false

true

false

true

П ы

true

true

false

false

Ы ДЬ2

false

false

false

true

Ы\/Ъ2

false

true

true

true

ЫЭЬ2

true

true

false

true

Ы - Ь2

true

false

false

true

3.4.6. Старшинство операций

Операции в пределах одного выражения выполняются в последовательности слева направо с \чегом следующих дополнительных правил:

3.4.6.1. Согласно синтаксису (см. п. 3.4.1), выдерживается следующий порядок старшинства:

первый: арифметические выражения согласно п. 3.3.5

второй: ц<~

третий: П

четвертый: Д пятый: V

шестой. цо

седьмой:

3.4.6.2. Применение скобок интерпретируется в смысле, данном в п. 3.3.5.2.

3.5. Имей у ю Щ не в ы р а ж е н и я

3.5.1. Синтаксис

: : =

<

: : =PART / / : : =

: : = <идентификатор переключателя^- []

:: = J «^идентификатор ча-сти> I

3.5.2. Примеры

2

Р9

выбрать [N—1]

TOWN [if Y<0 then N else N+lj

3.5.3. Семантика

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

3.5.4. Индексное выражение

Вычисление значения индексного выражения аналогично такому же вычислению для переменных с индексами (см. п. 3.1.4.2). Значение указателя переключатели определено только в том случае, когда индексное выражение принимает одно из положительных значений 1, 2, 3, п, где и — число членов в переключа

тельном списке.

4. ОПЕРАТОРЫ

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

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

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

Евиду того, что последовательности операторов могут группироваться в составные операторы и блоки, определение оператора

по необходимости должно быть рек\реивиым. Кроме того, поскольку описания, которые даны в разд. 5, существенно входят в синтаксическую структуру, синтаксическое определение операторов должно предполагать, что описания уже определены.

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

4.1.1. Синтаксис

: : =<опсратор присваивания^ | j

:: = f :

:: = <ооновнон оператору) j

: : = / j

:: ( ;

<начало блока begin 1 ;

Д непомеченный составной >: : = begin end

: : — ; end

: : = [ : =

: : = I :

j : ~

: : = j

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

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

блок:

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

При этом ну ясно помнить, что каждый из операторов S в твою очередь, быть составным оператором или блоком, пере 1 iвосточней в любом операторе (основном, составном, блоке, \и чипом и никло), а таг^,е идентификатор '.'астн в блоке по

может

Метка

Viеч,,f , еоответеч' ющпп гпулну.

Д! ПримерI ' оепимтыс оперши

go to NAPLES

START : CONTINUE : W : = 7.993

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

begin Х: = 0; for Y:= 1 step 1 until N do X = X + A[Y];

if X>Q then go to STOP else if X>W—2 then go to S;

AW:ST:W: = X + BOB end

блок:

Q: begin integer I, K; real W;

for I:=l step 1 until M do

for K: = I-|-1 step 1 until M do

begin W:=A[I, К]; A[I, K]: = A[K, I]; A[K, I]: = W

end FOR I ANDK

end BLOCK Q

4Л.З. Семантика

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

Поскольку в языке имеются стандартные процедуры и функции (см. разд. 6), и наряду с блоком новый уровень обозначений может быть введен как описанием процедуры, так и телом процедуры, то для объяснения правил локализации введем некоторые фиктивные блоки. Во-первых, будем считать, что программа содержится в некотором объемлющем фиктивном блоке, внутренность которого и есть вся программа. Во-вторых, будем считать каждое описание процедурна (см. п. 5.4) фиктивным блоком, внутренность которого начинается с совокупности формальных параметров в заголовке описания этой процедуры, точнее, что начинающие описание процедуры описатель типа (если он есть), описатель procedure и идентификатор описываемой процедуры как бы составляет открывающую скобку begin фиктивного блока, в то время, как закрывающая скобка end этого блока подразумевается непосредственно перед точкой с запятой, следующей за описанием рассматриваемой процедуры. В-третьих, будем считать каждое тело про-це 1,уры внутренностью фиктивного блока, подразумевая непосредственно пере i телом процедуры и непосредственно за ним со-(пвегсгвуюшие скобки begin и end. Для двух любых блоков, включая фиктивные, справедливо утверждение о том, что либо они не пересекаются, либо один из них содержится в другом. Понимая под гермином блок щж определенные синтаксисом п. 4.1.1 блоки, так и только что описанные фиктивные блоки, можно сформулировать правила локализации идентификаторов следующим образом.

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

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

Специальный идентификатор LIBRARY (см. пп. 5.4.1 и 5.4.3) и и щптификаторы стандартных процедур и функций (см. разд. 6) локальны в самом внешнем фиктивном блоке. Локализация идентификаторов простых переменных, массивов, переключателей и процедур (кроме стандартных) осуществляется описаниями (см. разд. 5) в начале соответствующего блока. В блоке локализуются также идентификаторы меток и идентификаторы частей, помечающие те операторы, которые лежат влутри данного блока, по не лежат внутри блока, содержащегося внутри данного блока. Наконец, в фиктивном блоке, возникающем из описания процедуры, локализуются идентификаторы формальных параметров из соответствующей совокупности формальных параметров. В фиктивном блоке, возникающем из тела процедуры, могут быть локальны лишь идентификаторы меток и идентификаторы частей.

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

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

4.2.1. Синтаксис

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

: — |

: : = |

4.2.2. Примеры

S: = P[0]: = N: = N+1+S N: = N + 1

A: = B/C-V-QXS

S[V, K + 2] : =3 ARCTAN (TXZETA)

V: = Q>Y V Z

4.2.3. Семантика

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

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

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

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

4.2.4, Типы

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

ENTIER (Е + 0.5),

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

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

4.3.1. Синтаксис

::= goto Сименующее выражение^

4.3.2. Примеры go to L8

go to EXIT [N+l]

go to TOWN [ifY

4.3.3. Семантика

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

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

4.3.4. Ограничение

В силу правил локализации меток ни один оператор перехода не может извне вести к метке внутри блока. Однако оператор перехода может вести извне к метке внутри составного оператора или внутри условного оператора (см. пп. 4.5.4 и 4.6.6).

4.4. Пустые оператор ы

4.4Л. Синтаксис

: : =

4.4.2. Примеры

L:

begin . . . ; JOHN : end

4.4.3. Семантика

Пустой оператор не выполняет никакого действия. Он может служить для помещения метки.

4.5. Условные операторы

4.5.1. Синтаксис

: : = if then : : = | |

:: = : : = | else / :

4.5.2. Примеры if Х>0 then N:==N+1

if V>U then W:Q: = N + M else go to R if S<0 V PS—1 then go to ST

4.5.3. Семантика

Условные операторы приводят к пропуску или выполнению некоторых операгоров в зависимости от текущих значений указанных логических выражении. Согласно си и такс! icy возможны две различные формы условных операторов: укороченный условный оператор if В then S полный условный оператор if В then SI else S2. Здесь В—логическое выражение, S -безусловный оператор или оператор цикла, S1—безусловный оператор и S2 — оператор.

Вели текущее значение логического выражения В есть true, то выполнение укороченного условного оператора сводится к выполнению оператора S, а 'выполнение полного условного оператора к

выполнению оператора S1. Если же текущее значение логического выражения В есть false , то в случае укороченного условного оператора действия продолжаются так, как будто он был пустым оператором, а в случае полного условного оператора его выполнение сводится к выполнению оператора S2. Во всех случаях преемник условного оператора определяется общими правилами, то есть так, как будто на месте условного оператора стоял один из операторов S, SI, S2 или пустой оператор в соответствии с тем или иным из описанных выше случаев.

В силу описанного действие огранич ителя else в полном условном операторе можно охарактеризовать, сказав, что он определяет в качестве преемника оператора, за которым этот ограничитель следует, оператор, который надо выполнять за ^ )01ве1С1В)ющпм полным условным оператором.

Для дальнейших пояснений используем следующую схем\ с очевидными обозначениями

оператор выполнен t

if B1 then SI else if B2 then S2 else S3

ВI ложно B2 ложно

i 5 4. Переход внутрь условного оператооа

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

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

4.6.1. Синтаксис

:: = | step until | while

: : = / ,

: : = for

: — do

: : = |

:

4.6.2. Примеры

for Q: = 1 step S until N do A [Q]: = В [Q]

for К: = 1, V1 X 2 while V1 < N do

for J: =I-fG, L, 1 step 1 until N, C + D do

A[K, J]:=B[K, J]

4.6.3. Семантика

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

1 г

начало, проверка; оператор S; продвижение; преемник

i_1

список цикла исчерпан

В этой схеме слова означают: «начало» — произвести первое присваивание в заголовке цикла; «продвижение» — произвести очередное присваивание в заголовке цикла, слово «проверка» определяет, было ли сделано последнее присваивание Если оно сделано, то выполнение продолжается с преемника оператора цикла. В противном случае выполняется оператор, стоящий за заголовком цикла

4.6.4. Элементы списка цикла

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

4.6.4.1. Арифметическое выражение. Этот элемент задает только одно значение, а именно значение данного арифметического выражения, вычисленное непосредственно перед соответствующим выполнением оператора S.

4 6.4.2. Элемент типа арифметической прогрес-с и и. Элемент, имеющий вид A step L until С, где А, В и С — арифметические выражения, задает порядок выполнения, который наиболее четко можно описать при помощи дополнительных операторов АЛГАМСа следующим образом:

V: = А;

LI:if (V—(С)) XSIGN(B) >0 then go to элемент исчерпан;

оператор S;

V: ~ V + (В);

go to L1;

где V — параметр цикла и «элемент исчерпан» указывает на переход к вычислениям, соответствующим следующему элементу списка цикла, или (если данный элемент типа арифметической прогрессии стоит последним в списке) к следующему оператору программы.

4 6.4.0. Элемент типа пересчета. Порядок выполнения, определяемый элементом списка цикла вида A while В, где А — арифметическое выражение, В—логическое выражение, наиболее четко описывается при помощи дополнительных оператороз АЛГАМСа следующим образом:

L3: V: =А;

if | (B)then go to элемент исчерпан; оператор S; go to L3,

Обозначения те же, что и в п. 4.6.4.2.

4.6.5. Значение параметра цикла после выхода

После выхода из оператора S посредством какого-либо оператора перехода значение параметра цикла будет таким, каким оно было непосредственно перед выполнением оператора перехода.

С другой стороны, если выход вызван исчерпанием списка цикла, то значение параметра цикла после выхода не определено.

4.6.6. Оператор перехода, ведущий в оператор цикла Результат действия оператора перехода, стоящего вне оператора цикла и обращающегося к метке внутри оператора цикла, не определен.

4.7. Операторы процедур

4.7.1. Синтаксис

: : = | | | |

: : = j

:: =,| ) :(

: : = |

: : = j ()

: : =

4.7.2. Примеры

след (А) порядок: (7) результат: (V) транспонирование (W, V+1) абсмакс (A, N, М, \ У, I, К)

скалярное произведение (А[Т, Р, U], B[Pj, Ю, Р,

Эти примеры соответствуют примерам, данным в п 5.4.2

4.7.3. Се маши к а

Оператор процедуры служит для обращения к выполнению тела процедуры (см. п. 5.4). Кроме случаев, когда тело процедуры имеет вид LIBRARY (), результат его выполнения будет эк-

Бивалентен результат} осуществления следующих действий в программе во время выполнения оператора процедуры

4731 Присваивание значении (вызов значением) Всем формальным параметрам, перечисленным в списке значении заголовка описания процедуры, присваиваются значения (см п 2 8) соответствующих фактических параметров Эти присваивания следует рассматривать как выполняемые непосредственно перед входом в тело процедуры Это происходит так, как будто создается объемлющий тело процедуры дополнительный блок (см п 4 1 3), в котором делаются присваивания переменным, локальным в этом фиктивном блоке и имеющим типы, заданные соответствующими спецификациями (см п 5 4 5) В результате переменные, вызываемые значением, следует рассматривать как локальные в этом фиктивном блоке и иелокальиье в теле процедуры (см п 5 4 3)

4732 Замена наименований (вызов по найме и о в а и н ю) Любой формальный параметр, не перечисленный в списке значении, повсюду в теле процедуры заменяется на соответствующий фактическим параметр, после того, как последний там, где это синтаксически возможно, заключен в кругл те скобки Возможность противоречий между идентификаторами, вставляемыми в тело процедуры в результате такого процесса, и идентификаторами, уже прис\ юти}тощичи в т^ле процедуры, устраняется соответствующим I сисгсмагнчес! чми изменениями локальны^ идешифи-каторов, затрон\ты' такими противоречиями

4733 Подстановка и выполнение тела процедуры Тело процедуры, преобразованное как описано выше, помещается па место оператора процедуры и выполняется Если обращение к процедуре произво чпея извне области действия любой встич! па, петокалыюи в геле пропер ры, то противоречия хщжду идентификаторами, включенными посредством этого процесса подстановки тела, и идентификаторами, описания которых имеют силу там, I ж расположен оператор процедуры или \казатель сЬункцип, устраняются посредством соответствующих систематических изменении последних идентификаторов

47 4 Соответствие между фактическими и формальными пара-мет рал и

Соответствие между фактическими параметрами оператора пр >-цед^ры и формальными парамстрами заголовка пропел}ры 3 Td-навливаегся следующим обоазом Список фактических параметров оператора процедуры должен иметь то же число членов, что и список формальных параметров заготовка описания процедуры Соответствие получается сопоставлением членов этих двух списков в одном и том же порядке

4 7 5 Ограничения

Чтобы оператор процедуры был определен, очевидно, необходи мо, чтобы действия над телом процедуры, определенные в пп 4 7 3 1 и 4 7 3 2, приводили бы к правильному оператору в языке АЛГАМС

Это накладывает на любой оператор процедуры ограничения, заключающиеся в том, что класс и тип каждого фактического пара метра должен быть совместим с классом и типом соответствующе го формального параметра Некоторые важные частные случаи этого общего правил: приведены ниже

47 5 1 Гели строка является фактическим параметром операто ра процедуры или указателя функции, для которых соответствую щее тело процедуры является оператором в смысле языка АЛГАМС (а не LIBRARY ()), то эту строку можно использовать в тете процедуры только как фактический параметр в дальнейших обращениях к процедурам В конечном итоге строку можно исиоль ювать только в теле процедуры вида LIBRARY () либо в соответствующих стандартных процедурах

4 752 Формальному параметру, не вызываемому значением и встречающемуся в теле процедуры в виде переменной левой част т некоторою оператора присваивания, может соответствовать в качестве фактического параметра только переменная (частный случай выражения)

4 7 5 3 Формальному параметру, используемому в тете проце-д\ры в качестве идентификатора массива, может соответствовать в качестве фактического параметра только идентификатор массива 7ой же размерности Кроме того, сети формальный параметр вызы вается значением, то локальный массив, возникающий в теле про цедуры во время обращения, получает те же границы индексов, что и фактический массив

4 7 5 4 Формальному параметру вызываемому значением, не может, вообще говоря, соответствовать какой-либо идентификатор переключателя или идентификатор процедуры, или строка так как последние не обла щюг значениями (Исключение составляет идентификатор такой процедуры, описание которой имеет пустую совокупность форма тьных параметров (см п 54 1) и которая онре^е ляеч значение указателя функции (см п 5 4 4) Такой идешифи катор процедуры сам по себе является законченным выражением)

47 5 5 При вызове по наименованию класс и тип фактического параметра дочжпы совпадать с классом и типом соответствующего формального параметра Однако, если при выполнении процедуры не происходит присвоения значения этому параметру, то фактический параметр типа integer может соответствовать формальному параметру типа real.

4 75 6 Не можег произойти обращение к какои-либо проце \у-ре при выполнении операторов тела этой же самой процедуры или

при вычислении тех ее фактических параметров, которым соответствуют формальные параметры, вызываемые по наименованию, или при вычислении выражении, встречающихся в описаниях внутри этой же процедуры

4 7 6. Ограничители параметров

Все ограничители параметров считаются эквивалентными Не устанавливается никакого соответствия меж р ограничителями параметров, используемыми в операторе процедуры, и ограничителями, фигурирующими в заголовке процедуры, кроме того лишь, чго их количество должно быть одинаковым Таким образом, вся информация, которая вносится употреблением сложных ограиичше-леи, полностью избыточна

5. ОПИСАНИЯ

Описания служат для определения некоторых свойств величин, используемых в программе, и связи этих величин с и хентнфикато-рами Описание идентификатора имеет силу только в одном блоке. Вне этого блока го же идентификатор можно использовать для других целей (см п 4 13).

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

В момент выхода из блока (через end или оператор перехода) все идентификаторы, которые описаны в блоке, теряют свои локальный смысл

В программе все идентификаторы простых переменных, массивов перектючателей и процедур (кроме стандартных процедур и функций, (см разд 6) следует описывать при помощи описании Ни один идентификатор в блоке нс должен быть описан более чем охни раз Идентификатор, связанный с величиной некоторым описанием, не может более одного раза встретиться, обозначая эгу величину, между begin блока, в начале которого стоит это описание, ч точкой с запятой, которой оканчивается это описание, за исключением случая, когда имеет место появления идентификатора процедуры в списке левой части оператора присваивания в смысле п 5 4.4.

Синтаксис

: : = / | |

5 1. Описание типа

5.1 1 Синтаксис

: : = / список тппа>

: : = real [integer (Boolean : : =

5.1 2. Примеры

integer Р, Q, S Boolean ACRYL, N

5.1.3. Семантика

Описания типа служат для указания того, что некоторые идентификаторы представляют простые переменные данного типа Переменные, которым описанием дан тип real, MOiyr принимать только положительные и отрицательные значения, включая нуль. Переменные. которым описанием дан тип integer, могут принимать только целые значения. Переменные, которым описанием дан тип Boolean, могут принимать только значения true и false.

В арпфхичичеекчх выражениях любая позиция, занятая переменной типа real, может быть занята и переменной типа integer.

5.2. Описан и я массивов 5 2.1. Синтаксис

: : =- : : =

::=: < верхи я я i pair1 ца >

: : ~ <граничная п | ,

: : = | ,

сегмент массивов>: : =<сгтисок идентификаторов массизов> []

список массивов : : — I -Ссписок массивов >, сегмент массивов>

: : =аггау | аггау

5 2.2. Примеры

array А, В, С |7:N, 2:М], S [—2:10] integer array A fif C<0 then 2 else 1 :20] real array Q[- 7:- 1]

5.2.3. Семантика

В описании массивов опре тслясл ся, что один или несколько идентификаторов представляют многомерные массивы переменных с индексами, и задается размерное кэпь массивов, границы индексов и типы переменных

5.2.3.1. Границы индексов Гранины индексов любого массива задаются в первых индексных скобках, следующих за идентификатором данного массива, в виде списка граничных пар. Каждый жтен этого списка задает шокнюю и верхнюю границы индекса в виде двух арифметических выражений, раз целенных ограничителем. Список граничных нар задает границы всех индексов в порядке их перечисления слева направо.

5.2.3.2. Размерности. Размерности определяются как число членов в списках граничных пар.

5.2.3.3. Типы. Все массивы, данные в одном описании, имеют один и тот же заданный для них тип. Если описатель типа отсутствует, то подразумевается тип гея!.

5.2.4. Выражения для нижних и верхних границ

5.2.4.1. Значения этих выражений вычисляются аналогично значениям индексных выражений (см. п. 3.1.4.2).

5.2.4.2. Эти выражения могут зависеть только от переменных и процедур, не локальных в том блоке, для которого имеет силу данное описание массивов. Из этого следует, что в самом внешнем блоке программы мог\т бьпь описаны массивы только с постоянными границами

5.2.4.3. Массив определен только в том случае, когда значения всех верхних границ индексов не меньше значений соответствующих нижних границ.

5.2.4.4. Значения выражений для границ вычисляются один раз при каждом входе в блок.

5.2.5. Идентичность переменных с индексами

Идентичность переменных с индексами не связана с границами

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

5.2.6. Внешние массивы

Массивы, идентификаторы которых являются внешними шеи-тификаторами (идентификаторами, начинающимися с букв ЕХ). могут быть размещены транслятором во внешней памяти Внешний идентификатор массива, так же как и переменная с интсксамп, имеющая внешний идентификатор в качестве идентификатора массива, может употребляться только как фактический параметр. Доступ к элементам внешних массивов возможен только через оператор процедуры COPY (см. п. 6.2).

5.3. Описания переключателей

5.3.1. Синтаксис

: : = | ,

: ; = switch : : = .

5.3.2. Пример

switch Q: =Р1, W

5.3.3. Семантика

Описание переключателя задает значения, соответствующие идентификатору переключателя. Эти значения задаются как метки, входящие в переключательный список, с каждой из которых сопоставляется целое положительное число 1, 2, ... , получаемое пересчетом элементов списка слева направо. Значение указателя переключателя, соответствующее заданному значению индексного выражения (см. п. 3.5), есть метка в переключательном списке, имеющая заданное значение своим порядковым номером.

5.3.4. Влияние областей действия

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

5.4. Описания процедур

5.4.1. Синтаксис

:: =

: : = |

: : = ( ()

; : = | ,

: : — value Ссписок идептификаторов>;|

: : = string /) array / array/label | switch |procedure [ procedure : : = | ;| ; : : = ;

: — | LIBRARY ()

::= ргосес!иге / procedure

5 4 2 Примеры

procedure след (А) порядок (N) результат (S), value N, array A, integer N, real S, begin integer K,

S.=0,

for К: = 1 step 1 until N do S: = S + A[K, K] end

procedure транспонирование (А) порядок (N), value N, array A, integer N, begin real W, integer I, K, for Г = 1 step 1 until N do

for К: = 1 + 1 step 1 until N do begin W: = A [I, K],

A[I, K]:=A[K, I],

A[K, I]:-Wend end транспонирования integer procedure шаг (U), real U, шаг = if 0_UAU_1 then 1 else 0

procedure абсмакс (А) размер (N, M) результат (Y) индексы

а Ю,

comment наибольшая из абсолютных величин элементов матрицы А размером N на М передается в Y, а индексы этого элемента передаются в I и К, array A, integer N, М, I, К, real Y, begin integer Р, Q,

Y: =0,

for P — 1 step 1 until N do for Q' = 1 step 1 until M do

if ABS (A[P, Q])>Y then begin Y:=ABS (A[P, Q]),

I * — P, К =Q end end абсмакс

procedure скалярное произведение (А, В ) порядок (К, Р) результат (Y), value К, integer К, Р, real Y, А, В, begin real S, S =0,

for P — 1 step l until К do S — S-bAXB,

Y -S

end скалярного произведения 543 Сечатика

Описание процедуры сл\жит для задания процедуры, связанной с идентификатором процедуры Главной составной частью описания процедуры является оператор или LIBRARY () называемые телом процедуры, к которому может быть произведено обращение посредством указателей функции и (иди) операторов лооцедуры из других мест блока, в начале которого находитсяопи сапие данной процедуры С телом процедуры связан заголовок, который указывает, что некоторые идентификаторы, встречающиеся

в теле процедуры, представляюi формальные параметры В момент обращения к процедуре (см пп 3 2 и 4 7) формальным параметрам в теле процедуры будут присвоены значения фактических параметров, или же они буд\т заменены фактическими параметрами Есл*т идентификатор формального параметра заново локатизован внутри тела процедуры (как это указано в п 4 1 3), то ему придается тем самым локальный смысл и фактические параметры, которые соответствуют такому формальному параметру, недоступны во всей области действия этого внутреннего локального идентификатора

Идентификаторы, нелокальные в теле процедуры, могут быть локальными в блоке, в начале которого находится описание данной процедуры Ни о тин идентификатор не может встречаться более одного раза в списке формальных параметров Идентификатор LIBRARY, если ему не придано труiого смысла, употребляется для указания того, что тело процедуры является кодом В этом случае строка является названием кода (то есть библиотечной программы) Результат обращения к этой процедуре определяется фактическими параметрами и библиотечной подпрограммой название которой помещено в строке Тело процедуры всегда действует подобно блоку (см и 4 1 3) Следовательно, область действия метки, помешющей оператор внутри тела или само тело, никогда не может распространяться за тело процедуры

5 4 4 Значения указателей функций

Для того, чтобы описание процедуры определяло значение указателя функции, необходимо, чтобы внутри тела процедуры встречался один или несколько явных операторов присваивания с идеи тификатором этой процедуры в левой части По крайней мере один из них должен выполняться, и тип идентификатора процедуры должен быть указан включением описателя типа в качестве самого первого символа описания процедуры Последнее значение, присвоенное таким образом используется для дальнейшего вычисления выражения в котором встречается указатель функции Указатели функций в триграмме должны бьпь такими, чтобы все возможные пси т о а I ы злы указателен м операторам

5 4 5 Спецификам и

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

6. СТАНДАРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ

В каждой программе на языке АЛГАМС подразумеваются описанными некоторые стандартные процедуры и функции, перечисленные ниже. Естественно, что обращения к ним возможны только внутри тех блоков, где их идентификаторы не определены в другом смысле.

Списки стандартных процедур и функций в дальнейшем могут быть расширены.

6.1. Стандартные функции

ABS(E) для модуля (абсолютной величины) значения выражения Е

SIGN(E) для знака значения Е(-}-! для Е>0, 0 для Е = 0, -1 для Е<0)

SQRT(E) для квадратного корня из значения Е

LN(E^ для натурального логарифма значения Е

ЕХР(Е) для экспоненциальной функции значения Е (е')

SIN(E) для синуса значения Е

CGS(E) для косинуса значения Е

TAN(E) для тангенса значения Е

ARCSIN(E) для главного значения арксинуса значения Е ARCCOS(E) для главного значения арккосинуса значения Е ARCTAN(E) для главного значении арктангенса значения Е ARC(E1, Е2) для полярного \гла точки с координатами El, Е2;

зпачечпе берется из интервала О ARC<2л;

Е NT (Г. R (Е) д 1 я цел он ч а с т и з i г ч е н и я Е

DIV(El, Е2) для SIGN((E1), (Е2)) XEi\TIER(ABS((Cl)/ (Е2)))

RES (El, Е2) дчг (ЕП— DIVfEl, Е2)Х(Е2)

MAX (El, E2, . . . , EX) для наибольшего из значений выражений Е1, Г2, ...,ЕМ

М1М(ЕЕ Е2, . . . , EN) для наименьшей) из значений выражений

Е1, Г2, . . . , ЕМ.

Функции DW п RES определены зля аргументы*, ыыа integer и принимают значения тина intent- Ост ыьные ф\нации опрел клены как для аргументов итпа real, заь п для аргументов т*ыа ECeger, и принимают значения типа real, ьрп ie фупкщ.ч'г Ы(Х\Т jf ENTIER, которые принимают значения типа л step с г.

6.2. Процедура обмена

6.2.1. Синтаксис

: : —СОРУ (, <идсчгтификагор массивам) / СОРУ (Хидентификатор массивах, )

При Mv Т>1

COP'i (EMAj J -L i,Q], AM COPY(B, EXTfKJ)

6.2.2. Семантика

Процедура СОРУ служит для обмена между внутренними и внешними массивами. Элементы массивов считаются упорядоченными лексикографически по индексам. Переменная с индексами всегча принадлежит внешнему массиву и задает начальный адрес обмена во внешней памяти. Идентификатор массива всегда внутренний. Первый элемент этого массива задает начальный адрес обмена во внутренней памяти. Количество передаваемых элементов динамически определяется описанием внутреннего массива. Передача данных идет от первого фактического параметра ко второму. Типы внешнего и внутреннего массивов должны совпадать.

6.3. Процедуры вывода

6.3.1. Синтаксис

:: = | |

: : =OUTPUT (, , Ссписок объектов вывода>) | OUTPUT (, , <список объектов вы-

вода>)

OUTPUT (, ^логический формат>, )| OUTPUT (, , )

:: = | <список

объектов вывода>,

: : = j

^.оператор вывода текста > ;:= OUTPUT (, (Т\

)| OUTPUT (, , )

: : = /,

: : = |

: : =OUTPUT (, ) | OUTPUT (,,) | OUTPUT (, ^переменная с индексами>)| OUTPUT (, , )

: : = .

6.3.2. Семантика операторов вывода

Операторы вывода задают вывод числовых, логических или тек-

стовы\ данных через канал, номер которого определяется первым фактическим параметром Второй фактический параметр определяет формат вывода (см пп 63 3—6 3 6), а все следующие — объекты вывода Исключение представляет собой оператор размещения (см п 6 3 6), который не имеет объектов вывода Если второй фаюическии параметр есть переменная с индексами, то она сказывает на элемент массива, начиная с которого располагаются целыё числа соответствующие последовательным символам формата в смысле процедуры TEXT (см п 6 6)

6 3 3 Оператор вывода чисел

Оператор вывода чисел за тает вывод значений целых и действительных выражении и массивов перечисленных в списке объектов вывода Все числа выводятся в одном и том же формате, определяемом вторым фактическим параметром оператора 6 3 3 1 Синтаксис числового формата <повтс рнтельД ^ |

= В| В|

= 0/ 0| | = + | — |

^

= | .

— ]0

= *Е’| Y’|‘Z’|‘ZE|‘Zr|

* Е’|

* ^ ’

‘/’

6332 Семантика числового формата Числовой форм* * определяет вид, в котором выводятся числа (в десятичной системе счисления) Числа перед выводом округляются Буква D означает десятичнмо цифру, буква В—пропуск (интервал) между выводимыми символами, точка—десятичную точку

Буква Z означает замену незначащих нулей пропусками (так называемое подавление нулей)

I ели при этом перед десятичной точкой нет значащих цифр (пли число выводимое в целом формам, оказывается равным нулю) то сохраняется о щи пуль Знак помещается на место последнего подавленного пуля выводимого чиста Буква Y озн тает выв ) е без подавления пулей, то есть вывод такого количества цифр, какое \ еазано в формате Буква I означает вывод чис ia в зксасч v. щи-альнои форме с отличной от п\ля первой цифрой Знак Ь о сача

ет вывод знака числа во всех случаях, знак — означает вывод знака только у отрицательных чисел.

Если знаковая часть пустая, то знак не печатается (выводится абсолютное значение числа). Конструкция В или D эквивалентна соответствующее число раз повторенной букве В или D. Так, например, 5В эквивалентно ВВВВВ, 4D.3D эквивалентно DDDD.DDD. Числовой формат вида *Е\ £У\ \7\ ЧТ или ‘Z’ означает вывод чисел в стандартной форме. Для различных машин стандартные формы могут быть разными; они зависят ет особенностей соответствующих выводных устройств. Буквы Z, Y и Е в числовых форматах ‘Z\ У’ и ‘Е' имеют указанный выше смысл. <УГ означает выгод целых чисел в стандартной форме без подавления нулей, ‘ZE означает вывод целых чисел в стандартной форме с подавлением нулей.

6.3.4. Оператор вывода логических значений

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

6.3.4. Е Синтаксис логического формата

: : =-5F| F

: : —‘L’ / ‘L ’

6.3.4.2. Семантика логического формата. 5F означает вывод значения логического выражения в виде FALSE или TRUE, причем при выводе TRLJE после этого слова делается один пропуск. F означает вывод значения логического выражения, соответственно, в виде Е пли Т ‘L1 означает вывод в стандартной форме.

6.3.5. Оператор вывода текста

Этот оператор задает вывод текстов, определяемых списком текстовых объектов вывода. Если текстовый объект есть строка, то выдастся эта строка без внешних кавычек. Если текстовый объект есть переменная с индексами, то она указывает на элемент массива, начиная с которого располагаются целые числа, соответствующие после юна тельным символам вьшохгчЧт строки в смысле процедуры TEXT (см и. 6 6). Предполагаемо . к указанный элемент массы.; еео-*пегсгвмег мкрьь ношен как ш\г\ к иорач не бу цм выведена. Погод с. \тк, чтрезр четен ъмш ^ у\ массива, с оотштет в\ю-ттргм ’н’-риваюп ей катыше s от^^г' зш so че гыгшъ тсн Элементы мзссчга ндтсючщс спасен те нуль, чек шо таются из рассмотрения, то есть пуль тракт\етсч как отсутствие информации. Отличные от нуля значения, не предусмотренные в таблице из п. 6,6.2, трактуются как ошибочные. В выводимых строках двоеточие используется

только для изменения смысла следующего за ним символа. А именно,

комбинация:В задает пробел при выводе

комбинация:/задает переход к началу следующей строки

комбинация: Хзадает переход к началу следующей страницы

комбинация:! задает вывод символа4

комбинация^ задает вывод символа’

комбинация:3 задает вывод символа:

6.3.6. Оператор размещения

6.3.6.1. Синтаксис формата размещения.

: : | /|Х

Суказатель размещения> : : = j <знак

размещения>

<формат размещения<:: = ‘’

6.3.6.2. Семантика. В формате размещения знак В задает пробел, знак/задает переход к началу следующей строки, знакХзадает переход к началу следующей страницы.

Все эти операции выполняются в том порядке, как они заданы в формате (слева направо). Если перед какой-либо операцией помещен повторитель, то она выполняется соответствующее количество раз.

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

6.4. Оператор р а з м е г к и 6.4 1. Синтаксис

Соператор разметки> :: =MARG (, Арифметическое выражение>, , Арифметическое выражение>, , , ^ | MARG (, , , , , <арифметическое

выражение>, , <арифмети

ческое выражение>)| LMARG (, , , , , < пере

менная >, ^переменная >)

Ь.4.2. Семантика

С каждым каналом вывода связан некоторый гапдарт разметки выводимой информации (для каждой машины свой). Эта раз-метка характеризуется шестью величинами: размер левого паля, длина печатаемой строки, размер правого поля, размер верхнего

Левое

поле

Верхнее поле \

/

!1

Строка

\

Нижнее попе \

\Прабое гитГ

процедуры MARG задает началь-Нсли этого параметра нет, то н\-

поля, число печатаемых на одной странице строк, размер нижнего поля (см. чертеж). При выполнении оператора LMARG перечислен-пым в нем переменным присваиваются значения указанных выше шести величин в том порядке, в каком они выписаны. Для изменения указанных выше стандарт пых размеров служит оператор процедуры MARG. После выполнения этого оператора шесть размеров, определяющих вид страницы, делаются равными значениям фактических параметров со второго по седьмой в таком же порядке, как и для процедуры LMARG.

Восьмой фактический параметр пос значение номера страницы, мерация страниц начинается с I.

6.5. Процедуры ввода

6.5.1, Синтаксис

:: == INPUT (, )

: : = | ,

: : = j Спростая пе-ремепная> )

6.5.2. Семантика операторов ввода

Операторы ввода задают ввод числовых, логических или текстовых данных через канал, номер которого определяется первым фактическим параметром. Форма, в которой должны быть подготовлены эти данные, определяется в п. 6.5.3. Каждому объекту ввода должна соответствовать одна группа данных (см. п. 6.5.3). Простым переменным и идентификаторам массивов соответствуют группы числовых или логических данных, переменным с индексами соответствуют группы текстовых данных. Если количество данных в группе превосходит динамически определяемые описаниями размеры объектов ввода, то результат выполнения оператора ввода не

определен.

При вводе текста последовательным элементам массива, начиная с указанного в объекте ввода, присваиваются целые значения, соответствующие последовательным символам вводимой строки (включая внешние кавычки) в смысле процедуры TEXT (см. п. 6.6).

6.5.3. Группы данных

:: = /

: : = | ,

: : = ;

: : = |

: : = I ,

: : = ,

: : = /

: : = : | = J :

: : =

б.6. Процедура TEXT

6.6.1. Синтаксис

: : =ТЕХТ (, )

6.6 2. Семантика

Процедура TEXT присваивает последовательным элементам массива, начиная с элемента, указанного вторым фактическим параметром, целые значения, соответствующие последовательным символам строки, являющейся первым фактическим параметром (включая внешние кавычки)

Соответствие между символами строки и целыми числами определяется следующей таблицей

А

1

К

11

и

21

1

8!

X

130

л

146

И

2

L

12

V

22

5

85

/

137

/

147

С

3

М

13

W

23

6

86

138

л

148

I)

4

N

14

X

24

7

87

139

1

149

I

5

О

15

Y

23

8

88

1 '0

go to

200

F

6

Р

10

Z

26

9

89

-

И1

if

201

G

7

Q

17

0

80

true

130

1 12

then

202

Н

8

R

18

1

81

false

131

143

else

203

I

9

S

19

2

82

^1

1

m

111

For

20 t

J

10

Т

20

3

83

135

145

do

205

)

210

comment

220

integer

230

#

211

(

221

I

real

231

И)

2)2

>

222

array

232

*

213

[

223

switch

233

>

214

j

224

procedure

234

; =

215

t

225

string

235

216

*

226

label

236

step

217

begin

227

value

237

until

218

end

228

while

219

Boolean

229

Предо]^тление основных символов языка АЛГЛМС через символы по ГОСТ 19767—74 приведено в справочном приложении 3.

ПРИЛОЖЕНИЕ 1 Справочное

АЛФАВИТНЫЙ УКАЗАТЕЛЬ ОПРЕДЕЛЯЕМЫХ ПОНЯТИЙ СИНТАКСИЧЕСКИХ ЕДИНИЦ

Указатель разделен па две части: I—указатель основных символов и II — указатель металингвистических переменных и терминов, употребляемых в тексте. Все ссылки даются на номера разделов. Ссылки разбиты на три группы: опр — ссылка, стоящая за сокращением «опр», отсылает к соответствующему синтаксическому определению;

скат ссылки, стоящие за сокращением «спит», отсылают к вхождению в ме-;алппгвие1 пиескую формулу. Ссылки, перечисленные в группе «опр», щ повторяются;

текст -- ссылки, стоящие за словом «текст», отсылают к определению, данному в тексте.

ilpii составлении указателя пгшмеры не принимались во внимание.

I. УКАЗАТЕЛЬ ОСНОВНЫХ СИМВОЛОВ

ч-

CM.

плюс

-—•

CM.

минус

X

CM.

умножение

/

CM.

деление

1

CM.

возведение в степень

CM.

<щпак операции отношения^

= , J, Уз / з

CM.

<зпак логической операции

У

CM.

запятая

*

CM.

десятичная точка

10

CM.

десять

1

CM.

двоеточие

CM.

точка с запятой

;

CM.

двоегочис равенство

1--

CM,

пробел

( )

CM.

скобки

j j

CM.

индексные скобки

CM.

кавычки для строк

array

СИНТ

пн. 2.3, 5.2.1, 5.4.1

begin

СИНТ

пп. 2.3, 4.1 Л.

Boolean

СИПТ

пп. 2.3, 5.1.1. текст п. 5.1 3

comment

СИПТ

п. 2.3

do

СИИТ

ни. 2.3, 4.6Л

esse

СИПТ

пи. 2.3, 3.3.1, 3.1.1, 4.54, те

end

СИНТ

пп. 2.3, 4.1.1

fa ise

СИНГ

п. 2.2.2.

fc -

спит

ни. 2.3, 4.64

до lo

спит

ни. 2.3 4.3. \

i i

етпп

пп. 2 3, 3 3 1, 1.5.1

I»: [eyer

спит

пп. 2 3, 54 4, чеке г п. 54 3

label

с11:1 г

■ 1 ч. 2.3, 5.44

procedure

СИНТ

пп. 2.3, 5.44

real

СИНТ

пп. 2.3, 54 4, текст п 5 1.3

step

СИНТ

пп. 2.3, 4.64, текст п. 4.6.4.

string1

СИНТ

пп. 2.3, 5.44

switch

синт

пп

2 3,

53 1,

54 1

then

спит

пп

2 3,

33 1,

45 1

true

ей пт

п

222

until

сипт

пп

2 3,

46 1,

текст п

46 42

value

синт

пп

23,

54 1

while

синт

пн

2 3,

46 1

текст п

46 4 3

П. УКАЗАТЕЛЬ МЕТАЛИНГВИСТИЧЕСКИХ ПЕРЕМЕННЫХ И ТЕРМИНОВ, УПОТРЕБЛЯЕМЫХ В ТЕКСТЕ

шфавит - текст п 2 1 арифметический — текст п 3 4 6

— опр п 3 3 1, спит пп 3 3 1 1, 4 2 1, 4 6 1, 5 2 1,

6 3), 6 41, текст п 333

—опр ни 4 1 1, 45 1 — опр 4 11, сшп п 4 5 1, разд 1, п 4 1 3,5 опр 21, спит м 2 241, j 1 1, 321, 3 51, 4 71, 65 3

величина — текст п 2 7

— опр п 5 2 1, текст п 5 24 — опр п 3 11, текст п 526

возведение в степень | сипт пп 2 3, 3 3 1 текст п 3 3 4 3 —опр п 34 1 опр 3 синт пп 3 2 1, 4 7 1, 6 3 1, разд 3 границы индексов — текст и 5 2 3 1 —опр п 52 1

—опр п 65 3 текст п 65 2 — опр п 6 5 3, текст п 652 — опр п 6 5 3 текст п 652 двоеточие — слит лп 2 3, 321, 41 1, 451, 461, 471, 521, 653 двоеточие равенство — — сипт пл 2 3, 421 461,531 653 деление / — синт пп 2 3 3 3 1 текст и 3 34 2 десятичная точка -сипт пи 23 25 1, 6331 —опр п 6 3 3 1 текст п 63 3 2 —опр п 54 1, текст п 543 —опр п 4 6 1, текст п 4 63

га л я та я - синт пп 23 311 321,461 47 1, 5 11, 521, 531, 541, 621,

63 1, 6 4 1, 6 5 1, 6 5 3 66 1

—опр п 2 3 текст п 33 4

— опр п 23 спит п 34 1 текст п 34 5 —опр п 2 3

—- опр пп 2 3 3 4 1 опр п 2 3 — опр л 33 1 —опр п 33 1 —опр и 6 36 1 текст и 6 362 "> — опр п 6 3 3 1 текст п 6:332 шачепис текет пн 2 8 3 3 3

- опр п 24 1 спит пп 3 11, 3 2 1 54 1 текст п 2 43 Сите шификлтор м юеив г> - опр п 3 I 1 спит пп 3 2 1,4 71 5 2 1,621,6 3 1, 6 5 1

опр п Ml ешгт и 46 1

опр п 3 5 1, спит п 32 1,47 1,531

^"ид( нтификатоп проием>ры> —опр п 321, синт пп 4 2 1, 47 1, 54 1, текст п 4 7 5 4

— опр п 3 5 1, синт п 4 1 I, текст п 4 1 3 Сименующее выражение> — опр п 3 5 1, синт разд 3, п 4 3 1, текст п 353 —опр п 34 1 индекс — текст п 3 14 1

— опр п 3 11, сиит ч 35 1 индексные скобки [] — синт пп 2 3,3 1 1,3 5 1,5 2 1

кавычки для строк 1 ’ — синт пп 2 3, 261, 631, 6331, 6341, 6361, текст п 263

— опр п 6 3 1, синт пп 6 4 1,65 1, текст пп 6 3 2, 6 4 2, 6 5 2

— опр п 653

Слевая часть>—опр п 42 1

—опр п 34 1

Слогическии терм>—опр п 34 1

Слогическии формат> — опр п 634 1, синт п 6 3 1, текст п 6 34 2 — опр п 3 4 1, синт пп 3, 3 3 1 4 2 1,4 51,4 61, текст п 3 4 3

—опр п 2 2 2, синт пп 2, 3 4 1, 653 локальный — текст п 4 13 массив — текст п 3 14 1

— опр п 3 5 1, синт пп 4 1 1, 4 5 1, 4 6 1, 5 3 1, текст разд 1, п 413

минус--синт пп 2 3, 251, 331, 6331, текст п 3 3 4 1

— опр п 3 3 1 —опр п 4 1 1 нелокальный — текст п 4 13 — опр п 4 1 1 — опр п 4 1 1 Снепомеченный составной> —опр п 4 1 1 —опр п 5 2 1, текст п 5 24 область действия — текст п 2 7 — опр п 6 5 1, текст п 65 2 — опр п 6 3 1, текст п 6 3 2 — опр п 2 3, синт п 2

—опр пп 3 2 1 4 7 1, синт п 5 4 1, текст п 4 76

— опр п 4 11, синт пп 4 5 1,461,54 1, текст разд 4 —опр п 6 5 1, текст п 65 2 Соператор вывода>—опр п 6 3 1, текст п 63 2

— оггр п 6 3 1, текст пп 6 3 2, 6 3 4 —опр п 6 3 1, текст п 6 3 2, 6 3 5 Соператор вывода чисел > — опр п 6 3 1, текст пп 6 3 2, 6 3 3 Соператор «если»>—опр п 4 5 1, текст п 4 53 Соператор обмена> — опр п 6 2 1, текст п 6 22 Соператор перехода> —опр п 4 3 1, синт п 4 1 1, текст п 4 33 Соператор присваивания>—опр п 4 2 1, синт п 4 11, текст разд 1, п 4 23 Соператор процедуры> — опр п 4 7 1, синт л 4 1 1, текст л 47 3 Соператор размегки>—опр п 6 4 1, текст п 64 2 Соператор размещения>—опр п 6 3 1, текст пп 6 3 2, 6 3 6 Соператор тексг> — опр я 6 6 1, текст п 6 6 2 Соператор цикла> — опр п 4 6 1, синт пп 4 11,451, текст п 46 операторные скобки — см begin end Сописание>—опр разд 5, синт п 4 1 1, текст разд 1 5 Сописание массивов> — опр п 5 2 1, синт разд 5 текст л 523 Сописание переключателя>—опр п 5 31, синт разд 5 текст п 5 33 Сописание процедуры>—опр п 5 4 1, синт разд 5, текст п 54 3 Сописание типа> — опр п 5 11, синт разд 5, текст п 5 1 3 Сописатель>—опр п 2 3

С основной оператор>—опр п 4 11, синт п 45 1 Сословной символ>—опр разд 2

—опр п 653 С отношение> — опр п 3 4 1, текст л 3 4 5 Спервичное выражение>—опр п 33 1 — опр п 34 1 —опр п 53 1

—опр п 3 11, синт пп 331, 34 1, 421, 64 1, текст п 3 13 Сгтеременная с индексами>—опр п 31 1, синт ггп 621, 63 1, 65 1, 66 1, текст п 3 14 1

плюс Ч--синт пп 23 251,331,6331, текст п 3 3 4 1

— опр п 6 3 3 1, синт п. 6 3 6 1, текст п 6 3 3 2 — опр п 2 5 1, текст п 253 правила примечаний—текст п 2 3 —опр п 25 1 преемник — текст разд 4

пробел 1_I —синт п 2 3 текст п 2 3, разд 2, п 6 3

—опр п 4 1 1, текст разд 1

—опр п 3 11, синт пп 5 1 I, 6 5 1, текст п 5 13 —опр п 3 3.1, синт п 3 4 1, текст п 33 3 —опр п 34 1 — сир 11, синт пп 321,441,471,541,6331 — опр п 4 4 1, синт п 4 1 1, текст п 4 4 3 — опр п 2 3 размерность—текст п 5 23 2 Ссепмент массива > —опр п 5 2 1 —опр п 2 3

скобки ( ) — синт пп 2 3, 3 2 1, 3 3 1, 3 4 1, 4 7 1, 5 4 1, 6 2 1, 6 3 1, 6 4 1, 6 5 1, 6 6 1, текст п 3 3 5 2

Совокупность спецификаций>—опр п 5 4 1, текст п 54 5

Совокупность фактических параметров>—опр пп 32 1, 4 7 1

Ссовокупность формальных параметров>—опр п 54 1

Составной оператор> —опр 4 1 1, синт п 4 5 1, текст разд 1

С спецификатора— опр п 2 3

Сспецификация> — опр п 5 4 1

Ссписок граничных пар>—опр п 52 1

Ссписок значений>—опр п 5 4 1, текст п 473 1

Ссписок идентификаторов> — опр п 5 4 1

Ссписок идентификаторов массивов>—опр п 52 1

Ссписок индексо®> —опр п 3 1 1

Ссписок левой части> —опр п 42 1

Ссписок массивов>—опр п 52 1

С список объектов ввода>—опр п 65 1

Ссписок объектоз вывода>—опр п 63 1

Ссписок текстовых объектов вывода> -—опр п 63 1

Ссписок типа> — опр п 5 11

Ссписок фактических параметров>—опр пп 3 2 1, 4 7 1 Ссписок формальных параметров>—опр п 54 1 Ссписок цикла> — олр п 4 6 1 текст п 4 6 4 Ссписок элементов логического ввода>—опр п 6 53 Ссписок элементов числового ввода>—опр п 6 53 стандартные функции—текст п 6 1

Сстрока>—опр п 2 6 1, синт пп 321, 471, 541, 631, 65 3, 66 Ь текст

п 263

Сстрока 6vkb> — опр пп 3 2 1,47 1

Стекстовый объект вьцзода>—опр п 6 3 1, текст п 63 5 С тело процедуры> — опр п 54 1 Стело составнсго> —опр п 4 1 1

Стерм> ■— опр п 3 3 1

—опр п 5 1 1, снят пп 5 2 1,54 1, текст п 2 8 точка с запятой , — сиит пп 23 41 1,541,653 — опр п 3 5 1, текст п 3 5 3 —опр п 636 1

—опр п 3 2 1, синт пп 3 3 1, 3 4 1, текст пп 3 2 3, 5 4.4 умножение X — синт пп 2 3, 3 3 1, текст п 3 3 4 1 —опр пп 3 3 1,4 5 1, синт п 3 4 1, текст пп 3 33 4 53 —опр п 4 5 1, синт п 4 11, текст п 4 53 — опр пп 3 2 1,47 1 —опр п 5 4 1, текст п 54 3 —опр п 6 3 6 1, синт п 6 3 1, текст п 6 3 6 2 функция преобразования — текст п 4 24 целая часть — текст п 6 1 —опр п 2 5 1, текст п °54 —опр п 25 1 синт п 6 33 1 — опр п 6 3 3 1 текст п 6 3 3 2 — опр п 2 2 1, синт разд 2, пп 2 4 1, 25 1,3 1 1,3 5 1 — опр п 2 5 1, синт п 6 5 3, текст пп 2 5 3, 2 5 4 — опр п 2 5 1, синт п 3 3 1 — опр п 63 3 1, синт п 6 3 1, текст п 63 3 2 —опр п 633 1, текст п 6 33 2 —опр п 6 53

—опр п 4 6 1, текст пп 4641,464 2, 4643 —опр п 6 53

—опр п 633 1 синт п 634 1, текст п 6 3 32 — опр п 6 3 3 1, текст п 6 3 3 2 — эпр п 6 3 4 1, текст п 63 4 2

ПРИЛОЖЕНИЕ 2 Справочное

СООТВЕТСТВИЕ МЕЖДУ АНГЛИЙСКИМИ И РУССКИМИ СЛУЖЕБНЫМИ СЛОВАМИ

Некоторые трансляторы с АЛГАМСа могут допускать как входные тексты с английскими служебными словами, изображающими основные символы языка АЛГАМС, так и входные тексты с русскими служебными словами того же назначения. При этом рекомендуется придерживаться следующего соответствия между английскими и русскими служебными словами:

array — массив begin — начало Boolean — лог comment — прим do — цикл else — иначе end — конец false — ложь for — для go to — на if — если integer — цел laber — метка procedure — Проц real — вещ steo — шаг string — строк switch — перекл then — то true — истина until — до value — знач while — пока

ПРИЛОЖЕНИЕ 3 Справочное

ПРЕДСТАВЛЕНИЕ ОСНОВНЫХ СИМВОЛОВ ЯЗЫКА АЛГАМС ЧЕРЕЗ СИМВОЛЫ ПО ГОСТ 19767—74

Основные символы языка АЛГАМС, представляющие из себя слова, кодируются большими латинскими буквами, взятыми в апострофы. Например: begin кодируется ’BEGIN*.

Основные символы, не имеющие эквивалента в наборе символов по ГОСТ 19767—74, кодируются в соответствии с приведенной ниже таблицей.

Основной символ

Представление

Основной символ

Представление

X

*

V

’OR’

**

А

’AND’

ЪЕ*

■—1

’NOT'

’GE’

10

'10'

’NE*

«

f *

-

'EQV'

*

t t

3

’IMP’

Примечание Открывающая и закрывающая кавычки кодируются с по мощью двух апострофов Остальные основные символы языка АЛГАМС коди руются соответствующими символами по ГОСТ 19767—74

ПРИЛОЖЕНИЕ 4 Справочное

ИСТОРИЯ ЯЗЫКА АЛГАМС

Пр'щ iai аемыи алгоритмический язык АЛГАМС разработан группой ГАМС (группой по автоматизации ппогр зм шрования дли машин среднего типа).

Группа ГАМС быта со пана но инициативе Польской академии наук Комис-сис I многостороннего согр' шппства академий паук социалистических стран по пробтемс «Научные вопросы выч юлителыюй техники» в июне 1963 г. Перед 1р>ппои ГАМС была поставлена задача создания эффективных средств автоматизации программирования в сграпах-участниках и, в частности, соответствующего я~ыка для описания алгоритмов с ориентацией па машины средней мощности. На первом же рабочем совещании группы ГАМС в октябре 1963 г. в Софии бы то решено, чго основой такого языка должно быть подмножество языка АЛГОЛ 60 и что язык будет называться АЛГАМС.

Хорошо известно, что при всех своих несомненных достоинствах АЛГОЛ 60 обладает свойствами, затрудняющими его использование на машинах с неболь шим быстродействием и малой оперативной памятью, особенно в тех случаях, когда желательно иметь достаточно эффективные программы Идея преодоления этих затруднений на пути выделения подмножества языка не нова, и в каком-то смысле, даже указана в первоначальном сообщении о языке АЛГОЛ 60 при упоминании о конкретных представлениях В связи с трудностями реализации тех или иных свойств языка АЛГОЛ-60, по пути ограничений, то есть выделений некоторых подмножеств, пошло подавляющее большинство авторов траргслято-ров

Поскольку появление самых различных вариантов языка противоречило идее унификации, послужившей толчком к созданию АЛГОЛа, совершенно естественными были усилия по стандартизации подмножеств

Второй важной проблемой, возникшей па пути внедрения языка АЛГОЛ 60, была необходимость введения в конкретные представления и, в конечном счете, в язык средств, обеспечивающих ввод и вывод информации

Эти задачи выбора подмножества и введения в язык средств, обеспечивающих ввод и вывод информации, возникли и перед группой ГАМС Представители Польской академии наук переработали предложенный ими на первом рабочем совещании проект языка, и на втором рабочем совещании в апреле 1964 г в Бухаресте А. Мазуркевич (Польша) доложил вариант АЛГАМСа, признанный основой для построения я *ыка На этом совещании были рассмотрены проект SUBSET ALGOL и сокращения языка АЛГОЛ 60, предложенные Академией наук СССР, и были приняты текст эталонною языка АЛ ГАМС, конкретное представление языка на телетайпе с пязидорожечной перфолентой и конкретное представление в коде RFT

Недостатком принятого варианта эталоипего языка было отсутствие в нем достаточно развитых стандартных процедур для описания ввода-вывода информации Уже на следующем рабочем совещании группы ГАМС в октябре 1964 г. и Варшаве наряду с обсуждениями методов трансляции пришлось вернуться к тексту языка для внесения в него дополнении, связанных с вводом выводом Si а часть языка подвергалась уточнениям и дополнениям как на совещании ГАМС в марте 1965 г в Берлине, так и в октябре 1965 г в Ташкенте, где бы ю принято решение о создании редакционной подгруппы, которая в Феврале 1966 г в Варшаве в составе И Концевич (Польша), В М. Курочкина (СССР), О 3 Любимского (СССР), Л Чаиа (Польша) и L п1орца (Польша) составила текст языка АЛ ГАМС в форме поправок и дополнений к пересмотренному сообщению о языке АЛГОЛ 60 Текст поправок и дополнений, предложенный редакционной подгруппой, был одобрен на рабочем совещании ГАМС в апреле 1966 г. в Будапеште

Работа группы ГАМС пересекалась во времени с работой над SUBSET ALGOL 60 (IFTP) в WG2 I Предложения и решения рабочей группы IFIP/WG2 I \читывались и оказывали влияние на работу группы ГАМС Выход в аиреде 1964 г окончательной реакции сообщения о SUBSET ALGOL-60 (IFIP) заставил группу ГАМС заново проанализировать уже принятые ею решения с целью возможного исключения отличий языка АЛ ГАМС от SUBSET ALGOL 60 Конечно, речь шла не об устранении всех имеющихся отличий, поскольку в язык АЛГ4МС уже были включены важные свойства, которые полностью отсутствовали в SUBSET ALGOL 60

В конечном счете, если не считать запрещения строчных скобок внутри строк в АЛГАМСе, SUBSET ALGOL 60 оказался подмножеством языка АЛ ГАМС, В последнем по сравнению с SUBSET ALGOL-60 нет ограничения на изображение идентификаторов, нет ограничении на употребление операции возведения в степень, в определенных случаях разрешена подстановка фактических параметров типа integer на место формальных параметров типа real и, наконец, разрешена подстановка выражений по наименованию

Настоящее приложение не ставит перед собой цели обоснования тех или иных решений, принятых группой ГАМС Однако в качестве иллюстрации мотивов для таких решений можно рассмотреть отличие SUBSET ALGOL-60 от АЛГАМСа в части изображения идентификаторов Принятое в первом ограничение, согласно которому результат появления различных идентификаторов с совпадающими первыми шестью символами неопределен, может быть по существу использовано транслятором лишь при отказе от анализа этой неопределенной ситуации и индикации ошибки Ведь для обнаружения такой ошибки необходимо хранить все символы встречающихся идентификаторов В то же время группа ГАМС считала с одной стороны невозможным отказ от индикации ошибок, связанных с неправильным изображением идентификаторов, а с другой стороны стремились к тому, чтобы каждое ограничение на язык давало заметную выгоду при трансляции или в эффективности получаемых программ.

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

Процедуры ввода—вывода языка АЛГАМС являются переработанным и упрощенным вариантом известных предложений комиссии Д. В. Кнута для языка АЛГОЛ-60 При выборе этого варианта были подробно исследованы возможные реализации с учетом имеющегося оборудования.

В язык АЛГАМС включены средства, позволяющие дать указания о возможной сегментации программы, так называемые идентификаторы части, а также средства, дающие возможность эффективно использовать буферные памя i и машины путем описаний некоторых из массивов особыми идентификаторами (начинающимися с букв ЕХ) Доступ к таким массивам осуществляется при помощи специальной стандартной процедуры COPY. Все эти свойства должны заметно повысить эффективность использования языка как средства автоматизации программирования

Поскольку основой языка АЛГАМС был принят АЛ ГОЛ-60, группа ГАМС сочла возможным широко использовать текст пересмотренного сообщения о языке АЛГОЛ 60* и его русский перевод**, изменяя его, как правило, лишь в тех

* Revised report on the algorithmic language ALGOL 60 by J W Backus, Г L Bauer, J Green, C Katz, J Me Carthy, P Naur, A J Perils, H Rutisha-user, К Samelson, В Vauquois, J H Wegstein, A von Wijngaarden, M Woodger Edited by Peter Naur International Federation for Information Processing, 1962

** Алгоритмический язык АЛГОЛ-60 Пересмотренное сообщение [Пер с англ ] Под ред А П Ершова, С С Лаврова, М Р Шура-Бура М. Изд во «Мир», 1965 г

местах, которые были связаны с изменениями и дополнениями Однако в пек о торых случаях текст Revised report был изменен не для придания ему нового смысла, а с целью упрощения формы изложения Эти изменения не отражены в помещенном в качестве дополнения списке отличии АЛГАМСа от языка АЛГОЛ 60, предназначенном для лиц, хорошо знакомых с языком АЛГОЛ 60

В работе группы ГАМС систематически принимали участие М Апостолова (Болгария), Т Бакош (Венгрия), Д Вайда (Румыния), Ф Грунд (ГДР), Б До-мелки (Венгрия), И Кернер (ГДР), Е Киндлер (Чехословакия), П Константи песку (Румыния), И Концевич (Польша), Я Крал (Чехословакия), Р Кретер (ГДР), В М Курочкин (СССР), Э 3 Любимский (СССР), А Мазуркевич (Польша), Ю Мароньскии (Польша), М Русева (Болгария), Б Сеидов (Болгария), Д Станку (Румыния), В Фолтсни (Венгрия), Л Чайа (Польша), П Шорц (Польша), Р Штробель (ГДР), М Р Шура-Бура (СССР)

В 1971 г в институте прикладной математики АН СССР был разработан транслятор с АЛГАМСа на универсальный машинно-ориентированный язык программирования АЛМО, что позволяет осуществлять трансляцию с языка АЛГАМС

в код любой вычислительной машины, оснащенной транслятором с АЛМО. (В настоящее время эксплуатируются трансляторы с АЛМО для БЭСМ-б, М-220 и некоторых других типов машин и завершается разработка транслятора для ЕС ЭВМ).

ПРИЛОЖЕНИЕ 5 Справочное

ОТЛИЧИЯ АЛГАМСа ОТ ЯЗЫКА АЛГОЛ-60

1. Используется один регистр букв (в вышеприведенном тексте языка используются лишь прописные латинские буквы).

2. Выброшен знак -г- (деление нацело реализуется с помощью стандартной функции).

3. Нет понятия own.

4. Упрощена конструкция строк.

5. Если для определения типа арифметического выражения необходимо выполнять какие-либо вычисления, проверки условий или присваивания, то считается, что выражение имеет тип real (см. пп. 3.3.4.3 и 3.3.4.4.).

6. Именующими выражениями могут быть только метки и указатели пере-ключателя. Переключательный список может состоять только из меток. Целое без знака не может быть меткой. При неопределенном указателе переключателя оператор перехода также неопределен.

7. Управляемой переменной цикла (параметром цикла) может быть только простая переменная.

8. Все формальные параметры процедуры должны быть специфицированы. При вызове по наименованию класс и тип фактического параметра, вообще говоря, должен совпадать с классом и типом формального параметра (п. 47.5.5).

9. Не допускается рекурсивное использование процедур.

10. Не допускается побочный эффект.

11. Уточнено использование кода в качестве тела процедуры пп. 5.4.1, 5.4.3).

12. Описание идентификатора (за исключением меток) должно предшествовать его использованию.

13. Введены понятия внешнего идентификатора и идентификатора части. Добавлен раздел 6 о стандартных функциях и стандартных процедурах (процедуры, осуществляющие ввод, вывод и обмен информацией).

Редактор С. Г. Б иль кина Технический редактор В. Ю. Смирнова Корректор Е. И. Евтеева

Сдано в иаб. 04.10.78 Подп. в печ. 31.05.79 3,0 п. л. 2,84 уч.-изд. л. Тир. 6000 Цена 15 коп.

Ордена «Знак Почета» Издательство стандартов. Москва, Д-557, Новопресненский пер., 3. Тип. «Московский печатник», Москва, Лялин пер., д 6. Зак 14Ь5

Другие госты в подкатегории

    ГОСТ 27974-88

    ГОСТ 27975-88

    ГОСТ Р 34.1702.3-92

    ГОСТ Р 50754-95

    ГОСТ Р 55022-2012

    ГОСТ Р 59791-2021

    ГОСТ Р 59798-2021

    ГОСТ Р ИСО/МЭК 10027-93

    ГОСТ Р ИСО/МЭК 21838-1-2021

    ГОСТ 22558-89

    ГОСТ 27787-88

    ГОСТ 23057-78

    ГОСТ 23056-78

    ГОСТ 27831-88

    ГОСТ Р ИСО/МЭК 9075-93