АЛГОЛ 68RS - ALGOL 68RS

АЛГОЛ 68RS
Оригинальный автор (ы)И. Ф. Карри, Дж. Д. Моррисон
Разработчики)Королевские сигналы и радиолокационная станция
изначальный выпускАвгуст 1977 г.; 43 года назад (1977-08)
Стабильный выпуск
algol68toc 1.14 / 25 августа 2012 г.; 8 лет назад (2012-08-25)
Написано вАЛГОЛ 68
Операционная системаVMS
ПлатформаICL 2900 серии, Мультики, VAX
Доступно ванглийский
ТипКомпилятор, переводчик
ЛицензияБесплатное ПО
Интернет сайтwww.пример.org

АЛГОЛ 68RS это второй АЛГОЛ 68 компилятор написана И. Ф. Карри и Дж. Д. Моррисоном в Королевские сигналы и радиолокационная станция (RSRE).[1]В отличие от более ранних АЛГОЛ 68-R, он был разработан как портативный компилятор и реализовал язык обновленного Отчета.

Версии АЛГОЛА 68RS были написаны для ICL 2900 серии, Мультики, и VAX Бег VMS.[2][3]

Впоследствии части этого компилятора были выпущены в всеобщее достояние, как переводчик с АЛГОЛА 68 на C, как часть публичного выпуска языка ЭЛЛА.

История

Хотя АЛГОЛ 68-R компилятор, написанный И.Ф. Карри, Дж. Д. Моррисон и С.Г. Бонд, имел большой успех, он страдал от двух основных проблем: он был написан для почти устаревших ICL 1900 компьютер, и в нем реализована устаревшая версия языка, выпущенная до того, как был доступен пересмотренный отчет по Алголу 68.

RSRE нуждался в более новом компиляторе для различных внутренних проектов, поэтому команда Карри и Моррисон написала новый компилятор, предназначенный для кросс-платформенный переносимость программного обеспечения между машинами. Компилятор занимался синтаксическим анализом АЛГОЛА 68, создавая промежуточный язык высокого уровня, известный как язык потока который затем будет скомпилирован в Машинный код по переводчик. Компилятору нужно было знать только размеры различных объектных машин. типы и набор символов имеется в наличии.

Компилятор написан на АЛГОЛе 68, загруженный изначально с использованием компилятора ALGOL 68-R.

Команда из двух программистов на Вычислительные услуги Оксфордского университета написал генератор кода для серии ICL 2900.[4]Мартин Томас Регионального компьютерного центра университетов Юго-Запада (SWURCC) договорились, что эту систему спонсирует International Computers Limited (ICL) и продается как официальный продукт ICL.[5]

Позже Объединенный компьютерный центр университетов Avon, большой пользователь Мультики попросил команду SWURCC создать Multics-версию АЛГОЛА 68RS. Версия для Корпорация цифрового оборудования (DEC) VAX компьютер тоже был написан.

В конце концов команда SWURCC сформировала компанию, Праксис, изначально поддерживающий версию ALGOL 68RS Multics.

RSRE также использовал компилятор ALGOL 68RS для внутренних проектов, включая Гибкая машина и язык проектирования оборудования ELLA. Когда было решено сделать ELLA свободно доступным, Praxis было поручено написать транслятор ALGOL 68 в C, ctrans, на основе компилятора ALGOL 68RS.

Ограничения на скомпилированном языке

Как и предыдущий компилятор ALGOL 68-R, ALGOL 68RS был однопроходный компилятор, что потребовало некоторых ограничений на компилируемый язык.

Декларация перед использованием

Программа АЛГОЛ 68:

proc даже = (int номер) bool: (число = 0 | истинный | странный (пресс (номер 1)));proc нечетное = (int номер) bool: (число = 0 | ложный | четное (пресс (номер 1)));

пришлось бы переписать как:

