إم 4 (معالج)

إم4 هو معالج الماكرو ذو الأغرض العامة من تصميم بريان كيرنيغان ودينيس ريتشي. إم4 هو امتداد لمعالج ماكرو في وقت سابق إم3، الذي كتبه ريتشي الكمبيوتر الصغيرة AP-3.

## الاستخدام

جميع إصدارات يونكس جعلت معالج الماكرو إم4 متاح، وبوسيكسPOSIX جعله موحداً. شعبية جنيو أوتوكونف GNU autoconf (الذي يتطلب جنو إم4 لإنشاء تركيب النصوص) قد شجعت العديد على تثبيته، حتى لو لم يكن هؤلاء الناس أنفسهم سيبرمجوا بـ إم4.

معالج الماكرو (أو المعالج) ويعمل كأداة تبديل النص. المستخدم النهائي يستخدمه في كثير من الأحيان إلى إعادة استخدام قوالب النص، تماما في برمجة التطبيقات، ولكن أيضا في تحرير النص ومعالجة النص والتطبيقات.

## التاريخ
 
أصبحت معالجات ماكرو شعبية عندما استخدم المبرمجين لغة التجميع. في تلك الأيام الأولى من البرمجة، لاحظت المبرمجين ان معظم برامجهم يتألف من نصوص متكررة، واخترعوا وسائل بسيطة لإعادة استخدام هذا النص. وسرعان ما اكتشفت المبرمجين المزايا ليس فقط في إعادة استخدام كتل كاملة من النص، ولكن أيضا في استبدال قيم مختلفة لمحيطات (وسائط) مماثلة. وهذا يعرف نطاق استخدام معالجات الماكرو.
كيرنيغان وريتشي قدما إم4 في عام 1977، واسندوه على أفكار كريستوفر ستراتشي. الخصائص المميزة لهذا النمط من معالجة الماكرو تشمل ما يلي :
* شكل حر للقاعد اللغوية (وليس على أساس خط مثل معالج الماكرو النموذجي المصمم لمعالجة لغة التجميع)
* الدرجة العالية من إعادة التوسع (وسائط الماكرو تتوسع مرتين: مرة خلال المسح الضوئي ومرة في وقت الاستكمال أو الاستيفاء)
تطبيق راشونال فورتران استخدم إم4 كمحرك الماكرو الخاص به من البداية، ومعظم متغيرات يونكس بحروا معه.

اعتبارا من عام 2009 العديد من التطبيقات استمرت في استخدام إم4 كجزء من مشروعautoconf GNU جنو أوتوكونف. وأيضا يظهر في عملية التكوين لـ sendإمail (نطاق واسع من عامل نقل البريد) ولإنشاء بصمات في حزمة أدوات الجي أي دي أيه gEDA toolsuite.

إم4 له استخدامات عديدة في توليد كود code generation، ولكن (كما هو الحال مع أي معالج ماكرو) المشاكل يصعب تصحيحها.

## مميزات

إم4 يقدم هذه التسهيلات :
* نموذج حر لقواعد اللغة، بدلا من الاستناد على الخط كأساس لقواعد لغة البرمجة
* درجة عالية من توسع الماكرو (وسائط الماكرو تتوسع مرتين: مرة خلال المسح الضوئي ومرة في وقت الاستكمال أو الاستيفاء)
* تبديل النص
* الاستعاضة عن الوسيط
* إدراج ملف
* التلاعب في سلسلة النص
* تقييم شرطي
* التعبيرات الحسابية
* واجهة النظام
* تشخيص المبرمج
* استقلال لغة البرمجة
* لغة الإنسان المستقلة
* يوفر قدرات لغة البرمجة
وخلافا لمعظم معالجات الماكرو في وقت سابق، إم4 لا يستهدف أي جهاز كمبيوتر معين أو لغة الإنسان ؛ تاريخيا، ومع ذلك، طور أصلاً لدعم لغة راتفور Ratfor من فورتران Fortran. وعلى عكس من بعض معالجات الماكرو الأخرى، إم4 هو آلة تورنغ كاملة تورنغ كاملة Turing-coإمplete، وكذلك لغة البرمجة العملية.

## مثال

القطعة التالية تعطي مثال بسيط يمكن أن يشكل جزءا من مكتبة لتوليد الكود الأتش تي أم أل HTإمL code. أنها تحدد تعليق الماركو إلى أقسام عدد تلقائيا :


```
divert(-1)
This `divert' discards this text. Note that I had to quote the `divert'
in the comment so it wouldn't get undiverted.

# In a true comment, I'm free to use words such as divert and other builtin
# m4 macros' names without consequence.

# This starts the count at ONE as the incr is a preincrement.
define(`H2_COUNT', 0)

# The H2_COUNT macro is redefined every time the H2 macro is used.
define(`H2',
	`define(`H2_COUNT', incr(H2_COUNT))<h2>H2_COUNT. $1</h2>')

divert(0)dnl Diversion to 0 means back to normal. dnl macro removes this line.
H2(First Section)
H2(Second Section)
H2(Conclusion)
```


عند معالجة هذا الرمز مع m4 يجب أن يولد النص التالي :


```
<h2>1. First Section</h2>
<h2>2. Second Section</h2>
<h2>3. Conclusion</h2>
```


ملاحظة كثرة استخدام dnl، التي تحذف حتى بما فيه السطرالجديد newline، وبالتالي تمنع ظهور العديد من الأسطر الفارغة التي تظهر في المخرجات.

## تطبيقات البرمجيات الحرة

وهناك نسخة من جنو إم4 GNU version of m4 موجودة. [3] [4] FreeBSD, NetBSD, and OpenBSD أيضا توفير تطبيقات مستقلة للغة إم4. وعلاوة على ذلك، وأدوات تطوير مشروع هايرلووم Heirloom Project يتضمن نسخة مجانية من اللغة إم4، المستمدة من أوبن سولاريسOpenSolaris..

## انظر أيضا
* قوالب الويب

## المراجع

## روابط خارجية
* GNU M4 website
* M4 tutorial
* Macro Magic: m4, Part One and Part Two (requires registration)

تصنيف:أدوات برمجة يونكس
تصنيف:خدمات مواصفات يونكس المنفردة
تصنيف:لغات برمجة ماكرو