Универсальный макропроцессор или универсальный препроцессор — это макропроцессор , который не привязан к определенному языку или программному обеспечению и не интегрирован с ними.
Макропроцессор — это программа, которая копирует поток текста из одного места в другое, делая при этом систематический набор замен. Макропроцессоры часто встраиваются в другие программы, такие как ассемблеры и компиляторы. Иногда они являются автономными программами, которые можно использовать для обработки любого типа текста.
Макропроцессоры использовались для расширения языка (определения новых языковых конструкций, которые могут быть выражены в терминах существующих языковых компонентов), для систематических замен текста, требующих принятия решений, и для переформатирования текста (например, условного извлечения материала из HTML- файла).
Имя | Год | Описание |
---|---|---|
ГПМ | 1960-е | Одним из первых макропроцессоров был GPM (Макрогенератор общего назначения ).[1]Разработан в Кембриджском университете, Великобритания, в середине 1960-х годов под руководствомКристофера Стрейчи. |
МЛ/И | 1960-е | Одним из особенно важных макропроцессоров общего назначения был (и остается) ML/I ( Macro Language One ). Он был разработан в рамках докторской диссертации аспирантом Кембриджа Питером Дж. Брауном. ML/I работает с потоком символов и не требует специального формата для ввода или каких-либо специальных флаговых символов для введения макросов. |
ЭТАП2 | 1960-е | Современником ML/I был STAGE2 [2] , часть мобильной системы программирования Уильяма Уэйта . [3] Это также макропроцессор общего назначения, но он обрабатывает входные данные построчно, сопоставляя каждую строку с заданными шаблонами; он примечателен тем, что не зависит от набора символов, требуя только, чтобы цифры 0-9 были смежными и в указанном порядке (условие, не соблюдавшееся некоторыми 6-битными и BCD- кодами символов той эпохи). |
М6 | 1960-е | Ранний макропроцессор, разработанный в AT&T Bell Laboratories Дугласом Макилроем , Робертом Моррисом и Эндрю Холлом. На него оказали влияние GPM и TRAC . Реализованный в FORTRAN IV , [4] он был перенесен на версию 2 Unix . |
СНОБОЛ | 1960-е | SNOBOL — это язык обработки строк, способный выполнять большую часть предварительной обработки, которую может выполнять макропроцессор. |
XPOP | XPOP был еще одной попыткой создания общего языка обработки макросов, предпринятой Марком Халперном в IBM в 1960-х годах. | |
ТТМ | 1968 | TTM — рекурсивный, интерпретируемый язык, разработанный в первую очередь для обработки строк, редактирования текста, определения и расширения макросов и других приложений, обычно классифицируемых как системное программирование. Он был разработан в 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 для определения синтаксиса макросов и использовал императивный язык для выполнения вычислений и перехода к расширению макросов. |
М4 | 1977 | m4 был разработан и написан на языке C для Unix Деннисом Ритчи и преобразован в Ratfor Брайаном Керниганом . [6] |
ЕЛЕНА | Программное обеспечение: практика и опыт , том 14, стр. 519–531, июнь 1984 г. | |
гема | 1995 | gema — это контекстный макропроцессор, основанный на сопоставлении с образцом, написанный Дэвидом Н. Греем. Он заменяет/улучшает концепцию регулярных выражений контекстами. Контексты примерно соответствуют именованным наборам образцов. Как следствие, макросы в gema очень похожи на описание EBNF . [7] |
ГПП | 1996 | gpp — еще один общий макропроцессор, написанный Денисом Ору. Он напоминает препроцессор C, но имеет более общую семантику и допускает настраиваемый синтаксис (например, можно определить скрипты типа TeX , XHTML и Prolog ). [8] |
М5 | 1999 | m5 — это макропроцессор общего назначения, написанный Уильямом А. Уордом-младшим. В отличие от многих макропроцессоров, m5 не интерпретирует напрямую свой ввод. Вместо этого он использует двухпроходный подход, в котором первый проход транслирует ввод в программу awk, а второй проход выполняет программу awk для получения конечного вывода. |
pyexpander | 2011 | pyexpander — это макропроцессор общего назначения на основе языка программирования Python . Помимо простой замены макросов он позволяет оценивать произвольные выражения Python и выполнять код Python. |
Текстовый ассемблер | 2014 | Text Assembler — это универсальный текстовый/макропроцессор на основе языка программирования JavaScript . Помимо простой замены макросов, он позволяет оценивать произвольные выражения JavaScript и выполнять код JavaScript. Он также может загружать модели данных JSON для более сложных задач обработки текста, управляемых данными. [9] |
ПП | 2016 | PP — текстовый препроцессор, разработанный для Pandoc (и в более общем плане Markdown и reStructuredText). PP реализует: макросы, литературное программирование, диаграммы GraphViz , PlantUML и ditaa, скрипты Bash, Cmd , PowerShell , Python и Haskell . [10] |
минимак | minimac — это минималистский макропроцессор общего назначения. Он работает как фильтр потока символов, рекурсивно расширяя макросы по мере их появления. Он необычен для макропроцессора тем, что использует явный стек аргументов, а пользовательские функции определяются конкатенацией (аналогично языку Forth ). [11] | |
аа_макрос | 2017 | aa_macro — это язык обработки текста с открытым исходным кодом, основанный на потоке символов, написанный на Python. Текст обрабатывается слева направо, изнутри наружу. Выборка предопределенных встроенных функций обеспечивает фундаментальные механизмы обработки, которые могут использоваться напрямую или как элементы стилей, определяемых пользователем. Язык расширяем пользователем, и доступен wtfm — веб-оболочка для подготовки документов с открытым исходным кодом для этого языка. [12] [13] |
Stage2 был создан профессором Уильямом Уэйтом в Университете Колорадо в конце шестидесятых как основной компонент его мобильной системы программирования MPS. Stage2 использует алгоритм сопоставления с образцом для сопоставления входных строк текста с набором шаблонов. Каждый шаблон является первой строкой макроса, и когда совпадение распознается, тело кода этого макроса обрабатывается для создания выходного текста, сообщений об ошибках или создания сконструированной строки, которая отправляется для дальнейшего сопоставления с шаблоном. Таким образом, процесс полностью рекурсивен и весьма эффективен в своих возможностях для преобразования текста. Фактически, его можно использовать для реализации компилятора языка программирования.