رحلة كتابة المترجم
في مستودع Github هذا، أقوم بتوثيق رحلتي لكتابة مترجم ذاتي التجميع لمجموعة فرعية من لغة C. أقوم أيضًا بكتابة التفاصيل بحيث، إذا كنت تريد المتابعة، سيكون هناك شرح لما فعلته، ولماذا، مع بعض الإشارات إلى نظرية المترجمين.
ولكن ليس الكثير من النظرية، أريد أن تكون هذه رحلة عملية.
فيما يلي الخطوات التي اتخذتها حتى الآن:
- الجزء 0: مقدمة للرحلة
- الجزء الأول: مقدمة للمسح المعجمي
- الجزء الثاني: مقدمة في التحليل
- الجزء 3 : أسبقية المشغل
- الجزء 4: مترجم الفعلي
- الجزء الخامس: البيانات
- الجزء السادس: المتغيرات
- الجزء 7 : عوامل المقارنة
- الجزء 8: إذا كانت البيانات
- الجزء 9: أثناء الحلقات
- الجزء 10: للحلقات
- الجزء 11: الوظائف، الجزء 1
- الجزء 12: الأنواع، الجزء 1
- الجزء 13: الوظائف، الجزء 2
- الجزء 14: إنشاء رمز تجميع ARM
- الجزء 15: المؤشرات، الجزء 1
- الجزء السادس عشر: الإعلان عن المتغيرات العالمية بشكل صحيح
- الجزء 17: فحص أفضل للنوع وإزاحة المؤشر
- الجزء 18: إعادة النظر في القيم L وقيم R
- الجزء 19: المصفوفات، الجزء 1
- الجزء 20: حرف وسلسلة حرفية
- الجزء 21: المزيد من المشغلين
- الجزء الثاني والعشرون: أفكار تصميمية للمتغيرات المحلية واستدعاءات الدوال
- الجزء الثالث والعشرون: المتغيرات المحلية
- الجزء 24: معلمات الوظيفة
- الجزء 25: استدعاءات الوظائف والوسائط
- الجزء 26: النماذج الأولية للوظيفة
- الجزء 27: اختبار الانحدار ومفاجأة جميلة
- الجزء 28: إضافة المزيد من علامات وقت التشغيل
- الجزء 29: القليل من إعادة البناء
- الجزء الثلاثون: تصميم الهياكل والاتحادات والتعدادات
- الجزء 31: هياكل التنفيذ، الجزء 1
- الجزء 32: الوصول إلى الأعضاء في الهيكل
- الجزء 33: تنفيذ الاتحادات ووصول الأعضاء
- الجزء 34: التعدادات وTypedefs
- الجزء 35: المعالج المسبق للغة C
- الجزء 36:
break
continue
- الجزء 37: تبديل البيانات
- الجزء 38: المتدلية آخر وأكثر
- الجزء 39: التهيئة المتغيرة، الجزء 1
- الجزء 40: تهيئة المتغير العالمي
- الجزء 41: تهيئة المتغير المحلي
- الجزء 42: نوع الصب وNULL
- الجزء 43: إصلاحات الأخطاء والمزيد من المشغلين
- الجزء 44: الطي المستمر
- الجزء 45: إعادة النظر في إعلانات المتغيرات العالمية
- الجزء 46: معلمات الوظيفة الفارغة وتغييرات المسح
- الجزء 47: مجموعة فرعية من
sizeof
- الجزء 48: مجموعة فرعية من
static
- الجزء 49: المشغل الثلاثي
- الجزء 50: التطهير، الجزء 1
- الجزء 51: المصفوفات، الجزء 2
- الجزء 52: المؤشرات، الجزء 2
- الجزء 53: التطهير، الجزء 2
- الجزء 54: انسكاب السجلات
- الجزء 55: تقييم كسول
- الجزء 56: المصفوفات المحلية
- الجزء 57: التطهير، الجزء 3
- الجزء 58: تحديد زيادات/تناقصات المؤشر
- الجزء 59: لماذا لا يعمل، الجزء 1
- الجزء 60: اجتياز الاختبار الثلاثي
- الجزء 61: ما هي الخطوة التالية؟
- الجزء 62: تنظيف الكود
- الجزء 63: واجهة خلفية جديدة باستخدام QBE
- الجزء 64: الواجهة الخلفية لوحدة المعالجة المركزية 6809
لا يوجد جدول زمني أو جدول زمني للأجزاء المستقبلية، لذا استمر في التحقق هنا لمعرفة ما إذا كنت قد كتبت المزيد.
حقوق الطبع والنشر
لقد استعرت بعضًا من التعليمات البرمجية، والكثير من الأفكار، من مترجم SubC الذي كتبه Nils M Holm. رمزه موجود في المجال العام. أعتقد أن الكود الخاص بي مختلف تمامًا بما يكفي حتى أتمكن من تطبيق ترخيص مختلف على الكود الخاص بي.
ما لم تتم الإشارة إلى خلاف ذلك،
- جميع التعليمات البرمجية المصدرية والبرامج النصية هي (ج) Warren Toomey بموجب ترخيص GPL3.
- جميع المستندات التي لا تتضمن تعليمات برمجية مصدرية (مثل المستندات الإنجليزية وملفات الصور) هي (ج) Warren Toomey بموجب ترخيص Creative Commons BY-NC-SA 4.0.