ماشي يا بنا السلام عليكم في البداية طبعا نرحب
الجميع في بداية الفصل فكل فصل انتوا بخير المحاضرة
هذه compiler design المقصود بيها هي تصميم
المترجمات في هذه المحاضرة بنتعرف على كيف المساق
هيكون يعني syllabus خطة المساق و بنبدأ شويه برضه
كمان في اللي هو أول محاضرةخطوط المساقر اللي أمامنا
هذه هوزحها عليكم أنا طبعا احنا بنوزع ال material
اما على ال moodle او على dropbox مش عارف اذا
استخدمتوا dropbox قبل هيك بس انا بفتح folder على
dropbox و انتوا تشتركوا فيه و يصير كل اشي انا بحطه
تلقائيا synchronized عندك على ال computer تبعك
هذه البيانات اللى أخد معاها المحاضرة قبل هيك عرفها
و اللى مش عارفها خلاصها مسجلها انكوا فيها ال
description تبع ال course ان احنا باختصار شديد
بنحكي عن اللى هو تصميم تصميم كيف ال compiler بيصمم
يعني ايش مكوناته الأساسية و كل مكون ايش دوره و بعد
كده بنبدأ نخش في كل مكون من المكونات هذه نفهمكيف
بيسوي شغله فعندك انت بالاساس ال highlight of this
course is a semester long program ال course will
cover the imperative and object oriented و ال
functional و ال logic و ال scripting languages
احنا عمليا كل امثلاتنا هتبقى على ال languages اللي
احنا بنعرفها اللي هي بالاساس object oriented
languages فاحنا في المادة هذهبنشوف كيف ال compiler
مصمم و كيف بينفذ وظائفه المختلفة عشان يدّي الدور
الأساسي تبعه اللي هو إيش تحويل من source language
إلى target language يعني أنت لما بستخدم ال
compiler أنت بتبقى كاتبة البالكود بلغة مثلا الـ C
أو الـ Java هذه ال source language تعمل ليها
compilation إيش يعني تطلع ليها EXE مالEXE هذا برضه
language صح ولا لأ بيعرفها ال processor وبينفذها
مظبوط طبعا هذا مش الوظيفة الوحيدة لل compilation
أنت ممكن تحولي من source language لأي target
language مش ضرورةتكون فقط EXE عموما هذه الوظيفة
الأساسية لل compiler و المكونات المختلفة تبعها ال
compiler بتساهم بأدوار مختلفة في أداء فهذا
description بسيط عن ال course لما ندخل في المحاضرة
الأولى بنتعرف على وظيفة ال compiler بشكل أكتر عن
قبلطبعا احنا احنا حابب انتجر من ال course
description على طول على اللي هو ال grading okay ال
grading فيه امتحان نهائي امتحان نهائي عالي 50% من
العلامة في midterm midterm عالي 25% من العلامة
okay لان هذا كله مع بعض 75% 75% يعني احنا عندنا
تركيز كبير على ال textbookعلى المنهج لأن هذا مدت
مرفقنا اللي بدي اختبرك فيه الكلام اللي موجود اللي
أخدناه من ال textbook والخمسة و عشرين التانية في
جزء منها ال project و جزء ال quizzes برضه على
المفاهيم أصبح أن تمانين في المية من العلامة جاية
based on ال textbook وتعشرين في المية الأخرى جاية
على المهارة العملية اللي انتهتنفذيها المهارة
العملية ده و هي ال project هذا هو عبارة عن مانيش
اقول ان احنا بدنا نبني compiler انما بدنا نبني
مكونات أساسية من مكونات ال compiler يعني قدامها
هنشوف ان ال compiler بتكون من عدة أجزاء فهنيجي ال
project تبعها هنقولك مثلا اعملي الجزئي الفلاندي
بعدين اعملي الجزاني الفلاندي فبيصبح عندك project
متراكم او تراكم يعني يشكل
المهم ان توزيع الدرجة بالشكل هذا انا الصراحة ممكن
قدام اروح ازودالجزء تبع ال project أخذه أكتر إذا
استدعى الأمر يعني أخذه من علامة ال final خلّيه 25
هذه ال sentence أخذه من علامة ال final و أعطيها ال
project بالدرجة
هرجعه تاني لأن ال textbook
اللي هستخدمه اللي هو كتاب اللي عادة مستخدم في مادة
ال compiler اللي هو
النسخة اللي معانا هي version 2 في فيلم سبعة في
اعتقد version 3 لكن احنا مش هيتأثر عنها كثير عن كل
اللي موجود في version 2 الكتاب هيريكم صورته ولا مش
محتاجين لأنه هحطوكيا على ال dropbox او على ال
moodle
والنصحة حتى هي دي انا مجسمها كل chapter في file
لحالي بسبب انه تريحك في الفتحة في الفيديو هدول
الكتابين هدول ا reference ممكن ينظموكوا و ممكن ما
ينظموش تمام؟ بس اعتمادنا الأساس هيبقى على الكتاب
الأولاني انا حاطط ان الكتاب الأولاني reference
number one هو required و اتنين و تلاتة هم ما هو
الجهد أبقى فيهالمادة هذه عادة ما بتبقى متطلب سبب
لها اللي هو يكون عندك فكرة في program one و
program two اللي هو اللي عندنا في الجامعة ال C و
الجامعة المصبوط وهذا مقبيل انه يكون عندك يعني واضح
مفاهيم لغات اللغة الموجودة بصفة عامة مش معناته ان
احنا هنستخدم الجامعة او ال C في العملية تبعها
بطبعك
الان لازم يكون فيعندك فكرة كويسة في ال data
structures عشان ال pointers و ال records و لإنه
هذه المفاهيم مافيش حد حيحكي عن building a compiler
بدون ما يكون يعرف ايش يعني ال records و ال
pointers كدرجة الحل هذا الشيء أساسي ال
introduction to computer science هذا الشيء بديهي
لمادة زي هذه تمام فهذا هو باختصار شديد التعريف
بالمادة و الخطة
اللي هانمش عليها في هذه المادة الكتاب كل المواضيع
حاليه جاي على أساس الكتاب تبقى عليهم chapter one و
chapter two من كتاب reference number one فاحنا
الآن نبدأ بال introduction و بنغطي فيها chapter
one و chapter اتنين و بنغطي منهم ال discussion
هدولة و بعدين بنتقل الى الموضوع التانيوكل موضوع
ايش ال execution تبعته في انا في الاول ال symbol
tables و بعدها هنا في ال introduction نتعرف على
ايش ان ال compiler بنيته ايش كل عنصر جزء من اجزائه
ايش وقفته بعدها بنبدأ نشوف كيف كل عنصر ال symbol
table ال parsing ال syntax ال translation ال
intermediate code generation كل واحد من هدولة
بيشوف ايش بالظبط بيسوي و كيف بيسوي اللي بيسويOkay
لأنه زي مرة زي دايما انا مابقول احنا هنا في ال
macOS مابنتعلمش ال compiler عشان نستخدم ال
compiler ولا نستخدم ولا اي حاجة عشان نعرف كيف
نستخدمها لأ احنا بنتعلمها عشان نعرف كيف ان عملت
تمام علشان يكون في طلب ال macOS قادر على انه لو
شغل في شركات اللي بيعملوا الأمور هذه يكون يقدر
يشارك معاهم تمام
خلّينا إذا لم يعرف أحد عن سؤالي بالنسبة للأمور
اللي حكيناها نبدأ نفتح ال slides و نتطلع و نتعرف
على مقدمة عامة عن إيش يعني ال design تبع ال
compiler إيش يعني ال compiler و إيش بنيته و إيش ال
design تبعه طيب الآن هذه ال slides
موجود في ال folder اللي انا هنا اللي انا باخد من
ال slides هذا و في كمان folder تاني extra
resources كل هذا الكلام انا هاتيحهلكم ماشي ايتهم
بداخل بداخل عندي folder اسمه compiler design
student folder هذا زي ما هو هيكبعمله مشاركة على
dropbox بيصير انتوا شايفينه وشايفين كل المحتوى اي
حاجة بعدلها بتبين عندكم وبتنزل حتى كمان اذا انتوا
بتعملوا synchronization فال
slides موجودة هنا في ال textbook and slides هي في
folder اسمه chapters وfolder اسمه slides chapters
هدا اللي هو ال textbook زي ما قلتلكوا انا ..
كل chapter من الكتاب موجود في file لحاله هاي هنا
introduction chapter هاي chapter two تلاتة اربعة و
ال title تبعه هذا اسم ال chapter لان برا ال slides
السلايدات برضه نفس الشيء انا عامل اللي هو بس اقول
طبعا هيش powerpoint لك pdf ولا powerpoint لكل
chapter طبعا مش كل ال chapter بقول انا ماخد ايش ال
section اللي احنا نمينا اشرحهم مغطيهم في السلايدات
يعني السلايدات مابيحتووش على كل المادة العلمية
اللي موجودة في الشباتر بس اللي احنا حددنا بنغطيهم
هذا ال file الصورة هذه هي نفس الجدولاللي كان معانا
في ال syllabus خلاص
الآن احنا بدنا نروح على ال slides بس بدنا نبدأ من
introduction هذا 00 هذه ال day one يعني لل
syllabus احنا بدنا نبدأ في chapter one هدفي انا في
المحاضرة هذه ان انا الاقل نص على ال structure of
ال compiled الكلام التاني هذا ممكنبنخليه لقدام بس
المهم ال structure لأن هي اللي بتعرفنا بنية ال
compiler أجزاءه وكل جزء إيش وضيفته ال compiler
بالاصل هو عبارة عن language processor language
processor يعني هو عبارة عن كأن ال system يخش له
language
بيطلع language بيعمل معالجة لهذا ال language عشان
يطلع ال input تبعه ال language و ال output تبعه ال
language طبعا هذا الكلام مش مش ماشي مع اللي احنا
يعني ممكن نكون مش دقيق لأن ايش يعني انا بدخل
language و بطلع language ولا بدخل code مكتوب ب
language و بطلع codeمكتوب بلانجوش أخرى يعني هو ال
input تبعه code و ال output تبعه code مظبوط فاحنا
الآن مجازا بدنا نعتبر ان code يعني language و ال
code اللي بدخل يعني language كأنه بدخل language و
بطلع language و انا بدخل code و بطلع code كأنه
بدخل language و بطلع language من التاني هنشوف
مفهوم ال language مفهوم ال language اللي هنتعامل
معاه هو عبارة عن مجموعة كلمات هي ال languageالكود
اللى بنكتبه هو عبارة عن مجموعة كلمات مكتوبة بس
طبعا قواعد معينة تمام ف ال source اللى احنا هنكتبه
هو عبارة عن language و ال target اللى بيطلع معانا
هو عبارة عن language فمن هنا كلمتي لإن ال compiler
is a language processor فإذا ال compiler بيدخل إلى
source program هو هنا مصطلح أقرب للي احنا بنعرفه
source programأنا كلمة program هنا معناته اللي هي
الكلام اللي كتبه المبرمج و بطلع target program حتى
ال EXE is a target program و لا لأ لأنه مجموع من
ال instructions بس مكتوبة ب machine code و لا لأ و
حتى ال machine code هذه كلها binary zeros و ones
مش ان والله assembly acquired ال instructions
مكودة و كل ال instructions اللي عرفزة نمونك يعني
تمامأحنا نعمل target program من خلال الcompiler
نعمل target program علشان بعد هيك ال target
program تبعنا لما نشغله هو يلو ال input تبعه و
يطلع ال output تبعه مثلا افترض ان انا اعمل برنامج
صغير عشان يحسبلي اللي هو ال power يعني ايش جديش
رقم فلاني اص رقم فلاني ال input تبع البرنامج هو
الرقم ال و ال output هوالنتيجة الأولاني قُس بتاني
نكتب
ال
program و ال program تبعنا إيه input و إيه output
هذا
الكلام بيختلف شوية عن مفهوم ال interpreter
compiler بيطلّع ليه target program اللي أستخدمه
عشان أدخل .. عشان أستخدمه .. عشان أدخله input و
يعطينا ال output إيش مختلف هذا عن ال interpreter
مره عليكم مصطلح ال interpreter interpreter بياخد
line by line بترجمة تلقائي ال compiler بياخد كل ال
code مع بعض و بترجمه تمام ال interpreter بيجي عند
الترجمة بس بترجمه بس و لا أيضا .. بنفذ .. executes
يعني كيف .. يعني إذا كان ال compiler لسه أنابطلع
لي target ثم
ال target انا بروح بعطيله input هو ال compiler
بطلع ليه target ثم ال target انا بعطيله input شوف
هنا انا عملت ال source code
دخلت على الكمبيوتر والكمبيوتر طلع لي target code
بعدين ال input ال .. تبع ال program مش اللي انا في
الاخر بقول هدف النهائي تبعي اعطاه .. دخلته على
target و اعطاني output لأ احنا الآن ال interpreter
بيعمل الكلام
هذا كله بمعنى ان هو بياخد ال source و بياخد ال
input و بيعمل compilation لل sourceبطلع some kind
of target code بياخد ال input هي enough ال target
ده بيشغله و بيطلع ال output زي ان هو بس انا ايش
هدولة جاية على هدولة اتنين هم نفسهم هدولة اتنين،
مظبوط؟ فال interpreter .. ايش في ال example ال
interpreters انتوا استخدتوها او بتسمعوا عنها؟
interpreters
اه أكبر بالظبط البرامج بظبط اه لإن أنا بعطيها ال
php code و هي بتعمل interpretation له تحوله إلى
executable code somehow و ممكن يكون intermediary
يعني وسيط مش نهائي و ال input اللي بيجيب يتدخل
الاتنين مع بعض و يتنفس و يعطيني output ويعطيني
result في زمان كان لغة ال basic اللي الآن في منها
ال visual basic و ال هذابس لغة ال basic زمان كانت
بتشتغل بهذا النظام او كان لها interpreters ان احنا
بنكتب ال code و بنعطيله لل basic interpreter ال
basic interpreter بمشي فيه line by line بيقرأ و
يترجم و وين ما في line بده input من ال user بطلبه
بيعطيله ال user ال input بروح بنفسه و بكمل بيقعد
بياخد input و بياخد source في أن ان واحدSource و
Input step by step OK تمام الآن في حاجة اسمها ال
hybrid compiler ال hybrid compiler اللي هي انه
بيعمل بطلعش
هنا بدل كلمة intermediate احنا كنا .. كان عندنا في
الاول في الصيادات اللي فيها تلك target target code
بدل ما يعملTarget Code Program يعني Program
Intermediate Program Program Intermediate Program
هذا بيروحش على ال processor ال target هنا وين
بيروح نرجع شوية على ال slide اللي جامل هذا ال
target .. هذا ال target وين بيروح؟ هذا بيروح على
ال processor لأنه target يعني لأنه موجه إلى ال
processor .. إلى physical machine ال processor هو
machine تمام؟ هو target لأنه احنا موجهينه إلى
physical machine محددةالـ .. في الـ hybrid لأ ال
hybrid ال hybrid بطلّق intermediate program
intermediate program بروح مش ل .. مش .. مش مكتوب ل
physical machine مكتوب ل virtual machine كلمة
virtual machine خلاص أعطتكوا الفكرة عن إيش أحنا
بنحكي مر عليكوا كلمة virtual machine قبل هيك في ال
إيش ال Java virtual machine يعني هذا ال hybrid
compiler هو اسم آخر ل Java virtual machine أو ال
.. أسلالـ Translator يطلع الـ Source الـ Source
إلى الـ Java Virtual Machine الـ Java Virtual
Machine وظيفتها إنها تأخذ الـ Intermediate Program
وهي فيها اندقة لـ Virtual Machine مصممة لـ Intel و
Virtual Machine مصممة لـ AMD لكل نوع من الـ
Physical Machine فيه إلى Virtual Machine هذا هو ما
نسميه Bytecode في الـ Java
الـ virtual machine لما تشغل ال byte code أو ال
program تطلب ال input في ذلك الوقت و بتطلع ال
output طبعا هي لما تشغل تشغل على specific
processor تشغل على physical machine
Okay الان ال language processing system بصفة أهمة
اللي هي يعني a compiler a compiler إيش ال
structure تبعته في في
جزء
من الشغل قبل ما ينصل إلى compiler
تمام ال language processing ال system هنا ال
system المقصود بيها ال compiler و حاجات تابعة أخرى
بتساعد ال compiler في شغله هذا الكلام حقا احنا لسه
ما بنحكي عن البنية تابعة ال compiler نفسه احنا
بنحكي عن انه ال compiler لما احنا نستخدمه نستخدمه
في اطار منظومة من ال tools الأخرى ال preprocessor
اللي هوأي وظائف بتلزم قبل ما ال compiler يشوف شغله
بيسويها ال preprocessor زي ايش مثلا اخدنا في ال C
كنا نعمل include في ال file او كنا نعمل hash mark
في ال file طب ليش هذا مش شغل ال compiler ال
compiler حسب احنا ما احنا فاهمين وظيفته المفروض
بدلها لما يجيه ال source جاهزيعني إذا ال source
موزع مفرج و هذا اللي عادة نحن بنسويه بنكتب ال code
تبعنا الآن في ملفات منفصلة مافيش حد الآن بيعمل
برنامج من ال ألف إلى الياء هو اللي كاتبه ليش؟ لأنه
بيستخدم libraries ال input output libraries أقرب
من الساعة صح؟ طيب هذه ال libraries وين موجودة؟ هذه
موجودة في الملفات أخرى الملفات الأخرى هذه ماهياش
source على فكرة بتبقى compiledفلازم يجي حد يعمل
linking لازم يجي حد يعمل linking يجيبها ال code
اللي أنا كاتبه و ال code الأخر الجاهز اللي انا
استعانت بها يعملها linking عشان لما يشتغل ال
compiler اللي هيبقي الاشي كله حاضر تمام مش هو لسه
ايهطبعا احنا الآن و احنا بنشتغل و بنبرمج كل هذا
الكلام بنسميه compilation يعني انا بقول ال c
compiler او ال java compiler و اقصد بيها ال linker
و ال compiler و ربما كمان ال assembler لان هو بنتج
ال .. واضح بس هنا ال preprocessor أكبر من فعل عليه
ال preprocessing هو ال linking صح؟ اللي هو انه
يعني .. بيجيب مثلا مثلا .. اه بنعمل importing ..
بنعمل importing لل ..بنعمل importing لهذا لل
source libraries أو source files في إطار واحد عشان
ال compiler اللي بيشتغل عليهم هتجهز بيعمل .. بيعمل
شغله على مين؟ على ال modified source program ال
modified اللي هو بعد ال processor ما شاف شغله بعد
هي كان بطلق ال target assembly program ال compiler
بطلق target assembly programهنا لو ما جالش target
assembly لو جال target بس على طول انا بفهم machine
code لكن لما جال assembly معنادك لأ لسه في واحد
تاني مين ييجي يحول من assembly الى machine code
اللي هو ال assembler ال assembler بيطلع من ال
assembly ال assembly code بيحوله الى machine code
الان هذا ال code اللي طلع اذا طلع برضه في فايلات
منفصلة بيجي ال linker عشان خاطر انه يوضطهم كلهم في
package واحدة اللي هي EXE file النهائي طيب
احنا الان هذه المنظومة بهمنا منها اللي هو ال
compiler بدنا نعرف ايش ال structure تبعتي ال
compiler مش عارف اذا واضح عنكوا بعيد انا برسمها
تانيبس اللي نقسمها أفقي مش عملي في عندنا اللي هو
lexical analyzer لأن
احنا بنحكي عن structure of ال compiler اللي هو
تشوفي أنا طول في السلسلة بعد lexical analyzer
الان انا بحط stop هنا و اقول هذا ايش بيعطيههذا
بيعطي Intermediate
Code Intermediate Code بروح لمين ال generator IMC
Generator أنا حاطيته هيك على سبب انه اميز ان هذا
process وهذا output Intermediate Code Generator
بسلم لمينmachine independent code optimizer
independent code optimizer بعدين
بيسلم لمين ل code generator code
gen تعرفيش
كيف بيشتغل شغله من غير ما تفهم أيه الشيء بتسوي
عليه code generatorبعدين ال machine dependent هذا
ال code generator بالضبط يعني اللي هو ال machine
هد ايش هد independent و هد independent ايش الفرق
بينهم code generator ولا optimizer optimizer
optimizer هو اللي بالضبط يعنيالـ Target Machine
Code الـ Target Machine
Code الـ Target Machine Code الـ Target Machine
Code الـ Target Machineيعني هنا هذا الأولاني لما
بشغل ايش بطلع ال
tokenish stream ال tokenish
stream طب هذا طلع ال tokenish stream إيش دخل عليه
دخل عليه البرنامج الأصلي اللي هو ال character
stream ال character
البرنامج هو البرنامج البرنامج
هو البرنامج البرنامج
هو البرنامج البرنامج هو البرنامج البرنامج هو
البرنامج البرنامج هو البرنامج البرنامج هو البرنامج
البرنامج هو البرنامج البرنامج هو البرنامج البرنامج
هو البرنامج البرنامج هو البرنامج البرنامج هو
البرنامج البرنامج هو البرنامج البرنامج هو البرنامج
البرنامج هو البرنامج البرنامج هو البرنامج البرنامج
هو البرنامج البرنامج هو البرنامج البرنامج
هو البرنامج البرنامج
هو البرنامج
البرنامأنا مش كاتب اللي هو اه
ماشي بالظبط هي هذه انا عامل head-on curl هنا هذا
اللي بيطلع syntax tree بقى صح؟ ان ال syntax tree
اللي نعملها تعديل نعملها إضافات من خلال ال
semantic analyzer جانب ما تدخل على ال intermediate
code generator intermediate code generator مش
بيطلعليintermediate code الـ
intermediate code يدخل على الـ optimizer ويظهر لي
optimised intermediate code الـ intermediate code
النهائي الـ intermediate representation كلمة
intermediate يعني وسيط يعني ليش لسه مش نهائي يدخل
على ال code ال generator سيظهر ليTarget Machine
Code طيب هذا نهائي المفروض نهائي بس في optimizer
ايوة لأنه في مجال انه ينعمل optimization فبدخل على
optimizer هذا ليش قلناه هذا target machine
code
Target Machine Code يدخل على الـ Machine Dependent
Code Optimizer لكي يظهر ليه Target النهائي
Optimized أنا و أنا بارسل فيها وضحت الصورة بتهيألي
لأنه وضح .. و ربما وضح كل واحد ايش دوره ولا لسه
وضح كل واحد ان هدول ايش دوره يعني ال Lexical
Analyzer بياخد ال character stream طبعا بعد ال
preprocessing بعد اي دمج و اي هذا بياخده عشان
يحللوا من ناحية الكلمات المفردات كل كلمة يتعرف
عليها على حدة ويطلق ليها الحل ويطلق ليها أيضا أيضا
أيضا أيضا أيضا أيضا أيضا أيضا أيضا أيضا أيضا أيضا
أيضا أيضا أيضا أيضا أيضا أيضا أيضا
أيبتقدر تقول هي data structure صغيرة بتحتوي على كل
واحدة من الكلمات اه او المفردات تبع ال source اللي
هي نفسها والنوع تبعها هذا الكلام بيخش ك stream على
الanalysis عشان على ال syntax أنا على ال syntax
هذا إيش دوره كلمة syntax إيش يعنييعني هي rules
grammar قواعد بتشوف هل الخمس كلمات هدول اللي جايين
ورا بعض فعلا بيشكلوا جملة سليمة لغوية حسب ال
language و لا لأ صح؟ إذا والله pass تمام يبقى
بينانقلوا على المرحلة البعده ليه ال semantic بتشوف
هل هذه الجملة ممكن يكونيلها معنىأكتر من معنى عشان
يحدد يختار كيف المعنى اللي .. هذا الكلام وين وارد
وين بيجي يعني مثلا إذا نكتب expression وماحطهش
بواس صح ممكن تتفسر يكون فيه نتيجتين لل expression
نتيجة إذا أنا عملت .. إذا أنا ضربت قبل ما أقسم
ونتيجة إذا قسمت جماعة قبل مثلا واضح فال semantic
analyzer هو اللي بدهفوق الاشتباه هذا الـ syntax
tree عاد هذا هنا كان stream صح؟ stream يعني
sequence of حاجات صح؟ سواء كان هنا sequence of
characters ولا هنا sequence of tokens هذه sequence
صح؟ لكن اللي هنا tree ال structure اللي هنا
sequential بس ال structure اللي بتطلع هنا اما عن
tree tree يعني nodes و بتفرع منها noise هذه ال
tree الآن هياللي بتدخل عشان ال generator يبدأ يولد
او يشكل اللي هو ال code ال code هذا بينعمل على
مرحلتين مرحل intermediate و بعدين بنشوف اذا في
مجال ال optimization بيجي ال optimizer بعمل و
بعدين بنطلع ال final ال code ال target بس ال
target هذا مش final لأنه لسه بدنا نشوف اذا في ايش
مجال ده optimizing ايش يعني optimizingعنا هنا في
إطار ال compilation ممكن أشوف إشي more efficient
بمعنى إنه لو العملية هذه تتكامل من خمس
instructions ال intermediate فيها خمس instructions
طبعا ممكن أخليهم أربعة ممكن أخليهم تلاتة ال
optimizer هو اللي بيشوف و بيعمل إذا في مجاليعني
تحقيق الهدف بيه عدد أقل من ال instructions لأن ال
instruction معناته time في ال machine ال machine
عندها طاقة معينة لمعالجة ال instructions ممكن تعمل
instruction واحدة في ال cycle أو إذا هي parallel
ممكن تعمل أكتر instruction في ال cycle صح فجدتش
أنا بجلل ال instructions أنا بجلل ال وقت
السلايدات اللي بعد كلها عبارة عن إعادة
صلاة خلال الكلام اللي قلناه مش شغلة أنسناها بس مش
هنقدر نتجهلها جدام دي ال symbol table ال symbol
table هذا إيه دور أساسي في عمل ال compiler هذا
جاي مش حقوق أسهم لأنه عمليا كلهم يتعامل معاهابشكل
أو باخر ال symbol table هو ببساطة اللي بدأ أقولها
الحين أنه أول ما .. ما بشتغل ال lexical analyzer و
ببدأ يتعرف على المفردات اللي بتكتبها في ال source
code ببدأ يسجلها واحدة ورا التانية في ال .. هو
table صح؟ في الجدولة ده كل مفردة هي أبداً symbol
هشي
بقولي simple tablesymbol يعني رمز فانا بقدر كاتب
مثلا four I بسوا واحد I less than ثلاثة مثلا I
plus plus okay هذي symbol هذي لحظة symbol هذي
symbol هذي symbol هذي symbol مظبوط؟ ال symbol مش
معناه ال character هنا بالنسبة لنا في ال
compilationفتجي four و نوحه keyword و نوحه غوث و
نوحه variable و نوحه غوث و نوحه غوث و نوحه غوث و
نوحه غوث و نوحه غوث و نوحه غوث و نوحه غوث و نوحه
غوث و نوحه غوث و نوحه غوث و نوحه غوز و نوحه غوز و
نوحه غوز و نوحه غوز و نوحه غوز و نوحه غوز و نوحه
غوز و نوحه غوز و نوحه غوز و نوحه غوز و نوحه غوز و
نوحه غوز و نوحه غوز و نوحه غوز
و نوحه غوإن هو بيسجلهم و بيسجل شكلهم يعني هذي ال
FOR هذي بتسميه لكسيم اللي هو مجموعة الحروف اللي
وردت في النص وإنه برضه كمان ممكن إذا هو identifier
يسجل بيانات أخرى عنه والله هو إيش integer ولا real
ولا whatever مظبوط okay
وهذا الـ symbol table كمان حتى ممكن يبقى البرنامج
يعمله مجموعة symbol tables حسب ال scope صح؟ لإن
أنا أتخيل مثلا ال I هذه ممكن تبقى معرفة في مكان
آخر في في function أو method okay فكل method أو كل
scope إيه له symbol table غير عن ال symbol table
تبع ال scopes الأخرى أو ال global scope هذا كله
بيعدوا كمان بمرعنة معنىالمهم أن هذا الـ Simultable
هو أول ما يتبنى من قبل الـ Lexical Analyzer
وبيحتاج إليه الـ Syntax Analyzer و الـ Semantic
Analyzer و بنيئة المراحل أيضًا أخرى تحتاجه فبنرجع
الآن و بنلخص فقط ما حكيناه بسرعة لأن هذا هو
الخلاصة اللي أريد أن أقوله في هذه المحاضرةو اعتقد
انه بيعطيكي فكرة كويسة عن المادة هذه و ايش ال .. و
عارف ايش بالطبع ال lexical analysis اللي هي وظيفة
أساسية موظف ال compiler اللي بيقوم بيها ال lexical
analyzer انه هي the first phase of a compiler
called lexical analysis or scanning و ال lexical
analyzer أحيانا بيسمي scannerThe lexical analyzer
read any stream of characters Making up اللي هي
بتشكل ال source فورا و بيجمعهم and groups of
characters بيجرى characters و بيجمعهم على حسب مثلا
ال F OR هو جرى ال F و جرى ال O و جرى ال R بعدين
لاجأ انه في space فتفهم ان هذول ايش group مع بعض
groups the characters into meaningful sequences F
O R هدولة لكسيمة for each لكسيم ال analyzer بيعطي
token for
each لكسيم يعني هاي ال analyzer بخش عليه بخش
عليه الكلام هذا
تعرف ان هؤلاء أشخاص مجموعة من شخصيات مع بعض تطلب
منهم token
name وهو 4 وattributes
واحدة من هذه الattributesاللي هي الـ four هدى إيه؟
keyword ولا variable ولا identifier ولا operator
تمام؟ وربما attributes أخرى إذا لازم الأمر هدى
إيه؟ attribute value يعني سلسلة من attribute value
يعني هنا تخيلي هدى type keyword فكل واحدة من هدولة
أقابل عنهأيش ال attribute؟ ال attribute هي نوع ال
.. ايش قيمتها keyword؟ نعمل هذا كتير دايما في ال
HTML و ال .. اه attribute اسمها ال attribute و ال
value تبعها صح سلسلة من ال attribute values بعدين
اللي هو ghost ال ghost ده بعمله مش اي attribute
بحطه زي ما هو خلاص ال I ال Iطبعا ايش ال attribute
انه ال type تبعها هبقى عن identifier الى
اخر اذا فيه وهذه ال attributes ممكن تتجمع تدرجية
تراكمية يعني مش اول ما بيشوف الحاجة بيعرف كل ال
attributes تبعتها و لسه كمان في attributes
بيعملوها اللي بعده مش ال lexical analyzer هو اللي
بيعمل كل ال attributesممكن يجي ال parser او ال
syntax analyzer هو يحط بعض ال attributes الأخرى
المهم هذه تسجل في وين؟ في ال symbol table بالظبط
فالآن مضحك الصورة و وظيفته هذا بتنتصر على انه يعمل
مسح ل ال character stream بطبعي يعني token stream
يعطي الألف عافية يكون يعني عمللنا جزء كبير من
المهمةبيجي بعد هيكا هى هنا عرفنا هذا مثال اخر غير
مثال انه يحتوي عندك هذا ال statement هذا عبارة عن
assignment statement تحتوي على variable assignment
variable operator plus variable operator اللى هو
ال multiplication وهذا ياشي constant okay فهذا كده
لما بخش على ال lexical analyzer ايش بطلعهبطلع
بقولي identifier one ايش ده ايش one ايش one
position هذه position هذه وين مش مفروض تبقى
position بسجل
ال position في ال table بسجل
اللاكسين بسجلها هنا و بدل ما يعطيني إياها بقولي
ايش هي موجودة أول واحد في ال table التانيةاللي هي
initial اللي بحطها وهو
لما بيعطي ال tokens مش بضرورة تكون ال axioms نفسها
جوا ال token لأ بكفي ان يعطيني رقمه وين موجود في
ال table واضح فهي اتقاش طالة طالة هاي token وهي
token
position is الاكسيم that would be هذا الشرح الان
اتقل اصبح واضح ماشي الحال؟ ماشي يا بنات؟ الان
الصورة هذه بس ياريتها نقدر نكبرها عشان نشوفها
خلينا نكبرها زي هيكالصورة هذه بتعبر بشكل ممتاز عن
تسلسل العمل انه هاي ال example هاد اللي طلعنا عليه
ال lexical analyzer حوّل ال character stream إلى
token stream بيجي ال syntax analyzer فتطلع بيحاول
يبني tree إذا نجح في بناء ال tree معناتهإن هذا
كلمة مكتوب بـ syntax صحيح إذا ما جدرش يبنى الـ
tree معناته لا يمكن تعرف على هذا ال .. معناه فيه
error فمعناه كده بناء على language rules وهذا جزء
أساسي في بناء ال compiler لأن بعد بناء ال compiler
لللغة لازم أحط ال rules بتاعت اللغة فبنى
ال tree هذه الآن ال semantic analyzer بده يتطلع
علىالتري هدو يشوف إذا كان إيش ممكن يحصل فيها أي
نوع من اللبس بمعنى إيش لإن والله هذا ال rate هذا
عبارة عن مثلا real طيب عملية الضرب بتاخد real مع
real طيب هذا 60 هذا integer طيب هل هذا بيعطيني
مشكلة إذا بيعطيني مشكلة يومان ممكن أتعامل معاها
أعالجها بأعالجها معاها أنا لا أحتاج بطلع Cسيمانتك
إرررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررررر
لو انت ت float هذه مين اللي حطها ال semantic
analyzer؟ ايش هتنأكس؟ هتنأكس ان ال generator لما
ييجي على ال letter E هيعمل حاجة اسمها explicit
what؟ cast explicit cast يعني تحويل صريح اسف
implicit انا اسف implicit cast ال explicit اللي هو
بيحطوا ال compiler بنفسهم، مظبوط؟المبرمج المبرمج
بيحطه بنفسه هذا ك explicit أما ال implicit اللي
بيسويه ال compiler ومين بالظبط اللي بيعملوه ال
code generator بناء على أيش بالظبط؟ بناء على ال
semantic analyzer ما عمل okay الآن هذه ال letter E
تتحول إلى مجموعة من ال intermediate code
instructionsالتي كما رأيناها في هذا الفيلم تسميها
Free Address Code أنا لا أعرف ماذا يعني Free
Address Code بس دا صدق انها تقوى حاجة انتفلوت هذي
عملها استدعى لفنكشن انتفلوت عشان يخزن الناتج في ال
T1 في واحد سلمها على عملة الضرب مع ال ID 3 عشان
يطلب T2 T2 على .. هذا في الأخر ناتج ال expression
هذانهاتج ال expression بتخزن في T3 اللي هو ايش ال
expression اللي هو position ايش كانت rate زائد
position زائد initial initial
زائد rate مضروبة في ال 60 okay هذا ال mathematical
expression عشان
الكتابة برا لغدا
ماشي ال expression هذا ال mathematical expression
initial زائد rate ضلب ستين الناتج تبقى بتتخزن
نعمله assignment في المتغير position position هذا
هو عندي بناء على ال code هذا هو ID 1 النتج تبقى ال
expression تتجمع في T3 خلاص T3 نعمله assignment
على ID 1 ال code optimizer بيلاقي ان هذا الكلام
ممكن اختزاله او اختصارهكيف مثلا انا ليش اعمل عملية
هذه طب اصلا ال 60 بخزينها ان انا في memory
location من عريل و خلاص بخلي ال run-time تتخزن في
ال real و انتهى الموضوع فاختصر العملية هذه الصدر
هذا كله راح اصبح انه بلزمني بس اضيف ال 60 اضغط ال
60 في ID 3 identifier 3 ال narrative شوية عالةT1
بدل ما كان لدي T1 لدك و بعدين T2 لأ خلاص T1 okay
الان T1 هي ده هو عبارة عن ايش ال 60 مضروضة في ال
rate خلاص بزمني الآن عملية الجمع عملية الجمع باخد
T1 و بجمع على I D2 و بخسر في I Dبرضه اختزل ال T3
ايوه صح بدل حصل الجمعي لسه بكزمه مرحليا في T3
وبعدين نضيفه لأ ال three address code بيسمح ان انا
اعمل ال sound كما اعمل في نفس السطر بعد هيك خلاص
ال code generator بيروح بيحول هذا الكلام الي ash
ماشي قولنا احنا assembly بالظبط ال assembly انه كل
واحد هدولة ممكن يترجم الى سطر او سطر instruction
او اكثر يعني هذه الان لسه بدي احولها الى assembly
ال assembly هنا الان معناه ان انتوا في عندى
registersأعرف كيف اوزع المكونات هذه على registers
لأن انا جاخل ال processor هالحين انا في غرفة مغلقة
اسم ال processor و كل اللي معايا شوية registers و
بخش عليه instructions و معاهم variables تغيرونهم
هبدي أعرف كيف أنفذ هذه ال instructions في حدود ال
registers اللي معايا طبعا في عندي access على ال
memory برضه بقدر أروح على memory location ما هي ال
variables اللي معايا انها هي عبارة عن تتحول ال ID
هذهال IDs هذول بتحولوا .. ال IDs هذول بتحولوا إلى
references لل memory بقدر اجيب اي مثلا هنا load
ID2 هدا هيكون تحول إلى memory reference عنوان
address بجيب منه و بخزن فيه اش فيه اروح المهم ان
انا بدأ احول الكلام الجانب اللي بتحول الكلام هذا
إلى
assembly instructions اللى ينفذها ال processor و
هو مغمط يعني مابيعرفش اي حاجة مابيعرفش اشهر ال
program الكبير اللى بنكتب ولا بيعرف ان هو جوا
function ولا جوا method ولا جوا ايش بالظبط هو عليه
ينفذ instruction by instruction لازم اكتبله الياه
مش شئ هل الان اذا في مجال اللى عملها optimization
صح؟الـ code generator اللي بيطلع إذا ممكن يعمله
assembly of optimization بيجي optimization تانية
بيعمل عليها و بيطلع في الآخر اللي هو ال target ال
target بعد هي كده خلاص ال target هذا تلقائي بتحول
إلى machine okay فهذه هي التسلسل العاماحنا عادي في
هذه المادة بصير ملزمنا ان نتعرف على كيف والله كيف
والله ايش ال lexical analyzer كيف بيقدّي دوره كيف
فعلا نسوي هذا الكلام و ايش المفاهيم اللي بتلزم ايش
كيف بنكتب rules لل syntax analyzer كيف بعد هيك
عملية ال intermediate code generationأسف لسه كيف
ال syntax analyzer بيبني ال tree ايش خورزمية بناء
ال tree كيف هذا بيمشي ال tree عشان يبلع منها ال
tree address code كيف هذا يمسك ال tree address
code عشان يبلع اللي هو ال assembly هذا اللي احنا
بدنا نفهمهوانطبقه بالتدريج من خلال ال project نحن
في هذه المحاضرة اتعرفنا على المساق بصفة عامة و
خطته و مكوناته و اتعرفنا على ال compiler من برا و
ايش عناصره و دور كل عنصر من عناصره المحاضرة
القادمة سنبدأ بالانصر الأولاني اللي هو lexical
analyzer
ماشي الحل ياطلخوا معاك