مصرف (برمجة)

من ويكيبيديا، الموسوعة الحرة
اذهب إلى: تصفح، ‏ ابحث
Arwikify.svg يرجى إعادة صياغة هذه المقالة باستخدام التنسيق العام لويكيبيديا، مثل إضافة الوصلات والتقسيم إلى الفقرات وأقسام بعناوين.

المصرف[1] أو المترجم هو برنامج حاسوبي يقوم على تحويل الملفات المصدرية إلى أوامر مباشرة يفهمها الحاسوب وينفذها مباشرة بما يناسب بنية الحاسوب الذي يستهدفه البرنامج.

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

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

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

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

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

مراحل المترجم[عدل]

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

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

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

التحليل اللغوي[عدل]

هذه هي المرحلة اللابتدئية لقراءة وتحليل نص البرنامج, حيث يتم قراءة النص وتقسيمه إلى tokens كل منها يرمز إلى لرمز معين في لغة البرمجة (اسم متغير أو كلمة محفوظة أو عدد)

التحليل النحوي او القواعدي[عدل]

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

فحص النوع[عدل]

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

مرحلة انتاج الكود الوسيط[عدل]

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

حجز المسجلات[عدل]

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

انتاج كود لغة الالة[عدل]

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

التجميع والربط[عدل]

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

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

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

مراجع[عدل]

  1. ^ www.aec.org.sy/aecmag/Dictionary/pages/D.htm

وصلات خارجية[عدل]