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

СОЮЗА ССР

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

АЛ ГАМС

ГОСТ 21551-76

И

Цена IS коп.

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

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

Москва


У

Группа П85

ДК 681.3.065.4:006.354

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

Я

ГОСТ
21551—76

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

АЛГАМС

Programming languages ALGAMS

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

с 01.07.1977 г.

до 01.07,1982 г.

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

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

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

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

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

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

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

* История создания языка АЛГАМС и его отличия от языка АЛГОЛ-60 приведены и справочных приложениях 4 и 5.

Издание официальное Перепечатка воспрещена

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

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

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

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

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

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

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

<ab>:( I [ | <ab>( j <ab><d>

Последовательности знаков, заключенные в скобки <>, пред­ставляют собой металингвистические переменные, значениями ко­торых являются последовательности символов. Знаки ::= и | (по­следний со значением «или») —это металингвистические связки. Любой знак в формуле, который не является переменной или связ­кой, обозначает самого себя (или класс знаков, ему подобных). Соединение знаков и (или) переменных в формуле означает сое­динение обозначаемых последовательностей. Таким образом, фор­мула, приведенная выше, задает рекурсивное правило для обра­зования значений переменной <ab>. Она указывает, что <ab> может иметь значение либо (, либо [, или же, если дано некоторое допустимое значение <ab>, то еще одно значение можно полу­чить, поставив за <ab> символ (, или некоторое значение пере­менной <d>. Если значениями <d> являются десятичные циф­ры, то некоторые из значений <ab> суть:

[ ( ( ( Н з 7 (

( 1 2 3 4 5 (

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

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

<пусто>::=

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

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

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

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

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

  1. Буквы

<буква>: : =

А І В I С I D I Е I F I G 1111! I J I К I L I М I N І О I Р I Q | Р | 8 | Т |U| V[ W|X|Y|Z Буквы не имеют индивидуального смысла. Они используются для образования идентификаторов и строк (см. пп. 2.4 и 2.6).

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

    1. Цифры

<цифра > : : = 01 1 | 21314 15 | (’> | 7 | 8 | 9

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

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

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

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


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

<ограничитель> :: = <знак операцииХ | <разделитель> |

<скобка> І <описатель> і <спецификаторХ

<знак операциях :: = <знак арифметической операции> |

<знак операции отношениях/ <зпак логической операции>|

<знак операции следования>

<знак арифметической операцииХ:: = + | — 1X1/ Г

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

<знак логической операцииХ: : = I I V I A I П

<знак операции следованиях :: = go to [if [then [else [for [do

<разделительХ:: = , |.|I(I|: |; j: =| — [step [until [while | comment СскобкаХ:: = (|) |[ |]| ’ | begin )end

<описатель>:: = Booleanjinteger [real [array [switch | procedure

•< спецификатор X -: = string | label | value

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

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

Последовательность основных сим.Х'.ъ'в:

: comment <любая последовательность, не содержащая символа “;“ X ;

b

begin

end

egin comment <любая последовательно'-г;>, пс содержащая символа “;“ X ;

end С.тюбая последовательность, не содержащая ;.щ сим­вола ,,end“, , пи символа “ ; “, пи символа ,,eise">

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

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

    1. Синтаксис

<идентификатор> :: = Сбуква>| <идентнфикатор> <буква> |

<идентификатор> Сцифра>)

  1. Примеры

Q

SOUP

V17A

A34KTMNS

MARILYN

  1. Семантика

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

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

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

  1. Ч и с л а

    1. Синтаксис

Сцелое без знака> :: = <цифра>| Сцелое без знака> <ци- фра>

Сцелое> = Сцелое без знака>| + Сцелое без знака>| — <целое без знака>

Справнльная дробь>::= . <целое без знака>

<порядок> :: = ю <целое>

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

<целое без знака> Справнльная дробь>

Счисло без знака >:: = Сдесятичное число> | <порядок>[

Сдесятичное чис.ло> <порядок>

<число>: : = Счисло без знака> f + Счисло без знака>|

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

  1. Примеры

О -200.084 — .083,0—02

177 +07.43ю8 —ю7

.5384 9.34(о + Ю ]0—4

+ 0.7300 210—4 +io + 5

  1. Семантика

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

  1. Типы

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

  1. Строки

    1. Синтаксис

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

  1. Пример

THIS IS . . А STRING’

  1. Семантика

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

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

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

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

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

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

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

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

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

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

  1. ВЫРАЖЕНИЯ

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

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

  1. Переменные

    1. Синтаксис

«^идентификатор переменной>:: = <идентификатор>

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

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

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

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

<буква> I <внешний идентификатор> <цифра>

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

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

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

  1. Примеры

EPSILON

DELTA

А17

Q

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

  1. Семантика