alifcommunity/compiler

توضيح وتحسين طريقة الاستخدام من خلال الطرفية

MuhammadSawalhy opened this issue · 16 comments

يُرجى أن يتم توضيح طريقة استخدام المترجم في ملف اقرأني، كما يرجي أيضا أن يتم تحسينه من حيث:

1. الوسائط args التي يتم إرسالها

من العُرف المتبع أن يستخدم - واحدة إذا كان الأمر عبارة عن حرف واحد اختصارا، فأرى أن يستخدم alif -h بدلا من alif --h

> alif -h # --h بدلا من
> alif --help # طريقة أخرى

2. أن يتم إخراج نتائج البناء وإظهار الأخطاء

يجب استخدام أكواد الخروج المناسبة والتي تعطي وصفا لما حدث أثناء عملية الترجمة، فمثلا كود الخروج 0 يدل على أنه لم يحصل أخطاء، و 1 يدل أنه حصل خطأ (دون تحديد وصف الخطأ)

وها هي بعض أكواد الخروج المستخدمة كثيرا من هنا.

image

عندما أردت أن أترجم من خلال الطرفية حصل خطأ، فلم تظهر الملفات. لكن الخطأ لم يظهر في الطرفية.

render1615733357038

ها هو إصدار مترجم ألف:

❯ alif --v      
Alif Compiler v3.0.17 (Beta)

ها هو محتوى New_Alif_File.alif.log.

 ----------- The Alif Standard Library ------------- 

 --- TOKENS PREDEFINITION START --- 
10: [#ALIF]
12: 13: 14: 
 --- TOKENS PREDEFINITION END --- 

 ----------- DEBUGING START ----------- 
10: [#ALIF]


12: [GLOBAL-FUNCTION] [اطبع] ( [STRING الجملة]) 



13: {_س_ START} { std::cout << } {@} [C++ Local STRING (الجملة)] {@} { ; } {_س_ END} 

14: [END GLOBAL-FUNCTION] {اطبع} 




 ----------- DEBUGING FINISH ------------- 

 ----------- Standard Library FINISH --------------- 

 --- TOKENS PREDEFINITION START --- 
2: [#ALIF]
4: 6: 8: 9: 11: 13: 15: 
 ----------- DEBUGING ERROR ------------- 
Namespace :  
Class :  
Fun :  

 الملف		: /home/ms/myp/alif/hello-world/New_Alif_File.alif
 السطر		: 15

 الخطأ		: أمر غير معروف : ' نافذة ' 

New_Alif-File.alif:


#ألف

نافذة رئيسية 

	دالة رئيسية 

		عدد ن = 6 + 4
		نص م = "مرحبا، ن = " + ن

		رسالة (م)

	نهاية دالة 

نهاية نافذة 
  1. الوسائط

التعامل مع ARG إستخدمت
Boost.Program_options
بشكل مفترض يكون --help، فإن وجدت طريقة تغييره إلى -h يمكنك التعديل على شيفرة

  1. إخراج

حاليا ألف تستخدم 0 و 1 ليعرف IDE هل تمة الترجمة أم لا
0 تمة الترجمة - IDE يمكنه تنفيذ البرنامج
1 توجد أخطاء - IDE يقرأ رسائل الأخطاء من STDOUT إدا أمكنه التعامل مع العربية، وإلا فيقرأ ملف .log
أفضل البقاء على هدا الشكل لأن IDE هدا كل ما يحتاجه

ألف 3

في ألف 3 تخلينا عن جعل المترجم يدعم الواجهة أي نافذة، وتحول الأمر لمكتبة WebUI، حصل هذا في تصويت جماعي عبر تلغرام، يمكنك الإنضمام إلينا في أي وقت تحب، سنحتاج خبرتك في JS لإجاد طريقة دمج WebUI مع Node.js

بالنسبة لألف ستوديو تخلينا عليه هو الآخر، وقررنا تطوير ألف ستوديو جديد مكتوب بلغة ألف كاملا !
عموما، يمكنك ستعمال ألف ستوديو للتحير فقط، لكن الترجمة فقط عبر سطر الأوامر حاليا
لتجربة ألف 3 إستخدم فقط أمثلة في مجلد examples

شكرا لك أخي على تعاونك ودعمك

أحب أن أضيف أن ستعمل ملف .log لكتابة رسائل الأخطاء راجع لسبب أن ليس جميع الأنظمة (قديمة) تدعم العربية في stdout أي unicode

هذا مثال جيد، نريد شيئا مثل --include-path، والذي يمكن استخدامه كـ -I:

int opt;
po::options_description desc("Allowed options");
desc.add_options()
    ("help", "produce help message")
    ("optimization", po::value<int>(&opt)->default_value(10), 
  "optimization level")
    ("include-path,I", po::value< vector<string> >(), 
  "include path")
    ("input-file", po::value< vector<string> >(), "input file")
;
$ bin/gcc/debug/options_description --help
Usage: options_description [options]
Allowed options:
  --help                 : produce help message
  --optimization arg     : optimization level
  -I [ --include-path ] arg : include path
  --input-file arg       : input file

هنا تعمدت حدوث الخطأ ولكنه أعطاني كود الخرج 0، من المفترض أن يرجع 1 مثلا:

image

محتوى ملف الملف المترجم:

#ألف

دالة
	اطبع("Salam!" + سطر + "مرحبا!")
نهاية دالة

نعم، من المفترض أن يرجع ١
سأبحث عن السبب

لا تزال مشكلة كود الخروج بصفر عند حدوث خطأ، والمتوقع أن تكون بواحد مثلا في الإصدار v3.0.20 (Beta)

ثم التصحيح في نسخة 3.0.21، المرجو المراجعة والتدقيق

شكرا على التبليغ

تم حل مشكلة كود الخروج والحمد لله، بقي بعض التحسينات على الوسائط args التي ترسل من الطرفية مثل --h

في هذه الإشكالية التي فتحتها #12، تحدثت عن تعريب واجهة السطر الأمري (و.س.أ CLI)

نحتاج أن نجد برنامج واجهة سطر أمري يدعم العربية، أو نصمم واحدا بأنفسنا

موجود mltrm، وtilix يدعم اعربية كذلك، وwindows terminal يدعمها

نحتاج أن نجد برنامج واجهة سطر أمري يدعم العربية، أو نصمم واحدا بأنفسنا

انا مستعد للعمل على تصميم واجهة سطر أمري يدعم العربية

هذا هو خط kawkab mono

image

لماذا لا يتم طباعة الناتج للطرفية وإعطاء خيار من خلال الأَسناد args لكي يتم كتابة الخطأ في ملف بامتداد .log مثلا، أرى أنه يوجد سَنَد --log والذي يعمل كما هو متوقع، لكن أرى أن الطباعة بدون وجود --log أو --log-json أن تكون في الطرفية "STDOUT"

لماذا لا يتم طباعة الناتج للطرفية وإعطاء خيار من خلال الأَسناد args لكي يتم كتابة الخطأ في ملف بامتداد .log مثلا، أرى أنه يوجد سَنَد --log والذي يعمل كما هو متوقع، لكن أرى أن الطباعة بدون وجود --log أو --log-json أن تكون في الطرفية "STDOUT"

يمكنك القيام بذلك عن طريق استخدام

--debug-screen