Skip to content

الفصل 38: المترجم (sad-build)

مقدمة

المترجِّمُ هو محرّكُ لغة ص الوحيد: لا مفسّرَ ولا آلةَ بايت‑كود. كلُّ برنامجٍ يُترجَمُ إلى ملفٍّ تنفيذيٍّ أصيلٍ عبرَ LLVM، ثمّ يُشغَّلُ الناتج.

مراحل الترجمة

كود .ص → تحليل معجمي → تحليل نحوي → AST

   ملف تنفيذي ← LLVM IR ← SIR ← AST

1. التحليل المعجمي

يحول الكود إلى رموز (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
# ترجمة ثمّ تشغيل — وهما خطوتان دائماً
sad-build برنامج.ص -o برنامج.exe
.\برنامج.exe

# إنتاج LLVM IR للفحص
sad-build برنامج.ص --emit-llvm

# إنتاج SIR للفحص
sad-build برنامج.ص --emit-sir

ماذا يعني «محرّكٌ واحد» عمليًّا

الأثرالتفصيل
خطوةُ بناءٍ لازمةلا يُشغَّلُ ملفُّ مباشرةً؛ يُترجَمُ أوّلًا ثمّ يُشغَّلُ الناتج
التوزيعالملفُّ التنفيذيُّ مستقلٌّ — لا يحتاجُ المستعمِلُ تثبيتَ لغة ص
سلوكٌ واحدٌ لا يلتبسلا يختلفُ جوابُ البرنامجِ باختلافِ المحرّك، إذ ليس ثمّةَ محرّكٌ ثانٍ
التشخيصكلُّ رفضٍ يحملُ رمزًا من الكتالوج (SEM001 · RUN002 · SYN009 …) ونصًّا عربيًّا وعلاجًا

تمرين

ترجِمْ برنامجًا بسيطًا بـsad-build، ثمّ أعِدْ ترجمتَه بـ--emit-llvm وتأمّلْ ما يُخرِجُه المترجِّمُ من LLVM IR.

مُرخَّص بموجب رخصة MIT