مصرف المصرفات

في علم الحاسوب، يُشير مصطلح **مصرف المُصرّفات** أو **مولّد المُصرّفات** إلى أداة برمجية تُستخدم لإنشاء التجزئة أو التفاسير أو المصارف انطلاقًا من وصفٍ شكلي معين للغة وآلة.

النوع الأكثر شيوعًا من المُصرّف-المُصرّف يُعرف باسم **مولّد المحللات النحوية**. وهو يتعامل فقط مع التجزئة.

الوصف الشكلي للغةٍ ما يكون عادة قواعدًا شكلية تُستخدم كمدخل لمولّد المحللات النحوية. وغالبًا ما تكون على هيئة صيغة باكوس نور، أو الصيغة الممتدة لباكوس–نور، أو قد تمتلك صياغتها الخاصة. وتصف ملفات القواعد نحو لغة البرمجة الهدف التي يُولّد لها المُصرّف، بالإضافة إلى الأوامر التي يجب تنفيذها عند مطابقة بُنى معينة من اللغة.

ويُنتج مولّد المحللات النحوية نص برمجي مصدري لمحلل نحوي خاص بلغة البرمجة المعنية. ويمكن بعد ذلك تجميع هذا الكود المصدري إلى محلل نحوي جاهز، إمّا ليعمل بشكل مستقل أو مضمّن داخل نظام آخر. وعند تشغيله، يقبل هذا المحلل النحوي كودًا مكتوبًا بلغة البرمجة الهدف كمدخل، ويقوم إما بتنفيذ إجراء معين أو بإنتاج شجرة نحو مجرد.

مولّدات المحللات النحوية لا تتعامل مع علم الدلالة الشكلي لشجرة النحو المجرد، ولا مع توليد الشيفرة الخاصة بالآلة الهدف.

أما *الميتا-مُصرّف* فهو أداة لتطوير البرمجيات تُستخدم بشكل رئيسي في بناء المصرف، والمترجم، والمفسر للغات برمجة أخرى. ويكون مدخله عبارة عن برنامج مكتوب بلغة مخصصة النطاق وهي لغة معرفة تُصمم بشكل أساسي بهدف بناء المُصرّفات. وتُسمى اللغة التي يُنتج لها المُصرّف باسم "اللغة الهدف" . أما الحد الأدنى من المدخلات اللازمة لإنتاج المُصرّف فهي برمجة وصفية تُحدد قواعد اللغة الهدف وتحويلاتها شكليًا إلى تنفيذيًا.

## الأنواع
يرتبط بمولّد المحللات النحوية النموذجي شيفرة تنفيذية تُرفق بكل قاعدة من قواعد النحو، ويُفترض تنفيذها عند تطبيق هذه القواعد من قبل المحلل. وتُعرف هذه الأجزاء من الشيفرة أحيانًا بروتينات الأفعال الدلالية، لأنها تُعرّف دلالات البُنى النحوية التي يُحللها المحلل. وبحسب نوع المحلل المطلوب توليده، قد تقوم هذه الروتينات ببناء شجرة التحليل (أو شجرة نحو مجرد)، أو بتوليد شيفرة تنفيذية مباشرة.

من أوائل وأقوى نماذج المُصرّف-المُصرّف، والتي ظهرت سنة 1964، هو ميتا 2، وقد كان يقبل قواعد تحليلية مزودة بإمكانيات توليد الشيفرة، وقادر على تجميع شيفرته المصدرية ذاتيًا ولغات أخرى أيضًا.

ومن بين أقدم البرامج التي طُوّرت ضمن الإصدارات الأصلية من يونكس في مختبرات بل، كان النظام الثنائي ليكس وياك. وكان يُستخدم عادة لإنتاج شيفرة بلغة سي، لكنه امتلك نظام إخراج مرن يمكن استخدامه لمجالات متنوعة من لغات البرمجة إلى تحويل الملفات النصية. وتُعد فليكس وبيسون الإصدارات الحديثة في مشروع جنو لهذا النظام.

توجد بعض أدوات المُصرّف-المُصرّف التجريبية التي تأخذ كمدخل وصفًا رسميًا لدلالات لغة برمجة ما، وغالبًا ما يُستخدم في ذلك الدلالات التعيينية. وتُعرف هذه المقاربة بـ"الترجمة القائمة على الدلالات"، وقد كانت رائدة عبر نظام تنفيذ الدلالات الذي طوّره بيتر موسيس سنة 1978.، إلا أن كلًا من المُصرّف الناتج والشيفرة التي يُنتجها كانا غير فعالين من حيث الزمن والمساحة. ولا يُنتج حاليًا أي مُصرّف إنتاجي بهذه الطريقة، لكن الأبحاث ما تزال مستمرة.

