Товары в корзине: 0 шт Оформить заказ
Стр. 1
 

49 страниц

532.00 ₽

Купить ГОСТ 21551-76 — официальный бумажный документ с голограммой и синими печатями. подробнее

Официально распространяем нормативную документацию с 1999 года. Пробиваем чеки, платим налоги, принимаем к оплате все законные формы платежей без дополнительных процентов. Наши клиенты защищены Законом. ООО "ЦНТИ Нормоконтроль".

Наши цены ниже, чем в других местах, потому что мы работаем напрямую с поставщиками документов.

Способы доставки

  • Срочная курьерская доставка (1-3 дня)
  • Курьерская доставка (7 дней)
  • Самовывоз из московского офиса
  • Почта РФ

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

  Скачать PDF

Ограничение срока действия снято: Постановление Госстандарта № 1547 от 16.04.82

Оглавление

1 Структура языка

2 Основные символы, индетификаторы, числа и строки. Основные понятия

3 Выражения

4 Операторы

5 Описания

6 Стандартные процедуры и функции

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

Приложение 2 Соответствие между английскими и русскими служебными словами

Приложение 3 Представление основных символов языка алгамс через символы по ГОСТ 19767-74

Приложение 4 История языка алгамс

Приложение 5 Отличия алгамса от языка алгол-60

Показать даты введения Admin

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

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

А Л Г АМС

ГОСТ 21551-76

Цена 15 коп.


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

ГОСУДАРСТВЕННЫЙ КОМИТЕТ СССР ПО СТАНДАРТАМ Москва

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

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

ГОСТ

21551—76

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

АЛГАМС

Programming languages ALGAMS

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

с 01.07.1977 г. до 01.07.1982 г.

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

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

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

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

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

1. СТРУКТУРА р;зыка

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

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

