АЛГОЛ 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 по типу записи .
ЗАПИСЬ ЧЕЛОВЕКА (
СТРОКА ( 20 ) ИМЯ ;
ЦЕЛЫЙ ВОЗРАСТ ;
ЛОГИЧЕСКИЙ МУЖЧИНА ;
ССЫЛКА ( ЧЕЛОВЕК ) ОТЕЦ , МАТЬ , МЛАДШИЙ ПОТОМ , СТАРШИЙ БРАТ
) ;
ССЫЛКА ( ЧЕЛОВЕК ) ПРОЦЕДУРА YOUNGESTUNCLE ( ССЫЛКА ( ЧЕЛОВЕК ) R ) ;
НАЧАТЬ
ССЫЛКУ ( ЧЕЛОВЕК ) P , M ;
P := МОЛОДЫЕ ПОТОМКИ ( ОТЕЦ ( ОТЕЦ ( R ))) ;
WHILE ( P ¬ = NULL ) AND ( ¬ MALE ( P )) OR ( P = ОТЕЦ ( R )) DO
P := СТАРШИЙ БРАТ ( P ) ;
M := МОЛОДЫЕ ПОТОМКИ ( МАТЬ ( МАТЬ ( R ))) ;
WHILE ( M ¬ = NULL ) AND ( ¬ MALE ( M )) DO
M := СТАРШИЙ БРАТ ( 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 году; этот отчет включает описание языка ALGOL W.
- ^ Сайты, Ричард. «Справочное руководство по 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.