مشروع المُصرّف-المُصرّف للجودة الإنتاجية (بي كيو سي سي) في جامعة كارنيغي ميلون لا يعتمد على دلالات شكلية، لكنه يوفر إطارًا شبه رسمي لوصف الآلة.

تتوفّر المُصرّفات-المُصرّفات بنماذج متعددة، منها مولّدات آلة إعادة الكتابة التصاعدية (انظر JBurg) التي تُستخدم لتبليط أشجار النحو بناءً على قواعد إعادة كتابة من أجل توليد الشيفرة، وكذلك مولّدات المحللات النحوية باستخدام سمات النحو (مثل أنتلر) التي يمكن استخدامها للفحص النوعي، ونشر الثوابت، والمزيد أثناء مرحلة التحليل.

### الميتا-مُصرّفات

نظرًا لكون لغة معرفة الميتا-مُصرّف غالبًا ما تكون لغة قوية لمعالجة الرموز والسلاسل النصية، فإن لها تطبيقات قوية للأغراض العامة أيضًا، بما في ذلك توليد مجموعة واسعة من أدوات هندسة البرمجيات والتحليل.

وبالإضافة إلى فائدتها في تطوير لغة مخصصة النطاق، تُعد الميتا-مُصرّف مثالًا بارزًا على لغة مخصصة النطاق مصممة لمجال كتابة المُصرّفات.

الميتا-مُصرّف هو برمجة وصفية *تُكتب عادةً بلغتها الفوقية الخاصة* أو بلغة برمجة حاسوبية قائمة. وعملية قيام الميتا-مُصرّف، المكتوب بلغته الفوقية الخاصة، بتجميع نفسه تُعادل مفهوم المُصرّف الذاتي الاستضافة. ومعظم المُصرّفات الشائعة اليوم هي مُصرّفات ذاتية الاستضافة. وتُعد خاصية الاستضافة الذاتية أداة قوية تُميز العديد من الميتا-مُصرّفات، إذ تُتيح توسيعًا سهلًا للغة البرمجة الفوقية الخاصة بها. والميزة التي تُميز الميتا-مُصرّف عن غيره من المُصرّفات-المُصرّفات هي أنه يأخذ كمدخل لغة برمجة وصفية متخصصة تُعرّف جميع جوانب تشغيل المُصرّف. ويُعد الميتا-برنامج الناتج عن الميتا-مُصرّف برنامجًا مكتملًا تمامًا كأي برنامج مكتوب بـسي++، بيسيك، أو أي لغة برمجة عامة أخرى. وتُعتبر لغة معرفة البرمجة الفوقية خاصية قوية تُسهل تطوير لغات البرمجة والأدوات البرمجية الأخرى. كما يمكن برمجة معالجات سطر الأوامر، وتحويل السلاسل النصية وتحليلها بسهولة باستخدام لغات البرمجة الفوقية للميتا-مُصرّفات.

تتضمن الحزمة التطويرية الكاملة رابطًا ودعمًا للتنفيذ من خلال مكتبة برمجية. وعادةً، تُستخدم لغات برمجة النظام الموجهة للآلة مثل سي أو C++ لكتابة مكتبة الدعم. وتتكون المكتبة من دوال الدعم اللازمة لعملية التجميع، وغالبًا ما تُكمل الحزمة الكاملة للميتا-مُصرّف.

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

يمكن رسم تشبيه: فكما يأخذ مترجم *++C* كمدخل برنامجًا مكتوبًا بلغة *++C*، فإن المترجم "الميتا" يأخذ كمدخل برنامج برمجة وصفية مكتوبًا بلغة معرفة.

