Jump to content

ОД/Я

ML/1 ( Macro Language/One ) — мощный макропроцессор общего назначения . [1]

Типичные варианты использования ML/1 включают:

  • редактирование, изменение, исправление или переформатирование текстовых файлов
  • перевод исходного кода с одного языка программирования на другой
  • действует как препроцессор исходного кода, позволяя пользователю добавлять новые синтаксические формы в существующий язык программирования.
  • поддержка параметризации исходного кода программы (например, параметр может определять, следует ли включать операторы отладки в исходный код программы, передаваемый компилятору)

ML/1 был разработан в 1966 году Питером Дж. Брауном в рамках докторской диссертации в Кембриджском университете в Англии. [2]

В 1984 году Роберт Д. Игер, один из коллег Питера Брауна в Кентском университете , переписал ML/I сначала на BCPL в 1981 году, а затем на C в 1984 году, что повысило его переносимость.

  • Обратите внимание, что первоначальное название языка Питера Брауна было ML/I, где (как в IBM PL/I ) последним символом является римская цифра «I», а не арабская цифра «1». Однако большинство последующих реализаций назывались ML/1 (где последним символом является арабская цифра «1»).

С тех пор ML/1 был портирован на многие платформы и операционные системы, включая VMS , MVS , MS-DOS , OS/2 и UNIX . В своих реализациях ML/1 Роберт Д. Игер добавил функции и возможности в дополнение к тем, которые изначально были указаны в диссертации Питера Брауна.

Эта версия доступна для нескольких платформ на веб-сайте ML/1 http://www.ml1.org.uk . На веб-сайте ML/1 представлена ​​дополнительная информация о ML/1, а также документация (включая учебное пособие, простое вводное руководство и полное руководство пользователя).

Хотя общее количество пользователей ML/1 в мире невелико, пользователи ML/1 есть по всему миру, и Боб переписывался с пользователями ML/1 в США, Канаде, Австралии, Новой Зеландии, Германии, Голландии. и Индия.

В статье 1976 года Эндрю С. Таненбаум описывает использование ML/I в качестве компилятора-компилятора . [3]

ML/I принимает входные данные в совершенно свободной форме, рассматривая данные как поток байтов, а не как серию строк или записей. не требуется какой-либо конкретный флаг Для обозначения расширения макроса , что делает его особенно полезным для обработки произвольного текста. Замены текста могут быть простыми (например, PIG заменить на DOG) или сложными (например, заменить элемент между третьей и четвертой запятыми после последней точки на содержимое какого-либо счетчика).

ML/I использовался для реализации нескольких элементов портативного программного обеспечения, включая его самого. Первоначально он был написан на специальном описательном языке, а затем преобразован в язык, подходящий для каждой целевой системы. Это сопоставление было выполнено с использованием самого ML/I. Существовали две разные формы этого описательного языка; высокий уровень и низкий уровень.

После этого сопоставления ML/I часто использовался для реализации SIL (языков реализации системы, таких как C) для нового поколения с 16-битной архитектурой миникомпьютеров .

Как работает ML/1

[ редактировать ]

В общих чертах, вот как работает ML/1.

  • Пользователь предоставляет ML/1 файл, содержащий входной текст.
  • В другом файле (или, опционально, в том же файле) пользователь предоставляет набор макросов ML/1. Макросы сообщают интерпретатору ML/1, какие вставки, удаления, расширения, переводы и другие изменения пользователь хочет внести во входной текст.
  • Когда ML/1 запускается с входным текстом, ML/1 следует инструкциям макроса ML/1, изменяет текст и записывает новый файл, содержащий измененный текст.

Отличительные особенности ML/1

[ редактировать ]

Есть несколько причин, по которым ML/1 является более мощным, чем простые утилиты «сканирования и замены».

ML/1 не обрабатывает текст построчно; он обрабатывает текст слово за словом (или, в терминологии ML/1, «атом за атомом»). Для многих приложений чрезвычайно полезна возможность обрабатывать текст как последовательность атомов, а не как последовательность символов. Предположим, например, что мы хотим перевести программу с языка программирования, имеющего синтаксис DO...END, на язык, имеющий синтаксис BEGIN...END. Поэтому мы хотим заменить «DO» на «BEGIN». Если мы выполним замену с помощью обычной утилиты сканирования и замены, все вхождения строки «DO» будут изменены на «BEGIN», включая любые «DO», которые встроены в такие слова, как «DOCUMENT» (которые будут стать «НАЧАЛО»). В ML/1, напротив, этого не произойдет, поскольку строка «DO» инициирует замену текста только тогда, когда она встречается как слово (то есть, когда ей предшествуют и после нее следуют разделители, такие как пробелы, табуляции, символы новой строки и т. д.). или знаки препинания).

ML/1 вместо того, чтобы работать построчно, распознает шаблоны текста, которые могут быть довольно сложными, вложенными, с несколькими разделителями и охватывать множество строк. ML/1 может, например, обрабатывать шаблон, такой как общий язык программирования IF... THEN... ELSE... ENDIF, который охватывает несколько строк и содержит встроенный текст, который сам может включать вложенный IF... THEN... ELSE... Структура ENDIF.

ML/1 может распознавать встроенные комментарии и буквальные цитаты и защищать их от изменения. Обычные утилиты сканирования и замены изменяют строки без разбора, встречаются ли они в тексте программы в виде ключевого слова или имени переменной, встроены в комментарий или в литерал в кавычках.

Чтобы иметь дело с такими сложными шаблонами, ML/1 должен быть самостоятельным языком программирования. Как и другие языки программирования, ML/1 поддерживает переменные и операторы присваивания, GOTO и метки, тесты IF... THEN и циклы. Эти функции придают ML/1 необычайную мощность и гибкость.

Ограничения

[ редактировать ]

ML/1 чувствителен к регистру, поэтому не поддерживает обработку текста без учета регистра.

  1. ^ Эй Джей Коул (26 ноября 1981 г.). Макропроцессоры . Архив Кубка. п. 85. ИСБН  978-0-521-28560-5 .
  2. ^ Браун, П.Дж. (1967). «Макропроцессор ML/I» . Коммуникации АКМ . 10 (10): 618–623. дои : 10.1145/363717.363746 . ISSN   0001-0782 .
  3. ^ Таненбаум, А.С. (1976). «Макропроцессор общего назначения как компилятор-компилятор для бедняков». Транзакции IEEE по разработке программного обеспечения . СЭ-2 (2): 121–125. дои : 10.1109/TSE.1976.233539 . ISSN   0098-5589 . S2CID   16317510 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: cb0d1cca313d1677251667aa0eb12e97__1714256220
URL1:https://arc.ask3.ru/arc/aa/cb/97/cb0d1cca313d1677251667aa0eb12e97.html
Заголовок, (Title) документа по адресу, URL1:
ML/I - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)