АЛГОЛ-60
- алгоритмический язык, ориентированный на описание алгоритмов решения задач численного анализа. А.-60 приняла в 1960 Международная конференция в Париже, в 1962 его пересмотрел тех. комитет Международной федерации по обработке информации (ИФИП).
А.-60 привлек к себе всеобщее внимание в силу ряда новых обобщающих идей, наиболее плодотворными из которых являются: понятия блочной структуры и области действия обозначений, позволяющие разделить работу по составлению больших программ на более обозримые части; возможность динамического памяти распределения и развитый аппарат вызова процедур. А.-60 был запроектирован не только как эффективный язык программирования, но и как средство записи алгоритмов. Значимость А.-60 определяется его широким распространением, значительным числом реализаций и библиотек, описанных в нем программ. Описание синтаксиса А.-60 в виде Вэкуса нормальных форм оказало существенное влияние на работы по языкам программирования и послужило толчком к дальнейшему развитию работ в области языков формальных.
Различают три уровня языка А.-60: эталонный язык, язык публикаций и конкретные представления. Эталонный язык является основой и руководством для создания трансляторов, образцом для всех конкретных представлений и основой для перевода с языка публикаций на любые частные конкретные представления. Язык публикаций допускает видоизменения эталонного языка, связанные с удобством печати или написания (напр., индексы, пробелы, показатели степени, греческие буквы), и используется для целей формулирования и обмена информацией. Символы языка могут быть различными в разных странах при наличии однозначного соответствия с эталонным представлением. Каждое конкретное представление является, как правило, некоторой модификацией эталонного языка, определяемой числом знаков в стандартном оборудовании ввода, использующей набор знаков конкретной цифровой вычислительной машины и являющейся входным языком транслятора для нее. Конкретные представления должны сопровождаться спец. совокупностью правил для перевода с языка публикаций или с эталонного языка.
Программа, записанная средствами языка А.-60, представляет собой совокупность описаний величин и действий над ними. Различают следующие классы величин: простые переменные, массивы, метки, переключатели и процедуры. Для обозначения величин используются идентификаторы. Величина действует в том операторе или выражении, в котором описание идентификатора, связанного с этой величиной, имеет силу. Значениями величин (в зависимости от их класса) могут быть: число (или некоторая совокупность чисел), логическое значение (или некоторая совокупность таких значений) или метка. Значения числовых величин имеют типы: целый (integer) и вещественный (real), значения логических величин — логический (или Булевый — Boolean) тип.
Алфавит эталонного языка строго зафиксирован и состоит из десятичных цифр от 0 до 9, строчных и заглавных лат. букв, знаков операций, знаков препинания, круглых и квадратных скобок и некоторых спец. знаков. Из символов алфавита по определенным правилам образуются элементарные конструкции — идентификаторы, числа, строки, неременные и указатели функций, арифм., логич. и именующее выражения, описания, операторы и примечания. С помощью меток, которыми при необходимости снабжаются операторы, задается порядок их выполнения. Идентификатор переменной — это наименование, данное некоторому отдельному значению или совокупности значений. Строка представляет собой любую последовательность символов алфавита, заключенную в строчные скобки (и), и используется в качестве параметра фактического процедуры. Арифм., логич. и именующее выражения являются правилами для вычисления числового и логич. значений и получения метки оператора, соответственно. Описания определяют некоторые свойства величин и связывают их с идентификаторами. Описание идентификатора имеет силу в одном блоке. Описание можно снабдить дополнительным описателем
(собственный), что приводит к сохранению значения некоторой величины, описанной таким образом к моменту повторного входа в этот блок. В А.-60 встречаются четыре вида описаний: типа, массива, переключателя и процедуры. Описание типа указывает, что некоторые идентификаторы являются простыми переменными целого, вещественного или логич. типа. Описанием массива определяется, что один или несколько идентификаторов представляют многомерные массивы переменных с индексами и задают размерность этих массивов, границы индексов и типы переменных. Описанием переключателя задается совокупность значений соответствующего указателя переключателя. Описание процедуры задает процедуру, связанную с ее идентификатором, и состоит из ее заголовка и тела. Посредством примечаний (comment) в программу на А.-60 можно включать любой текст, напр., для пояснения некоторого участка программы или некоторой конструкции. Оператор — это конструкция, посредством которой дается указание выполнить к.-л. действие
или совокупность действий. Осн. операторами А.-60 являются операторы присваивания, перехода, пустой и процедуры. Оператор присваивания служит для присваивания значения выражения одной или нескольким переменным или идентификаторам процедур-функций. Оператор перехода позволяет изменить естественную последовательность выполнения операторов, явно определяя своего преемника по значению входящего в него именующего выражения. Пустой оператор не выполняет никакого действия и может быть использован для помещения метки. Некоторый участок программы может быть описан в виде процедуры с некоторым набором параметров формальных, а вместо него в программе записан оператор этой процедуры с необходимым набором фактических параметров. Обычно в виде процедур описывают участки, часто встречающиеся в одной или различных программах. Описание процедуры содержит оператор, называемый ее телом. Процедура описывается один раз в начале блока, в котором встречается оператор с идентификатором этой процедуры. Выполнение оператора процедуры вызывает обращение к соответствующему описанию процедуры, которое заключается в выполнении ее тела после его модификации, осуществляемой предусмотренными в языке действиями. К таким действиям относятся вызов параметров по значению и по наименованию. Тело процедуры может быть написано на каком-нибудь другом алгоритм, или машинном языке. Другим способом использования понятия процедуры является описание процедур-функций, обращение к которым осуществляется посредством указателя ф-ции. Последний может быть использован в качестве операнда в арифм. или логич. выражениях. Если фактические параметры процедуры от одного обращения к другому не меняются, то и они, и соответствующие им формальные параметры процедуры могут быть опущены. Такая процедура наз. процедурой без параметров.
В А.-60 имеется совокупность стандартных ф-ций, не требующих описаний. К ним относятся
(абсолютная величина Е),
(наибольшее целое, не превышающее Е),
В 1964 Международный комитет ИФИП рекомендовал в качестве дополнения к языку
следующие стандартные процедуры обмена информацией между программой и внешними носителями информации: inreal — ввод числа, outreal — вывод числа, inarray — ввод массива, outarray — вывод массива, insymbol — ввод символа, outsymbol — вывод символа, length — определение длины строки. Тела этих процедур записываются обычно на языке машины.
Осн. операторы можно использовать для образования более сложных операторов: цикла, условного, составного и блока. Оператор цикла состоит из заголовка цикла и внутреннего оператора. Заголовок цикла задает число повторений внутреннего оператора. Заголовком цикла наз. конструкция вида for (переменная): = (список цикла) do. Список цикла состоит из элементов списка цикла, которые можно разделить на три типа: А — арифм. выражения, A step h until М — арифм. прогрессии, A while В — пересчета, где A, h, М — арифм. выражения, причем h — шаг (разность между двумя последовательными значениями переменной цикла) изменения переменной цикла, называемой параметром цикла, а В - логич. выражение. В случае элемента типа пересчета к-во выполнений внутреннего оператора определяется условием В, т. е. этот оператор выполняется, пока выражение В является истинным. Условные операторы приводят к пропуску или выполнению некоторых операторов в зависимости от текущих значений использованных в них логических выражений. Совокупность операторов, заключенная в операторные скобки begin и end, наз. составным оператором. Если, кроме того, за символом begin следуют описания, то такая конструкция наз. блоком. Блоки и составные операторы могут быть вложены друг в друга. Программа на А.-60 является блоком или составным оператором. Любой идентификатор, встречающийся в данном блоке, может быть описан в этом блоке. Такие идентификаторы наз. локализованными в данном блоке, и объект, представленный каким-нибудь из них внутри данного блока, не существует вне этого блока, а любой объект, представленный тем же идентификатором вне данного блока, не может быть использован внутри этого блока. Идентификаторы, встречающиеся внутри блока и не описанные в нем, не локализуются в блоке, т. е. представляют одни и те же объекты как внутри этого блока, так и в объемлющих блоках. Метка, встречающаяся в данном блоке, если даже она не описана в нем, действует так, как будто она описана в заголовке наименьшего блока, объемлющего помеченный этой меткой оператор.
Примеры: 1) Описание процедуры:
2) Описание процедуры ф-ции:
3) А.-программа: для данных целых чисел
найти:
Приведенная выше А.-программа написана в конкретном представлении, где read — оператор чтения информации с внешнего носителя, a print — оператор печати. А.-программа на эталонном языке представляет собой строку символов. Пробелы во внимание не принимаются, но их можно использовать в тексте программы для обеспечения удобочитаемости. В языке публикаций допускаются: вместо индексных скобок [ и ] понижение строки, заключенной в эти скобки, и удаление их, а также поднятие показателя степени и удаление символа t, скобки любой формы — круглые, квадратные или фигурные, для основания степени десять — поднятие десяти и следующего за ним целого числа и вставка подразумеваемого знака умножения.
А.-60 является базовым языком для многих других языков программирования. Рабочая группа ИФИП выработала сокращенный вариант А.-60, в котором каждая программа, записанная на нем, автоматически является также и программой на языке А.-60 и имеет одинаковую семантику в обоих языках. Лит.: Агеев М. И. Основы алгоритмического языка АЛГОЛ-60, М., 1965 [библиогр. с. 93]; Сообщение о сокращенном АЛГОЛе-6О (ИФИП). «Журнал вычислительной математики и математической физики», 1965, т. 5, М3; Лавров С. С. Универсальный язык программирования (АЛГОЛ-6О). М., 1972 [библиогр. с. 182—183]; Мак-Кракен Д. Д. Программирование на АЛГОЛе. Пер. с англ. М., 1964; Алгоритмический язык АЛГОЛ-6О. Пересмотренное сообщение. Пер. с англ. М., 1065 [библиогр. с. 77],
А. И. Халилов.