### مترجم فورث الفوقي
يعتبر العديد من مؤيدي لغة فورث أن عملية إنشاء تنفيذ جديد للغة فورث تُعد ترجمة فوقية، وأنها تشكّل مترجمًا فوقيًا. وتعريف فورث للمترجم الفوقي هو:
:"المترجم الفوقي هو مترجم يعالج شيفرته المصدرية الخاصة، وينتج نسخة تنفيذية من نفسه."
ويُعد هذا الاستخدام لمصطلح "المترجم الفوقي" في لغة فورث محل خلاف في علم الحاسوب السائد. انظر فورث. والعملية الفعلية التي تقوم بها فورث لترجمة نفسها تُعد مزيجًا بين كون فورث مترجمًا ذاتي الاستضافة ولغة قابلة للتوسيع، وأحيانًا مترجمة عبورًا، وهي مصطلحات راسخة منذ زمن طويل في علم الحاسوب. فالمترجمات الفوقية هي أنظمة كتابة مترجمات عامة. وبصرف النظر عن كون مفهوم المترجم الفوقي في فورث لا يمكن تمييزه عن المترجمات الذاتية الاستضافة واللغات القابلة للتوسيع، فإن العملية الفعلية تعمل على مستوى أدنى حيث تُعرّف مجموعة دنيا من "كلمات" فورث التي يمكن استخدامها لتعريف كلمات فورث إضافية. ومن ثم يمكن تعريف تنفيذ كامل للغة فورث انطلاقًا من هذه المجموعة الأساسية. ويبدو هذا كعملية تمهيد. ولكن المشكلة أن كل مترجم للغات الأغراض العامة تقريبًا ينطبق عليه وصف مترجم فورث الفوقي.
: عندما يقوم (مترجم ذاتي الاستضافة) X بمعالجة شيفرته المصدرية الخاصة وينتج نسخة تنفيذية من نفسه، فإن X يُعد مترجمًا فوقيًا.
فقط استبدل X بأي لغة شائعة مثل C أو ++C أو جافا أو باسكال أو كوبول أو فورتران أو أيدا أو مودولا-2، وما إلى ذلك، وسيُعتبر X مترجمًا فوقيًا وفقًا لتعريف فورث. لكن المترجم الفوقي يعمل على مستوى تجريدي أعلى من المترجم الذي يقوم بترجمته. ولا يعمل على نفس المستوى (مترجم ذاتي الاستضافة) إلا عندما يترجم نفسه. ومن هنا يجب إدراك المشكلة في هذا التعريف للمترجم الفوقي، إذ يمكن تطبيقه على معظم اللغات.

ومع ذلك، فعند التمعن في مفهوم البرمجة في فورث، فإن إضافة كلمات جديدة إلى القاموس وتوسيع اللغة بهذه الطريقة يُعد برمجة وصفية. وهذه البرمجة الوصفية في فورث هي التي تجعلها مترجمًا فوقيًا.

إن البرمجة في فورث تتمثل في إضافة كلمات جديدة إلى اللغة. وتغيير اللغة بهذه الطريقة يُعد برمجة وصفية. وتُعد فورث مترجمًا فوقيًا لأنها لغة صُممت خصيصًا للبرمجة الوصفية. فالبرمجة في فورث هي توسيع لفورث، وإضافة كلمات إلى مفردات فورث تخلق لغة برمجة جديدة من لهجات فورث. وتُعد فورث مترجمًا فوقيًا متخصصًا في لهجات لغة فورث.

## التاريخ
بدأ تصميم المُصرّف-المُصرّف الأصلي من قبل توني بروكر وديريك موريس في عام 1959، وبدأت الاختبارات الأولية في مارس 1962. تم استخدام مُصرّف بروكر-موريس للمُصرّف (BMCC) لإنشاء مُصرّفات للحاسوب الجديد أطلس (حاسوب) في جامعة مانشستر، لعدة لغات برمجة: أوتوكود، "أوتوكود ميركوري الموسّع"، أطلس أوتوكود، خوارزم 60 وفورتران "ASA". في الفترة ذاتها تقريبًا، كان يجري عمل مشابه من قبل إي. تي. (نيد) آيرونز في جامعة برنستون، وأليك غليني في منشأة أبحاث الأسلحة الذرية في ألدرماستون، والذي ألهمت ورقته العلمية بعنوان "آلة بناء الجُمَل" (التي أُزيل عنها التصنيف السري في عام 1977) سلسلة أنظمة كتابة المترجمات المعروفة باسم META والمذكورة لاحقًا.

يرتبط التاريخ المبكر للمُصرّفات-المُصرّفة ارتباطًا وثيقًا بتاريخ مجموعة العمل 1 الخاصة بـSIG/PLAN حول المُصرّفات المدفوعة بالبنية. تأسست المجموعة بشكل أساسي بفضل جهود هوارد ميتكالف في منطقة لوس أنجلوس. في خريف عام 1962، صمّم هوارد ميتكالف مُفسّرين لإنشاء المُصرّفات. استخدم أحدهما تقنية تحليل من الأسفل إلى الأعلى مبنية على طريقة وصفها ليدلي وويلسون. بينما استخدم الآخر نهجًا من الأعلى إلى الأسفل مستندًا إلى عمل أليك غليني لإنتاج جُمل إنجليزية عشوائية من قواعد خالية من السياق.

في الوقت ذاته، وصف فال شور اثنتين من "الآلات الفوقية"، واحدة توليدية وأخرى تحليلية. تم تنفيذ الآلة التوليدية وأنتجت تعبيرات جبرية عشوائية. تم تنفيذ أول مُصرّف-مُصرّف "ميتا 1" من قبل شور على جهاز "آي بي إم 1401" في جامعة كاليفورنيا، لوس أنجلوس في يناير 1963. كتب شور مُفسّراته الأصلية وآلاته الفوقية مباشرة بلغة آلة وهمية. أما ميتا 2 فقد كُتب بلغة ميتا عالية المستوى قادرة على وصف ترجمتها الخاصة إلى لغة الآلة الوهمية.

