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> 

Посилання

[ред. | ред. код]