ALGOL W — это язык программирования . Он основан на предложении Никлауса Вирта и Тони Хоара для ALGOL X в качестве преемника ALGOL 60. ALGOL W — это относительно простое обновление оригинального ALGOL 60, добавляющее строку , битовую строку, комплексное число и ссылку для записи типов данных и передачу параметров по результату , вводя оператор, заменяя его оператором и в целом сужая язык. while
switch
case
Запись Вирта посчитали слишком незначительным шагом вперед по сравнению с АЛГОЛом 60, и на весьма спорном собрании была выбрана более сложная запись Адриана ван Вейнгаардена , которая позже стала АЛГОЛом 68. Позднее Вирт опубликовал свою версию как вклад в развитие АЛГОЛа . [1] С рядом небольших дополнений это в конечном итоге стало АЛГОЛом W.
Вирт руководил высококачественной реализацией для IBM System/360 в Стэнфордском университете , которая была широко распространена. [2] [3] Реализация была написана на PL360 , языке ассемблера , похожем на ALGOL, разработанном Виртом. Реализация включает в себя влиятельные возможности отладки и профилирования .
ALGOL W послужил основой для языка Pascal , и синтаксис ALGOL W будет сразу знаком любому, кто имеет опыт работы с Pascal. Ключевыми отличиями являются улучшения в обработке записей в Pascal и, как ни странно, потеря способности ALGOL W определять длину массива во время выполнения, что является одной из наиболее часто жалуемых особенностей Pascal.
Синтаксис ALGOL W построен на подмножестве набора кодировок символов EBCDIC . В ALGOL 60 зарезервированные слова являются отдельными лексическими элементами, но в ALGOL W они являются только последовательностями символов и не нуждаются в стропинге . Зарезервированные слова и идентификаторы разделяются пробелами. [2] В этом отношении синтаксис ALGOL W напоминает синтаксис Pascal и более поздних языков.
Описание языка ALGOL W [4] определяет ALGOL W в аффиксной грамматике , которая напоминает форму Бэкуса–Наура (BNF). Эта формальная грамматика была предшественником грамматики Ван Вейнгаардена . [1] [5]
Большая часть семантики ALGOL W определена грамматически: [4]
⟨procedure identifier⟩
— это идентификатор, который был определен объявлением процедуры, a ⟨label identifier⟩
— это идентификатор, который используется как метка goto .⟨τ function identifier⟩
τ
⟨integer function identifier⟩
⟨integer expression⟩ / ⟨integer expression⟩
и ⟨real expression⟩ / ⟨real expression⟩
являются допустимыми, но различными синтаксическими сущностями, которые представляют выражения, но ⟨real expression⟩ DIV ⟨integer expression⟩
(т. е. целочисленное деление, выполненное над значением с плавающей точкой) является недопустимой синтаксической сущностью.Это демонстрирует возможности записи типа ALGOL W.
ЗАПИСЬ ЛИЦА ( СТРОКА ( 20 ) ИМЯ ; ЦЕЛОЕ ЧИСЛО ВОЗРАСТ ; ЛОГИЧЕСКИЙ МУЖСКОЙ ; ССЫЛКА ( ЛИЦО ) ОТЕЦ , МАТЬ , МЛАДШИЙ ПОТОМОК , СТАРШИЙ БРАТ ) ; ССЫЛКА ( ЛИЦО ) ПРОЦЕДУРА МОЛОДОЙ ДЯДЯ ( ЛИЦО ) R ) ; НАЧАЛО ССЫЛКА ( ЛИЦО ) P , M ; P := МОЛОДОЙ ПОТОМОК ( ОТЕЦ ( ОТЕЦ ( R ))) ; ПОКА ( P ¬ = NULL ) И ( ¬ МУЖСКОЙ ( P ) ) ИЛИ ( P = ОТЕЦ ( R )) ДЕЛАТЬ P := СТАРШИЙ ПОТОМОК ( P ) ; M := МОЛОДОЙ ПОТОМОК ( МАТЬ ( МАТЬ ( R ))) ; ПОКА ( M ¬ = NULL ) И ( ¬ МУЖСКОЙ ( M ) ) ДЕЛАТЬ M := СТАРШИЙ ПОТОМОК ( M ) ; ЕСЛИ P = NULL ТО M ИНАЧЕ ЕСЛИ M = NULL ТО P ИНАЧЕ ЕСЛИ ВОЗРАСТ ( P ) < ВОЗРАСТ ( M ) ТОГДА P ИНАЧЕ M КОНЕЦ