Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГОС_ответы.doc
Скачиваний:
35
Добавлен:
27.10.2018
Размер:
21.59 Mб
Скачать

25 Макропроцесори

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

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

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

Макропроцессор m4, разработанный в 1977 году легендарными программистами Брайаном Керниганом (Brian Kernighan) и Денисом Ритчи (Dennis Ritchie), предназначен для макрогенерации на предварительном проходе в различных языках. Макрогенерация означает копирование входного символьного потока в выходной с подстановкой макросов по мере их появления. Макросы могут быть встроенными или определенными пользователями, и принимать произвольное число аргументов. Имеется множество встроенных функций для включения файлов, запуска внешних команд, выполнения целочисленной арифметики, манипуляции строками.

Препроцессор m4 применяется во многих различных областях:

- Программирование

Стандартные препроцессоры большинства языков программирования (если таковые в них вообще есть) обычно значительно слабее чем m4, позволяя производить только простейшие подстановки (исключение — шаблонный препроцессор компилятора C++, но он не является «более мощным», он и m4 просто несравнимы). m4 даёт возможность писать компактный код, пригодный для повторного использования, там, где это не позволяют средства языка. Например, с его помощью возможна генерация SQL-запросов в момент компиляции (вместо динамически генерируемых при исполнении) и даже элементы аспектного программирования — автоматическое порождения блоков кода, обеспечивающих единую функциональность в различных компонентах программной системы (автоматическое порождение триггеров, обработка ошибок, отладочные проверки и т. п.).

- Документирование

В использовании, m4 гораздо более понятен и удобен, чем, например, препроцессор от TeX. Его можно использовать для порождения компактной, гибкой документации совместно с практически любой технологией документирования, основанной на обработке «плоских» текстов: TeX, LaTeX, Lout, SGML.

- Администрирование

m4 облегчает написание множества конфигурационных файлов, делая возможность удобно и «прозрачно» работать с «допотопными» форматами, или для гибкого внесения изменений в множество настроек различных сервисов, находящихся в разных файлах. Для этой цели он, в частности, используется в программе autoconf.