الفصل 38: المترجم (sadc)
مقدمة
المترجم sadc يحول كود لغة ص إلى ملفات تنفيذية أصلية باستخدام LLVM.
مراحل الترجمة
كود .ص → تحليل معجمي → تحليل نحوي → AST
↓
ملف تنفيذي ← LLVM IR ← SIR ← AST1. التحليل المعجمي
يحول الكود إلى رموز (tokens):
"دالة جمع(أ، ب)" → [KEYWORD_FUNCTION, IDENTIFIER("جمع"), LPAREN, IDENTIFIER("أ"), COMMA, IDENTIFIER("ب"), RPAREN]2. التحليل النحوي
يبني شجرة AST من الرموز.
3. SIR (Sad Intermediate Representation)
تمثيل وسيط خاص بلغة ص، يدعم 12 تعليمة:
| التعليمة | الوصف |
|---|---|
| LOAD | تحميل قيمة |
| STORE | تخزين قيمة |
| ADD | جمع |
| SUB | طرح |
| MUL | ضرب |
| DIV | قسمة |
| CMP | مقارنة |
| JMP | قفز |
| CALL | استدعاء دالة |
| RET | إرجاع |
| ALLOC | حجز ذاكرة |
| FREE | تحرير ذاكرة |
4. LLVM IR
تحويل SIR إلى LLVM IR الذي يُحسّن ويُترجم إلى كود أصلي.
استخدام المترجم
bash
# ترجمة بسيطة
sadc برنامج.ص
# إنتاج LLVM IR للفحص
sadc برنامج.ص --emit-llvm
# إنتاج SIR للفحص
sadc برنامج.ص --emit-sirمقارنة: مفسر مقابل مترجم
| الميزة | المفسر (sad) | المترجم (sadc) |
|---|---|---|
| السرعة | أبطأ | أسرع بكثير |
| التطوير | أسرع | يحتاج ترجمة |
| التوزيع | يحتاج المفسر | مستقل |
| التنقيح | أسهل | أصعب |
تمرين
جرب ترجمة برنامج بسيط باستخدام sadc وقارن أداءه مع التشغيل عبر المفسر.