السلام عليكم و رحمة الله و بركاته
هذا اول موضوع لي هنا و ارجو ان يكون مفيد و لو قليلا
هذا الموضوع يتحدث عن خطوات تنفيذ البرنامج من بداية كتابة الكود الى ان يصير برنامجا قابلا للتنفيذ يعني processus ^_^
في البداية هذا مخطط توضيحي لتلك المراحل ثم ساحاول ان اوضح المرحلة تلو الاخرى ما استطعت

لتنفيذ برنامج قمنا بكتابة الكود الخاص به فهذا يتطلب عدة مراحل قبل التنفيذ و هذه المراحل تتم بشكل آلي تماما و الموقع الذي تدور فيه هذه المراحل هو القرص الصلب disque dure و هي تنفذ بالوسائل التالية :
1- محرر النصوص
2- المترجم
3- editeur de lien ( اظن مهناها الرابط او محرر الروابط )
4- chargeur ( معناها اللغوي هو الشاحن لكن الاصطلاحي لا اعرفه :blush: )
5- débogueur ( مصحح الاخطاء)
و الان ساباشر شرح دور كل وسيلة من الوسائل السابقة ^_^ :
1- محرر النصوص أو (éditeur de textes ( text editor :
ان الهدف من محرر النصوص هو تمكين المبرمج من كتابة الكود الخاص به بلغة متطورة قريبة من لغة البشر اي لغة من مستوى عالي ( haut niveau ) كلغة السي او سي ++ او لغة قريبة من لغة الالة اي لغة من مستوى منخفض ( bas niveau ) كلغة الاسامبلي، و ايضا فان محرر النصوص يمكن المبرمج من التغيير في برنامجه باظافة تعليمات او حذف تعليمات كما يمكنه من طباعته
2- المترجم :
هو عبارة عن خادم او برنامج خدمة يملك دور ترجمة او تحويل برنامج مكتوب بلغة متطورة الى برنامج مكتوب بلغة الالة و هو نتيجة الترجمة (programme objet)
و هناك نوعين من المترجم :
1-2- مترجم سطر بسطر ( interpréteur ) :
هو برنامج يقوم بالتنفيذ للكود سطر بسطر و هو يعمل بهذه الطريقة :
- قراءة التعليمة من الكود سورس
- ترجمة التعليمة النقروؤة لنا الى تعليمة مقروؤة للألة و هذه الخطوة عندها حالتين كنتيجة :
--> ترجمة بنجاح : هنا المترجم يقوم بارسال نتيجة الترجمة حتى يتم تنفيذها و ينتقل الى السطر او التعليمة التالية
--> ترجمة فاشلة : المترجم هنا لن يوافق على ارسال التعليمة و يقوم باظهار رسالة بان هناك خطأ في السطر او التعليمة التي توقف عندها فهذا المترجم لا ينتقل الى السطر التالي و التعليمة التالية ان كان هناك خطأ في اي تعليمة
* و هذا النوع من الترجمة يتطلب تكرار الترجمة في كل مرة نقوم فيها بتنفيذ البرنامج
2-2- مترجم جامع ( compilateur ) :
و هو ايضا برنامج يقوم بترجمة الكود من لغة متدورة الى لغة الالة و نتيجته نفسها ايضا لكن بهذه الوسائل :
- محلل الصحة اللغوية (analyseur lexical ) :
و هو من يقوم بتحليل الكود من الناحية اللغوية و عمله يكون كالاتي
ايجاد جدول الرموز :
و هو يحوي اسماء المتغيرات المستعملة او الثوابت المرفقة الى رموزها و الكلمات المفتاحية و الارقام و توابع الدوال و يصنفها حسب نوعها مستعملا رموزا خاصة به يفهمها، مثلاهذا الكود :
#include <stdio.h>
main()
{
int x;
const y=5;// عدد ثابت قيمته 5
x=y+2;
}لنرى بعض الامثلة الصغيرة من هذا الكود كيف ستكون حالتها في جدول الرموز و هي لن تكون كاملة :
# : symbol -> sym include : كلمة مفتاحية -> mc x : متغير من نوع اعداد صحيحة : id const : كلمة مفتاحية -> mc y : عدد ثابت قيمته 5 : const + : عملية : op 2 : رقم صحيح موجب : nbr
بالاظافة الى انواعها فهناك ايضا مكانها في الذاكرة و احداثيتها في الكود
و المحلل اللغوي للقيام بعمله فانه يقوم بحذف الفراغات و التعليقات و كمثال لنرة الكود السابق كيف سيكون
#include<stdio.h>main(){intx;consty=5x=y+2;}اذن فالمسافة و التعليق قد اختفوا
و من الاخطاء التي يعالجها المحلل الغوي اسماء المتغيرات الطويلة جدا و الرموز المجهولة عنده
لنرى ذلك كمثال
##include <stdio.h>
هنا ستكون رسالة الخطأ كالاتي
D:\exp.c|1|error: stray '##' in program|
تحليل من الناحية القاعدية :
هذا المحلل يقوم بمعالجة و ايجاد الاخطاء التي تكسر القواعد الخاصة باللغة و هو يعتمد جدول الرموز و القواعد المخزنة عنده و نتيجته تكون شجرة العبارة او بالتحديد arbre syntaxique و هي التي تكشف عن الخطأ الذي يكسر القاعدة المستعملة في العبارة
مثلا لناخذ هذه العبارات
x=y+z;x=+z;
شجرة العبارة الاولى كالاتي

و هي تماما صحيحة ^_^
اما الثانية فشجرتها هكذا

و هي بالتاكيد خاطئة -_-
لنحلل الخطأ معا رغم انه واضح ;)
اولا = عملية اسناد موجودة في جدول الرموز
ثم x القيمة المسند اليها موجود في جدول الرمز بكامل متطلباته
exp العبارة المسندة يجب ان نرى مما تتكون
op العملية الحسابية + هنا هنا هنا الخطأ فالقاعدة المخزنة عند المترجم هي ان عملية + بها حدين ( حد اول + حد ثاني ) لكن انتظر لحظة الحد الاول مفقود :excl: اذن هذا خطأ كسر القاعدة المعتمدة
; انتهاء التعليمة
هنا المترجم يسجل خطأ كسر قاعدة عملية الجمع
و ايضا من الاخطاء التي يعالجها محلل القاعدة لدينا الاتي
- غياب الاقواس
x=(a+b*c;
هنا المترجم يقول لك اين القوس الثاني لقد نسيته
- خطأ في بنية هيكلة معينة
- و غياب التحديد بالحواضن { }
و غيرها الكثير من الاخطاء التي يعالجها
* هنا يجدر بنا الاشارة الى كيفية التحليل فالمحلل يستخدم شجرة التعليمة و لا يبدؤها من الاعلى الى الاسفل و انما من الاسفل الى الاعلى
محلل دلالات الالفاظ (anlyseur sémantique):
من اسمه نعرف عمله فهذا المحلل يقوم بالتاكد من ان التعليمات المعالجة انها صحيحة او معرفة او مخزنة في ذاكرته و هو في عمله يستعمل جدول الرموز و شجرة التعليمة
و من الاخطاء التي يعالجها نذكر 3 :
- استعمال متغير لم يتم تعريفه
int x;p=x;
رسالة الخطأ هكذا
D:\exp.c|147|error: 'p' undeclared (first use in this function)|
- تعريف مضاعف لمتغير واحد
int j,j;
الرسالة هكذا
D:\exp.c|135|error: redeclaration of 'j' with no linkage|
- عدم التوافق بين الانماط
int x;char y;x=y;
انشاء التعليمات البرمجية :
هذه اخر مرحلة من عملية الترجمة الكلية و فيها يتم تحويل الكود سورس من لغة برمجية متطورة الى لغة الالة فينتج عن ذلك ما نسميه ب code objet فيتم انشاء ملف جديد كهذا exp.o
و هو الملف الذي سيصبح برنامج متربص بعد 3 مراحل قادمة
و هذا مخطط صغير للخطوات السابقة

3- انشاء الروابط (édition de liens / linker) :
هذه المرحلة مهمة جدا حيث تعتبر نوع من نظام التشغيل ففيها يتم اكمال عمل المترجم
- باظافة العناوين ( @ adresse )
- نقل اوامر المصادر الداخلية
- دمج الدوال المستعملة من المكاتب التي تم استدعاؤها
- الترجمة من لغة الى اخرى ( تعدد اللغات التي تعالجها البيئة البرمجية المستعملة )
4- نقل البرنامج الى الذاكرة المركزية :
هنا في هذه المرحلة يتم تحميل البرنامج الى الذاكرة المركزية حتى يتم تشغيله و تنفيذه لان كل ما حدث سابقا كان في القرص الصلب و لا يمكن تنفيذ البرامج هناك لان سرعته لا تتماشى مع سرعة المعالج processeur و الذاكرة المركزية اسرع من القرص الصلب بكثير
5- المصحح (debogueur / debogger) :
و مهمته مساعدة المبرمج على تطوير برنامجه و وظائفه كالاتي
- تمكين المبرمج من تصور محتوى الذاكرة
- تمكين المبرمج من تصور محتويات السجلات المختلفة
- تطبيق البرنامج خطوة بخطوة
و بهذا و بعد هذه المراحل فاننا حصلنا على برنامح متربص تم ارساله الى الذاكرة المركزية و وضع في طابور الانتظار لانتظار دوره فيتم تشغيله و هذا الامر فيه عدة مراحل اخرى ممتعة فقد انتقلنا الى مدير الذاكرة المركزية و ما الاستراتيجيات الو التكتيكات التي يستعملها في تسيير الذاكرة ^_^
بالتوفيق للجميع و ارجو ان تصححوا لي اخطائي و تفيدوني بما تعرفون
