المهندس معاذ علاء الدين على عبدالموجود
نرحب بكم فى منتداكم وبالمشاركة نصل الى كل جديد وفى حالة قيامكم بالتسجيل ستصل رسالة فى بريد الياهو spam او بريد هوتميل junk ومن خلال قيامك بتنشيط والضغط بفتح هذه الرسالة سوف يكون بامكانكم المشاركة والتحميل للمتريال وفتح الراوبط المهمة وبالمشاركة يكتمل العمل
نتمنى لكم دوام التقدم والرقى للدعم الفنى والاستفسارات يجب مراسلتناعلى هذا الايميل instructor_mo3az@yahoo.com

Compilerما هو المترجم او المصرف؟

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

Compilerما هو المترجم او المصرف؟

مُساهمة  معاذ علاء الدين في السبت أكتوبر 02, 2010 6:30 pm

مصرف (برمجة)

(تم التحويل من Compiler)
صفحة المسودة (غير مراجعة)اذهب إلى: تصفح, البحث
ما هو المترجم او المصرف؟

من أجل تقليل التعقيد في تصميم وبناء الحاسبات, تم تصميم هذه الحاسبات من اجل القيام بوامر بسيطة ولكنها تقوم بها بسرعة عالية برنامج الكمبيوتر يتم بنائه بكتابة هذه الاوامر بلغة الالةmachine language ولكنها عملية صعبة وتؤدي الي حدوث اخطاء كثيرة فتم الاستعاضة عنها بلغات عالية المستوي High Level Languages هذه اللغات يمكن أن تكون بعيدة كل البعد عن لغة الالة والتي لا يفهم الكمبيوتر غيرها, لذا كان لابد أن توجد وسائل لسد هذا الفراغ وهنا يأتي دور المترجم Compiler


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

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

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

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




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

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

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

محتويات [أخف]
1 التحليل اللغوي Lexical Analysis
2 التحليل النحوي او القواعدي Syntax analysis
3 فحص النوع Type checking
4 مرحلة انتاج الكود الوسيطIntermediate code generation
5 حجز المسجلات Register Allocation
6 انتاج كود لغة الالةMachine code generation
7 التجميع والربط Assembly and linking
8 وصلات خارجية

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

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

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

[عدل] مرحلة انتاج الكود الوسيطIntermediate code generation
يتم ترجمة البرنامج الي لغة وسبطة مستقلة عن تركيبة الحاسب الداخلية

[عدل] حجز المسجلات Register Allocation
اسماء المتغيرات الرمزية المستخدمة في الكود الوسيط يتم ترجمتها الي اعداد كل من هذه الاعداد يرمز الي مسجل في لغة الالة

[عدل] انتاج كود لغة الالةMachine code generation
اللغة الوسيطة يتم ترجمتها الي لغة الاسمبلي(وهي شكل نصي للغة الالة) لنوع معين من تركيبة الحاسب(X86 او Power PC)

[عدل] التجميع والربط Assembly and linking
لغة الاسمبلي يتم ترجمتها الي الترميز الثنائي ويتم تحديد عناوين المتغيرات , الدوال...الخ

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

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

معاذ علاء الدين
Admin

عدد المساهمات : 264
تاريخ التسجيل : 01/06/2009
العمر : 32
الموقع : http://mo3azmera.blogspot.com-http://mo3azmera.ibda3.org

معاينة صفحة البيانات الشخصي للعضو http://instructor_mo3az@yahoo.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى