Универсальный макропроцессор

Макропроцессор, который не привязан к определенному языку или программному обеспечению и не интегрирован с ними.

Универсальный макропроцессор или универсальный препроцессор — это макропроцессор , который не привязан к определенному языку или программному обеспечению и не интегрирован с ними.

Макропроцессор — это программа, которая копирует поток текста из одного места в другое, делая при этом систематический набор замен. Макропроцессоры часто встраиваются в другие программы, такие как ассемблеры и компиляторы. Иногда они являются автономными программами, которые можно использовать для обработки любого типа текста.

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

Примеры макропроцессоров общего назначения

ИмяГодОписание
ГПМ1960-еОдним из первых макропроцессоров был GPM (Макрогенератор общего назначения ).[1]Разработан в Кембриджском университете, Великобритания, в середине 1960-х годов под руководствомКристофера Стрейчи.
МЛ/И1960-еОдним из особенно важных макропроцессоров общего назначения был (и остается) ML/I ( Macro Language One ). Он был разработан в рамках докторской диссертации аспирантом Кембриджа Питером Дж. Брауном. ML/I работает с потоком символов и не требует специального формата для ввода или каких-либо специальных флаговых символов для введения макросов.
ЭТАП21960-еСовременником ML/I был STAGE2 [2] , часть мобильной системы программирования Уильяма Уэйта . [3] Это также макропроцессор общего назначения, но он обрабатывает входные данные построчно, сопоставляя каждую строку с заданными шаблонами; он примечателен тем, что не зависит от набора символов, требуя только, чтобы цифры 0-9 были смежными и в указанном порядке (условие, не соблюдавшееся некоторыми 6-битными и BCD- кодами символов той эпохи).
М61960-еРанний макропроцессор, разработанный в AT&T Bell Laboratories Дугласом Макилроем , Робертом Моррисом и Эндрю Холлом. На него оказали влияние GPM и TRAC . Реализованный в FORTRAN IV , [4] он был перенесен на версию 2 Unix .
СНОБОЛ1960-еSNOBOL — это язык обработки строк, способный выполнять большую часть предварительной обработки, которую может выполнять макропроцессор.
XPOPXPOP ​​был еще одной попыткой создания общего языка обработки макросов, предпринятой Марком Халперном в IBM в 1960-х годах.
ТТМ1968TTM — рекурсивный, интерпретируемый язык, разработанный в первую очередь для обработки строк, редактирования текста, определения и расширения макросов и других приложений, обычно классифицируемых как системное программирование. Он был разработан в 1968 году Стивеном Кейном и Э. Кентом Гордоном в Калифорнийском технологическом институте . Он получен, в первую очередь, из GAP [5] и GPM. [1]
НМП1970-еДругой попыткой был GMP (General Macro Processor), разработанный в середине 1970-х годов M Boule в отделе DLB/GC компании CII по идеям RJ Chevance. Протестированная совместно с университетом Bordeaux I, первая версия работала на системе SIRIS8/IRIS80. Она была перенесена на системы mini6 и стала основным компонентом, задействованным в генерации системы для этого семейства компьютеров. Процессор GMP использовал грамматики C2-Chomsky для определения синтаксиса макросов и использовал императивный язык для выполнения вычислений и перехода к расширению макросов.
М41977m4 был разработан и написан на языке C для Unix Деннисом Ритчи и преобразован в Ratfor Брайаном Керниганом . [6]
ЕЛЕНАПрограммное обеспечение: практика и опыт , том 14, стр. 519–531, июнь 1984 г.
гема1995gema — это контекстный макропроцессор, основанный на сопоставлении с образцом, написанный Дэвидом Н. Греем. Он заменяет/улучшает концепцию регулярных выражений контекстами. Контексты примерно соответствуют именованным наборам образцов. Как следствие, макросы в gema очень похожи на описание EBNF . [7]
ГПП1996gpp — еще один общий макропроцессор, написанный Денисом Ору. Он напоминает препроцессор C, но имеет более общую семантику и допускает настраиваемый синтаксис (например, можно определить скрипты типа TeX , XHTML и Prolog ). [8]
М51999m5 — это макропроцессор общего назначения, написанный Уильямом А. Уордом-младшим. В отличие от многих макропроцессоров, m5 не интерпретирует напрямую свой ввод. Вместо этого он использует двухпроходный подход, в котором первый проход транслирует ввод в программу awk, а второй проход выполняет программу awk для получения конечного вывода.
pyexpander2011pyexpander — это макропроцессор общего назначения на основе языка программирования Python . Помимо простой замены макросов он позволяет оценивать произвольные выражения Python и выполнять код Python.
Текстовый ассемблер2014Text Assembler — это универсальный текстовый/макропроцессор на основе языка программирования JavaScript . Помимо простой замены макросов, он позволяет оценивать произвольные выражения JavaScript и выполнять код JavaScript. Он также может загружать модели данных JSON для более сложных задач обработки текста, управляемых данными. [9]
ПП2016PP — текстовый препроцессор, разработанный для Pandoc (и в более общем плане Markdown и reStructuredText). PP реализует: макросы, литературное программирование, диаграммы GraphViz , PlantUML и ditaa, скрипты Bash, Cmd , PowerShell , Python и Haskell . [10]
минимакminimac — это минималистский макропроцессор общего назначения. Он работает как фильтр потока символов, рекурсивно расширяя макросы по мере их появления. Он необычен для макропроцессора тем, что использует явный стек аргументов, а пользовательские функции определяются конкатенацией (аналогично языку Forth ). [11]
аа_макрос2017aa_macro — это язык обработки текста с открытым исходным кодом, основанный на потоке символов, написанный на Python. Текст обрабатывается слева направо, изнутри наружу. Выборка предопределенных встроенных функций обеспечивает фундаментальные механизмы обработки, которые могут использоваться напрямую или как элементы стилей, определяемых пользователем. Язык расширяем пользователем, и доступен wtfm — веб-оболочка для подготовки документов с открытым исходным кодом для этого языка. [12] [13]