proc (int) bool странный;proc даже = (int номер) bool : (число = 0 | истинный | странный (пресс (число - 1))); нечетное: = (int номер) bool : (число = 0 | ложный | четное (пресс (номер 1)));

Чтобы разрешить рекурсивные объявления режимы (виды) особый заглушка Объявление режима использовалось, чтобы сообщить компилятору, что предстоящий символ был режимом, а не оператором:

Режим б,     а = структура (ссылка б б), б = [1:10] ссылка а;

Параллельная обработка

Как и в Алголе 68-R, операторы номинал пункт и сема режим с его связанными вверх, вниз, и уровень, были опущены.

Расширения Алгола 68

Выпрямление

Одним из основных недостатков АЛГОЛА 68 является невозможность написать стандартную передавать (ввод, вывод ) процедур на чистом АЛГОЛЕ 68. Распечатать процедура принимает, например, массив элементов для печати в любом режиме и, посредством процесса с именем выпрямление, преобразует их в простые значения, которые можно распечатать. Например:

структура (int а, настоящий б) c: = ...; print (c); {волшебным образом преобразовано в печать ((a из в, б из в)); }

Авторы ALGOL 68RS решили сделать выпрямление доступно как часть языка. А прямой режим напоминает множество но имеет особенность, что предметы можно по принуждению к прямой mode, если их компоненты могут быть переведены в режим. Например:

