بسم الله الرحمن الرحيم
لا حطت ان معظم طلبة مادة ال compiler لا يفهم ماذا تعني هذه الماده في الاساس و ما اهميتها ؟
وهذه نقطه خطيره جدا ان ندرس ماده و لا نكون مدركين تماما الى اهميتها
لهذا احاول هنا محاولة تبسيط مفهوم ال compiler من خلال شرح عملي و سأترك الشروح النظريه للمستقبل او الي ما يخدم الهدف هنا وهو الوصول الى عمل compiler ومعظم ما اذكره هنا سيكون من خلال تجربتي الشخصيه في كتابة compiler . و سأشرح بطريقه ارجو ان يوفقني الله ان تكون مبسطه .
سأبدأ اولا بالاجابه عن اسئله شائعه عن ال Compiler مثل :-
1- ما هي مادة ال compiler
2- ما الفرق بين ال Compiler و ال interpreter؟
3- هل اذا كتبت برنامج يحول من لغة البيسك مثلا الى ملف تنفيذي EXE file اكون قد كتبت compiler ؟
4- هل اذا كتبت برنامج يقرأ كل كلمه من ملف و يترجمها الى لغه اخري في ملف اخر هل هذا compiler?
5- ما فائدة ال compiler لي انا اريد ان اصبح مبرمجاً و لا انوى عمل compiler ؟
6- هل يمكن كتابة compiler مصغر ؟
أولا : ما هي مادة ال compiler
هو برنامج يقوم بالتحويل من لغه الى اخرى – من لغه مصدريه الى اخرى مستهدفه و في المعتاد يكون التحويل من لغه عاليةhigh language الى لغه اخري في المعتاد لغه قريبه من لغة التجميع assembly او الى لغه و سيطه مثل p-code او object file
وهذه يعني التحويل من لغة السي بلس بلس c++ الى لغة التجميع مثلاً
أو لغة السي بلس بلسc++ الى لغة ا لبيسك BASIC مثلاً.
ثانيا : ما هو الفرق بين الCompiler و ال interpreter؟
ال interpreter يقوم بقراءة الملف المصدري سطر بسطر ثم يقوم بتنفيذ هذا السطر/الأمر و لا يقوم بعمل اي ملفات تحتوى على generated code كود منتج من الملف المصدر.
اما ال compiler فيقوم بإنتاج كود generating code.
ثالثا : هل اذا كتبت برنامج يحول من لغة البيسك مثلا الى EXE file اذا انا عملت compiler ؟
اهنئك اذا فعلت هذا. فأنت في هذه الحاله لم تكتب compiler فقط بل كتبت عدة اشياء مثل :-
Compiler
و
Linker
و ربما
Loader
ال compiler مرحله من مراحل متعدده لتحويل البرنامج المصدري الى برنامج تنفيذي
رابعاًً : هل اذا كتبت برنامج يقرأ كل كلمه من ملف و يترجمها الى لغه اخري في ملف اخر هل هذا compiler?
نعم . اذا توافرت شروط معينه.
- ما هي هذه الشروط للتأكد من كتابه compiler ذو جوده عاليه ؟
المرور بخطوات معروفه للتحويل من لغه الى اخري و تضمن عمليات
أ- التأكد من استخدام حروف معروفه و مفهومه و هذ يسمىlexical analyzer
ب- التأكد من ان الجمله مكتوبه بلغه سليمه. اي اعراب الجمله بشكل صحيح.وهذ يسمى syntax analyzer
ج- التأكد ان الجماه المكتوبه لها معنى و ليست ليس لها فائده وهذه يسمى semantic analyzer
ء- التحويل الى اللغه وسيطه intermediate language .
هـ- تحسين الكود المنتج code optimizer.
و- ثم اخراج الكود المستهدف في شكل نهائي code generation
وبهذه الخطوات تساعدنا في اكتشاف الاخطاء و كتابة compiler ذو جوده عاليه. مع ملا حظة اننا سنحتاج الى طريقه للتعامل في حالة وجود اخطاء اكتشفت في البرنامج من خلال Error handler
و سنحتاج ايضا الى طريقه لمساعدتنا في تتبع المتغيرات المختلفه في البرنامج symbol table
و تسمى هذه الخطوات phases of compiler طور تنفيذ ال compiler. و هذه الخطوات تساعد من يستخدم هذا ال compiler الا يقع في اخطاء في كتابة برنامج باستخدم لغة هذا ال compiler و تجنب حدوث خطا اثناء التنفيذ run-time error و اكتشاف خطوات اثناء كتابة البرنامج compiler time error.
و تعتبر الخطوات الثلاث الاولى هي محاولة فهم وتحليل الكود المصدري source code.
و هي موجوده في كلا من ال compiler و ال interpreter و تسمى هذه الخطوات الثلاث ال front end
اما الخطوات التاليه فهى خاصة بال compiler فقط و هى لانتاج كود وتسمى back end
خامساّ : ما فائدة ال compiler لي انا اريد ان اصبح مبرمجاً و لا انوى عمل compiler ؟
نعم و لكنك كمبرمج قد تحتاج الى :-
1-اجزاء من ال compiler في عمل برنامج اخر لا يمت بصله الى ال compiler مثل : محرر نصوص يحتوى على فحص للنحو الاعراب للجمل المكتوبه . وهنا ستجد ما تعلمته مفيد جدا
2-فهمك الجيد لطرق عمل ال compiler سيساعدك في كتابة كود افضل.
3- اذا اردت كتابة برنامج آله حاسبه متقدمه و اردت ان تتقوم بعمل parsing مثلا لتحقيقي اولوية المعملات paremeter pariorites
4- ...........و هناك الكثير و الكثير الذي ستكتشفه تباعا.
سادساً : هل يمكن كتابة compiler مصغر ؟
نعم و لم لا