АЛГОЛ W
Парадигмы | Мультипарадигмальность : процедурная , императивная , структурированная. |
---|---|
Семья | АЛГОЛ |
Разработано | Никлаус Вирт , Тони Хоар |
Впервые появился | 1966 год |
Дисциплина набора текста | Статический , сильный |
Объем | Лексический |
Язык реализации | ПЛ360 |
Платформа | IBM Система/360 |
ТЫ | ОС/360 , МТС |
Под влиянием | |
АЛГОЛ 60 | |
Под влиянием | |
Паскаль , Модуль-2 |
АЛГОЛ W — язык программирования . Он основан на предложении об Алголе X Никлауса Вирта и Тони Хоара как преемнике Алгола 60 . АЛГОЛ W — это относительно простая модернизация исходного АЛГОЛа 60, в которую добавлена строка , битовая строка, комплексное число и ссылка на записи типы данных , а по результату также передача параметров , что представляет собой while
заявление, замена switch
с case
заявление, да и вообще ужесточение языка.
Работа Вирта была сочтена слишком незначительным достижением по сравнению с АЛГОЛом 60, а более сложная версия Адриана ван Вейнгаардена , которая позже стала АЛГОЛом 68, была выбрана на весьма спорном совещании. Позже Вирт опубликовал свою версию как «Вклад в развитие АЛГОЛА» . [1] С рядом небольших дополнений это в конечном итоге стало ALGOL W.
Вирт руководил высококачественной реализацией IBM System/360 в Стэнфордском университете, которая получила широкое распространение. [2] [3] Реализация была написана на PL360 , похожем на АЛГОЛ, , языке ассемблера разработанном Виртом. Реализация включает в себя важные возможности отладки и профилирования .
АЛГОЛ W послужил основой для языка Паскаль , и синтаксис АЛГОЛ W будет сразу знаком каждому, кто имеет опыт работы с Паскалем. Ключевыми отличиями являются улучшения в обработке записей в Паскале и, как ни странно, потеря способности ALGOL W определять длину массива во время выполнения, что является одной из функций Паскаля, на которую больше всего жалуются.
Синтаксис и семантика
[ редактировать ]ALGOL W Синтаксис построен на подмножестве EBCDIC набора кодировок символов . В АЛГОЛе 60 зарезервированные слова представляют собой отдельные лексические элементы, но в АЛГОЛе W они представляют собой всего лишь последовательности символов, и их не нужно сокращать . Зарезервированные слова и идентификаторы разделяются пробелами. [2] В этом отношении синтаксис ALGOL W напоминает синтаксис Паскаля и более поздних языков.
Описание языка ALGOL W [4] определяет АЛГОЛ W в аффиксной грамматике , напоминающей форму Бэкуса-Наура (BNF). Эта формальная грамматика была предшественницей грамматики Ван Вейнгаардена . [1] [5]
Большая часть семантики ALGOL W определяется грамматически: [4]
- Идентификаторы различаются по их определению в пределах текущей области . Например,
⟨procedure identifier⟩
это идентификатор, который был определен объявлением процедуры,⟨label identifier⟩
— это идентификатор, который используется в качестве метки перехода . - Типы и переменных выражений обозначаются аффиксами . Например
⟨τ function identifier⟩
— это синтаксическая сущность для функции, которая возвращает значение типаτ
, если идентификатор был объявлен как целочисленная функция в текущей области видимости, то он расширяется до⟨integer function identifier⟩
. - Ошибки типа — это грамматические ошибки. Например,
⟨integer expression⟩ / ⟨integer expression⟩
и⟨real expression⟩ / ⟨real expression⟩
являются действительными, но отдельными синтаксическими объектами, которые представляют выражения, но⟨real expression⟩ DIV ⟨integer expression⟩
(т. е. целочисленное деление, выполняемое для значения с плавающей запятой) является недопустимым синтаксическим объектом.
Пример
[ редактировать ]Это демонстрирует возможности ALGOL W по типу записи .
RECORD PERSON (
STRING(20) NAME;
INTEGER AGE;
LOGICAL MALE;
REFERENCE(PERSON) FATHER, MOTHER, YOUNGESTOFFSPRING, ELDERSIBLING
);
REFERENCE(PERSON) PROCEDURE YOUNGESTUNCLE (REFERENCE(PERSON) R);
BEGIN
REFERENCE(PERSON) P, M;
P := YOUNGESTOFFSPRING(FATHER(FATHER(R)));
WHILE (P ¬= NULL) AND (¬ MALE(P)) OR (P = FATHER(R)) DO
P := ELDERSIBLING(P);
M := YOUNGESTOFFSPRING(MOTHER(MOTHER(R)));
WHILE (M ¬= NULL) AND (¬ MALE(M)) DO
M := ELDERSIBLING(M);
IF P = NULL THEN
M
ELSE IF M = NULL THEN
P
ELSE
IF AGE(P) < AGE(M) THEN P ELSE M
END
Ссылки
[ редактировать ]- ^ Перейти обратно: а б Вирт, Никлаус ; Хоар, ЦАР (июнь 1966 г.). «Вклад в развитие АЛГОЛА» . Коммуникации АКМ . 9 (6): 413–432. дои : 10.1145/365696.365702 . S2CID 11901135 . Проверено 7 октября 2020 г. - через Ассоциацию вычислительной техники .
- ^ Перейти обратно: а б Бауэр, Генри Р.; Беккер, Шелдон И.; Грэм, Сьюзен Л.; Форсайт, Джордж Э.; Саттертуэйт, Эдвин Х. (март 1968 г.). Номер технического отчета: CS-TR-68-89 . Кафедра компьютерных наук (Отчет). Стэнфордский университет. (Различные документы по реализации ALGOL W в Стэнфорде в 1972 году; этот отчет включает W. описание языка ALGOL
- ^ Сайты, Ричард. «Справочное руководство по ALGOL W» (PDF) . i.stanford.edu . Стэнфордский университет . Проверено 24 июля 2022 г.
- ^ Перейти обратно: а б Бауэр, Генри Р.; Беккер, Шелдон И.; Грэм, Сьюзен Л.; Саттертуэйт, Эдвин Х.; Сайты, Ричард Л. (июнь 1972 г.). Описание языка ALGOL W (PDF) (Отчет).
- ^ ван Вейнгаарден, Адриан (22 октября 1965 г.). Ортогональная конструкция и описание формального языка: MR76 (PDF) (Отчет). Амстердам , Нидерланды: Математический центр. Архивировано из оригинала (PDF) 29 октября 2019 года . Проверено 7 октября 2020 г. - через Ernst-Abbe-Hochschule Jena , Университет прикладных наук, Германия.
Внешние ссылки
[ редактировать ]- aw2c — компилятор ALGOL W для Linux от Глина Вебстера
- трепет – текущая версия Глина Вебстера
- ALGOL W @ Everything2 — неформальное, но подробное описание языка, сделанное бывшим пользователем, с боковыми панелями, превозносящими ALGOL W над Паскалем как образовательным языком программирования.
- Листинг компилятора ALGOL W 1969 года на bitsavers.org
- Руководства по терминальной системе штата Мичиган , том 16: ALGOL W в MTS
- Материалы ALGOL W Более 200 программ и документации ALGOL W.