Git Product home page Git Product logo

compiler's Introduction

The Arabic Programming Language, Alif - لغة البرمجة العربية، ألف

كيف يعمل مترجم ألف ؟

مترجم ألف يقوم بترجمة لغة ألف إلى لغة سي++ مع استعمال مكتبات بوست

[ ! ] تنبيه

مشروع ألف نسخة 3 هو قيد التطوير ولا يصلح حاليا للاستخدام، لكن يمكنك استعمال وتجربة ألف النسخة 2 عبر تحميله من الموقع الرسمي https://aliflang.org

طريقة ترجمة الشيفرة المصدرية للمشروع

المتطلبات

  1. مترجم مناسب، مثل مترجم gcc الإصدار رقم 8 على الأقل
  2. مكتبات بوست، على الأقل الإصدار رقم 1.74

استنساخ الكود لجهازك

git clone --depth=1 -b main --single-branch https://github.com/alifcommunity/compiler.git
cd compiler
mkdir build
cd build

البناء

للبناء المشروع على أي نظام تشغيل باستخدام make

make build

Windows

البناء باستخدام GCC (MinGW64).

cmake .. -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release
mingw32-make
mingw32-make install

البناء باستخدام Microsoft build tools 2019.

cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release
nmake

Linux

تنصيب مترجم GCC & GTK3

sudo apt install build-essential libgtk-3-dev

تنصيب مكتبات Boost +1.74

إن لم تكن موجودة بالفعل في المتسودع الرسمي لحزم توزيعة اللينوكس، قم بتنصيبها يدويا:

wget https://boostorg.jfrog.io/artifactory/main/release/1.76.0/source/boost_1_76_0.tar.gz
tar -xzf boost_1_76_0.tar.gz
cd boost_1_76_0
./bootstrap.sh
sudo ./b2 install address-model=64 variant=release link=shared runtime-link=shared warnings=off --with-filesystem --with-program_options --with-system --with-locale --with-date_time --with-regex --with-nowide --with-thread

بناء مترجم ألف باستخدام GCC.

cmake ..
make && sudo make install

المساهمة في تطوير اللغة

قال صلى الله عليه وسلم : "يد الله مع الجماعة". بدأت اللغة كعمل فردي ومبادرة من حسن دراجة، لكن اللغة تنمو بالمساهمين والمطورين الذي يريدون رؤية اللغة العربية على رأس اللغات وأفضلهم.

المتطلبات

  1. أنت بحاجة لتوفية متطلبات البناء في الجزء الخاص ببناء المترجم، هذا بديهي 😅
  2. على الأقل أنت بحاجة لـ "جيت" الإصدار 2.9.0 لاستعمال الخطافات، المصدر
  3. قم بتنصيب clang-format، تأتي ضمن مترجم ال clang
  4. مفسر لغة بايثون، حيث يٌتطلب وجود python، pip، venv لإجراء الاختبارات
  5. (خياريا وليس إلزاما)، لتنسيق ملفات yaml, json, ...، يجب توافر أداة prettier التي يمكن تنصيبها من npm والتي تأتي مع ال NodeJs. للتنصيب: npm i -g prettier
  6. تشغيل الكود الخاص بإعداد المشروع للتطوير، انظر التعليمات بالأسفل

استنساخ الكود وإعداده

git clone https://github.com/alifcommunity/compiler.git alif-compiler
python ./إعداد_للتطوير.py

إجراء الاختبارات

الاختبارات على الكود يتم تنفيذها من خلل كود بايثون، وستكون مستقبلا بلغة ألف إن شاء الله، لذا يتطلب تصطيب بايثون أولا

لتشغيل الاختبارات

  • يمكنك الإعداد إن لم تكن قد أعددت المشروع للتطوير مسبقا: python إعداد_للتطوير.py اختبارات ، أو make prepare-tests
  • يمكنك أن تشغل الاختبارات من خلال make tests
> ./اختبارات/اختبر --مساعدة
الاستخدام: اجراء_الاختبارات [--مساعدة] [--تكميل] [--القواعد-فقط] [--تجديد]
                        [--مسار مسار]

إجراء اختبارات لمترجم ألف.

أَسْناد غير إلزامية:
  --مساعدة, -م          احصل على رسالة المساعدة هذه
  --تكميل, -ك           بانتاج ملفات التوقع الغير موجودة من خلال ما يحدث فعلا
                        عند ترجمة وتنفيذ الكود
  --القواعد-فقط, -ق     اختبار القواعد فقط بدون الخَرج أو الترجمة الكاملة
  --تجديد, -ج           إعادة انتاج كل التوقعات من الكود وإهمال القديم. هذه
                        الأمر لابد أن تكون واعيا بتبعاته
  --مسار مسار, -س مسار  تحديد مسار لجمع الاختبارات منه ومن المسارات الفرعية
                        بداخلة

إنشاء اختبارات جديدة

قم بوضع ملف فيه كود لألف في المسار ./اختبارات/أكواد، ويمكن وضع ملف الكود في أي مسار فرعي بداخله، كما يمكنك أن تضع المتوقع من الكود في ملف يحمل نفس الإسم وفي نفس المكان مع إضافة _توقع.yml

فمثلا لو أردت أن تعمل بال TDD، سنقوم بعمل مثل الختبارات الموجودة بالفعل ووضع السلوك المتوقع قبل أن يُعمل على المترجم نفسه لوضع الخاصية، فلنقل أن الإدخال لم يكن موجودا ونريد أن نعمل على الدالة قراءة_عدد في alifstandardlib.alif، هكذا ستكون هيكلية الملفات:

- <أكواد ألف>
    - اختبارات
        - أكواد
        - الإدخال
            - ادخل_رقما.ألف
            - ادخل_رقما_توقع.json

الملف ./اختبارات/أكواد/الإدخال/ادخل_رقما.ألف

#ألف

دالة رئيسية
    عدد ع = قراءة_عدد()
    اطبع(ع)
نهاية دالة

الآن لنأخذ قالب التوقع من ./اختبارات/قالب_التوقع.yml، الملف ./اختبارات/أكواد/الإدخال/ادخل_رقما_توقع.yml سيكون بنفس محتوى القالب، إلا أننا سنغير خانة تنفيذ.دخل ونضع فيها رقم متبوعا بسطر جديد (حتى تتم قراءة الرقم)، ونجعل خانة تنفيذ.خرج هي القيمة المطبوعة، وهي نفس القيمة المدخلة متبوعة بسطر جديد.

ملاحطة: شغلت الاختبارات بملف كود ألف فقط (بدون ملف التوقع) سيتم إنشاء ملف التوقع تلقائيا وملؤه بما يحدث عند الترجمة والتنفيذ

تجميع:
  خرج: ""
  خطأ: ""
  رمز_الخروج: 0

تنفيذ:
  - دخل:
      - "123"
    خرج:
      - "123

        "
    خطأ:
      - ""
    رمز_الخروج: 0

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.