структура (int а, настоящий до н.э;прямой союз (int, настоящий) z = c;

Оба поля c может быть принужден к союз (int, настоящий) поэтому поле "a из c "можно получить как z [1] и" b из c "есть z [2].

Стандарт Распечатать теперь процедуру можно объявить как:

Режим режим печати = союз (int, настоящий, ... прямой режим печати);proc print = ([] режим печати аргументы) пустота: ...;

Эффективная обработка массивов

Режимы массивов ALGOL 68 очень мощные, включая множественные измерения, определенные верхние и нижние границы, обрезку (возможность создать новый массив, взяв непрерывное подмножество массива), нарезку (возможность создать новый массив, удалив один измерение из массива) и гребля (возможность создать новый массив, добавив измерение к существующему массиву.

Например:

[5:23, -7:7] int а; {двумерный массив}ссылка [,] int b = a [6:21, 0: 3] {кусок a}ссылка [] int c = a [5] {только одна строка a}

Хотя компилятор приложил все усилия для создания оптимального кода для всех случаев, чувствовалось, что добавление некоторых более простых средств в некоторых случаях позволит улучшить код. С этой целью АЛГОЛ 68RS включил индексируемые структуры (i-структуры), векторов, а для всех утверждение.

Индексируемые структуры

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

Алгол 68RS обобщил эти идеи. А структура 4 char переменная содержала ровно 4 символа. Размер был частью шрифта. В большинстве систем ALGOL 68RS режим байты был эквивалентен структура 4 char.

Режим байты = структура 4 char;op элем = (int индекс, байты val) char: val [индекс]; ...байты b = "abcd"; ... print (2 элем б);

Компилятор ALGOL 68RS компилирует любую строковую константу в соответствующий структура п char.

В контекстах, где вектор или требуется массив, i-структуру можно расширить до подходящего вектор или тип массива.

Векторы

А вектор - это упрощенный массив, имеющий только одно измерение и нижнюю границу, равную 1.

вектор [4] int а; {аналогично [1: 4] int а; }

В любом контексте, где требовался массив, вектор можно преобразовать в массив.

Заявление FORALL

В для всех Оператор позволяет эффективно перемещаться по элементам массива.

[12] int а: = ...;для всех ха в аделать xa: = xa * 2od

ха будет ссылкой на каждый элемент а в очереди. для всех может проходить через несколько массивов параллельно и управляться пока пункт:

[12] int а, б; ...для всех ха в а, хб в бпока xa> xbделать    f (xa, xb)od

Раздельная компиляция

Алгол 68RS предоставил механизм для построения библиотеки аналогично отдельным средствам компиляции АЛГОЛ 68-R и механизм для создания программ в сверху вниз манера похожа на АЛГОЛ 68C.

Модули декларации

Библиотеки в Алголе 68RS написаны с использованием модули декларации которые состоят из последовательности Режим, объявления переменных, операторов и процедур, за которыми следует вести список который определяет, какие объявления видны другим сегментам.

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

Например, графическая библиотека может быть записана как:

дек graphlibиспользовать какая-то другая библиотекаРежим graphdata = структура ( ... );Режим график = ссылка graphdata;proc новый график = (...) график : ...;proc нарисовать график = (график грамм) пустота : ...;   ...держать график, новый график, нарисовать графикКонец

И программа пользователя для использования этой библиотеки будет выглядеть так:

программа myprogиспользовать graphlibначинать    график g = новый граф (...); ... нарисовать график (g); ...конецКонец

Вложенные модули

Для поддержки стиля программирования сверху вниз в ALGOL 68RS Вот и контекст удобства.

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

программа (pass1, pass2) компиляторначинать   нить источник: = ...; дерево parsetree; ... Вот pass1 (источник, дерево разбора); ... инструкции insts; Вот pass2 (дерево разбора, insts); ...конецКонец

Код, который будет выполняться в контексте Вот теги будут записаны как:

программа реализация pass1контекст pass1 в компиляторначинать  ... {код, использующий "источник" и "дерево разбора"}конецКонец

Вот похож на АЛГОЛ 68C окружающая среда и контекст эквивалентен АЛГОЛу 68C с помощью.

Код и чужой доступ

Алгол 68RS предназначался для использования на низком уровне системное программирование. Для этого были включены средства для доступа к машинному коду и объектам, не относящимся к Алголу 68RS.

Код был вставлен с код построить:

Somemode код (item1, item2, ...) "...код..."

Где элементs - значения АЛГОЛА 68RS, которые должны быть доступны для вставки кода и Somemode это режим вернулся. Режим можно опустить, если код не возвращает значения.

Доступ к объектам, отличным от ALGOL68, был доступен с иностранец вставка:

Somemode имя = иностранец "внешнее имя"

Любой простой объект ALGOL 68RS может быть В ролях в вектор персонажей, использующих заклинание оператор:

структура (int а, настоящий б) c = ...; print (("internal repr =", заклинание c, новая строка));

А просто объект - это тот, который не содержит массивов или векторс.

Доступность

Транслятор ALGOL 68 в C, написанный Praxis для системы ELLA, содержит большую часть компилятора ALGOL 68RS. Заметным исключением является код для обработки форматс.

По состоянию на сентябрь 2020 г., АЛГОЛ 68RS доступен из SourceForge.[6]

Рекомендации

  1. ^ Бонд, С.Г.; Вудворд, П. М. (Август 1977 г.). "Введение в переносимый компилятор Алгола 68 RS". Техническое примечание (802). Архивировано из оригинал 14 декабря 2012 г.
  2. ^ Вудворд, П. М.; Бонд, С.Г. (1983). Руководство по АЛГОЛу 68 для пользователей RS Systems. Эдвард Арнольд (Издательство) Ltd. ISBN  978-0-7131-3490-2.
  3. ^ Линдси, К. Х. (Август 1998 г.). «Обзор жизнеспособных реализаций Алгола 68». Бюллетень Алгола (52): 5–8. ISSN  0084-6198.
  4. ^ "История сайта Multics: Avon".
  5. ^ Линдси, К. Х. (Декабрь 1980 г.). «Реализации Алгола 68: компилятор ICL 2900». Бюллетень Алгола (46): 7–8. ISSN  0084-6198.
  6. ^ ван дер Веер, Марсель; NevilleDNZ. «Реализации Алгола 68 с открытым исходным кодом». SourceForge. Получено 18 сентября 2020.