مصرف (برمجة)
ما هو المترجم أو المصرف؟
من أجل تقليل التعقيد في تصميم وبناء الحاسبات, تم تصميم هذه الحاسبات من اجل القيام بوامر بسيطة ولكنها تقوم بها بسرعة عالية برنامج الكمبيوتر يتم بنائه بكتابة هذه الاوامر بلغة الالة ولكنها عملية صعبة وتؤدي الي حدوث اخطاء كثيرة فتم الاستعاضة عنها بلغات عالية المستوي High Level Languages هذه اللغات يمكن أن تكون بعيدة كل البعد عن لغة الالة والتي لا يفهم الكمبيوتر غيرها, لذا كان لابد أن توجد وسائل لسد هذا الفراغ وهنا يأتي دور المترجم Compiler
يقوم المترجم بترجمة أو تصريف البرنامج المكتوب بلغة البرمجة عالية المستوي والتي تناسب الشخص العادي الي لغة الالة التي تناسب الحاسب. أثناء عملية الترجمة هذه يقوم المترجم بتحديد وعرض الاخطاء التي وقع فيها المبرمج أثناء كتابته لبرامجه باستخدام اللغات عالية المستوي وهذه اللغات لهاتأثير كبير علي سرعة تطوير البرامج المكتوبة بها. ,,, والأسباب الرئيسية لذلك هي ,,,:
- بالمقارنة بلغة الالة، فان شكل لغات البرمجة عالية المستوي اقرب لطريقة تفكير الإنسان في حل المشكلات.
- يستطيع المترجم معرفة الاخطاء الواضحة أثناء البرمجة.
- البرامج المكتوبة بلغات عالية المستوي تكون في الغالب أقصر من البرمج المناظرة لها والمكتوبة بلغة الالة.
ميزة اخري في استخدام لغات البرمجة عالية المستوي ان نفس البرنامج المكتوب بها يمكن ترجمته الي أنواع كثيرة من لغات الالة وبالتالي يمكن نقله الي منصات كثيرة وأنواع كثيرة من الحواسيب.
من ناحية اخري فان البرامج المكتوبة بلغة برمجة عالية المستوي ويتم ترجمتها اوتوماتيكيا الي لغة الآلة ربما يتم تنفيذها ببطء أكثر مما لو كتبت بلغة الالة مباشرة. ومن هنا فان بعض البرامج التي يعتبر عامل الوقت والسرعة في التنفيذ مهم جدا بالنسبة لها ما زالت تكتب بلغة الالة ومع ذلك فان المترجم الجيد يمكنه ان يصل بسرعة البرامج المكتوبة بلغة عالية المستوي الي نفس سرعة تنفيذ البرامج المناظرة لها والمكتوبة بلغة الالة إذا قام بعمل الكثير من التحسينات الجيدة وكانت البرامج المكتوبة باللغة عالية لمستوي مكتوبة بشكل جيد ومنظم. مراحل المترجم
لان كتابة المترجمات عملية ليست بالسهلة علي الإطلاق فانه من الأفضل ان نقسم طريقة بناء المترجم, والوسيلة التقليدية لذلك هي في أن نقسم عملية الترجمة الي عدة مراحل.
هذه المراحل يتم تنفيذها بشكل متسلسل وان كان ذلك لا يعني بالضرورة تنفيذا بهذا الشكل أثناء تصميم المترجم فبعض هذه المارحل تتداخل مع بعضها. كل مرحلة(ما عدا الأولي)تأخذ مخرجات المرحلة التي تسبقها كمدخلات لها, ومن الشائع ان نجعل كل مرحلة كوحدة مستقلة بعض هذه الوحدات يتم كتابتها باليد والبعض الاخر يتم انشائها عن طريق مواصفات أو معايير Specifications
هناك تقسيم شائع ومعروف لهذه المراحل ولكن ترتيب هذه المراحل قد يختلف قليلا من مترجم الي اخر, فبعض هذه المراحل قد يتم تجميعه وبعضها قد يتم تقسيمة الي مراحل اصغر.
التحليل اللغوي 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 يمكنه ان يفترض غياب الاخطاء القواعدية ومرحلة إنتاج الكود تفترض غياب اخطاء النوع يتم التجميع والربط ببرامج يتم توفيرها من خلال نظام التشغيل وهي ليست جزء من المترجم نفسه.
وصلات خارجية
مشاريع شقيقة | ابحث عن compiler في ويكاموس، القاموس الحر. |
مشاريع شقيقة | اقرأ نصا ذا علاقة بمصرف (برمجة)، في ويكي الكتب. |
- The comp.compilers newsgroup and RSS feed
- Hardware compilation mailing list
- Practical introduction to compiler construction using flex and yacc
af:Vertalerkonstruksie an:Compilador ast:Compilador be:Кампілятар be-x-old:Кампілятар bg:Компилатор bn:কম্পাইলার bs:Kompajler ca:Compilador cs:Překladač da:Compiler de:Compiler el:Μεταγλωττιστής Compiler]] eo:Tradukilo es:Compilador et:Kompilaator eu:Konpiladore fa:مترجم (رایانه) fi:Ohjelmointikielen kääntäjä fr:Compilateur gl:Compilador he:מהדר hi:कम्पाइलर hr:Jezični prevoditelj hsb:Kompilator hu:Fordítóprogram id:Kompilator is:Þýðandi (tölvunarfræði) it:Compilatore ja:コンパイラ ka:კომპილატორი kk:Компилятор ko:컴파일러 la:Compilatrum lt:Kompiliatorius lv:Kompilators mhr:Компиляций mk:Компајлер ml:കംപൈലർ ms:Penyusun ne:कम्पाइलर nl:Compiler no:Kompilator pl:Kompilator pt:Compilador ro:Compilator ru:Компилятор simple:Compiler sk:Kompilátor (programovanie) sl:Prevajalnik sr:Компилатор sv:Kompilator ta:நிரல்மொழிமாற்றி te:కంపైలర్ th:คอมไพเลอร์ tr:Derleyici uk:Компілятор ur:Compiler vi:Trình biên dịch yi:קאמפיילער zh:編譯器