Макропроцессор общего назначения
Эта статья нуждается в дополнительных цитатах для проверки . ( сентябрь 2011 г. ) |
Макропроцессор общего назначения или общего назначения препроцессор — это макропроцессор , который не привязан и не интегрирован с конкретным языком или частью программного обеспечения.
Макропроцессор — это программа, которая копирует поток текста из одного места в другое, производя при этом систематический набор замен. Макропроцессоры часто встраиваются в другие программы, например в ассемблеры и компиляторы. Иногда это отдельные программы, которые можно использовать для обработки любого типа текста.
Макропроцессоры использовались для расширения языка (определения новых языковых конструкций, которые могут быть выражены через существующие языковые компоненты), для систематических замен текста, требующих принятия решений, а также для переформатирования текста (например, условного извлечения материала из файла 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] он был портирован на Unix версии 2 . |
СНОБОЛ | 1960-е годы | SNOBOL — это язык обработки строк, который способен выполнять большую часть предварительной обработки, которую может выполнить макропроцессор. |
XPOP | XPOP был еще одной попыткой Марка Халперна из IBM в 1960-х годах создать общий язык обработки макросов. | |
ТТМ | 1968 | TTM — это рекурсивный интерпретирующий язык, предназначенный в первую очередь для манипулирования строками, редактирования текста, определения и расширения макросов, а также для других приложений, обычно классифицируемых как системное программирование. Он был разработан в 1968 году Стивеном Кейном и Э. Кентом Гордоном в Калифорнийском технологическом институте . Оно происходит, в первую очередь, от GAP [5] и ГПМ. [1] |
GMP | 1970-е годы | Другой попыткой стал GMP (General Macro Processor), разработанный в середине 1970-х годов М. Булем из отдела DLB/GC компании CII на основе идей Р. Дж. Чеванса. Первая версия, протестированная совместно с Университетом Бордо I, работала на системе SIRIS8/IRIS80. Он был портирован на системы mini6 и был основным компонентом, участвовавшим в создании системы для этого семейства компьютеров. Процессор GMP использовал грамматики C2-Хомского для определения синтаксиса макросов и использовал императивный язык для выполнения вычислений и перехода к расширению макросов. |
М4 | 1977 | m4 был разработан для Unix Брайаном Керниганом и Деннисом Ритчи . |
ЕЛЕНА | Программное обеспечение: Практика и опыт , Том. 14, стр. 519–531, июнь 1984 г. | |
эхо | 1995 | gema — это контекстный макропроцессор, основанный на сопоставлении с образцом, написанный Дэвидом Н. Греем. Он заменяет/расширяет концепцию регулярных выражений контекстами. Контексты примерно соответствуют именованным наборам шаблонов. Как следствие, макросы в геме очень похожи на описание EBNF . [6] |
ГПЗ | 1996 | gpp — еще один макропроцессор общего назначения, написанный Дени Ору. Он похож на препроцессор C, но имеет более общую семантику и позволяет настраивать синтаксис (например, TeX , XHTML и Prolog ). можно определить скрипты, подобные [7] |
М5 | 1999 | m5 — макропроцессор общего назначения, написанный Уильямом А. Уордом-младшим. В отличие от многих макропроцессоров, m5 не интерпретирует входные данные напрямую. Вместо этого он использует двухпроходный подход, при котором первый проход преобразует входные данные в программу awk, а второй проход выполняет программу awk для получения окончательного результата. |
пиэкспандер | 2011 | pyexpander — макропроцессор общего назначения, основанный на языке программирования Python . Помимо простой замены макросов, он позволяет оценивать произвольные выражения Python и выполнять код Python, завершая pyexpander Turing . [8] |
Ассемблер текста | 2014 | Text Assembler — текстовый/макропроцессор общего назначения, основанный на языке программирования JavaScript . Помимо простой замены макросов, он позволяет оценивать произвольные выражения JavaScript и выполнять код JavaScript. Он также может загружать модели данных JSON для более сложных задач обработки текста на основе данных. [9] |
ПП | 2016 | PP — это текстовый препроцессор, разработанный для Pandoc (и, в более общем смысле, для Markdown и reStructuredText). ПП реализует: Макросы, грамотное программирование, GraphViz , PlantUML и диаграммы ditaa, скрипты Bash, Cmd , PowerShell , Python и Haskell . [10] |
минимак | minimac — минималистичный макропроцессор общего назначения. Он работает как фильтр потока символов, рекурсивно расширяя макросы по мере их обнаружения. Это необычно для макропроцессора тем, что он использует явный стек аргументов, а пользовательские функции определяются путем конкатенации (аналогично языку Форт ). [11] | |
аа_макрос | 2017 | aa_macro — это язык обработки текста на основе символьных потоков с открытым исходным кодом, написанный на Python. Текст обрабатывается слева направо и изнутри наружу. Набор предварительно определенных встроенных функций обеспечивает фундаментальные механизмы обработки, которые можно использовать напрямую или как элементы пользовательских стилей. Язык является расширяемым пользователем, и доступен wtfm, веб-оболочка для подготовки документов с открытым исходным кодом для этого языка. [12] [13] |
См. также
[ редактировать ]- Макрос (информатика) - правило замены заданного входа заданным выходом.
Ссылки
[ редактировать ]- ^ Перейти обратно: а б Стрейчи, Кристофер (октябрь 1965 г.). «Макрогенератор общего назначения» . Компьютерный журнал . 8 (3): 225–241. дои : 10.1093/comjnl/8.3.225 .
- ^ Уэйт, Уильям М. (июль 1970 г.). «Система мобильного программирования: ЭТАП2». Коммуникации АКМ . 13 (7). Нью-Йорк, штат Нью-Йорк, США: ACM: 415–421. дои : 10.1145/362686.362691 .
- ^ Бриттен, Чарльз Рэндил (26 июня 2020 г.). «Перевод кода 8080 в 8086 — перевод Microsoft кода 8080 в 8086 и другие 16-битные процессоры» . Архивировано из оригинала 23 июля 2021 г. Проверено 28 ноября 2021 г.
Stage2 был создан профессором Уильямом Уэйтом в Университете Колорадо в конце шестидесятых годов как основной компонент его системы мобильного программирования MPS. Stage2 использует алгоритм сопоставления с образцом для сопоставления входных строк текста с набором шаблонов. Каждый шаблон является первой строкой макроса, и когда совпадение распознается, тело кода этого макроса обрабатывается для создания выходного текста, сообщений об ошибках или создания построенной строки, которая отправляется для дальнейшего сопоставления с шаблоном. Таким образом, процесс является полностью рекурсивным и весьма мощным по своим возможностям преобразования текста. Фактически, его можно использовать для реализации компилятора языка программирования.
- ^ Коул, Эй Джей (1981). Макропроцессоры (2-е, исправленное изд.). Архив Кубка. п. 254.
- ^ Фарбер, DJ, Система сборки 635 — GAP. Вычислительный центр Bell Telephone Laboratories (1964).
- ^ «Гема» . www.gema.sourceforge.net . Проверено 21 апреля 2017 г.
- ^ «ГПП» . logological.org/gpp . Проверено 21 апреля 2017 г.
- ^ «Добро пожаловать в документацию pyexpander! — документация pyexpander 1.7.0» . pyexpander.sourceforge.net . Проверено 21 апреля 2017 г.
- ^ «Акиви — Ассемблер текста» . www.akiwi.co.uk . Проверено 21 апреля 2017 г.
- ^ Делор, Кристоф. «PP — универсальный препроцессор (с учетом Pandoc)» . cdsoft.fr . Проверено 17 октября 2017 г.
- ^ «минимак» . Freshmeat.net . Проверено 21 апреля 2017 г.
- ^ "аа_макрос" . Проверено 24 ноября 2017 г.
- ^ "чёрт побери" . Проверено 24 ноября 2017 г.