ГОСУДАРСТВЕННЫЙ СТАНДАРТ
СОЮЗА ССР
ЯЗЫК ПРОГРАММИРОВАНИЯ
АЛ ГАМС
И
Цена IS коп.
здание «официальноеГОСУДАРСТВЕННЫЙ КОМИТЕТ СССР ПО СТАНДАРТАМ
Москва
У
Группа П85
ДК 681.3.065.4:006.354ГОСУДАРСТВЕННЫЙ СТАНДАРТ СОЮЗА ССР
Я
ГОСТ
21551—76
АЛГАМС
Programming languages ALGAMS
Постановлением Государственного комитета стандартов Совета Министров СССР от 6 февраля 1976 г. № 353 срок действия установлен
с 01.07.1977 г.
до 01.07,1982 г.
Настоящий стандарт устанавливает описание языка программирования АЛГАМС*, предназначенного для автоматизации программирования при решении научных и инженерно-технических задач, а также для обмена алгоритмами.
Установленное настоящим стандартом описание языка АЛГАМС должно применяться при создании алгоритмов на языке АЛГАМС и трансляторов с АЛГАМСа.
В алгоритмах на АЛГАМСе должны использоваться только те языковые средства, которые установлены настоящим стандартом.
Транслятор с АЛГАМСа должен обеспечивать трансляцию любого алгоритма, разработанного в соответствии с настоящим стандартом.
Указатель определенных в стандарте понятий и синтаксических единиц приведен в справочном приложении 1.
СТРУКТУРА ЯЗЫКА
Назначением алгоритмического языка является списание вычислительных процессов. Описания правил вычислений основываются на хорошо известном понятии арифметического выражения, содержащего в качестве составных частей числа, переменные и функции. Из таких выражений путем применения правил арифме-
* История создания языка АЛГАМС и его отличия от языка АЛГОЛ-60 приведены и справочных приложениях 4 и 5.
Издание официальное Перепечатка воспрещена
Переиздание. Феврали 1979 г.
-к
©Издательство стандартов, 1979тической композиции образуются самостоятельные единицы языка — явные формулы, называемые операторами присваивания.
Для того, чтобы указать ход вычислительных процессов, добавляются некоторые неарифметические и условные операторы, которые могут, например, описывать альтернативы или циклические повторения вычислительных операторов. Ввиду того, что для функционирования этих операторов возникает необходимость их взаимосвязи, операторы могут снабжаться метками. Чтобы образовать составной оператор, последовательность операторов можно заключить в операторные скобки begin1 и end.
Операторы дополняются описаниями, которые сами по себе не являются предписаниями о вычислениях, но информируют транслятор о существовании и некоторых свойствах объектов, фигурирующих в операторах. Этими свойствами могут быть, например, класс чисел, используемых в качестве значений переменной, размерность массива чисел или даже совокупность правил, определяющих некоторую функцию. Последовательность описаний и следующая за ней последовательность операторов, заключенные между begin и end, составляют блок. Каждое описание вводится в блоки таким путем и действительно только для этого блока.
Программа является блоком или составным оператором, который не содержится внутри другого оператора и который не использует других операторов, не содержащихся в нем.
Ниже будут приведены синтаксис и семантика языка2.
Формализм для синтаксического описания Синтаксис описывается с помощью металингвистических формул. Их интерпретацию лучше всего можно объяснить на примере:
<ab>:( I [ | <ab>( j <ab><d>
Последовательности знаков, заключенные в скобки <>, представляют собой металингвистические переменные, значениями которых являются последовательности символов. Знаки ::= и | (последний со значением «или») —это металингвистические связки. Любой знак в формуле, который не является переменной или связкой, обозначает самого себя (или класс знаков, ему подобных). Соединение знаков и (или) переменных в формуле означает соединение обозначаемых последовательностей. Таким образом, формула, приведенная выше, задает рекурсивное правило для образования значений переменной <ab>. Она указывает, что <ab> может иметь значение либо (, либо [, или же, если дано некоторое допустимое значение <ab>, то еще одно значение можно получить, поставив за <ab> символ (, или некоторое значение переменной <d>. Если значениями <d> являются десятичные цифры, то некоторые из значений <ab> суть:
[ ( ( ( Н з 7 (
( 1 2 3 4 5 (
Чтобы облегчить изучение, символы, используемые для различения металингвистических переменных (то есть последовательностей знаков, стоящих внутри скобок <>, подобно ab, в приведенном выше примере), выбраны в виде слов, приблизительно описывающих природу соответствующей переменной. Там, где слова, введенные таким способом, используются где-либо в тексте, они всегда, если не оговорено противное, относятся к соответствующему синтаксическому определению. Кроме того, некоторые формулы приведены по нескольку раз.
Определение:
<пусто>::=
(то есть строка, не содержащая символов).
ОСНОВНЫЕ СИМВОЛЫ, ИДЕНТИФИКАТОРЫ, ЧИСЛА И СТРОКИ.
ОСНОВНЫЕ ПОНЯТИЯ
Язык строится из следующих основных символов:
Сосновной символ>::= <буква> | <цифра> | <логическое значение> <ограничитель>
Буквы
<буква>: : =
А І В 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).
Цифр ы. Л о г и ч с с к и е з н а ч е и и я
Цифры
<цифра > : : = 01 1 | 21314 15 | (’> | 7 | 8 | 9
Цифры используются для образования чисел, идентификаторов и строк.
Логические значения
<логическое значение> : : = true | false
Логические значения имеют фиксированный очевидный смысл3.
Ограничители
<ограничитель> :: = <знак операцииХ | <разделитель> |
<скобка> І <описатель> і <спецификаторХ
<знак операциях :: = <знак арифметической операции> |
<знак операции отношениях/ <зпак логической операции>|
<знак операции следования>
<знак арифметической операцииХ:: = + | — 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">
Эквивалентность здесь означает, что любую из трех конструкций, указанных в левой колонке, если она встречается вне некоторой строки, можно заменять соответствующим ей символом, указанным в правой колонке. Эта замена нс оказывает никакого влияния па работу программы. При этом считается, что конструкцию примечания, встретившуюся раньше при чтении текста слева направо. следует заменять прежде, нежели более поздние конструкции, содержащиеся в этой последовательности.
Идентификаторы
Синтаксис
<идентификатор> :: = Сбуква>| <идентнфикатор> <буква> |
<идентификатор> Сцифра>)
Примеры
Q
SOUP
V17A
A34KTMNS
MARILYN
Семантика
Для описания языка удобно под термином идентификатор понимать не только определенную в п. 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).
Ч и с л а
Синтаксис
Сцелое без знака> :: = <цифра>| Сцелое без знака> <ци- фра>
Сцелое> = Сцелое без знака>| + Сцелое без знака>| — <целое без знака>
Справнльная дробь>::= . <целое без знака>
<порядок> :: = ю <целое>
Сдесятичное число>:: = <целое без знака> ) Справнльная дробь> I
<целое без знака> Справнльная дробь>
Счисло без знака >:: = Сдесятичное число> | <порядок>[
Сдесятичное чис.ло> <порядок>
<число>: : = Счисло без знака> f + Счисло без знака>|
— Счисло без знака>
Примеры
О -200.084 — .083,0—02
177 +07.43ю8 —ю7
.5384 9.34(о + Ю ]0—4
+ 0.7300 210—4 +io + 5
Семантика
Десятичные числа имеют свой обычный смысл. Порядок — это масштабный множитель, выраженный как целая степень десяти.
Типы
Целые имеют тип integer. Остальные числа имеют тип real (п. 5.1).
Строки
Синтаксис
<строка> :: =‘<любая последовательность символов, не содержащая ‘ или ’> ’ I
Пример
THIS IS . . А STRING’
Семантика
Для того, чтобы в языке можно было иметь дело с произвольными последовательностями основных символов, введены кавычки для строк: ‘и’. Символ । , обозначает пробел. Вне строк он не
имеет смысла.
Строки используют в качестве фактических параметров процедур (см. пп. 3.2 и 4.7).
Величины, классы и области действия
Различают следующие классы величин: простые переменные, массивы, метки, идентификаторы части, переключатели и процедуры.
Область действия величины — совокупность операторов и выражений, внутри которых определена связь этой величины и изображающего ее идентификатора. Для всех величин, кроме стандартных процедур и функций, меток и идентификаторов частей,— это область действия соответствующего описания (см. разд. 5 и п. 4.1.3).
Значения и типы
Значение — некоторое упорядоченное множество чисел (частный случай: отдельное число), некоторое упорядоченное множество логических значений (частный случай: отдельное логическое значение) или некоторая метка (идентификатор части).
Некоторые синтаксические единицы обладают значениями. Во время выполнения программы эти значения могут изменяться. Значения выражений и их составных частей определяются в разд. 3. Значение идентификатора массива есть упорядоченное множество значений соответствующего массива переменных с индексами (см. п. 3.1.4.1).
Различные типы (integer, real, Boolean) в основном обозначают свойства значений. Типы, связанные с синтаксическими единицами, относятся к значениям этих единиц.
ВЫРАЖЕНИЯ
В языке АЛГАМС первичными составными частями программ, описывающих алгоритмические процессы, являются арифметические, логические и именующие выражения. Составными частями этих выражений, помимо некоторых ограничителей, являются логические значения, числа, переменные, указатели функций, элементарные арифметические и логические операции, а также некоторые операции отношения и следования. Поскольку синтаксическое определение как переменных, так и указателей функций содержит выражения, определение выражений и их составных частей по необходимости является рекурсивным.
<выражение>:: = <арифметическое выражение>| -Алогическое выражение>| <именующее выражение>
Переменные
Синтаксис
«^идентификатор переменной>:: = <идентификатор>
<простая переменная> :: = «^идентификатор переменной> «^индексное выражение> :: = <арифметическое выражение>
<список индексов> :: = -^индексное выражение> / <список индексов >, <индексное выражение>
<идентификатор массива>:: = <идентификатор> | <внешний идентификатор >
<внешний идентификатор>:: = ЕХ| <внешний идентификатор>
<буква> I <внешний идентификатор> <цифра>
<переменная с индексами> :: = <идентификатор массива>
[<список индексов >]
<переменная> :: = <простая переменная> | <переменная с индексами>
Примеры
EPSILON
DELTA
А17
Q
X[SIN(NXP1/2),Q[3, N, 4]]
Семантика