أول لغة برمجة نُظُم مُصرَّفة بصياغة عربية
اكتب تطبيقات أصلية على ويندوز ولينكس باستخدام كلمات مفتاحية وأرقام وعلامات ترقيم عربية
v0.3.8— Testing & Quality Assurance ✅ مكتمل (2026-02-25)v0.3.9— Advanced Arrays & String Operations ✅ مكتمل (2026-02-25)v0.3.10— Pointers & References ✅ مكتمل (2026-02-25)v0.3.10.5— Type Casting (تحويل الأنواع) ✅ مكتمل (2026-02-27)v0.3.10.6— Function Pointers (مؤشرات الدوال) ✅ مكتمل (2026-02-28)
| الميزة | الوصف |
|---|---|
| تصريف أصلي | تُصرِّف الشيفرة إلى ملف تجميع (.s) لمعمارية x86-64 ثم تُنتج ملفات تنفيذية أصلية (ويندوز: PE/COFF، لينكس: ELF) |
| تعدد الأهداف | دعم هدفين: x86_64-windows (COFF) و x86_64-linux (ELF) مع خيار --target |
| صياغة عربية كاملة | كلمات مفتاحية عربية، وأرقام (٠-٩)، وعلامات ترقيم (. ؛) |
| شيفرة معيارية | #تضمين، تصريف متعدد الملفات، وملفات ترويسة .baahd |
| المعالج القبلي | #تعريف، #إذا_عرف، #الغاء_تعريف |
| الدوال | تعريف الدوال واستدعاؤها مع معاملات وقيم إرجاع |
| المصفوفات | مصفوفات ثابتة الحجم أحادية/متعددة الأبعاد (محلية/عامة/ساكنة) مع تهيئة {...} (جزئية + تعبئة بالأصفار) |
| أنواع مركبة | تعداد + هيكل + اتحاد مع الوصول للأعضاء عبر : (يدعم التعشيش) |
| مؤهّلات الأنواع | ثابت (const) للثوابت، ساكن (static) لمدة التخزين الساكنة |
| تدفّق التحكّم | إذا/وإلا، طالما، لكل |
| تحكّم متقدّم | اختر، حالة، افتراضي، توقف، استمر |
| المعاملات | معاملات حسابية ومقارنة ومنطقية مع تقييم قصير |
| النصوص والمحارف | ثوابت السلاسل ("...") وثوابت المحارف ('...') + نوع حرف UTF-8 + دوال طول_نص/قارن_نص/نسخ_نص/دمج_نص/حرر_نص |
| أحجام أعداد صحيحة | ص٨/ص١٦/ص٣٢/ص٦٤ و ط٨/ط١٦/ط٣٢/ط٦٤ مع ترقيات/تحويلات على نمط C |
| الأعداد العشرية | نوع عشري (f64) يدعم + - * / والمقارنات والطباعة مع توافق ABI على ويندوز/لينكس |
| عمليات منخفضة المستوى | دعم & و` |
| المؤشرات (v0.3.10) | تعريف مؤشرات عامة + & (عنوان) + * (فك الإشارة) + عدم كمؤشر فارغ + إسناد عبر المؤشر *م = قيمة + حساب مؤشري (pointer +/- int وpointer - pointer) |
| التحويل الصريح (v0.3.10.5) | صيغة كـ<النوع>(التعبير) للتحويلات العددية (int/float/char) وتحويلات المؤشرات (pointer <-> pointer, pointer <-> int) |
| مؤشرات الدوال (v0.3.10.6) | نوع دالة(...) -> ... للمتغيرات/المعاملات + إسناد مرجع دالة (عملية = جمع.) + نداء غير مباشر عبر معرّف (عملية(١،٢).) + عدم كمؤشر دالة فارغ |
| تسلسلات الهروب | دعم \س (سطر جديد)، \ت (Tab)، \٠، و\\ في النصوص/المحارف |
| إدخال المستخدم | العبارة اقرأ لقراءة أعداد صحيحة |
| النظام الوسيط (IR) | IR داخلي مع SSA form وتحليل التدفّق والتحسينات متعددة المراحل |
| سلامة الأنواع | تدقيق ثابت للأنواع مع تحليل دلالي |
| تحديث ذاتي | مُحدِّث مدمج (baa update) — ويندوز فقط حالياً |
المصدر (.baa)
↓
المحلل اللفظي (Lexer) + المعالج القبلي
↓
المحلل القواعدي (Parser) ← شجرة الإعراب (AST)
↓
التحليل الدلالي (Semantic Analysis) ← جدول الرموز
↓
توليد IR (Intermediate Representation)
↓
المُحسِّن (Optimizer) ← SSA form + تحسينات متعددة المراحل
↓
الخلفية (Backend): اختيار التعليمات (ISel) ← تخصيص السجلات (RegAlloc) ← توليد التجميع
↓
ملف التجميع (.s)
↓
GCC/Clang المضيف (الربط والتجميع)
↓
ملف تنفيذي أصلي (PE/COFF على ويندوز، ELF على لينكس)
| العنصر | مدعوم | ملاحظات |
|---|---|---|
| نظام التشغيل | ويندوز (x86-64) + لينكس (x86-64) | على لينكس يتم إنتاج ELF والربط باستخدام GCC المضيف حالياً |
| سلسلة الأدوات | ويندوز: CMake 3.10+ + MinGW-w64 GCC / لينكس: CMake 3.10+ + GCC/Clang | على ويندوز نستخدم MinGW، وعلى لينكس نستخدم GCC/Clang المضيف |
| ترميز ملفات المصدر | UTF-8 | يتطلب النص العربي ملفات بترميز UTF-8 |
| الطرفية | ويندوز تيرمنال / باورشِل | فعِّل UTF-8 إذا ظهر الإخراج بصورة غير سليمة |
ويندوز (MinGW):
git clone https://github.com/OmarAglan/Baa.git
cd Baa
cmake -B build -G "MinGW Makefiles"
cmake --build buildلينكس (GCC/Clang):
git clone https://github.com/OmarAglan/Baa.git
cd Baa
cmake -B build-linux -DCMAKE_BUILD_TYPE=Release
cmake --build build-linux -j
./build-linux/baa --versionأنشئ ملف hello.baa (مهم: احفظ الملف بترميز UTF-8):
صحيح الرئيسية() {
اطبع "مرحباً بالعالم!".
إرجع ٠.
}
# التصريف
.\build\baa.exe .\hello.baa
# التشغيل
.\out.exe# التصريف
./build-linux/baa ./hello.baa
# التشغيل
./outافتراضياً يختار المُصرِّف هدف النظام المضيف. يمكنك تحديده صراحةً:
baa --target=x86_64-windows البرنامج.baa
baa --target=x86_64-linux البرنامج.baaملاحظة (0.3.2.8.4+):
- عند اختلاف الهدف عن نظام المضيف، يدعم المُصرّف حالياً -S فقط (توليد ملف تجميع). التجميع/الربط العابر للأهداف مؤجل.
- نوع
عشري(f64) مدعوم للحساب/المقارنة/الطباعة، لكن SIMD وأنواع الفاصلة العائمة الأخرى غير مدعومة حالياً. - حساب المؤشرات في هذا الإصدار يغطي المسار الأساسي (
pointer +/- int)؛ الميزات المتقدمة مؤجلة. - صيغة التحويل الصريح
كـ<...>(...)مدعومة فيv0.3.10.5للأنواع العددية وتحويلات المؤشرات الأساسية. - مؤشرات الدوال (
دالة(...) -> ...) لا تدعم حالياً تعشيش تواقيع مؤشرات الدوال داخل تواقيع مؤشرات دوال أخرى، ولا تدعم النداء عبر تعبير كـ callee (حالياً النداء غير المباشر مدعوم عبر معرّف فقط).
#تضمين "stdlib/baalib.baahd"
صحيح الرئيسية() {
نص س = دمج_نص("مرح", "با").
اطبع طول_نص(س).
حرر_نص(س).
إرجع ٠.
}
صحيح الرئيسية() {
صحيح س = ١٠.
صحيح* م = &س.
إذا (*م != ١٠) { إرجع ١. }
*م = ٢٠.
إذا (س != ٢٠) { إرجع ٢. }
صحيح* فارغ = عدم.
إذا (فارغ != عدم) { إرجع ٣. }
إرجع ٠.
}
صحيح اجمع(صحيح أ، صحيح ب) {
إرجع أ + ب.
}
صحيح طبق(دالة(صحيح، صحيح) -> صحيح ف، صحيح أ، صحيح ب) {
إرجع ف(أ، ب).
}
صحيح الرئيسية() {
// إسناد مرجع الدالة إلى مؤشر
دالة(صحيح، صحيح) -> صحيح ف = اجمع.
// النداء غير المباشر عبر المؤشر
صحيح ن = ف(٢، ٣).
اطبع ن. // المخرج: ٥
// تمرير مؤشر الدالة كمعامل
صحيح م = طبق(اجمع، ١٠، ٢٠).
اطبع م. // المخرج: ٣٠
// مقارنة مع عدم
إذا (ف != عدم) {
اطبع "المؤشر غير فارغ".
}
إرجع ٠.
}
| الخيار | الوصف |
|---|---|
-O0 |
بدون تحسين (افتراضي) |
-O1 |
تحسين أساسي |
-O2 |
تحسين عالي (مستوى الإنتاج) |
-S |
توليد ملف تجميع فقط (.s) |
-c |
توليد ملف كائن فقط (.o) |
-o <file> |
تحديد اسم ملف المخرج |
--target=x86_64-windows|x86_64-linux |
تحديد الهدف |
--verify |
التحقق من صحة IR/SSA بعد التحسين |
--verify-ir |
التحقق من صحة IR فقط |
--verify-ssa |
التحقق من صحة SSA فقط |
-fPIC / -fPIE |
خيارات PIC/PIE (لينكس/ELF) |
-fstack-protector / -fstack-protector-all |
حماية المكدس (لينكس/ELF) |
-mcmodel=small |
نموذج الذاكرة الصغير |
--help |
عرض مساعدة الاستخدام |
--version |
عرض إصدار المُصرِّف |
// حساب مجموع مصفوفة
صحيح الرئيسية() {
// التصريح بمصفوفة من ٥ أعداد صحيحة
صحيح قائمة[٥].
صحيح مجموع = ٠.
// ملء المصفوفة بالقيم: ٠، ١٠، ٢٠، ٣٠، ٤٠
لكل (صحيح س = ٠؛ س < ٥؛ س = س + ١) {
قائمة[س] = س * ١٠.
}
// جمع جميع القيم
لكل (صحيح س = ٠؛ س < ٥؛ س = س + ١) {
مجموع = مجموع + قائمة[س].
}
اطبع "المجموع هو: ".
اطبع مجموع.
إرجع ٠.
}
المخرجات: المجموع هو: ١٠٠ (٠ + ١٠ + ٢٠ + ٣٠ + ٤٠)
تعداد نوع_قيمة { رقم، نص_ق }
اتحاد قيمة {
صحيح رقم.
نص نص_قيمة.
}
هيكل قيمة_موسومة {
تعداد نوع_قيمة نوع.
اتحاد قيمة بيانات.
}
صحيح الرئيسية() {
هيكل قيمة_موسومة م.
م:نوع = نوع_قيمة:رقم.
م:بيانات:رقم = ٤٢.
اطبع م:بيانات:رقم.
م:نوع = نوع_قيمة:نص_ق.
م:بيانات:نص_قيمة = "مرحبا".
اطبع م:بيانات:نص_قيمة.
إرجع ٠.
}
| المستند | الوصف |
|---|---|
| دليل المستخدم | البدء والاستخدام الأساسي |
| الكتاب العربي | تعلّم/مرجع عربي شامل (مسودة) |
| مواصفة اللغة | مرجع كامل للصياغة والمزايا |
| البنية الداخلية للمُصرِّف | المعمارية وتفاصيل التنفيذ |
| مرجع واجهة البرمجة | توثيق الواجهة الداخلية للمُصرِّف |
| خارطة الطريق | خطط التطوير المستقبلية |
| سجل التغييرات | تاريخ الإصدارات |
- CMake 3.10+
- MinGW-w64 مع GCC
- باورشِل (ويندوز)
- Git (لاستنساخ المستودع)
# استنساخ المستودع
git clone https://github.com/OmarAglan/Baa.git
cd Baa
# التوليد ثم البناء (من جذر المشروع)
cmake -B build -G "MinGW Makefiles"
cmake --build build
# أصبح المُصرّف الآن في: build/baa.exe# المسار الموصى به (تشغيل سريع)
python .\scripts\qa_run.py --mode quick
# المسار الموصى به (تحقق كامل)
python .\scripts\qa_run.py --mode full
# مسار الضغط
python .\scripts\qa_run.py --mode stress
# (اختياري) المشغّل القديم لاختبارات الانحدار
python .\tests\regress.py
# تشغيل اختبار تكاملي واحد (مثال)
.\build\baa.exe -O2 --verify .\tests\integration\backend\backend_test.baa -o .\build\backend_test.exe
.\build\backend_test.exetests/
├── integration/
│ ├── backend/ # اختبارات تكامل وتجميع/تشغيل
│ └── ir/ # اختبارات تكامل خاصة بـ IR من منظور المستخدم
├── neg/ # اختبارات تشخيص فشل متوقع
├── stress/ # اختبارات الضغط
├── fixtures/ # ملفات مساعدة للاختبارات (headers/includes/multi-file)
├── corpus_docs/ # عينات من التوثيق
├── corpus_v2x_docs/
├── test.py # مشغل التكامل
└── regress.py # مشغل الانحدار
للتحقق من أمثلة التوثيق مقابل التنفيذ:
cmake -S . -B build
cmake --build build
.\build\baa.exe --help
.\build\baa.exe --versionولفحص سريع طرف-إلى-طرف:
gcc .\make_test.c -o .\build\make_test.exe
.\build\make_test.exe
.\build\baa.exe .\build\test.baa -o .\build\test_suite.exe
.\build\test_suite.exe