كتب لي شميدت في شركة بولت، بيرانيك ونيو مان مُصرّفًا-مُصرّفًا في مارس 1963 يستخدم شاشة CRT على جهاز "بي دي بي-1" المتصل بزمن مشترك. وقد ولّد هذا المُصرّف شفرة آلة فعلية بدلًا من الشفرة التفسيرية، وكان مستمدًا جزئيًا من "ميتا 1".

قام شور بترقية "ميتا 2" من "ميتا 1" خلال ربيع 1963. تُعد الورقة التي عرض فيها النظام المُحسّن في مؤتمر جمعية الحوسبة الآلية (ACM) في فيلادلفيا عام 1964 أول ورقة علمية متاحة كمصدر عام عن مُصرّف-مُصرّف. شكّلت قواعد النحو وتقنية التنفيذ في نظام شور الأساس لمعظم الأنظمة التي تلتها. تم تنفيذ النظام على جهاز "1401" صغير، واستُخدم لتنفيذ لغة شبيهة بـألغول (لغة برمجة).

تَبِعت العديد من الأنظمة المماثلة على الفور.

طور روجر روتمن من شركة أبتيف ونفذ لغة "لوجيك" لمحاكاة التصميم المنطقي على جهاز "آي بي إم 7090" في يناير 1964. استخدم هذا المُصرّف خوارزمية أنتجت شفرة فعالة للتعابير البولية.

تناولت ورقة أخرى في سجلات مؤتمر ACM لعام 1964 "ميتا 3"، الذي طوّره شنايدر وجونسون في جامعة كاليفورنيا، لوس أنجلوس لجهاز "آي بي إم 7090". تمثل "ميتا 3" محاولة لإنتاج شفرة آلة فعالة لفئة كبيرة من اللغات. نُفذ بالكامل بلغة التجميع. وقد كُتب مُصرّفان باستخدام "ميتا 3"، هما "كودول"، وهو مُصرّف تجريبي لكتابة المُصرّفات، و"بيوريغول"، لهجة من "ألغول 60" (وكان من الوقاحة تسميتها ألغول).

في أواخر عام 1964، طوّر لي شميدت المُصرّف-المُصرّف "إي كيو جين" من جهاز "بي دي بي-1" إلى جهاز "بيكمان 420". وكان "إي كيو جين" لغة لتوليد المعادلات المنطقية.

في عام 1964، بدأت شركة تطوير النظم (SDC) جهدًا كبيرًا في تطوير المُصرّفات-المُصرّفة. شمل هذا الجهد مُصرّفات-مُصرّفة قوية، "بوك 1" و"بوك 2"، مكتوبتين بلغة ليسب وتحتويان على قدرات متقدمة في البحث عبر الأشجار والرجوع للخلف. أحد نواتج نظام كيو-32 في شركة تطوير النظم كان "ميتا 5". يضم نظام "ميتا 5" إمكانية التراجع في تدفق الإدخال، بالإضافة إلى العديد من الخصائص الأخرى التي تتيح تحليل أي لغة حساسة للسياق. وقد تم توزيعه بنجاح لعدد كبير من المستخدمين وكان له تطبيقات عديدة في معالجة السلاسل النصية غير مقتصرة على الترجمة البرمجية. يحتوي النظام على العديد من أكوام الدفع المعقدة، ومرافق ضبط واختبار السمات، وآليات للإخراج. إن قدرة "ميتا 5" على ترجمة برامج جوفيال إلى برامج بي إل/آي يُظهر قوته ومرونته.

اخترع روبرت ماكلور من شركة تكساس إنسترومنتس مُصرّفًا-مُصرّفًا يُدعى تي إم جي (قُدّم في عام 1965). استخدم "تي إم جي" لإنشاء مُصرّفات مبكرة للغات برمجة مثل بي، بي إل/آي وألتران. وبالاشتراك مع مُصرّف فال شور، كان مصدر إلهام مبكر للفصل الأخير من كتاب دونالد كينوث *[[فن برمجة الحاسوب]]*.
تم تطوير نظام "لوت" خلال عام 1966 في معهد ستانفورد للأبحاث، وكان نموذجه قريبًا جدًا من "ميتا 2". احتوى على بنى خاصة جديدة مخصصة أتاحت له توليد مُصرّف يمكنه بدوره ترجمة جزء فرعي من لغة برمجة PL/I. تضمن هذا النظام مرافق موسعة لجمع الإحصائيات، واستُخدم لدراسة خصائص التحليل من الأعلى إلى الأسفل.

