АЛГОЛ 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] определяет ALGOL W в аффиксной грамматике , напоминающей форму Бэкуса-Наура (BNF). Эта формальная грамматика была предшественницей грамматики Ван Вейнгаардена . [1] [5]
Большая часть семантики ALGOL W определяется грамматически: [4]
⟨procedure identifier⟩
— это идентификатор, определенный в объявлении процедуры, a ⟨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