مشروع المترجمات

15 - 05 - 2008

اليوم انتهيت من مشروع المترجمات (Compiler) ، قضيت 10 ساعات متواصلة في كتابة الكود ، حوالي 500 سطر جافا.
أعتقد أنه إنجاز جيد بالنسبة لي لعدة اعتبارات :

- تغلبت قليلا على الكسل.
- هذه أول مرة أكتب برنامج بلغة Java ، معرفتي بها ضعيفة ، سأتوسع بها فيما بعد.
- استخدام طريقة جديدة في الترجمة تتمثل في استخدام الـXML كمرحلة ، و استخدام المكدس Stack في التحليل و هذا ما أعجب الأستاذ .

مراحل عمل المترجم :

1 - قراءة الكود الذي يقوم المستدم بكتابته في ملف.
2 - تقسيم الكود إلى مقاطع و وضعها في ملف XML .
3 - جلب البيانات من ملف الـ XML و تحليل كل مقطع و حفظ قائمة بالأخطاء.
4 - في حال عدم وجود أخطاء ، بناء برنامج java مكافئ.
5 - توليد ملف .class من ملف الجافا الناتج.

بالطبع هو مترجم متخلف جدا ، لكن نظرا لضيق الوقت ، و لأن ليس بالمشروع الضخم ، هو مجرد تطبيق لبعض المفاهيم مثل طرق التحليل من أدنى لأعلى و الأساليب المستخدمة في التحقق من صحة عبارة بواسطة جدول Shift Reduce.

اللغة التي يقبلها المترجم هي لغة بسيطة تتكون من الآتي :

- يبدأ البرنامج بكلمة start و ينتهي بكلمة end .
- يعرف المتحول على أنه إما String أو int بواسطة الكلمة def مثل :
def test int;

- عبارة if لها الشكل :
if (exp){}

- عبارة for لها الشكل :
for x = y to z { }

- عبارة الإدخال هي :
input(x)

- عبارة الإخراج لها الشكل :
output(x)

- تقبل اللغة حلقات for و حلقات if متداخلة.

هذه صورة توضح الطريقة المتبعة في معالجة حلقة For ، يتم بناء مكدس أو مصفوفة تحوي في عناصرها تعابير نظامية Regular Expression كل منها يعبر عن محتوى يجب أن يكون ، تتم معالجة الجملة بحيث نقوم بتجميع الحروف حتى نصل للفراغ ثم مقارنة النص الناتج مع قمة المكدس ، إذا حصل تطابق matches ننفذ الطريقة pop التي تحذف قمة المكدس ، و في نفس الوقت نكون قد حذفنا الأحرف المشكلة للكلمة التي تم تحليلها.
هناك حالتان لوقوع الخطأ :
- في حال انتهاء العبارة و عدم انتهاء المكدس.
- في حال وجود حالة عدم تطابق في إحدى المراحل.
صورة توضيحية ( بعض الشيء ) : اضغط على الصورة للتكبير -



بشكل عام ، كان المشروع مقبول قياسا بمدة الإنجاز و الوقت المتوفر ولو أنه كان هناك بعض الأخطاء.
ما أزعجني في النهاية هو مايكروسوفت وورد 2007 ، فأنا أبغض الكتابة فيه و هذه أول مرة أستخدم الإصدار 2007 و هذا ما جعلني أبحث طويلا عن كل أمر ، لأنه كان مطلوبا أن نكتب بعض الشرح عن آلية المترجم و هذا ما كتبناه بـ 3 صفحات شديدة الاختصار.


                   

سلام في 2008-05-15 الساعة 2:40:53
ملاحظة:
في الصورة matches لكن قمت بتصغير المربع فأُكلت الـ s و لم يعد لدي رغبة بتعديل الصورة ، المهم المقصوه أنه إذا كان المقطع الحالي يتطابق مع التعبير النظامي الموجود في قمة المكدس حسب الطريقة matches في java.

رنيم في 2008-05-15 الساعة 18:49:05
عجبت الاستاذ مو...؟؟ بعرف...
انت كتبت كل هالشي مشان تخبرنا انو عجبت الاستاذ
عافكرة... دققت كتير بالرسمة.. وكانت النتيجة.. كالتالي...

farah في 2008-05-16 الساعة 0:29:17
زكرتني بأخواتي ... لما يساووا هيك مشروع يعدوا ويحكولنا انا وبابا وماما .. طبعا نحنا بس بنهز براسنا انا بصير فيني هيك وماما طبعا الله يرضى عليكم ومن هالحكي وبابا

الله يعطيك العافية يا رب وما يضيعلك تعب وتاخد العلامة التامة

حلوين ألوان الصووورة

سلام في 2008-05-22 الساعة 6:01:26
رنيم ، فرح هالسمايلات ملائمة كتير

M A I في 2008-05-26 الساعة 18:57:52
مجهود طيب

إضافة تعليق

لإضافة تعليق اكتب ناتج الجمع و اضغط موافق 4 + 3    



التعليقات لا تنشر مباشرة ، أقوم بقراءتها قبل نشرها.





أقسام

صفحات إضافية

اقتباس

النفس الزكية تحب الخير و تأمر به و النفس الرديئة تحب الشر و تأمر به.
ســقراط

آخر المواضيع

Flickr

مواضيع عشوائية

مواقع و مدونات

أنا في

salamm[at]live.com
أنا في فلكر
Ma.gnolia

Icons



مدونات سورية

Add to Google