نظام "سيمبل" هو نظام ترجمة متخصص صُمم لمساعدة كتابة المهيئات المسبقة (المعالجة الأولية) للغة برمجة PL/I. كُتب "سيمبل" بلغة برمجة PL/I، ويتكون من ثلاثة مكونات: مدير تنفيذي، ومحلل نحوي، ومنشئ دلالي.

تم تطوير "شجرة-ميتا" في معهد ستانفورد للأبحاث في مينلو بارك، كاليفورنيا، في أبريل 1968. وقد وثق تاريخ المُصرّفات الفوقية المبكر جيدًا في دليل "شجرة-ميتا" المتوفر عبر الإنترنت. توازى نظام "شجرة-ميتا" بعض التطورات التي حدثت في شركة تطوير النظم (SDC)، لكنه وعلى خلاف المُصرّفات الفوقية السابقة، فصل بين معالجة الدلالات ومعالجة البنية النحوية. تضمنت قواعد النحو عمليات بناء الشجرة التي تمزج بين عناصر اللغة المعترف بها وعُقد الشجرة. ثم تتم معالجة تمثيل بنية الشجرة للمدخلات بواسطة شكل مبسط من قواعد إعادة الصياغة. تستخدم هذه القواعد التعرف على العقد واختبار السمات، وعند تحقق الشروط تُنفذ الأفعال المرتبطة بها. ويمكن أيضًا اختبار عناصر الشجرة ضمن قواعد إعادة الصياغة، كما أن هذه القواعد تُعد لغة عودية، قادرة على استدعاء قواعد أخرى مع تمرير أجزاء من الشجرة قبل تنفيذ الأفعال.

مفهوم "الآلة الفوقية" الذي طرحه أليك غليني بسيط إلى درجة أن ثلاث نسخ مادية من هذه الآلة تم تصميمها، وواحدة منها نُفذت فعليًا في جامعة واشنطن في سانت لويس. وقد بُنيت هذه الآلة باستخدام مكونات وحدوية ماكرو، وكانت تعليماتها عبارة عن الرموز التي وصفها شور.

"مُصرّف كتابة وتنفيذ المصرّفات" (CWIC) هو آخر مُصرّف فوقي معروف من تصميم ديوي فال شور. تم تطويره في شركة تطوير النظم بواسطة إروين بوك، ديوي فال شور، وستيفن ج. شيرمان. باستخدام القدرات الكاملة للغة ليسب 2، وهي لغة معالجة القوائم، كانت الخوارزميات التحسينية قادرة على العمل على القوائم والأشجار الناتجة عن التحليل النحوي قبل توليد الشفرة. كما تضمن نظام CWIC جدول رموز مدمج في اللغة.

مع عودة الاهتمام بلغات المجال المتخصصة والحاجة إلى مولدات المحللات النحوية التي تكون سهلة الاستخدام والفهم والصيانة، أصبحت المُصرّفات الفوقية أدوات قيّمة في مشاريع هندسة البرمجيات المتقدمة.

تشمل أمثلة أخرى على مولدات المحللات النحوية بأسلوب ياك كلًا من أنتلر، كوكو/آر، كول، جنو بيسون، إيلي، إف إس إل، سيبل سي سي، جهاز تحسين الصياغة النحوية (SID)، وجافاCC. وعلى الرغم من فائدتها، فإن مولدات المحللات النحوية "النقية" تعالج فقط جانب التحليل من مشكلة بناء المصرّف. أما الأدوات ذات النطاق الأوسع، مثل بي كيو سي سي، كوكو/آر و"عدة إعادة هندسة البرمجيات دي إم سي"، فتقدم دعمًا كبيرًا للمهام المعقدة التالية للتحليل، مثل التحليل الدلالي، وتحسين الشيفرة، وتوليدها.

## لغات فوقية شور

تم تطوير أولى المُصرّفات الفوقية لشور، "ميتا 1" و"ميتا 2"، بواسطة ديوي فال شور في جامعة كاليفورنيا في لوس أنجلوس. تبعتها مُصرّفات فوقية أخرى قائمة على شور، أضاف كل منها تحسينات على تحليل اللغة و/أو توليد الشيفرة.

في البرمجة، من الشائع استخدام اسم لغة البرمجة للإشارة إلى كل من المُصرّف واللغة نفسها، بحيث يميز السياق المعنى. برنامج بلغة C++ يُترجم باستخدام مُصرّف C++. وينطبق ذلك أيضًا في الأمثلة التالية. على سبيل المثال، "ميتا 2" تشير إلى كل من المُصرّف واللغة.

