M4 (мова програмування)
M4 | |
---|---|
Дата появи | 1977 |
Творці | Браян Керніган |
m4 — макропроцесор, декларативна міні-мова програмування, розроблена в 1977 році програмістами Браяном Керніганом і Деннісом Рітчі. Призначений для копіювання вхідного символьного потоку у вихідний з перетворенням рядків шляком заміщення макросів їх значеннями.
m4 підтримує вбудовані макроси як власні функції, так і визначені користувачем. Макрос може приймати довільне число аргументів. Вбудовані макроси забезпечують включення файлів, виконання зовнішніх команд, арифметичні операції над цілими числами, маніпуляцію рядками тощо.
Приклад використання[ред. | ред. код]
Нижче наведено приклад використання m4 для генерації вебсторінки, у прикладі показано передачу в макроси аргументів та рекурсивний виклик функції.
Файл визначень макросів html.m4, визначає макроси користувача, містить вбудовані макроси та змінні:
- dnl — блокує вивід результату заміщення самих визначень, в даному випадку порожніх рядків;
- define — вводить нове ім'я (перший аргумент), інші аргументи, якщо є, визначають спосіб заміщення
- ifelse — груповий умовний оператор (на кшталт оператора switch мови C), визначає трійки з парою для порівняння та результатом при тотожності, останній аргумент, якщо є, визначає результат або подальші дії в разі нетотожності
- shift — здійснює зсув списку аргументів та зменшує лічильник їх кількості;
- $@ $# @1 — список аргументів, число аргументів, аргумент 1 відповідно.
define(_startpage,
`<head><title>$1</title></head>
<body>
<h1>$1</h1>')dnl
dnl
define(_listitems,
`ifelse($#, 0, ,
$#, 1, `<li>$1</li>',
`<li>$1</li>
_listitems(shift($@))')')dnl
dnl
define(_ul,
`<p>$1</p>
<ul>
_listitems(shift($@))'
</ul>)dnl
dnl
define(_endpage,
`<p>Last change: esyscmd(`date')</p>
</body>
</html>')dnl
Файл для обробки doc.txt, містить виклики макросів з передачею аргументів або без аргументів:
_startpage(Sample Page)
_ul(Sample list, First item, Second item)
_endpage
Результат виконання команди m4 html.m4 doc.txt:
<head><title>Sample Page</title></head>
<body>
<h1>Sample Page</h1>
<p>Sample list</p>
<ul>
<li>First item</li>
<li>Second item</li>
</ul>
<p>Last change: субота, 24 червня 2017 13:03:50 +0300
</p>
</body>
</html>
Посилання[ред. | ред. код]
- GNU M4 — GNU macro processor [Архівовано 2 липня 2017 у Wayback Machine.] (англ.)
- Макропроцессор m4 [Архівовано 15 червня 2017 у Wayback Machine.] (рос.)