منتديات الفريق العربي للبرمجة
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.
بحـث
نتائج البحث
بحث متقدم
سحابة الكلمات الدلالية

مواضيع  الحبيب  مكتبة  برمجة  برنامج  البيانات  واتس  

المواضيع الأخيرة
رقم شيخ معالج روحاني مغربيالأربعاء يوليو 26, 2023 1:21 pmابو خميس
طرق جلب الزوجالسبت يوليو 22, 2023 2:33 pmابو خميس
سحر الجلبالثلاثاء يوليو 18, 2023 11:41 amابو خميس
سحر الجلب بالقرانالسبت مايو 27, 2023 1:24 pmابو خميس
جلب الحبيبالثلاثاء مايو 23, 2023 11:16 amابو خميس
شيخ روحاني في دبلنالأربعاء أبريل 12, 2023 1:34 amابو خميس
أفضل شيخ روحاني في الاسكندريةالإثنين مارس 13, 2023 3:56 pmابو خميس
مايو 2024
الإثنينالثلاثاءالأربعاءالخميسالجمعةالسبتالأحد
  12345
6789101112
13141516171819
20212223242526
2728293031  

اليومية

أفضل 10 أعضاء في هذا الأسبوع
لا يوجد مستخدم

اذهب الى الأسفل
avatar
Admin
Admin
المساهمات : 32
تاريخ التسجيل : 27/10/2022
https://arab-team.ahlamontada.com

 كيف تبني لغة برمجة(المرحلة الأولى) Empty كيف تبني لغة برمجة(المرحلة الأولى)

الخميس أكتوبر 27, 2022 7:18 pm
بسم الله الرحمن الرحيم...
اليوم ان شاء الله سأحاول أن أبدأ معكم المرحلة الأولى في علوم اللغات و المترجمات و ندعو الله أن يوفقنا حتى نصل الى مرحلة معقولة من الدروس ان شاء الله
المرحلة الأولى
ماهي لغات الحاسب؟؟
لغة الحاسب الأساسية هي الMachine Code أو لغة الإلة و هي اللغة التي لا يفهم الحاسب غيرها (معلومة قديمة و لكنها البداية الصحيحة) و لأنها ليست لغة بسيطة و لا يمكن بناء نُظُم أو تطبيقات بها لعدة أسباب منها أنها تعتمد على نوع المعالج و الhardware المصاحب له .. أيضاً غير مناسبة لعقلية المطورين بل تناسب أكثر علماء الHardware و المشتغلين به..
لهذا دعت الحاجة الى ظهور لغات أخرى أسهل و أكثر تخصصاً
مثل ال Assembly و B و C و ++C و COBOL و Fortran و ...... الخ
و لكن في النهاية جميع اللغات السابقة يجب أن تتحول في نهاية المطاف الى Machine Code و هذا ما تقوم به المترجمات
المترجمات أيضاً لها أنواع
1- الAssembler
الأسمبلر هو اسم الmodule الذي يقبل مدخل(input) من لغة الAssembly و يُنتج (output) مُخرج من لغة الإلة Machine Code و في العادة يكون تصميم الأسمبلر بسيط فهو مجرد Line by Line Translation أي مترجم سطري و هذا لطبيعة الAssembly البسيطة فهو يقوم بعمل Recognition للأوامر (mnemonics) و تحويلها الى الmachine code المناظر لها متبوعاً بالقيم التي تليه
بالطبع الAssemblers الأحدث أكثر تعقيداً و لكن مازالت الفكرة الأساسية واحدة...
2- الCompiler
الCompiler هو اسم الmodule الذي يقبل input من لغة High Level مثل الC و يعطي output من الObject Code المناظر له..
مقارنةً بما يفعله الAssembler فالCompiler أكثر تعقيداً فهو يقوم بعمل Analysis للInput و يحاول التعرف على المكونات الأساسية للكود(Tokens) ثم يحاول مقارنة مجموعات ال Tokens المتتالية بالGrammar Rules التي يعرفها حتى يصل الى المناسب و من ثم يفهم المقصود و يترجمه و هذا أصعب كثيراً بما يقوم به الassembler و يزداد صعوبة مع سهولة اللغة و رقيها..
و من الCompiled Languages مثلاً ال ++C/C و ال COBOLو الSNOBOL و الPascal
3-الInterpreter
الinterpreter هو اسم الmodule الذي يقوم بعملية الترجمة للسطر ثم ينتظر تنفيذه ثم ينتقل للسطر الأخر و هكذا و هو يشبه الى حد ما الCompiler و لكنه في أغلب الأحيان لا يمكن ان تُنتج منه Executable File أي أنه يجب أن يقوم الinterpreter بعمل الترجمة كل مرة لتشغيل البرنامج كما أن مهمته تزداد تعقيداً في وجود الLoops و الConditions و لأنه يجب عليه أن يترجم الloop كلها ثم يحتفظ بالكود الخاص بها في الذاكرة حتى يكررها ثم ينتقل بعد هذا الى مابعدها...
مقارنةً بينها و بين الCompilers فالInterpreters أبطأ كما أنها تحتاج الى ذاكرة أكبر لعملية الInterpretation أو الترجمة و لكن توجد مميزات أنك تستطيع اكتشاف الأخطاء و تعديلها أثناء عمل البرنامج دون الحاجة الى اغلاقه و تعديله و بناؤه من جديد ثم اعادة تشغيله
و من اللغات الInterpreted الHTML و الVisual Basic و الJava Script و الPHP و الASP والpython و الPerl
الشكل العام للCompiler او مايسمى Compiler Anatomy تشريح الCompiler
 كيف تبني لغة برمجة(المرحلة الأولى) Compiler01