اللغات الفوقية في سلسلة مُصرّفات شور هي لغات برمجة دالية تستخدم التحليل النحوي من الأعلى إلى الأسفل مع معادلات نحوية تحتوي على تراكيب مدمجة لتحويل المخرجات.

معادلة نحوية:

```
<name> = <body>;
```

هي دالة "اختبار" مُترجمة تُعيد "نجاح" أو "فشل".  هو اسم الدالة.  هو شكل من التعبيرات المنطقية يتكون من اختبارات قد تُجمّع، تحتوي على بدائل، وإنتاجات مخرجات. "الاختبار" يشبه "boolean" في اللغات الأخرى، حيث "النجاح" يمثل "صحيح" و"الفشل" يمثل "خطأ".

تعريف لغة برمجة تحليليًا من الأعلى إلى الأسفل أمر طبيعي. على سبيل المثال، يمكن تعريف برنامج كالتالي:

```
program = $declaration;
```

يعني تعريف البرنامج كسلسلة من صفر أو أكثر من التصريحات.

في لغات "ميتا إكس" الخاصة بشور هناك قاعدة تحكم. قاعدة البرنامج السابقة مثال على قاعدة تحكم. قاعدة البرنامج هي دالة "اختبار" تستدعي "التصريح"، وهي قاعدة "اختبار" تُعيد "نجاح" أو "فشل". عامل الحلقة $ يستدعي "التصريح" مرارًا حتى تُعاد "الفشل". عامل $ دائمًا ما يعتبر ناجحًا، حتى لو كان هناك صفر من التصريحات. البرنامج أعلاه دائمًا ما يعيد النجاح. (في نظام CWIC يمكن للفشل الطويل تجاوز "التصريح". الفشل الطويل جزء من نظام التراجع في CWIC)

كانت مجموعات الأحرف في هذه المُصرّفات المبكرة محدودة. الحرف "/" استُخدم كعامل بديل (أو). يُكتب "أ أو ب" كـ A / B. تُستخدم الأقواس ( ) للتجميع.
 A (B / C)
يصف تركيبًا حيث يلي A إما B أو C. كتعبير منطقي يكون
 A "و" (B "أو" C)
تسلسل X Y يحمل معنى ضمنيًا هو X "و" Y. الأقواس () للتجميع و "/" هي عامل "أو". ترتيب التقييم دائمًا من اليسار إلى اليمين حيث يتم تحديد تسلسل أحرف الإدخال حسب ترتيب الاختبارات.

تُستخدم كلمات عامل خاصة يبدأ أول حرف فيها بنقطة "." للوضوح. تُستخدم .EMPTY كبديل أخير عندما لا يكون هناك بديل سابق مطلوب.
 X (A / B / .EMPTY)
تشير إلى أن X يتبعه اختياريًا A "أو" B. هذه خاصية مميزة لهذه اللغات الفوقية كونها لغات برمجة. يتم تجنب التراجع بواسطة ما سبق. قد تكون أنظمة بناء المُصرّفات الأخرى قد أعلنت التسلسلات الثلاث الممكنة وتركته للمحلل لفهمها.

خصائص لغات البرمجة الفوقية أعلاه مشتركة بين جميع مُصرّفات شور الفوقية وتلك المشتقة منها.

### ميتا 1
كان "ميتا 1" مُصرّفًا فوقيًا مُجمّعًا يدويًا يُستخدم لترجمة "ميتا 2". لا يُعرف الكثير عن "ميتا 1" سوى أن الترجمة الأولية لـ"ميتا 2" أنتجت شفرة شبه مطابقة لشفرة "ميتا 1" المكتوبة يدويًا.

### ميتا 2
تتكون كل قاعدة اختياريًا من اختبارات، وعوامل، وإنتاجات مخرجات. تحاول القاعدة مطابقة جزء من تدفق أحرف مصدر برنامج الإدخال، مُعيدةً "نجاح" أو "فشل". عند النجاح يتم تحريك مؤشر الإدخال متجاوزًا الأحرف المطابقة. عند الفشل لا يتحرك مؤشر الإدخال.

كانت إنتاجات المخرجات تولد شكلًا من شيفرة التجميع مباشرة من قاعدة نحوية.

### تري-ميتا
قدّم تري-ميتا عوامل بناء الشجرة **:** و**[****]** حيث تم نقل تحويلات إنتاج المخرجات إلى قواعد غير محللة. استُخدمت عوامل بناء الشجرة في قواعد النحو لتحويل الإدخال مباشرة إلى شجرة نحو مجرد. قواعد الغير محللة هي أيضًا دوال اختبار تطابق أنماط الشجرة. تُستدعى قواعد الغير محللة من قاعدة نحوية عندما يُراد تحويل شجرة النحو المجردة إلى شفرة مخرجات. سمح بناء شجرة النحو المجردة وقواعد الغير محللة بإجراء تحسينات محلية عبر تحليل شجرة التحليل.

