مترجم الأكواد للغة الألة او لغة الأسمبلي (بالإنجليزية: Compiler) الجامع أو
المصرف أو المترجم: هو برنامج حاسوبي يقوم على تحويل الملفات المصدرية إلى أوامر مباشرة
يفهمها الحاسوب وينفذها مباشرة بما يناسب بنية الحاسوب الذي يستهدفه البرنامج.
على غير البدايات حين كانت البرامج تبرمج أصلاً بلغات متدنية المستوى (أي قريبة
من بنية الحاسوب) يفهمها الحاسوب مباشرة، أصبحت الآن البرامج تبرمج بلغات عالية
المستوى (عالية أي بعيدة عن فهم الحاسوب لها، وأقرب إلى فهم البشر). السبب في هذا
أن البرامج زادت في تعقيدها وفي حساباتها، مما جعل البرمجة المباشرة للحاسوب
أمرًا صعبًا، كما أن انتشار عدة بنى للحاسوب (مثل ARM وx64 وx86) جعل من اللازم
كتابة البرامج عدة مرات بلغات ذات مستويات متدنية عدة لكي تعمل على عدة حواسيب
مختلفة. لمواجهة هذا ظهرت لغات برمجة عالية المستوى تركز على المهم من الأمور في
البرمجة وتسهل من إدارة المشاريع البرمجية، وتجعل إستهداف عدة أجهزة ممكنا بملف
مصدري واحد مهما تعددت البنى (مع مراعات بعض التفاصيل الصغيرة عند ذلك وضبطها).
والأسباب الرئيسية لذلك هي:
بالمقارنة بلغة الالة، فان شكل لغات البرمجة عالية المستوى اقرب لطريقة تفكير
الإنسان في حل المشكلات.
يستطيع المترجم معرفة الأخطاء الواضحة أثناء البرمجة.
البرامج المكتوبة بلغات عالية المستوى تكون في الغالب أقصر من البرامج المناظرة
لها والمكتوبة بلغة الالة.
ميزة اخري في استخدام لغات البرمجة عالية المستوى ان نفس البرنامج المكتوب بها
يمكن ترجمته إلى أنواع كثيرة من لغات الالة وبالتالي يمكن نقله إلى منصات كثيرة
وأنواع كثيرة من الحواسيب.
من ناحية اخري فان البرامج المكتوبة بلغة برمجة عالية المستوى ويتم ترجمتها
اوتوماتيكيا إلى لغة الآلة ربما يتم تنفيذها ببطء أكثر مما لو كتبت بلغة الالة
مباشرة. ومن هنا فان بعض البرامج التي يعتبر عامل الوقت والسرعة في التنفيذ مهم
جدا بالنسبة لها ما زالت تكتب بلغة الالة ومع ذلك فان المترجم الجيد يمكنه ان يصل
بسرعة البرامج المكتوبة بلغة عالية المستوى إلى نفس سرعة تنفيذ البرامج المناظرة
لها والمكتوبة بلغة الالة إذا قام بعمل الكثير من التحسينات الجيدة وكانت البرامج
المكتوبة باللغة عالية المستوى مكتوبة بشكل جيد ومنظم.
مراحل المترجم
لان كتابة المترجمات عملية ليست بالسهلة علي الإطلاق فانه من الأفضل ان نقسم
طريقة بناء المترجم, والوسيلة التقليدية لذلك هي في أن نقسم عملية الترجمة إلى
عدة مراحل.
هذه المراحل يتم تنفيذها بشكل متسلسل وان كان ذلك لا يعني بالضرورة تنفيذا بهذا
الشكل أثناء تصميم المترجم فبعض هذه المراحل تتداخل مع بعضها. كل مرحلة(ما عدا
الأولى)تأخذ مخرجات المرحلة التي تسبقها كمدخلات لها, ومن الشائع ان نجعل كل
مرحلة كوحدة مستقلة فبعض هذه الوحدات يتم كتابتها باليد والبعض الاخر يتم انشائها
عن طريق مواصفات أو معايير Spécifications
هناك تقسيم شائع ومعروف لهذه المراحل ولكن ترتيب هذه المراحل قد يختلف قليلا من
مترجم إلى اخر, فبعض هذه المراحل قد يتم تجميعه وبعضها قد يتم تقسيمه إلى مراحل
اصغر.
التحليل المعجمى:
في هذه المرحلة يتم قراءة الكود المصدري وتقسيمه إلى مجموعة من الرموز (Tokens)،
كل رمز يمثل عنصر من عناصر لغة البرمجة على سبيل المثال، (كلمة محجوزة أو إسم
متغير أو عدد أو رمز....الخ).
مثلا إذا كان الكود المصدري بهذا الشكل :
if (a == b) a++;
وبعد مروره بهذه المرحلة يتم تحويله إلى هذا الشكل :
if ------- كلمة مفتاحية
------- مسافة فارغة
( ------- رمز
a ------- إسم متغير
------- مسافة فارغة
== ------- رمز
------- مسافة فارغة
b ------- إسم متغير
) ------- رمز
------- مسافة فارغة
a ------- إسم متغير
++ ------- رمز
; ------- رمز
التحليل النحوي أو القواعدي
هذه المرحلة تأخذ مجموعة الtokens التي تم إنتاجها في مرحلة التحليل اللغوي
وترتبهم في شكل شجرة (تعرف بشجرة القواعد Syntax tree) والتي تشير إلى تركيب
البرامج وتسمي هذه المرحلة أيضا بمرحلة الـتجزئة.
فحص النوع
هذه المرحلة تحلل شجرة القواعد لكي تحدد ما إذا كان البرنامج يتجاوز متطلبات
سلامة معينة (مثلا متغير تم استخدامه لكن لم يتم الإعلان عنه أو تم استخدامه في
سياق لا يعترف به)
مرحلة إنتاج الكود الوسيط
يتم ترجمة البرنامج إلى لغة وسيطة مستقلة عن تركيبة الحاسب الداخلية.
حجز المسجلات
أسماء المتغيرات الرمزية المستخدمة في الكود الوسيط يتم ترجمتها إلى اعداد كل من
هذه الاعداد يرمز إلى مسجل في لغة الالة
إنتاج كود لغة الآلة
اللغة الوسيطة يتم ترجمتها إلى لغة الأسمبلي (وهي شكل نصي للغة الآلة) لنوع معين
من تركيبة الحاسب (X86 أو Power PC).
التجميع والربط
لغة الاسمبلي يتم ترجمتها إلى الترميز الثنائي ويتم تحديد عناوين المتغيرات،
الدوال...الخ
المراحل الثلاث الأولى مجتمعة تسمي الـFront End للمترجم والمراحل الثلاث الأخرى
تسمى Backend للمترجم الجزء الوسيط فقط للمترجم في هذا السياق هو مرحلة إنتاج
الكود الوسيط وهي مرحلة تشمل غالبا العديد من التحسينات والتحويلات علي الكود
الوسيط.
كل مرحلة, من مراحل الفحص والتحويل تؤسس اشكال ثابتة قوية للاشياء التي تمرر
للمراحل التالية لذا فان كتابة كل مرحلة علي حدا أسهل. علي سبيل المثال فاحص
النوع type checker يمكنه ان يفترض غياب الأخطاء القواعدية ومرحلة إنتاج الكود
تفترض غياب اخطاء النوع يتم التجميع والربط ببرامج يتم توفيرها من خلال نظام
التشغيل وهي ليست جزء من المترجم نفسه.