Смотрите также

Ссылки

  1. ^ ab Strachey, Christopher (октябрь 1965 г.). "Макрогенератор общего назначения". Computer Journal . 8 (3): 225–241 . doi : 10.1093/comjnl/8.3.225 .
  2. ^ Уэйт, Уильям М. (июль 1970 г.). «Система мобильного программирования: STAGE2». Сообщения ACM . 13 (7). Нью-Йорк, Нью-Йорк, США: ACM: 415– 421. doi :10.1145/362686.362691.
  3. ^ Бриттен, Чарльз Рэндил (2020-06-26). "Трансляция кода 8080 в 8086 - Microsoft Translation of 8080 Code to 8086 and Other 16-Bit Processors". Архивировано из оригинала 2021-07-23 . Получено 2021-11-28 . Stage2 был создан профессором Уильямом Уэйтом в Университете Колорадо в конце шестидесятых как основной компонент его мобильной системы программирования MPS. Stage2 использует алгоритм сопоставления с образцом для сопоставления входных строк текста с набором шаблонов. Каждый шаблон является первой строкой макроса, и когда совпадение распознается, тело кода этого макроса обрабатывается для создания выходного текста, сообщений об ошибках или создания сконструированной строки, которая отправляется для дальнейшего сопоставления с шаблоном. Таким образом, процесс полностью рекурсивен и весьма эффективен в своих возможностях для преобразования текста. Фактически, его можно использовать для реализации компилятора языка программирования.
  4. ^ Коул, А. Дж. (1981). Макропроцессоры (2-е, исправленное издание). Архив CUP. стр. 254.
  5. ^ Фарбер, DJ, 635 Assembly System - GAP. Bell Telephone Laboratories Computation Center (1964).
  6. ^ Керниган, Брайан В.; Плогер, П. Дж. (1976). Программные средства . Reading, Массачусетс: Addison-Wesley. стр. 283. ISBN 0-201-03669-X.
  7. ^ "Gema". gema.sourceforge.net . Получено 2017-04-21 .
  8. ^ "GPP". logological.org/gpp . Получено 21 апреля 2017 г. .
  9. ^ "akiwi - Текстовый ассемблер". www.akiwi.co.uk . Получено 2017-04-21 .
  10. ^ Делор, Кристоф. "PP - универсальный препроцессор (с учетом Pandoc)". cdsoft.fr . Получено 17 октября 2017 г.
  11. ^ "minimac". freshmeat.net . Получено 2017-04-21 .
  12. ^ "aa_macro" . Получено 2017-11-24 .
  13. ^ "wtfm" . Получено 2017-11-24 .
Взято с "https://en.wikipedia.org/w/index.php?title=Макропроцессор_общего_назначения&oldid=1263463954#STAGE2"