نقل إنتاج المخرجات إلى قواعد الغير محللة أحدث فصلًا واضحًا بين تحليل النحو وإنتاج الشيفرة، مما سهل قراءة وفهم البرمجة.

### مُصرّف لكتابة وتنفيذ المُصرّفات
بين 1968–1970، طور إروين بوك، ديوي فال شور، وستيفن ج. شيرمان نظام مُصرّف لكتابة وتنفيذ المُصرّفات. في شركة تطوير النظم مركز تشارلز باباج لتاريخ تقنية المعلومات.

المُصرّف لكتابة وتنفيذ المُصرّفات هو نظام تطوير مُصرّف مكوّن من ثلاث لغات مخصصة، كل واحدة تهدف إلى وصف جانب معين من الترجمة بطريقة مباشرة. تُستخدم لغة النحو لوصف التعرف على نص المصدر وبناء هيكل وسيط من نوع الشجرة. تُستخدم لغة المُولد لوصف تحويل الشجرة إلى لغة كائنية مناسبة.

تتبع لغة النحو خط ديوي فال شور السابق من مُصرّفات فوقية، وهي الأقرب إلى تري-ميتا حيث تستخدم عوامل بناء الشجرة في لغة النحو. وتم توسيع قواعد الغير محللة في تري-ميتا لتعمل مع لغة المُولد المبنية على *ليسب 2*.

يحتوي المُصرّف لكتابة وتنفيذ المُصرّفات على ثلاث لغات:
* *النحو*: يحول إدخال البرنامج المصدر إلى هياكل قائمة باستخدام صيغة تحويل قواعد النحو. تُمرر بنية التعبير المحلّل إلى المُولد عبر وضع استدعاء مُولد داخل قاعدة. تمثل الشجرة بقائمة يكون أول عنصر فيها كائن عقدة. تحتوي اللغة على عوامل، *<* و*>*، مخصصة لإنشاء القوائم. يُستخدم عامل النقطتين *:* لإنشاء كائنات العقدة. فمثلاً *آد* ينشئ عقدة آد. عامل التعجب **!** يجمع عدة مدخلات محللة مع عقدة لبناء شجرة. تُمرر الأشجار التي تنشأ بواسطة قواعد النحو إلى دوال المُولد التي تُعيد نجاحًا أو فشلًا. لغة النحو قريبة جدًا من تري-ميتا، فكلاهما يستخدم النقطتين لإنشاء عقدة. وتعمل وظيفة بناء الأشجار في مُصرّف لكتابة وتنفيذ المُصرّفات بعامل التعجب ! بنفس طريقة تري-ميتا باستخدام [].
* *المولد*: سلسلة مسماة من قواعد التحويل، كل منها يتألف من قاعدة غير محللة لمطابقة النمط، وإنتاج مخرجات مكتوب بلغة شبيهة بـ ليسب 2. الترجمة كانت إلى شفرة آلة ثنائية لـ آي بي إم 360. تشمل إمكانيات لغة المولد تعميم المخرجات.
* *مول-360*: لغة برمجة نظام مستقلة لعائلة حواسيب آي بي إم نظام/360 طُورت عام 1968 واستخدمت لكتابة مكتبة الدعم الأساسية.

#### لغة المُولد
كانت لغة المُولد ذات دلالات شبيهة بـ ليسب. اعتُبرت شجرة التحليل الأشجار كقائمة متكررة. الشكل العام لدالة في لغة المُولد هو:


```
<pre>  function-name(first-unparse_rule) =&gt; first-production_code_generator
           (second-unparse_rule) =&gt; second-production_code_generator
           (third-unparse_rule) =&gt; third-production_code_generator
               ...
```


تحتوي الشفرة لمعالجة شجرة معينة على ميزات لغة برمجة عامة، بالإضافة إلى شكل: &lt;stuff&gt;، الذي يرسل (stuff) إلى ملف المخرجات.
يمكن استدعاء المُولد داخل قاعدة unparse_rule. يُمرر المُولد عنصر نمط unparse_rule الموجود فيه، وتُدرج قيم إرجاعه بين (). على سبيل المثال:


```
expr_gen(ADD[expr_gen(x),expr_gen(y)]) =&gt;
                                &lt;AR + (x*16)+y;&gt;
                                releasereg(y);
                                return x;
               (SUB[expr_gen(x),expr_gen(y)])=&gt;
                                &lt;SR + (x*16)+y;&gt;
                                releasereg(y);
                                return x;
               (MUL[expr_gen(x),expr_gen(y)])=&gt;
                              .
                              .
                              .
               (x)=&gt;     r1 = getreg();
                            load(r1, x);
                            return r1;
...
```


