محول برمجي

المحول البرمجي[1] (بالإنجليزية: Compiler)‏[2] أو الجامع[3] أو المصرف[4] أو المترجم أو مترجم الأكواد للغة الآلة و لغة الأسمبلي هو برنامج حاسوبي يقوم على تحويل الملفات المصدرية إلى أوامر مباشرة يفهمها الحاسوب وينفذها مباشرة بما يناسب بنية الحاسوب الذي يستهدفه البرنامج.[5]

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

والأسباب الرئيسية لذلك هي:

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

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

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

مراحل المترجم

لان كتابة المترجمات عملية ليست بالسهلة على الإطلاق فإنه من الأفضل أن نقسم طريقة بناء المترجم، والوسيلة التقليدية لذلك هي في أن نقسم عملية الترجمة إلى عدة مراحل.

هذه المراحل يتم تنفيذها بشكل متسلسل وإن كان ذلك لا يعني بالضرورة تنفيذا بهذا الشكل أثناء تصميم المترجم فبعض هذه المراحل تتداخل مع بعضها.

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

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

التحليل اللغوي

في هذه المرحلة يتم قراءة الكود المصدري وتقسيمه إلى مجموعة من الرموز (Tokens)، كل رمز يمثل عنصر من عناصر لغة البرمجة على سبيل المثال، (كلمة محجوزة أو اسم متغير أو عدد أو رمز....الخ).

مثلا إذا كان الكود المصدري بهذا الشكل:

if (a == b)
	a++;

وبعد مروره بهذه المرحلة يتم تحويله إلى هذا الشكل:

 if ------- كلمة مفتاحية
   ------- مسافة فارغة
 (  ------- رمز
 a  ------- اسم متغير
   ------- مسافة فارغة
 == ------- رمز
   ------- مسافة فارغة
 b  ------- اسم متغير
 )  ------- رمز
   ------- مسافة فارغة
 a  ------- اسم متغير
 ++ ------- رمز
 ;  ------- رمز

التحليل النحوي أو القواعدي

هذه المرحلة تأخذ مجموعة الtokens التي تم إنتاجها في مرحلة التحليل اللغوي وترتبهم في شكل شجرة (تعرف بشجرة القواعد Syntax tree) والتي تشير إلى تركيب البرامج وتسمى هذه المرحلة أيضا بمرحلة التجزئة.

فحص النوع

هذه المرحلة تحلل شجرة القواعد لكي تحدد ما إذا كان البرنامج يتجاوز متطلبات سلامة معينة (مثلا متغير تم استخدامه لكن لم يتم الإعلان عنه أو تم استخدامه في سياق لا يعترف به)

مرحلة إنتاج الكود الوسيط

يتم ترجمة البرنامج إلى لغة وسيطة مستقلة عن تركيبة الحاسب الداخلية.

حجز المسجلات

أسماء المتغيرات الرمزية المستخدمة في الكود الوسيط يتم ترجمتها إلى أعداد كل من هذه الأعداد يرمز إلى مسجل في لغة الآلة.

إنتاج كود لغة الآلة

اللغة الوسيطة يتم ترجمتها إلى لغة الأسمبلي (وهي شكل نصي للغة الآلة) لنوع معين من تركيبة الحاسب (X86 أو Power PC).

التجميع والربط

لغة الاسمبلي يتم ترجمتها إلى الترميز الثنائي ويتم تحديد عناوين المتغيرات، الدوال...الخ

المراحل الثلاث الأولى مجتمعة تسمى الـFront End للمترجم والمراحل الثلاث الأخرى تسمى Backend للمترجم الجزء الوسيط فقط للمترجم في هذا السياق هو مرحلة إنتاج الكود الوسيط وهي مرحلة تشمل غالبا العديد من التحسينات والتحويلات على الكود الوسيط.

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

مراجع

  1. https://www.microsoft.com/Language/en-US/Search.aspx?sString=Code+Division+Multiple+Access&langID=ar-sa أو
  2. "ترجمة Compiler قاموس المعاني"، مؤرشف من الأصل في 11 أكتوبر 2016.
  3. قاموس المورد، البعلبكي، بيروت، لبنان.
  4. C نسخة محفوظة 29 مايو 2017 على موقع واي باك مشين.
  5. "ما هو المترجم للغة الآلة ؟"، مؤرشف من الأصل في 16 يناير 2018.

وصلات خارجية

  • بوابة برمجة الحاسوب
  • بوابة تقنية المعلومات
  • بوابة علم الحاسوب
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.