المعالج المسبق
في علم الحاسوب ، يُعرف المعالج المسبق (أو المترجم المسبق ) [ 1 ] بأنه برنامج يُعالج بيانات الإدخال لإنتاج مخرجات تُستخدم كمدخلات في برنامج آخر. تُسمى هذه المخرجات شكلاً مُعالَجاً مسبقاً لبيانات الإدخال، والتي غالباً ما تستخدمها برامج لاحقة مثل المترجمات . يعتمد مقدار ونوع المعالجة على طبيعة المعالج المسبق؛ فبعض المعالجات المسبقة لا تستطيع سوى إجراء عمليات استبدال نصية بسيطة وتوسيع وحدات الماكرو ، بينما تتمتع معالجات أخرى بقدرات لغات برمجة كاملة .
من الأمثلة الشائعة في برمجة الحاسوب المعالجة التي تُجرى على الشيفرة المصدرية قبل خطوة الترجمة. في بعض لغات البرمجة (مثل C و PL/I )، توجد مرحلة ترجمة تُعرف بالمعالجة المسبقة . وقد تشمل هذه المرحلة أيضًا معالجة الماكرو، وتضمين الملفات، وتوسيعات اللغة.
معالجات مسبقة معجمية
تُعدّ المعالجات المعجمية المسبقة أدنى مستويات المعالجات المسبقة، إذ لا تتطلب سوى التحليل المعجمي ، أي أنها تعمل على النص المصدر قبل أي تحليل نحوي ، وذلك عن طريق استبدال تسلسلات الأحرف المُجزأة بتسلسلات أحرف مُجزأة أخرى، وفقًا لقواعد يُحددها المستخدم. وعادةً ما تُجري هذه المعالجات استبدالًا شاملاً ، وإدراجًا نصيًا لملفات أخرى، وتجميعًا أو تضمينًا مشروطًا.
معالج مسبق للغة C
أكثر الأمثلة شيوعًا على ذلك هو معالج C المسبق ، الذي يأخذ الأسطر التي تبدأ بـ '#' كتعليمات . لا يتوقع معالج C المسبق أن يستخدم مُدخله بنية لغة C. تتبع بعض اللغات نهجًا مختلفًا وتستخدم ميزات اللغة المدمجة لتحقيق نتائج مماثلة. على سبيل المثال:
- بدلاً من وحدات الماكرو، تستخدم بعض اللغات التضمين المباشر والقوالب بشكل مكثف.
- بدلاً من تضمين الملفات، تستخدم بعض اللغات عمليات استيراد وقت الترجمة التي تعتمد على معلومات النوع في كود الكائن.
- تستخدم بعض اللغات تقنية حذف التعليمات البرمجية غير المستخدمة
if-then-elseلتحقيق التجميع المشروط .
معالجات معجمية أخرى
تشمل المعالجات المعجمية المسبقة الأخرى m4 للأغراض العامة ، والذي يستخدم بشكل شائع في أنظمة البناء متعددة المنصات مثل autoconf ، و GEMA ، وهو معالج ماكرو مفتوح المصدر يعمل على أنماط السياق.
المعالجات المسبقة النحوية
ظهرت المعالجات المسبقة النحوية مع عائلة لغات ليسب . وتتمثل وظيفتها في تحويل أشجار بناء الجملة وفقًا لعدد من القواعد التي يُحددها المستخدم. في بعض لغات البرمجة، تُكتب القواعد بنفس لغة البرنامج (انعكاس وقت الترجمة). هذا هو الحال مع ليسب و OCaml . بينما تعتمد لغات أخرى على لغة خارجية بالكامل لتحديد التحويلات، مثل معالج XSLT المسبق لـ XML ، أو نظيره ذي الكتابة الثابتة CDuce.
تُستخدم المعالجات المسبقة النحوية عادةً لتخصيص بناء جملة لغة ما، أو توسيع لغة ما عن طريق إضافة عناصر بدائية جديدة، أو تضمين لغة برمجة خاصة بالمجال (DSL) داخل لغة عامة الأغراض.
تخصيص بناء الجملة
من الأمثلة الجيدة على تخصيص بناء الجملة وجود صيغتين مختلفتين في لغة البرمجة Objective Caml . [ 2 ] يمكن كتابة البرامج بشكل متساوٍ باستخدام "الصيغة العادية" أو "الصيغة المعدلة"، ويمكن تنسيقها بشكل جميل باستخدام أي من الصيغتين عند الحاجة.
وبالمثل، يقوم عدد من البرامج المكتوبة بلغة OCaml بتخصيص بناء الجملة للغة عن طريق إضافة عوامل تشغيل جديدة.
توسيع اللغة
تُعدّ عائلة لغات ليسب من أفضل الأمثلة على توسيع اللغة باستخدام وحدات الماكرو . فبينما تُعتبر هذه اللغات، في حد ذاتها، لغات وظيفية بسيطة ذات كتابة ديناميكية، فإن التوزيعات القياسية لـ Scheme أو Common Lisp تسمح بالبرمجة الإجرائية أو البرمجة كائنية التوجه، بالإضافة إلى الكتابة الثابتة. تُنفَّذ جميع هذه الميزات تقريبًا من خلال المعالجة المسبقة للنحو، مع العلم أن مرحلة "توسيع الماكرو" في عملية الترجمة تتم بواسطة المُترجم في ليسب. ويمكن اعتبار هذه المرحلة شكلًا من أشكال المعالجة المسبقة، لأنها تحدث قبل المراحل الأخرى من عملية الترجمة.
التخصص في لغة
من السمات غير المألوفة لعائلة لغات ليسب إمكانية استخدام وحدات الماكرو لإنشاء لغة برمجة خاصة بالمجال (DSL) داخلية. عادةً، في مشروع كبير قائم على ليسب ، قد تُكتب وحدة برمجية بلغات مصغرة متعددة ، إحداها ربما تستخدم لهجة ليسب مبنية على لغة SQL ، وأخرى مكتوبة بلهجة متخصصة في واجهات المستخدم الرسومية أو الطباعة المنسقة، وما إلى ذلك. تحتوي المكتبة القياسية للغة Common Lisp على مثال لهذا المستوى من التجريد النحوي في شكل ماكرو LOOP، الذي يُنفذ لغة مصغرة شبيهة بلغة Algol لوصف التكرار المعقد، مع تمكين استخدام عوامل ليسب القياسية.
توفر لغة /معالج MetaOCaml المسبق ميزات مماثلة للغات البرمجة الخاصة بالمجالات الخارجية. يأخذ هذا المعالج المسبق وصف دلالات اللغة (أي المفسر)، ومن خلال الجمع بين التفسير في وقت الترجمة وتوليد الشفرة، يحول هذا التعريف إلى مترجم للغة برمجة OCaml ، ومن تلك اللغة، إما إلى رمز وسيط أو إلى شفرة أصلية.
معالج مسبق للأغراض العامة
تُخصص معظم المعالجات المسبقة لمهمة معالجة بيانات محددة (مثل ترجمة لغة C). وقد يُروج لمعالج مسبق على أنه عام الأغراض ، أي أنه غير موجه لاستخدام أو لغة برمجة محددة، وإنما يُستخدم في مجموعة واسعة من مهام معالجة النصوص.
يُعدّ M4 على الأرجح المثال الأكثر شهرةً لهذا النوع من المعالجات المسبقة متعددة الأغراض، على الرغم من أن معالج C المسبق يُستخدم أحيانًا في أدوار غير مُخصصة للغة C. أمثلة:
- استخدام معالج C المسبق لمعالجة جافا سكريبت المسبقة . [ 3 ] [ 4 ]
- استخدام معالج C المسبق لمعالجة شجرة الأجهزة داخل نواة لينكس . [ 5 ]
- باستخدام M4 (انظر المثال الموجود في المقالة) أو معالج C المسبق [ 6 ] كمحرك قوالب ، لتوليد HTML .
- imake ، واجهة بناء تستخدم معالج C المسبق، مكتوبة لنظام X Window ولكنها الآن مهملة لصالح automake .
- grompp ، وهو معالج مسبق لملفات إدخال المحاكاة لـ GROMACS (وهو برنامج سريع ومجاني ومفتوح المصدر لبعض المشاكل في الكيمياء الحاسوبية ) والذي يستدعي معالج النظام C المسبق (أو معالج مسبق آخر كما هو محدد بواسطة ملف إدخال المحاكاة) لتحليل الطوبولوجيا، باستخدام آليات #define و #include في الغالب لتحديد الطوبولوجيا الفعالة في وقت تشغيل grompp.
انظر أيضاً
- التوجيه (البرمجة) - بنية لغوية تحدد كيفية معالجة المترجم لمدخلاته
- البرمجة الفوقية - نموذج البرمجة
- وحدات الماكرو – قاعدة لاستبدال مجموعة من المدخلات بمجموعة من المخرجات
- المترجم من المصدر إلى المصدر ، والمعروف أيضًا باسم المترجم البرمجي – مترجم شفرة المصدر الحاسوبية
- ساس (لغة أنماط CSS) – صفحات لغة أنماط CSS تعرض أوصافًا مختصرة لأهداف إعادة التوجيه
- ستايلس (لغة تنسيق الصفحات) – لغة معالجة مسبقة لتنسيق الصفحات. صفحات تعرض أوصافًا مختصرة لأهداف إعادة التوجيه.
- لغة أنماط Less (لغة أنماط ديناميكية) – صفحات تعرض أوصافًا مختصرة لأهداف إعادة التوجيه
- مقتطف برمجي – كمية صغيرة من التعليمات البرمجية المصدرية تُستخدم لزيادة الإنتاجية
- محرك القوالب – برنامج يستخدم القوالب لإنتاج المستندات
- معالج النصوص C المسبق – معالج نصوص يُستخدم مع لغتي C و C++ وأدوات البرمجة الأخرى
- معالج OCaml المسبق - برنامج الطباعة الجميلة – نظام برمجيات البرمجة
- معالج PL /I المسبق
- معالج تتبع البرامج في نظام التشغيل ويندوز
- معالج ماكرو للأغراض العامة – معالج ماكرو غير مرتبط بلغة برمجة أو برنامج معين
مراجع
- ↑ "ما هو المترجم المسبق؟" . IBM .
- ↑ الصيغة المنقحة من موقع لغة كاميل
- ↑ شرح كيفية استخدام معالج C المسبق على ملفات جافا سكريبت. "جافا سكريبت ليست لغة صناعية قوية" بقلم ت. سنايدر .
- ↑ "معالج C المسبق في جافا سكريبت؟" . espresso-mode .
- ↑ "Kernel/Git/Stable/Linux.git - شجرة نواة لينكس المستقرة" .
- ↑ شرح كيفية استخدام معالج C المسبق كمحرك قوالب . "استخدام معالج C المسبق كأداة تأليف HTML" بقلم ج. كوربيلا ، 2000.
روابط خارجية
- تصميم لغة المجال الخاصة بالمجال (DSL) بلغة ليسب
- البرمجة من الأسفل إلى الأعلى
- المعالج المسبق العام
- جيما، معالج الماكرو للأغراض العامة
- معالج PIKT piktc للنصوص والبرامج النصية وملفات التكوين
- pyexpander، معالج ماكرو للأغراض العامة قائم على لغة بايثون
- ميني ماك، معالج ماكرو بسيط
- معالج التعليقات المسبق في جافا
- تنفيذ لغة البرمجة