أي، إذا كانت شجرة التحليل تبدو كـ (ADD[,])، فستُستدعى expr_gen(x) مع  وتُعيد x. المتغير في قاعدة unparse هو متغير محلي يمكن استخدامه في مُولد الشيفرة. تُستدعى expr_gen(y) مع  وتُعيد y. هنا يُمرر استدعاء المُولد في قاعدة unparse العنصر في موقعه. من المتوقع أن يكون x و y سجلات عند الإرجاع. التحويل الأخير يقصد به تحميل عنصر ذري إلى سجل وإرجاعه. الإنتاج الأول يُستخدم لتوليد تعليمة "AR" (إضافة سجل) في نظام 360 بالقيم المناسبة في السجلات العامة. المثال أعلاه هو جزء فقط من مُولد. كل تعبير في المُولد يُقيّم إلى قيمة يمكن معالجتها لاحقًا. كان من الممكن كتابة التحويل الأخير على النحو التالي:



```
(x) => return load(getreg(), x);
```


في هذه الحالة تقوم الدالة load بإرجاع معاملها الأول، وهو السجل الذي تُرجعه الدالة getreg(). الدالتان load و getreg هما مولدان آخران في المُصرّف لكتابة وتنفيذ المُصرّفات.

#### عالج "مُصرّف لكتابة وتنفيذ المُصرّفات" لغات مخصصة النطاق قبل وجودها
من مؤلفي "كتابة المترجم بلغة C":

"يساعد المترجم الأعلى (الميتاكمبايلر) في مهمة بناء المترجم من خلال أتمتة الجوانب غير الإبداعية، وهي الجوانب التي تبقى نفسها بغض النظر عن اللغة التي يُنتج المترجم لترجمتها. هذا يجعل من الممكن تصميم لغات مناسبة لتحديد مشكلة معينة. كما يقلل من تكلفة إنتاج المعالجات لتلك اللغات إلى حد يصبح فيه من الناحية الاقتصادية من الممكن البدء بحل المشكلة من خلال تصميم اللغة."

## أمثلة
* إيه إن تي إل آر (ANTLR)
* جنُو بايسُن (GNU Bison)
* كوكو/آر (Coco/R)، كوكو-2
* كوبر (Copper)
* مجموعة أدوات إعادة هندسة البرمجيات دي إم إس (DMS Software Reengineering Toolkit)، نظام لتحويل البرامج مزوّد بمولّدات محللات نحوية
* إبسيلون غرامر ستوديو (Epsilon Grammar Studio)
* مولّد المحللات النحوية ليمون (Lemon)
* إل آر ستار (LRSTAR): مولّد محللات نحوية من نوع LR(*)
* ميتا 2 (META II)
* باربويلد (Parboiled (Java)|parboiled)، مكتبة جافا لإنشاء المحللات النحوية
* محلل باكرت (Packrat parser)
* بي كيو سي سي (PQCC)، مولّد للمُصرّفات يتجاوز مجرد كونه مولّدًا للمحللات
* جهاز تحسين الصياغة النحوية (Syntax Improving Device - SID)
* سينتاكس (SYNTAX)، مجموعة أدوات متكاملة لبناء المُصرّفات
* تاك (tacc) - المُصرّف البديل 
* تري-ميتا (TREE-META)
* ياك (Yacc)
* إكس تكست (Xtext)
* إكس بي إل (XPL)
* جافا سي سي (JavaCC)

## انظر أيضًا
* المحلل اللغوي LL
* مجزئ يسار يمين
* محلل بسيط من اليسار إلى اليمين
* مجزئ يسار يمين أمامي
* لغة مخصصة النطاق

## المراجع والملاحظات

## قراءة إضافية
* 
* 
* 
* 
* 
* 

## وصلات خارجية
* توني بروكر ومُولّد المُصرّف لأطلس
* شرح لقوائم مُولّد المُصرّف (1963)
* الشيفرة المصدرية لمُولّد المُصرّف (تبدأ تقريبًا من الصفحة 182 في ملف PDF)
* المخططات الانسيابية الأصلية لمُولّد المُصرّف
* موقع Computer50.org، الرموز التلقائية لبروكر
* Catalog.compilertools.net ، كتالوج أدوات بناء المُصرّفات
* Labraj.uni-mb.si ، ليزا
* Skenz.it، مصادر Jflex وCup 

تصنيف:مولدات تحليل
تصنيف:تجزئة
تصنيف:بناء المصرفات
تصنيف:برمجة وصفية
تصنيف:لغات برمجة مخصصة النطاق
تصنيف:تصميم البرمجيات