1Кш[:гг сот пния 5пьг wi /\ЛГ\.МС и его отличит от ятпка АЛГОЛ-60 приврем-» и сп,опоччь к приложениях 4 и 3.

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


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

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

Стр. 10 ГОСТ 21551-76

G.571012XA[NX (N—1)/2,0]

(AxARCTAN (Y)+Z) f (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.

ГОСТ 21551—76 Стр. 11

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

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

означает

( ( ( (аХ (b“*) )Х7)Х( (p-q)-1) )Xv)X(s~‘).

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

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

2 Т n f к означает (2п)к,

тогда как

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. Со1лаепо синтаксису (см. и. 3.3.1), выдерживается следующий порядок старшинства: первый: Т второй: X третий: -Ь —

Стр. 12 ГОСТ 21551-76

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

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

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

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

3.4.1.    Синтаксис

<знак операции отношения> : : = А | £ | = I _2 I > | А <отношение> : : = <простое арифметическое выражение> <знак операции отношения> Апростое арифметическое выражение^

<первичное логическое выражеиие> :: = <логическое значе-ние> / <переменная> / <указатель функции> | Аотноше-ние> / (<логическое выражение>)

<вторичное логическое выражение> :: = <первичное логическое выражеиие> | £ <псрвичное логическое выражение> Слогический одночлен> :: = <вторичное логическое выраже-нис> /Алогический одночлен> А <вторичное логическое вы-ражение>

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

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

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

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

3.4.2.    Примеры

Х^=—2

Y V /Z Q

A-I-B 5/\Z U Q t 2

PAQVX^Y

ГОСТ 21551-76 Стр. 13

Q--“1AABA "| С V D V Е ; |F if K<1 then S>W else H<L C

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

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

1 Ы

true

true

false

false

Ы/\Ь2

false

false

false

true

Ы Vb2

false

true

true

true

Ы2ЭЬ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 / <идентифпкатор части> <буква> / Идентификатор части> <цифра> <идентификатор переключателя> :: = <идентификатор>

<указатель переключатсля> :: = <идентификатор переключателя^ [<индексно е выражение>]

Именующее выражение> :: = <метка> \ Спдептпфпкатор ча-сти> / <указатель переключателя>

3.5.2.    Примеры

Z

Р9

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

TOWN [if Y<0 then N else N+l]

3.5.3.    Семантика

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

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

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

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

4. ОПЕРАТОРЫ

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

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

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

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

ГОСТ 21551-76 Стр. 15

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

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

4.1.1.    Синтаксис

- испомсченнып основной оператор>: : =<опсратор присваивания^ <оператор перехода>j Спустой оператор> j <опе-ратор процедуры>

<основной оператор>:: = <пепомечеиный основной оператор > | < метка >: <осповной оператор >

<безусловный оператор> :: = <основной опсратор>| <состаг-40i оператор> j <блок>

<оператор> :: = <безусловпый онератор> / <условный опера-тор> j <оператор цикла>

<тело    составного> :: <оператор> | <тело соста?иого>;

<оператор>

<начало блока> :: - begin <описанис> 1 <начяло блока>; <описа иие>

^непомеченный составной > begin <тело составного>еп^1 <непомсчепный блок> : : — Сиачало блока>; <гело составного > end

<составной оператор>: : = <(неномечеппый составной> | <мет-ка> : = <составпой опсратор>

<блок> :: = <непомеченный 6лок> | <идентификатор части>: <пепомечс1шый блок> | <метка>: ^<блок>

<нрограмма> :: = <блок> j <составной оператор>

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

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

блок:

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

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

\IC4ui . СРОТИСТС'Г КНЦПП К.длпр

J.! 2 Приме/л ! оспитиыс оперит,)

/*:- РО

go to NAPLES

START : CONTINUE : W : = 7.993

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

begin X: = 0; for Y:= 1 step i 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 К: = I + 1 step 1 until M do

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

end FOR I ANDK

end BLOCK Q

4.1.3. Семантика

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

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

ГОСТ 2i55i—76 Стр. 17

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

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

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

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

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

4.2.1. Синтаксис

<лсвая часть> : : = <иеременпая> : = | <идентификатор процедуры > : =

<список левой части> : - <лсвая часть> | <список левой ча-сти> <левая часть>

<оператор прпсватшания> : : = <список левой части> Арифметическое выражение>| <список левой части> «^логическое выражеиие>

Стр. 18 ГОСТ 21551-76

4.2.2.    Примеры

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

А: = В/С—V—Q X S

S[V, К+ 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 nil арифметического выражения отличается от типа перс-менных и идентификаторов процедур, то считают, что автоматически применяется соо1ветствующая функция преобразования. Имеется в ви *v, что дтя преобразования из типа real в тип integer функция преобразования выдает результат, эквивалентный

ENTIER (Е + 0.5),

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

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

4.3. Е Синтаксис

<оператор перехода>::= goto Сименующее выражение^

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

go to EXIT [N+l]

go to TOWN[ifY<Q then N else N+l]

4.3.3.    Семантика

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

ГОСТ 21551-76 Стр. 19

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

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 P<Q then AA:begin if Q<V then A: = V/S else Y : =2XA end else if V>S then A : -V—Q else if V>S—1 then go to ST

4.5.3.    Семантика

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

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

Стр. 2 ГОСТ 21551-76

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

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

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

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

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

1.1. Формализм для синтаксического описания

Синтаксис описывается с помощью металингвистических формул. Их интерпретацию лучше всею можно объяснить на примере: <ab>::    (    I    [    I    <ab>( i <ab><d>

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

Стр. 20 ГОСТ 21551-76

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

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

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

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

if B1 then SI else if B2 then S2 else S3

B1 ложно    B2    ложно

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

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

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

4.6.1,    Синтаксис

<элемент списка цикла> :: = <арифметическое выражение> J <арифметическое выражение> step <арифметическое выра-жение>until <арифметическое выражение>J <арифметическое выражение>while <логическое выражечие>

<список цикла> : : = <элемент списка цикла> / <список цик-ла>, <элемент списка цикла>

<заголовск цикла> : : = for Идентификатор переменной>

: = <список цикла>с!о <оператор цикла> :: = <заголовок цикла> <оператор>| <метка> : <оператор цикла>

4.6.2.    Примеры

for Q: = 1 step S until N do A [Q]: = В [Q] for K: = 1, VI X2 while VI <N do for J: =I + G, L, 1 step 1 until N, C + D do A[K, J]: =B[K, J]

ГОСТ 21551—76 Стр. 3

[(((1(37

( 1 2 3 4 5 (

( ( (


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

[ 8 6

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

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

<пусто>:: =

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

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

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

<основной символ>:.= <б>ква> | <цифра> | <логическое значснпс> <юг раничитель>

2.1.    Буквы <буква>: : =

А | В | С | D | Е | F | О 111111 J | К | L | М [ N | О | Г | О | К | S | Т |LT|\ | W|X|Y|Z Буквы нс имеют индивидуальною смысла. Они используются для образования идентификаторов и строк (см. пи. 2.4 и 2.6).

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

<цифра> :: = 0 [ 1 | 21314 | Ъ | 6 | 7 | 8 j 9 Цифры используются для образования чисел, идентификаторов и строк.

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

<логическое значепис> :: = true I false

Логические значения имеют фиксированный очевидный смысл3.

Стр. 4 ГОСТ 21551-76

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

<ограничитель>: :==<знак операции> | <разделитель> | <скобка> J <описатель> , <слецификаторХ <знак операциях:: — <знак арифметической операции> | <знак операции отношениях] <знак логической операции>| <знак операции следования>

<знак арифметической операции>:: = +    1    — I X I /

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

<знак логической операцииХ::^ == | ^ | V I A I П <знак операции следованиях = go to |if |thenfelse [for |do <разделительХ :: = , |.|1(,|: |; |: =| ■—'jstep {until (while | comment <скобкаХ :: = (|) | [ |]|‘ | ’ j begin ( end

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

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

)к i п< леи г 1

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

Пос lf ЮВ ПС Л НОСИ. О II'BIIIIV СИМ!( И'Н

; comment <любля пос^етовательносмэ, ie содержащая символа

begin comment <любал последовало тыки нс содержащая символа    begin

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

вола , endu, , пи символа “ , пи символ) , else >    end

Эквивалентность здесь озшчаег, что „лоб\ю из ipe\ конструкций, указанных в левой колонке, ссп i ' ьа всгрсчаскч вис некоторой строки, можно заменять со час i. i в\ющпм си символом, )лл-Зспшым в правой колонке Эга замена пг оказывает никакого влияния fra работу программы. При ото я считается, что конструкцию примечания, встретив!!]'юсч р'чннге rpii чтении текста слева направо, следует заменять пред п , не ке тп более поздние конструк-ции, содержащиеся в этой пас^е юза ^ ьпости.

ГОСТ 21551-76 Стр. 5

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


<1идентификатор> :: = <буква>| Идентификатор> <буква> | <идентификатор> <цифра> /

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 + <число без з-нака>[

— <число без знака>

2.5.2. Примеры


О

177

5384 + 0.7300

—200.084 + 07.43ю8 9.34 ю +10 2ю—4

<десятичное число>::= <целое без знака> J <правильная дробь> I

—,08310—02 —к)7 ю—4 + ю + 5

Стр. 6 ГОСТ 21551-76

2.5.3. Семантика

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

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

2.6. Строки

2.6.1.    Синтаксис

<строка>:: = ‘<любая последовательность символов, не содержащая ‘ или ’ > ’ |

2.6.2.    Пример

THIS ^IS^A STRING'

2.6.3. Семантика

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

для строк: ‘и’. Символ i_, обозначает пробел. Вне строк он не

имеет смысла.

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

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

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

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

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

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

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

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

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

ГОСТ 21551-76 Стр. 7

3. ВЫРАЖЕНИЯ

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

<выражение>:: = <арифметическое выражение>| Логическое выражение>| <именующее выражение>

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

3.1.1.    Синтаксис

<идентификатор переменной>:: = <идентификатор> <простая переменная>:: = <идентификатор переменной> <нндексное выражение> :: = Сарифметическое выражение>

<список индексов>:: — <индексное выражение> / <список ин-дексов>, <индексное выражение>

<идентификатор массива>:: = <идентификатор> | <внешний идентификатор >

< внешний идентификатор> :: = ЕХ| < внешний идентификатор> <буква> | <виешний идентификатор> <цифра>

<переменная с индексами> :: = <идентификатор массива>

[<список индексов >]

<переменная> :: = <простая переменная> | <переменная с индексами >

3.1.2.    Примеры

EPSILON

DELTA

А17

Q

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

3.1.3.    Семантика

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

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

Стр. 8 ГОСТ 21551-76

3.1.4. Индексы

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

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

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

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

3.2.1.    Синтаксис

<идентификатор процедуры> :: = <идентификатор> <фактический параметр>:: = <строка> |<выражение>| <ид-ентификатор массива>/ <идентификатор переключателя> I Идентификатор процедуры>

<строка букв> :: = <буква>/Сстрока букв> <буква> <ограничитель параметра> :: = , f ) <строка букв>:( <список фактических параметров> :: = <фактический пара-метр> | <список фактических параметров> <ограничитель параметра> <фактический параметр>

<совокупность фактических параметров> : : = <пусто> (<спи-сок фактических параметров>)

<указатель функции> : : = Идентификатор процедуры> <со-вокупность фактических иараметров>

3.2.2.    Примеры5

SIN (А—В)

J (V + S, N)

R

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

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

3.2.3.    Семантика

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

ГОСТ 21551-76 Стр. 9

ров, да.ны в п. 4.7. Не каждое описание пррн°т'гры определяет значение какого-либо указа 1етя (Ь'чпн'чч

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

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

<знак операции типа сложения> :: = + / —

<знак операции типа умножения> :: = XI/

<первичное выраже.ние> :: = <число без знака>| <перемен-ная> | <указатель функции>/ (<арифметическое выраже-иие>)

<множитель> :: — <первичное выражение> | <множитель> 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 + ZX3)

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[I + 2,8] t (A—3/Y + VU t 8)

Простое арифметическое выражение U~-YU + OMEGAXSUM |COS(Y + Zx3)/

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

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

WxU—Q(S + CU) t 2

ifQ>0 then S + SXQy^ else 2XS + 3XQ

if A <0 then U +V else if AXB> 17

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

2 Зак 1485

1

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

2

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

3

true — истина, false - ложь

4

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

5

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