مترجم للغة سي شارب
بلغة سي شارب!
أجريت بعض عمليات البحث، ووصلت إلى
معلومات تقول إن مترجم سي شارب C# Compiler قبل
الإصدار الرابع تمت كتابته بلغة سي ++ (في الغالب VC++)،
ولكن بدءا من الإصدار الرابع وما يليه تمت كتابة مترجم سي شارب بلغة سي شارب
نفسها!
هذا الكلام
يبدو غريبا ومربكا: إذ كيف يمكن كتابة مترجم لغة بنفس اللغة؟!
ولكن الارتباك
سيزول إذا تذكرنا أن مترجم سي شارب ليس مترجما حقيقيا، وأن كل دوره يقتصر على
تحويل الكود المكتوب بلغة سي شارب إلى كود آخر مكتوب باللغة الوسيطة IL، وبالتالي من الممكن استخدام سي
شارب أو فيجوال بيزيك أو أي لغة من لغات دوت نت لكتابة برنامج يقوم بهذا الغرض،
وترجمته على لغة IL
ليصير جزءا من إطار العمل.
وهذا الموضوع
يشرح كيفية كتابة مترجم للغة خاصة بك في دوت نت:
وهذا مثال
لمترجم لكود سي شارب مكتوب بسي شارب:
شكراً استاذي علي هذا الرد الرائع وعلي هذا المجهود الذي بذلته
ردحذفموضوع كتابة مترجم للغة برمجة بنفس لغة البرمجة يدخل تحت معضلة البيضة أم الفرخة أولا!, دعونا نعود لأول لغة برمجة عالية المستوي وهي الفورتران, هذه اللغة تم كتابة مترجم لها عام 1957 علي يد جون باكوس في شركة IBM في هذا الوقت لم تكن هناك لغة سي أو سي بلس بلس أكثر اللغات التي تستخدم في كتابة مترجمات لغات البرمجة حاليا, اذن كيف تم كتابة مترجم للغة فورتران, الاجابة تتلخص في عدة خطوات:
ردحذف1-قبل لغة الاسمبلي هناك لغة الالة وهذه سلاسل من 1 و 0 , ربنا كرمنا واخترعت لغة الاسمبلي واصبح لدينا اسمبلر نستخدمه في كتابة برامج بالاسمبلي وهو يقوم بتحويلها للغة الالة.
2-لدينا الان لغة الاسمبلي هنا لكي نكتب مترجم لأي لغة عالية المستوي, المترجم سنكتبه بلغة الاسملبي(مترجم توربو باسكال كان مكتوبا بالاسمبلي)
3-اصبح لدينا الان لغة برمجة عالية المستوي يتم ترجمتها الي الاسمبلي ثم يقوم الاسمبلر بترجمة هذه الاكواد الي لغة الالة.
4-الان معنا لغة السي مثلا نستطيع الان ان نستخدم هذا اللغة في كتابة مترجم لأي لغة برمجة عالية في الوجود, فنحن نستطيع أن نكتب بها الـlexer والـparser وهما أهم جزئين في تصميم المترجم, ونحدد قواعد اللغة, وبعد ذلك يمكننا أن نكتب الكود المكافئ بالاسمبلي للغة البرمجة التي كتبنا لها المترجم(موضوع IO مفهوم)
اذن من السهل جدا كتابة مترجم بلغة السي شارب بنفس اللغة السي شارب, أما لغة IL فهذه مجرد لغة وسيطة تقع بين السي شارب أو أي لغة دوت نت وبين الاسمبلي, يعني عندنا مترجم بيقوم بترجمة برنامج السي شارب للـIL ثم تتحول الي اسمبلي ثم الي لغة الالة في النهاية ثم يتم ربط كل ملفات الاوبجكت في ملف واحد وتحويلهم الي ملف تنفيذي طبقا لنظام التشغيل المستخدم.