يتكون الCompiler من 4 أقسام أساسية
1- الLexical Analyzer
2- الSyntax & Semantic Analyzer
3- الCode Generator
4- الCode Optimzer
و يستخدم كلهم مايُسمى بالSymbol Table و سأحاول أن أصل الى هذه النقطة ان شاء الله
و سنتعرض لكل نقطة بالتفصيل قدر المستطاع
1- الLexical Analyzer أو ما يُسمى أحياناً الSCANNER
الSCANNER كما هو واضح من الاسم يقوم بعمل scan أو مسح للSource Code و يقوم بعدة مهام أساسية
1- تجميع الجمل التي تتكون من عدة سطور في سطر واحد
2- ازالة كل ما ليس له علاقة بالبرنامج مثل الcomments و المسافات الزائدة
3- التعرف على المكونات الأساسية للغة Basic Entities مثل
- الثوابت Constants
- المُعرفات Identifiers مثل الVariables و الKeywords
- الOperators أو العوامل مثل ال+ و / و * أو < و > و هكذا
4- عمل التغييرات اللازمة في الSymbol Table عن المكونات التي تم التعرف عليها ليتم استخدامها في باقي المراحل
أما الOutput الصادر عن الScanner يكون في شكل Tokens كما ذكرنا من قبل و كل Token يحتوي على نوع المُعرف و أحياناً عنوانه في الSymbol Table
مثال على الLexical Analyzer
تخيل أن الInput Code هو


[ltr]IF A >= B + C THEN A = B[/ltr]

فسيصبح الoutput من الLexical Anaylizer مثلاً


[ltr]14 99.8 61 99.9 51 99.12 15 99.8 57 99.9[/ltr]

بفرض أن
14 ====> هو الToken الخاص بكلمة IF
99.8 ===> هو الToken الخاص بالمتغير A حيث 99 تعني أنه متغير و 8 هي عنوانه في الSymbol Table
61 ===> هو الToken الخاص بالمعامل الثنائي >= و هكذا
و أيضاً يجب أن تعرف أن الLexical Analyzer ليس له أي علاقة بالGrammar الخاص باللغة كل ما يقوم به هو التعرف على الكلمات الأساسية و الRegular Expressions الدالة على المعرفات الأساسية مثلاً
ال Regular Expression التالي [a-zA-Z][a-zA-Z0-9]* هو أسماء المتغيرات
و هو يعني أن يبدأ المتغير بحرف واحد على الأقل متبوعاً بأي عدد من الحروف و الأرقام.. فعندما يجد الLexical Anaylzer هذا الPattern في الInput Code فإنه يضيف Record جديد في الSymbol Table باسم الvariable و يصنع Token له.

2- الSyntax & Semantic Analyzer
الSynatx & Semantic Analyzer أو مايُعرف بالParser هو مايقوم بتطبيق الSentactic Rules أو قواعد اللغة على الinput Code لفهم الغرض من البرنامج..
مثال


[ltr]IF A >= B + C THEN A = B[/ltr]

سيتم التعرف على الجملة السابقة على أنها جملة شرطية Conditional Statement حيث
B + C هو Expression يجب حسابه
A >= B + C هو شرط Condition
A = B هي جملة يجب تنفيذها في حالة أن الشرط صحيح
و يستطيع الParser أن يُنتج لغة وسيطة أو ماتُسمى علمياً الQuadruples أو الرُباعيات و تكون بالشكل التالي


[ltr]Operation   Operand1   Operand2   Result[/ltr]

و في الCode السابق سيكون الناتج


[ltr]ADD   C   B   T1
GTE   T1  A   T2
BNZ   T2  L1    
STO   B   A
LBL   L1[/ltr]


في السطر الأول يجمع المتغيرين B و C و يضع الناتج في المتغير الإحتياطي T1
في السطر الثاني يقارن باستخدام Greater Than or Equal GTE أو أكبر من أو يساوي و يضع نتيجة المقارنة في متغير احتياطي T2
في السطر الثالث يستخدم Branch ifNot Zero BNZ للقفز الى نهاية الجملة في حالة عدم حدوث الشرط (بفرض أن القيمة في T2 تكون صفراً اذا كان الشرط صحيحاً)
في السطر الرابع يقوم بعمل Store STO أو حفظ لقيمة B في A
3- الCode Generator
الCode Generator هو الmodule الذي يأخذ الQuaruples كInput ليقوم بتحويلها الى الMachine Code المناظر و هي تبدو للوهلة الأولى مهمة سهلة و لكنها أيضاً مهمة معقدة حيث أن على الCode Generator التعامل مع عدد محدود من الRegisters و التعامل معها بحرص حتى ينتج برنامج سريع و قوي كما أن هذا يختلف من Hardware الى الآخر
4- الCode Optimizer
هي عملية ترتيب و تنظيم الكود الناتج من Code Generator و ازالة التكرار فيه و أيضاً الحصول على كود أسرع More Efficient...
انتهت بحمد الله المرحلة الأولى ...
في انتظار اسئلتكم و استفساراتكم حتى موعد المرحلة الثانية ان شاء الله و سنتحدث فيها عن تعريف اللغات و تقسيماتها و كيفية كتابة الProduction Rules
المصادر
Computer Languages & Compilers, Prof. Dr. Ali Fahmy, Cairo, 1997
تقديم م/ محمد حســـام
تم تعديل 13 Sep 2005 بواسطه bashmohandes
الرجوع الى أعلى الصفحة
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى