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.] (рос.)
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
m4 makroprocesor deklarativna mini mova programuvannya rozroblena v 1977 roci programistami Brayanom Kerniganom i Dennisom Ritchi Priznachenij dlya kopiyuvannya vhidnogo simvolnogo potoku u vihidnij z peretvorennyam ryadkiv shlyakom zamishennya makrosiv yih znachennyami M4Data poyavi1977TvorciBrayan Kernigan m4 pidtrimuye vbudovani makrosi yak vlasni funkciyi tak i viznacheni koristuvachem Makros mozhe prijmati dovilne chislo argumentiv Vbudovani makrosi zabezpechuyut vklyuchennya fajliv vikonannya zovnishnih komand arifmetichni operaciyi nad cilimi chislami manipulyaciyu ryadkami tosho Priklad vikoristannyaNizhche navedeno priklad vikoristannya m4 dlya generaciyi vebstorinki u prikladi pokazano peredachu v makrosi argumentiv ta rekursivnij viklik funkciyi Fajl viznachen makrosiv html m4 viznachaye makrosi koristuvacha mistit vbudovani makrosi ta zminni dnl blokuye vivid rezultatu zamishennya samih viznachen v danomu vipadku porozhnih ryadkiv define vvodit nove im ya pershij argument inshi argumenti yaksho ye viznachayut sposib zamishennya ifelse grupovij umovnij operator na kshtalt operatora switch movi C viznachaye trijki z paroyu dlya porivnyannya ta rezultatom pri totozhnosti ostannij argument yaksho ye viznachaye rezultat abo podalshi diyi v razi netotozhnosti shift zdijsnyuye zsuv spisku argumentiv ta zmenshuye lichilnik yih kilkosti 1 spisok argumentiv chislo argumentiv argument 1 vidpovidno define startpage lt head gt lt title gt 1 lt title gt lt head gt lt body gt lt h1 gt 1 lt h1 gt dnl dnl define listitems ifelse 0 1 lt li gt 1 lt li gt lt li gt 1 lt li gt listitems shift dnl dnl define ul lt p gt 1 lt p gt lt ul gt listitems shift lt ul gt dnl dnl define endpage lt p gt Last change esyscmd date lt p gt lt body gt lt html gt dnl Fajl dlya obrobki doc txt mistit vikliki makrosiv z peredacheyu argumentiv abo bez argumentiv startpage Sample Page ul Sample list First item Second item endpage Rezultat vikonannya komandi m4 html m4 doc txt lt head gt lt title gt Sample Page lt title gt lt head gt lt body gt lt h1 gt Sample Page lt h1 gt lt p gt Sample list lt p gt lt ul gt lt li gt First item lt li gt lt li gt Second item lt li gt lt ul gt lt p gt Last change subota 24 chervnya 2017 13 03 50 0300 lt p gt lt body gt lt html gt PosilannyaGNU M4 GNU macro processor 2 lipnya 2017 u Wayback Machine angl Makroprocessor m4 15 chervnya 2017 u Wayback Machine ros