Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

IMP - это ранний язык системного программирования , разработанный Эдгаром Т. Айронсом в конце 1960-х - начале 1970-х годов в Агентстве национальной безопасности (АНБ). В отличие от большинства других системных языков, IMP поддерживает синтаксис - расширяемое программирование .

Несмотря на то, что его разработчик называет этот язык «основанным на АЛГОЛе » [ необходима цитата ] , IMP исключает многие определяющие особенности этого языка, поддерживая при этом очень не похожий на АЛГОЛ: расширяемость синтаксиса.

Компилятор для IMP существовал еще в 1965 году и был использован для программирования CDC 6600 системы разделения времени, который был в использовании в Институте оборонных исследований с 1967 г. Несмотря на то, что компилятор работает медленнее , чем аналогичные из них для не расширяемых языков, его был использован для практической производственной работы.

Компиляторы IMP были разработаны для компьютеров CDC 6600 , Cray , PDP-10 и PDP-11 . Важными версиями IMP были IMP65, IMP70 и IMP72.

Расширяемый синтаксис в IMP72 [ править ]

Будучи языком программирования с расширяемым синтаксисом, IMP позволяет программисту расширять его синтаксис, хотя никаких специальных средств для добавления к нему новых типов данных или структур не предусмотрено. Для достижения расширяемости синтаксиса IMP использует мощный алгоритм синтаксического анализа, основанный на графе синтаксиса и нескольких матрицах связи. Программист может добавлять в граф новые продукты формы Бэкуса – Наура (BNF).

Синтаксис IMP72 расширен с помощью операторов синтаксиса расширенного BNF, включенных в программу с исходным кодом . Механизм настолько мощный, что позволял реализовать язык сам по себе, то есть с помощью исходного файла IMP72, полностью состоящего из операторов синтаксиса, который был введен в тривиальный компилятор, который изначально был в состоянии преобразовать простейший случай оператора синтаксиса . Существует также простая форма синтаксического оператора, которая для обычного пользователя выглядит как макрос .

По сути, оператор синтаксиса - это расширенная продукция BNF со связанной семантикой, добавленной справа:

< класс > :: =  синтаксическая-часть  :: =  семантическая-часть

Например, чтобы добавить конструкцию, описываемую следующим BNF:

< EXP > :: =  ПРИРОСТ < VBL >

с семантикой, которая INCREMENT Vдолжна быть преобразована V ← V + 1, программисту нужно будет только вставить следующий оператор IMP :

< EXP > :: =  INCREMENT < VBL , A> :: =  "A ← A + 1"

Семантическая часть также может содержать вызовы семантических подпрограмм , как в следующем синтаксисе:

< ATOM > :: =  ABS  ( < ATOM , A> )  :: =  DEWOP ( 214 B, AREG1 ( 1 , 13 ) , A )

Семантическая часть этого утверждения состоит из вызова семантической процедуры DEWOP. Аргументами являются восьмеричная константа 214B, вызов семантической подпрограммы AREG1(1,13)и A, который является объектом на вершине стека в момент вызова этой продукции. DEWOPпредставляет собой семантическую подпрограмму, которая соответственно принимает в качестве аргументов код операции машинного языка PDP-10 , объект регистра и любой другой объект и создает объект, значение которого является результатом выполнения указанной машинной инструкции с использованием в качестве поля адреса объекта, который является его последний аргумент. В этом примере код операции 214Bобозначает Load Magnitudeинструкцию, и, таким образом, результатом вышеупомянутого синтаксического оператора будет компиляция кода для вычисления абсолютного значения A.

Фольклорная операционная система [ править ]

IMP был языком, который использовался в собственной операционной системе NSA с разделением времени под названием Folklore . [1]

См. Также [ править ]

  • Эдинбургский язык IMP (контраст)

Ссылки [ править ]

  1. ^ Коттер, Джордж. «Высокопроизводительные вычисления в Агентстве национальной безопасности» . Границы суперкомпьютеров II . Калифорнийский университет Press . Проверено 25 мая 2012 года .
  • Айронс, Эдгар Т. (январь 1970 г.). «Опыт работы с расширяемым языком». Коммуникации ACM . Ассоциация вычислительной техники . 13 (1): 31–40. DOI : 10.1145 / 361953.361966 . S2CID  17635545 .
  • Билофски, Уолтер (май 1974). «Расширение синтаксиса и язык программирования IMP72». Уведомления SIGPLAN . Ассоциация вычислительной техники . 9 (5): 13–30. DOI : 10.1145 / 987413.987416 . S2CID  2170981 - через Йельский университет.

Внешние ссылки [ править ]

  • Справочное руководство PDP-10 IMP72
  • Источники IMP72 (dcus: [43,50306] *. *)