كيف حالكم اليوم؟ تمام؟ إيش أخباركم؟ إيش كيف؟
بتدرسوا ولا لسه ولا أول بول ولا بتدرسوا ولا حاجة
ولا .. إيش الأخبار أنتم؟ ولا لسه نسجل زي ما
تقولون؟ طيب على كل حوالي مش مشكلة المهم المرة
الجاية أكيد اللي بنقوله اليوم لازم تدرسوه كويس
لأنه يمكن من اليوم هنسير نسأل أسئلة و نطلعكم على
اللوح و نشوف مدىفاهمكم للكلام اللي احنا بنقوله
فاتوقعوا دايما الان نسير باستمرار نسأل أسئلة و
نشوف المشاركين و نحاول انه نفكر مع بعض و نعمل كتير
شغل على اللوح ان شاء الله طبعا اليوم برضه هنستكمل
محاضريتنا عبارة عن نصين هيكون فيها .. فيها برضه
كلام شوية ودهش و برضه فيها شوية حل على ال .. على
اللوح ان شاء الله تمام؟ طيب خلوني نبدأ بسم الله
الرحمن الرحيماليوم احنا ان شاء الله رب العالمين
هنبدأ في chapter 2 ويمكن زي ما تشايفين الإنوان a
simple syntax directed translator و هنا chapter 2
يعتبر ايضا استكمال المقدمة اللي كانت في chapter 1
كيف يعني؟ يعني احنا في chapter 1 اذا بتتذكري أخدنا
كل ال phases تبعت ال compiler وحكينا ان في عندي
حاجة اسمها front-end وفي حاجة اسمها back-endوحكينا
إنه في ال front end في عندي أربع stages اللي هم ال
lexical ال syntax ال semantic ال intermediate الآن
شبط الأتنين هنا بركز على الأربع stages ده شبط
الأتنين هنا بركز على ال front end فقط شبط الأتنين
يعني chapter 2 هيعطيني تفاصيل أكثر في الأربع
stages أو في أربع faces هدول طبعا من خلال مثال
معين هيعطينا يا ويصير كل شويه يتدرج في هذا المثال
ويوريني كيف صار في ال lexical كيف صار في ال syntax
في ال semantic في ال translation هيوريني هذا على
مدار ال chapter يعني هيفسر كتيرفي ال front end ان
شاء الله مع مثال يعني مفصل وبعد هيك هيبدأ يمسك كل
chapter عن phase واحدة واذا بتتذكروا يمكن حكينا
احنا في ال introduction ان ال compiler الأساس
بنعطى في فصلينالفصل الأولاني اللى بيغطى ال front
end ويكون الفصل التانى اللى بيغطى ال back end احنا
فى فصلنا هنغطى ان شاء الله ل front end يعنى كل ال
stages هذه ضررية لنا خصوصا فى ال project فى
المشروع اللى هنعمله فى الآخر لأن مشروعنا فى
النهاية لازم نتحقق انك فهمت الاربعة stages بشكل
سليم وانه أصبح عندك القدرة تحولى من صورة ألف إلى
صورة باء باستخدام ال phases هدول بتاعهم ل front
end ان شاء الله طيبالأن هنا بس في مثال توضيحي في
الأول بدي وارجينا إياه بقول لي ما تنسي إنه إحنا لو
عندنا high level code خلال هذا الشبط بنفكر كيف
نحوله لل low machineولا للـ Intermediate المفروض
الـ front-end لما بتكلم أنا عن ال front-end
المفروض أن هذا يتحول ليش الأول ل Intermediate
Representation و ال Intermediate Representation
حكينا فيه أكتر من تمثيل صح ولا لأ لكن احنا خلال
مصراخنا هنركز على شغلتين يا إما Tree Address Code
يا إما Treeمش هيك قلنا فيه two representations و
هنتعامل معهم؟ طيب بالنسبة لل three address code
أخدناها قبل هيك قلنا إيش الشرط أنه أيوة أن ال
command الواحدة ال instruction الواحدة أو التعليمة
الواحدة ممنوع يزيد عادة ال addressing فيها عن
تلاتةبس maximum three addresses فهذا ما ننساه
المعلومة العامة طبعا طيب الآن المطلوب مناش نسوي في
هذا المثال الأولاني أنه بيوريني عشان يعرفني بقصة
ال three address code كل المطلوب أنه بيحول هذا ال
code المكتوب مثلا بالجابة بيحوله زي ما انت شايفه ل
three address code عشان نبدأ نستوعب شو يعني three
address code نشوف مثال على ال comments اللي فيه
فبس مجرد مثال توضيحي مش أكثر طبعا طيبالان نجري
ندخل في التفاصيل هنا انا بس بدأ اسأل سؤال في
البداية هل من الضروري جدا ان انا عشان اترجم هذا ل
three address code مثلا لازم اكون فاهم بالتفاصيل
ايش بيسوي ال code ولا ممكن اترجم و اعيد كتابته
بدون ما افهم ايش بيعمله ايش رأيكم؟لأ هم من الغواعي
بدنا نميز وهذا في العمارة حكيناها إذا تتذكروا إذا
القضية قضية ترجمة فقطبس إعادة كتابة فقط أحيانا مش
بالضرورة أكون أنا عارف إيش بيعمل ال code لأنه سهل
عليا خلاص بدي أعمل جمع بعمل جمع بعمل loop بعمل
loop بعمل كذا بعمل كذا فسهل أني أترجم باللغة
التانية، تمام؟ لكن أكيد لو طلب مني إيش بدها تصير
ال values بعد لفتين، كام لفة بده يلف، طب إيش بيعمل
البرنامج؟ أه إذا في أسئلة تانية من هذا النوع أصبح
لزمان علي أعرفماذا يفعل؟ وماذا يعمل؟ وماذا يحسب؟
وماذا ينقل؟ وكيف أعرف ال contents وال values بعد
ذلك؟ واضحة؟ نحن الآن ليس طالبين غير حاجة واحدة
طالبين بس أن أعيد كتابته بال address code و code
simple مثل هذا يعني أنا حتى لو لم أفهم هذا بقدر
أعيد كتابته ببساطة يعني طب تعالوا نفكر نشوف كيف
بدنا نكتبه بال address code أول ما تيجي تطلعي طبعا
هتقولي لي في عندي في loop هنا صح؟طيب ادخلي شوية في
ال loop في عندي do هنا I تساوي I plus one whileشرط
صح معروفة do while بده طول ما الشرط هذا متحقق بده
ينفذ اللي جوا ال do ماتحققش بيطلع منها و بيكمل صح؟
الان ركزيلي بس شوية كيف هذه ممكن اعملها بال three
address code؟ و اتذكري كمان مرة ال three address
code ايه له characteristic يعني شبيه شوية بال high
و شبيه شوية بال low يعني مش assemblyلسه أسهلني
أبرمج إله من ال assembly أو أكتب فيه أسهل من ال
assembly لماذا؟ لأنه قلنا قبل هيك بياخد شوية خصائص
من هنا و شوية خصائص من هنا بسمح أشوف الزائد و
الناقص و الضرب و ال brackets و الحاجات هذه لكن
بسمحش أن يكون فيه أكتر من three addresses اشي
limited فبياخد شوية من هنا و بياخد شوية من هنا
المهم الخلاصة أن أسهل علي أنا أترجم أو أعيد كتابة
بال three address code منين؟ من ال assembly في
النهاية بيبقى أسهل شويةطيب، الآن تعالوا، هذه كم
بتعملها I تساوي I plus one؟ هتقولي زي ما هي، three
address code لأنها I مافيش فيها أكتر من three
address سهلًا، فهتيجي تقولين في اختصار I تساوي I
plus one هي سهلة، على طول ترجمناها زي ما هي كانت
في الـI نزل زي ما هي في إيش؟ في ال three address
طيب، طب تعالوا نشوف هذهwhile .. الآن في do while
صح؟ طبعا ال do while يا بنات هي زي operator في
النهاية ممكن تفرضيها تمام؟ operator اللي لها two
operands او اللي له ال body اللي هنا اللي بدي تنفذ
و ال test ال condition اللي بدي يصير يعني ما تتخيل
انه بس ال operator زي زائد زي ناقص زي ضرب لأ حتى
ال do while هذه بدها تعمل مهمة معينة ففي لها أطراف
في لها طرف اللي هو ال body تبع ال doوالها طرف ال
condition اتحقق او ماتحققش بناء على الشرط هنقول
والله إذا الشرط متحقق بنرجع بننفذ الدول الشرط مش
متحقق بنطلع من كل ال command هذه باختصار يعني ف ال
do while ممكن تعتبريها زي هي كائنها زي operator
طيب السؤال هل أنا بقدر أعمل ال while هذه في جملة
واحدة؟ لأ ليش طيب لأ؟يعني انه في condition إذا ..
إذا تنفذ بنفعش يتنفذ التاني الآن أنا مسموح أقول Y
زائد زيت صح؟ مسموح حتى لو أكتر من operator مافيش
مشاكل المهم مايكونوش ال operands أو ال addresses
أكتر من تلاتة الآن هذه شو المشكلة فيها لو أنا
عملتها طب ال Y ال operator بتبريها زيها زي الزائد
مثلا شو المشكلة إن أستخدمها with one commandإنه
إيش؟ طب إيش المشكلة AI؟ وين هم الأربعة؟ال I sorry
I I انه عادي لو I تساوي I plus واحد هذي خلصت هذي
انا عملتها لحالة فوق I تساوي I plus واحد خلصناها
الان انا يا برجعلها يا برجعلهاش بدي بس فحص انت في
نهاية ال while عبارة عناش يا بنات انت بتعملي ال
body صح و بعدين بتعملي فحص ارجعلها ولا مارجعلهاش
بالبساطة الان الفحصة دي جملة الفحص اللي قايمة على
ال while طب ماقدرش اعملها في جملة واحدة لأ لإن اذا
في جملة واحدة هينفذ التن تاني يعني هيرجعلها ولا مش
هيرجعلها
الان يا بنات اعملنا I تساوي I plus one خلاص؟ الان
انا بده اعمل هنا whileبالجملة تحت ال while يا إما
أرجع يا إما مارجعش ماشي الحال؟ ماشي F مثلا ال F مش
بدك تشوفي شرطك؟ بالاختصار الشرط اتحقق ارجعي
مااتحققش كاملي هذه الجملة اللي بدي أكتبها أنا بال
F ولا whatever هذه تعطي الفحص تعطي ال test هذه ال
operator هل بقدر أكتبها في سطر واحد ولا لأ هي
السؤالالكتير بيقولوا اه و الكتير بيقولوا شي ..
كلكم بيقولوا .. مين بيقولوا بنفعش .. ليش .. ليش
بنفعش طيب سواء بس ليش بنفعش .. في ناس بيقولوا
بنفعش و في ناس بيقولوا بنفعش .. اللي بيقولوا بنفعش
ليش بنفعش .. مثلا اه ليش بنفعش عدهم
ليه؟ طيب
ال I تبع ال array و ال A تبع ال array طيب هي تلاتة
أيوة انتبهوا الان انا لما بتعمل while بدي أربع
معلومات أربع عنوين شو هما تعالي تطلعي ال AI هي
لحالها عنوانين لأن ال A ال index او عنوان ال array
و ال I هو ال offset او ال index صح ولا لأ يبقى هي
بدك شغلتين هنا عنوانين صح كاملة و بدك ال Vهي تلاتة
صرت اللي حتى الآن بدك وإذا الشرط اتحقق ولا ماتحققش
مش بدك عنوان رابع تروحيله أو ماتروحلوش صار لأ فصار
مطلوب منك أربع عنوين فبقدرش أعملها في جملة واحدة
لأربع عنوين يعني بالظبط لما أجي أقولك Y زائد Z
زائد W هل هادي بقدر توجه بلي شويةبقدر أعملها بدون
ذاء ال W بقدر أعمل X تساوي Y زائد Z هذه three
address لأن هي واحد اتنين تلاتة صح؟ لكن لو أنا
كتبتلك بدي X تساوي Y زائد Z زائد W كيف تعملها بال
three address؟ مش هتقدر تعملها في خطوة واحدة
هتضطري ال Z زائد ال W مثلا تحطيهم في 10 و بعدين
تحط عيد الجملة مع ايش؟ مع ال 10 ليش انت اضطريت
تعملي هذا الكلام؟ لأن قلنا ال three address code
لا يسمح بوجود أربع عنوين في ال instruction الواحدة
طب لما فيه يكون أربع عالمين إيش الحل؟ بيقول بخلص
بتضبط بيهم في تم وبتنزله وبتجمع التم بيصيروا تلاتة
شوفتي كيف الفكرة؟ وهنا نفس القضية، الآن معاك خبر
لو هذه كانت X مش AI كنت هعملها في سطر واحد لأنه
كان عند ال X وعند ال V وعند العنوان اللي بيروحله،
خلصنا تلاتة بتنعمل في واحد لكن لأنه كانت AI هذه
لحالتين عشان أعرف القيمةو ال V تلاتة و العنوان ده
روحله أربعة إذا مستحيل صار زي الجملة اللي فوق
مستحيل تنعمل في خطوة لازم في خطوطين طب شو الخطوطين
بتتوقعي أكيد الشطرين هيقولولي بنحط ال AI في تم و
خلاص و بنعيدها و بنستخدم التمب على طول يعني تعالى
نشوفها بشكل واضح كيف هيها تحت شايفين طلعين أول
جملة بداها شو؟ بتاعة ال body I تساوي I plus one
خلص منها الأهم دي هو فحص الشرطمش هيقدر يبحث الشرط
مرة واحدة لأنه لو هو حاط التهانة يا بنات A I أصغر
لو هو عامل زي هيك تعالي عدي معايا A و I و V و
العنوان صاروا أربعة مابقدرش خلاص عشانك اوش عمل قال
بنفعش قال طب أنا أخلص من A Iاللي فيهم أتمتين و
أحطهم في مين؟ في تم و بعدين خلاص if تم أصغر من v
يعني الشرط المتحقق يعني دلّك في ال do while صح ولا
لا؟ go to مين؟ خلاص برجع ال if طبعا لاحظوا إشي مهم
ال go to ماكنتش موجودة في ال assembly كنا بنقول
زمان branch not equal و branch equal و jump و هيك
ال assembly ال go to موجودة في لغة زي ال Cفي الـ C
.. لو تجيب تطلع على الـ C7 بتعمل مشاكل للـ goto
بتلخبط كتير شغلات لكن الفكرة أن ال goto كانت
موجودة في high level لكن هي تعالى اتطلعي بتجيها
وين صارت موجودة كمان في ال .. في ال .. في ال tree
address code لأنه مابديش تنسي فكرة أن ال tree
address code هي ماخدة شوية من هنا و ماخدة شوية من
هنا شوفت انت كيف؟ فصار .. فماعنديش مشكلة فصارت ال
goto اللي ممكن نشوفه في high level كمان موجودة في
ال tree address هذا بس عشان كلمة goto يكون عرفة
لأنها بتظهرفي أكتر من ال language في القديمات يعني
في ال high طيب إذا وضحت هنا إيش أنا سويت هاي الشرط
إذا الشرط اتحقق والله برجع من جديد عيد ال body
تبعده طب الشرط ما اتحققش خلاص بيكمل طبيعي بعد ال F
بنزل طبيعي عادي زي ما انت عارف ال F condition وضحت
طيب الان تعالوا نكمل ترجمة باقية ال code بنفس
القالية الان في do while تانيةنفس الفكرة هروح أحط
ال a .. طبعا هعمل j تساوي j minus one في سطر لحالي
و بعدين هحط ال a j في تم و بعدين هعمل f else نفس
الفكرة و يا برجع لل j minus one يا بكمل صح ولا لأ؟
يعني العملية simple خالصإن عيد كتابته بـretrieve
address طلعي شوفي كيف عمر الـ J تساوي الـ J minus
one حط ال A J في T two لأنه مابقدرش يجيب في جملة
واحدة بعدين قال خلاص if condition والله إذا ال T2
أكبر من ال V عيد ال body تبع ال J minus one إذا لأ
كمل خلاص بتكملي كودك فشايفها الأمور simple أسهل من
ال assembly لو ديك تكتبيه بالassemblyالـ assembly
دي اللي بقى كنت حتضطر أعمل branch.equal و equal و
jumbo و مش عارف إيش و في أكتر من شغلة كنت حتعمل
إيها في ال assembly طيب تعمل كام من باقية ال code؟
إيش بيقول؟ الآن بدو يعمل .. يفحص كمان شرط والله
إذا ال J أكبر من .. ال I أكبر من سوء ال J break ..
إيش break؟ بطلع من كل ال loop يعني بطلع من
البرنامج يعني إذا الشرط تحقق بطلع من البرنامج طب
إذا الشرط ما تحققش
هيكمل عادي خلاص تعالى نشوف هو كيف عملها هنا في ال
.. في ال three others code إيش قال؟ قال if false
إذا ما اتحققش وان بدنا نروح نكمل عادي طب إذا اتحقق
هيعمل go to fourteen إيش break يعني؟ يعني خلاص
اطلع اطلع من كله خلاص go to fourteen يعني آخر
الاشي طبعا هو كان جادر يا بنات مايعملش if false
إذا بدك كنت جادر تعمل if عادي يا إنت والله إذا
مااتحققش إذا اتحقق خلاص go togo to الـ 14 لبرا إذا
لأ بيكمل يعني أقصد تلعمل بأكتر من طريقة بس هو خلاص
اختار هنا if false يعني إذا false إذا مش متحقق عيش
هيسوي هيروح يكمل ال code عادي صح؟ يعني هيو إذا مش
متحقق هيروح يكمل code عادي من 9 طب إذا متحقق هيروح
لكلمة go to 14 يعني اطلع يعني خلاص ال 14 يعني خلص
من كل ال loop اللي هو فيها تمام؟ بيكمل تكميل الآن
تعالوا شوف كيف هيكمل عاديإيش هيكمل عادي؟ لو ما
طلعش؟ X تساوي AI طب ما نفسها بتنحط ليش؟ لأنها
تلاتة أدرس واحد، اتنين، تلاتة طب AI تساوي AJ؟ هذه
ماقدرش A و I و A و J ساعتها لازم يحطه باشي إذا
ماحطوه فخلاص بقى هو يبدو AJخلاص فهمت كده فهيروحش
يسوي هيحط AJ في temp مثلا و بعدين هحط ال temp في
AI و آخر واحدة AJ تسوى X خلاص جاهزة مظبوط تعالى
نشوف آخر ال code كيف أيوه أيوه X AI على طول حطها
في ال temp بعدين نجلها من ال temp لل AI و الأخيرة
AJ تسوى X و بعدين خلاص ارجع عيد لإنه يرجع ل ال
while لإنه while true هنفوق ال code زى ما انت
شايفهwhile true يعني بعد ما يخلص طالما مافيش break
عيد فرعم ال go to و هكذا فالفكرة بس النقطة اللي
بتوضحها هنا كمان مرة انه احنا لما بنطبق ال front
end على code مكتوب بال high level النتيجة اللي
هتطلع هيIntermediate Representation هذه اللي بدي
وصلك إياها المعلومة وحطلك انا مثال عالمين الـ
Intermediate Representation بس هي كل اللي بدي
أقوله طبعا لسه هندخل كمان شوية بتفاصيل كل stage
خلال ال chapter كله طبعا مش محاضرة اليوم بسواضحة
ايش اللي بيقولوها؟ هذه نتيجة ال front end وكمان
مرة ما تنسيش فيه اكتر من representation
intermediate representation احنا هنتعامل مع هاي و
مع ال tree كمان طب تعالوا نشوف ل tree كيف يعني
ممكن ال code كله اللي فوق يتحول ل tree هو بس أخد
مقطع يحوله ل tree تعالوا نشوفه هرجعي لهذا النقطة
اتكلم فيها بس انا عشان اخلص الفكرة
الإيش؟ بيصير مش ال flow control ال operator كلها
اللي بدها تصير مع ال flow control مش مشكلة انا بس
تطلعيلي على هاي مثال هاي مثال الآن يا بنات هذا ال
code شايفينه توا عملناه اللي هو do I to I plus one
Y اللي كانت مكتوبة قبل شوية فوقحولناها ل three
address code كيف؟ مش قولنا I تساوي I plus one و
بعدين حطينا ال AI فى Tim بعدين قررنا هى مش هي تبقى
اللى سوناها زى هيكهيتوا عملناه بس الامر يوريكي طب
لو بدنا نعمل وعاد بال intermediate representation
تاني زي letter E هذا المقطع كيف بنعمله؟ جالك
simple خالص جالك ال operator الأساسية شو هي؟
الأساسية do while مش هاد ال operator الأساسية جالك
الحلو في letter E أن ال interior nodes هي ال
operators و ال leaves هي ال operands اللي بيتعامل
معها وبالتالي أنا ال root الأساسي عندي في letter E
هنا اللي هو do while في هذه الجملةطب ال do while
هذه اللي هي ال interior node اللي هي ال route إلها
كام جسم مش إلها جسمين اللي هو طرف ال body و طرف ال
condition الشرط عشان هيك هو ما تردد قال ال do
while جهتين جهة بتتمثل ال body اللي جاي كله و جهة
بتتمثل ال condition اللي جاي كله عشان هيك قال ال
do while فيها شغلتينالان دعونا نتكلم في ال body
نفسه ال body عبارة عن ايش؟ مش هو عبارة عن I تساوي
I plus one طب بلتري كيف نعملها؟ مش هي عبارة عن I
تساوي something يعني انا بدي اقول يساوي طرفين كمان
شوفتي كيف؟ لأن كل operator بتنحط ك intro node و ال
leave سبعات هم من ال operands فالان انت دخلت على
جملة جديدة في ال body اللي هي I تساوي somethingفي
operator اسمه يساوي عشان هيك حطه ك intro node هذا
اليساوي و قال انها طرفين طرف اسمه خلاص ال I و طرف
تاني بده يشوفه اللي هو مين I plus طب في operator
تاني عشان هيك عمل كمان إيش plus بين جهتين عشان هيك
ما تستغربيش قال اليساوي بين شغلتين بين ال I و بين
طرف تاني طب الطرف التاني في operator كمان اللي هو
I plus oneفجالى يبقى فيه كمان ال plus طب مين مع
مين ال plus؟ I و one فخلص شق ال body تبقى كله الآن
تعالى نتكلم في الشق التانى ال condition برضه إشي
أصغر أو أكبر حسب اللي مكتوب من إشي إذا إيش ال
operator الرئيسية هنا الإشارة الأكبر أو الأصغر حسب
اللي مكتوب طبعا هنا غلط في الكتاب لأن هنا هي إشارة
أصغر المفروض فهو عملها أكبر فهذه بتصرخوها لأصغر
تمام؟الان الأصغر بين مين ومين؟ بين جهتين صح؟ الجهة
هذه برضه فيها operator تانية ال bracket هذه بتاعة
ال array هذه operator لأنه في حسبة يجمع ال a ال
address مع ال I ال offset ال index عشان يعرف وين
العنوان فهذه operator تانية القوسين هذول بتاعة ال
array عشان ايش قال؟ قال خلاص طرف خلص اللي هو ال V
جاهز الطرف التاني في operator طب operator مين مع
مين؟مع ال A ومع ال I الخلاصة ان كل هذه على بعض
اصبح تمثيل لمن؟ لل high level language اللي أنا
كاتبه انا كاتب هذا بيش؟ ب high level حولته لشو؟ ل
tree address او treeوطبعا يمكن ان يتحول الى byte
code ويتحول لحاجات تالتة ورابعة وخمسة بس احنا قلنا
هنركز بس على شغلتين في ال intermediate
representation واتفقنا مسبقا ان ال tree تصلح انها
تكون شكل من أشكال تمثيل ال representationطبعا ليش
لتري تصلح لأن لتري زي ما قلنا قبل هيك علم سابق
موجود ومريحني طرق زيارات ال notes و ال data
traversal و ال bottom-up و في قصص كتير كيف أنا
أزور ال notes و كيف أشتغل عليها حتى لتري مستقبل
هشوفها بتسهل علي ال process بتاعة ال operators كيف
أجمع كيف أطرح إذا تتذكروا ال post-fix و ال infix و
مش عارف إيش و ال stack و في قصص كتير أخدتوها في ال
data structureعالمو احنا هنمر على بعض هذه القصص
لاحقا بس الفكرة اللي هوصلك إياها الآن أن هذا يصلح
أن يكون وسيط الانتقال إليه مش صعب و الانتقال منه
سهل أيضا أني أقدر أعمل translation و بالفعل هنشوف
كيف عملتي translation لاحقا okay طيب بس هذا المقطع
هذا اللي ودي أقوله يعني هاي ال three utensils بعد
ال syntax ولا ..لأ بعد ما نعمل الأربعة stages مش
انا في عندى four stages مش في انا عندى front end
ال front end اش بيعمل؟ بيحول من ال high لل
intermediate بتطلع عندك ال tree شوفت كيف؟ زي هيك
طبعاقصة الـ tree هذه برضه فيها تفاصيل احنا احيانا
هنتعامل في ال phases مع ال tree ممكن ما تطلعش بشكل
explicit بشكل واضح لكن ممكن بشكل ضمن نشكلها زي ما
هشوف في عملية ال parsing لا اعتقاد او ممكن انا
اكون محتاج اطلع ال tree explicit وساعتها برضه هيمر
معانا بعض الشغل في هذا الكلام لا هنظرنا في شبطة
ستة هيمر معانا نشكل tree رسميةمن .. من high level
مثلا language نطلع lettery مثلا هذه بعدين هنشوفها
ماشي الحالة الأول اللي عملناه برضه بطلع ك
intermediate يعني بدل بعد الأربعة انت في النهاية
القصة simple أنا عندي high level ال high level
يتحول ل intermediateانتقل منه لبقية ال stages
بتاعة ال backend أشكال ال intermediate متعددة الآن
في شكلين متعلمينهم احنا شكل literary address و شكل
literary that's it لكي نعقد الأمور الأمور simple
خالص هذا شكل و هذا شكل طب ايش سبب بصوري للشكل هذا
او الشكل هذا لأن عملية الانتقال منهم أيضا simple
وسهلة وكمان مرة انا قلت مش محصور ال intermediate
representation على اتنين هدول فيه أكتر من شكلالـ
Bytecode Intermediate Representation الـ C ممكن
يعتبر Intermediate Representation لغة الـ C اللي
هي بتفكرها high level ممكن تعتبر Intermediate
Representation بالإضافة لاتنين هدول و آخرين تمام؟
طيب
طيب الآن تعالوا .. بس قبل ما نروح هناك في شغل رسمى
بس ده أرجع عليها فوق لتذكير بالشغل اللي احنا
بنسويه طبعا زي ما انتوا شايفين هذا ال front end
تبع ال compiler تمام على أساس أن هاي ال source
program بيجي من هانبعد ذلك بيجي ال Lexical
Analyzer اللي هيطلع لي ال tokens بعد هي كده بيجي
ال syntax analyzer وهو نفسه ال parser طبعا ليش
بنطلق عليه مصطلح parser أيضا لأنه هيعمل عملية
derivation لل letter E عملية parsing بنسميها عملية
ان اتشكل letter E عشان انا قلنا في tokens جايات
وفي model موجود وبحاول اطلع letter E ال process
بتاعة ان اطلع letter E هذا بنسميها parsing
derivations تبع ال tree هتسميها parsing عشان هيك
أنا ممكن ال syntax analyzer أسميه parser بنفس
القلية ال lexical analyzer ممكن أسميه scanner ليش؟
لأنه قاعد بيعمل زي scanning قاعد بمشي ايش
character character و بيطلقلي tokens فقولنا ان ال
lexical analyzer scanner ال syntax analyzer parser
طبعا المفروض ليش يكون فيه هنا محطوط يا بنات مش
موجودة لازم يكون فيه semanticلازم يكون في ال
semantic analyzer بعد ال semantic analyzer إيش
بيجي؟ ال intermediate code generation تمام؟ و
لاحظي زي ما قلنا قبل هيك أن الجميع تعامل مع ال
symbol table سواء بيحط فيه معلومات أو بيقرا منه
معلومات فهذه المعلومات العامة ماننساش لأن هذا ال
front end هركز عليه بشكل كبير خلال هذا ال chapter
ان شاء الله تتوقعي انت مين اللي بيشتغل زي ال scan؟
انت لحالك، تتوقع؟ ال lexical ليش؟ لأنه قاعد بمشي
بالدور character character هداك ليش كمان مرة صمينا
parser؟ لأنه بيعمل عملية parsing إيش عملت parsing؟
يعني عملية تشكيل ل letter E فهذا بيسميها parser،
تمام؟ طيب، الآن نرجع نركز و نتكلم شوية في موضوع ال
syntax definition وهنا ركزوا معايا على اللوح قبل
ما نشوف اللي مكتوب هناك أنا
بدي أذكركم في الأول أو بدي أسألكمالـ syntax
analyzer كم رقم مهم فيه؟ كم جزئية مهمة فيه؟ لازم
ناخد بالنا منها قلنا قبل هيك تلاتة .. الموديل ..
الموديل و إيش؟ انت قولتي تولت تلاتة إيش و ما ..
ممتازين بيتجاوبوا صح ماتنسيش فيه تلت أشياء مختلفة
لازم نميز بينهم عندما نتكلم syntax analyzer الجزء
الأول ال model الذي يصف ال syntax الخاص بال
language هذا اشي مستقل بذاته هذا عبارة عن ال
grammar اللي هنتكلم فيه بالتفصيل ونشوف كيف بنوصف
فهذا ركن موجودmodel يصف ال syntax طيب الشغلة
التانية شو .. الشغلة التانية ال tokens اللي جياتني
من ال lexical اللي فعليا كاتبهم المبرنج و يمكن
كاتب صح و يمكن كاتب غلطهي في شق تاني يعني انا فيها
اندي في كفة ال model اللي بيصف ال language وفي
الكفة التانية ال tokens اللي مكتوبات من المبرمج
والان الجزء التالت هي ال process اللي هي عملية
المقارنة هل ما وصلني او ما كتبه المبرمج يطابق ال
syntax الخاص بال language ولا لأ طبعا عشان اقدر
اقارن هاي بهاي و اعرف لازم عملية ال process اللي
في النص اللي هي ال parsingعملية تشكيل الـ tree
عملية التشجير هذه هي التلات شغلات عشان هيك احنا
هنتكلم بالتفصيل اليوم في موضوع ال model فقط كيف
اوصف ال language مرتان احنا هنتكلم بالتفصيل في
موضوع ال parsing كيف عمل عملية التشجير كيف عمل
عملية ال tree هذه بتطلع طبعا الجزء التالت بتكلمش
فيه لأنه بيجيني جاهزمن المبرمج عن طريق ال lexical
اللي هو ال tokens المكتوبات بشكل فعلي قد يكونوا
مكتوبين بشكل سليم يطابق ال language ال syntax وقد
يكون مش مكتوبين بشكل سليم فلازم في process في النص
اتقارن هذه مع هذه عشان نقدر نعرف فما تنسيش هذا
التصور لما نتكلم في ال lexical analyzer في ال
syntax analyzer طيب الآن في باقية محاضرتي بدأ أركز
على شو؟على الجزء اللي كيف أوصف ال syntax مش
فيقولنا model بوصف ال syntax سبع ال language كيف
هذا ال model؟ كيف شكله؟ كيف بوصف؟ اعطيني أمثلة،
بدنا نشوف هذا الكلام ان شاء الله بالتفصيل طبعا
عشان انا أوصف ال syntax سبع ال language في حاجة
بنسميها context-free grammarهذا موجود من أول احنا
اليوم بدنا نستخدمه علشان نقدر نوصل في syntax لللغة
معينة فهذا اسمه context-free grammar ومن باب
التسهيل بيقولوا عنه grammar على طول هي context
-free grammar or خلاص هنصير نقول بعد هيك grammar
عشان ريح روسنا يعني دايما خلاص هنصير نقول grammar
grammar grammar لكن هو أساس المصطلح context-free
grammar طيب ليش مستخدمه؟بدنا نستخدمه عشان نوصف ال
syntax بتاع ال language كيف بالظبط نوصف ال syntax
بتاع ال language دلوقت نتكلم و نشوف تمام؟ طيب أول
شي هذا ال grammar من إيش بتكون؟ هذا ال grammar
بتكون من أربع component رئيسيات شو هما؟ أول
component بنسميه ال terminalsمش عارف شو يعني ال
terminals اول component هو terminals زي ايش ال
terminals زي مثلا فتحة القوس هذا بنسميه terminal
تسكيرة القوس terminal الفاصلة terminal كلمة ال
keyword if terminal معروفة يعني ماتدهش اشي اليساوي
terminal مثلا لما قولت number num هذه خلاص واحدة
مفهومة ايش يعني num فهذا بنسميه terminal لما اقول
IDهذا ال terminal شوفتي كيف ففيه أنا عندي
terminals طبعا هنا ممكن بعض يلخبط شوية يقول لي طب
إيش ال token و إيش ال terminal بشوفهم زي بعض لأ
فيه فارق بسيط ال token قلنا قبل هيك بتكون من
جزئيتين صح نوع ال token و ال attribute صح نوع ال
token هذا هو ال terminal فال token أكبر شوية ال
token هو عبارة عن terminal مع attribute إذا فيله
attribute عشان نفصلها و نوضحها بشكل واضحالـ token
كمان مرة في جواته جزئيتين الجزئية الأولى اللي هي
ال terminal الجزئية التانية قد تكون موجودة أو لأ
اللي هي ال attributes خلاص؟ عشان بس نشوف إيش الفرق
بين ال token و ال terminal يعني ال terminal جاي في
بطن ال token من الآخر زي هيكا واضحة؟طيب ودّينا
أنثيته على ال terminal زي مثلا مين كمان الزائد
الناقص الضرب اليساوي كل شيء خلاص مستقل بذاته لا
يحتاج إلى استبدال معروف شهو هو هذا بنسميه terminal
هذا أول جزء هنلاقيه موجود في ال grammar الجزء
التاني موجود في ال grammar بنسميه ال non-terminal
طبعا بالمناسبة الكتاب عشان يسهل عليكي دائما بكتب
ال terminal bold و أسود غامق هيك تقين عشان ما
تلخبطيش بين ال terminal و ال non terminal بتلاقي
الكتاب مش بستخدم ال bold الغامق لل terminal خلاص
هذا لو .. بس انت حتى لو الكتاب ما استخدمش المفروض
تسهل علينا خلاص فهمناه فواصل أرقام مش عارف إيه
يعني سهل جدا الكلام اللي قلناه قبل شوية طيبالان ال
non-terminal لأ ال non-terminal هذا عبارة عن إيش؟
شغلة فيها تفصيل شغلة إلها هيكلية شغلة إلها details
كيف يعني؟ يعني لما أجي أنا أقول statement في ال
language طب ما ال statement إلها تفصيل زي إيش
التفصيل؟ إنه ممكن ال statement عبارة عن if
conditionممكن ال statement عبارة عن while ممكن ال
statement عبارة عن block يعني طالما أنا بتكلم عن
شغلة اللي لها تفاصيل، اللي لها خريطة، اللي لها
شكل، اللي لها استبدال، المعناه هي هذي على طول
بسميها non-terminal و الكتاب بكتبها Italic ومائل
خلاص عشان برضه .. عشان اميز ال term .. ال term
بيعملها إيش؟ اتالك مائل واضح إيش ال non-terminal؟
ال non-terminal كمان مرة لما ناجي أقول كلمة
statement إلها معاني لما ناجي أقول كلمة expression
إيش ال expression؟ إشي زاد، إشي .. إشي ناقص، إشي
.. إشي ضرب، إشي .. و هكذا فطالما بتكلم عن شغلة
إلها تفاصيل و إلها معاني على طول هذه صارت إيش؟ non
-terminal هذا رقم تاني في ال grammarالرقم التالت
الموجود في ال grammar اللي هو حاجة بنسميها
production production ايش معنى ال production او
ايش بيقصد بال production او كيف شكل ال production
قال شكله كالتالي انه يبدأ ب non terminal ثم سهم ثم
مجموعة قد تكون كلها terminals قد تكون كلها non
terminals قد تكون mixingيعني ال production كمان
مرة إيه شكله ال production يتكون من أول حاجة non
terminal أو بنسميه left side أو بنسميه head زي ما
بدك كلها نفس الأسماء و بعدين بنعمل سهرنعمل سهم بعد
السهم إيش هنشوف بعد السهم الجهة اللي على اليمين
هنلاقي خليط ممكن كله يكون terminals ممكن يكون كله
non-terminals ممكن يكون مش من هاي أو من هاي طيب
السؤال اللي حتى الان طب شو المعنى إيش يعني هاي سهم
هاي إيش معناها؟هذا يعني أن هذا الـ Non-terminal
ممكن يكون تفاصيله وتشكيلته وشكله كالتالي اللي بعد
السهم يعني زي كأنه بعد السهم أنا بفصل فيه يعني هذا
ال statement عبارة عن شو فانا بعد السهم المفروض
ايش أفصل فيها اه والله هي عبارة عن F وراها جوز
وراها كذا هي عبارة عن Y بيصير التفاصيل فهذا لو كنت
قالت هتسميه productionتمام؟ طبعا احتمال يكون مثلا
اجي اقول if افتح قص مثلا expression واسكر قص و
اكون كاتب statement هنا مثلا و اجي اقول هنا
expressionالان ايش هتفهم انت مني هتقوللي واضحة جدا
هتقوللي ال statement و ال expression non-terminal
ليش؟ لأن مستحيل انا أحط حاجة قبل السهم إلا تكون
إيش؟ non-terminal ماعنى السهم؟ أنك بدك تفصل فيها
أنك بدك تقول كيف شكلها كيف بدها تستبدل صح ولا لأ؟
إذا مستحيل قبل السهم يكون إلا إيش؟ non-terminal
فانا طالما شفت ال statement و شفت ال expression
على طول هعرف أنهnon-terminal طب الآن السؤال طب بعد
السهم إيش؟ والله إيه ال F دي قائمة بذاتها؟
keyword? Terminal والله فتحة القص قائمة بذاته؟
Terminal لأ ال expression هذه لسه فيها تفصيل آه
هذه non-terminal والله تذكرة القص اللي لها مانع
قائمة بذاتها Terminal وها كده إذا الآن ال
production الواحدة زي ما قلنا تتكون من left side
non-terminalثم او head زي ما بدك تسميها ثم سهم ثم
terminals, non terminals من هاي من هاي او زي هي
اختصار طيب هذا ال production الواحد ال grammar عاد
مكون من اكثر من ال production يعني ممكن الاقي
عشرين productions تحت بعض عشان اقول هذا grammar
يوصف في ال language او خمسين او ميا جد ما يكونإذا
مجموع ال productions كلهم مع بعضهم، إيش بيشكلولي
ال grammar؟ وظيفته شويه ال grammar؟ وصف كامل ال
syntax بقى لل language، باختصار واضحة؟ طيب، احنا
شوية شوية عمال ندخل بالتفاصيل، لسه ماشوفناش، بس
أنا قاعد أفهمك كيف هذا ال grammar موجود وكيف
بيوصف، لكن أكيد هناخد أمثلة كمان شوية، طيبالان في
ملاحظة مهمة بيقوللي أول non-terminal في أول
production بنسميه start symbol بنسميه start symbol
ليش؟ لأنه لازم البرنامج عشان أبدأ شجر و أعمل عملية
literary لازم يبدأ بشيء يبدأ يتفرع، شيء أساسيده مش
احنا اتفقنا انه والله إذا المبرمج كانت بشغلة وقدرت
أعملها شجرة تتفرع لهذه الشغلة وكانت صحيحة بتكون
الشجرة صحيحة مش هيقولنا مش أنه لازم يكون فيه شجرة؟
طب إيش تتوقع الهرم تاع الشجرة ال root تاع الشجرة؟
أكيد بداية التشجر صح ولا لا؟ عشان كده من وين بدي
أبدأ أشجر؟ هل أبدأ أشجر من ال statement؟ و لا أبدأ
أشجر من ال exhibition؟ و لا أبدأ أشجر من وين؟فانت
بدك تشوف إيش في ال grammar أول start symbol موجود
أول ال production عشان تعرف إنه هذا الأساس اللي
هتطلع منه كل الأشجار يعني تعالى أديكي مثال هذا ال
statement كيف ده هتتشجر مثلا ال statement هتقوليه
عبارة عن if if تهيقوه بعدين هتقول expression صح؟
بعدين secret ال expression هذه مش إلها شجرة ويمكن
هذه تطلعلها شجرة و هتطلعلها شجرة حسب التعريفات
خلاصة شجرتك الكبيرة المهولة هذه بدأت ب startبالـ
start symbol بدأت من واحد و بدأ يتشجر و يجيب كل
البرنامج هذا عدد ال start symbol مكانه في الغالب
وين بكون في أول production أول non terminal فوق
إلا إذا ذكر غير هيك يعني ال default تبعنا أن أول
production أول non terminal هذا على طول بنسميه
start symbol إلا إذا ذكر غير هيك هذا ال default
تبعنا اللي هم نتكلم فيهلكن لازم يكون في عندى start
symbol لجرامر هذا عشان يبدأ يعمل عملية ال parsing
ويتأكد انه مكتوب صح ولا غلط هاي باختصار تعريف
الجرامر لسه مااخدناش أمثلة الآن كمان شوية بدي أبدأ
أديكوا أمثلة بس في الأول حد مش فاهم من إيش مكوّن
الجرامر؟ دكتور، اللي جيه هو ال start symbol هو
نفسه ال left side؟ احنا إيش قصد ال left side و ال
right side؟ خلاص طالما فيه سهمبغض النظر وين ما
كانوا خلاص معناه ياله left side هد وياله right
side لكن مين ال left side اللي بيكون ال star
symbol؟ أول واحد لكن هذا left side .. هذا left
side .. هذا left side أو هد .. هد .. هد .. هد ..
لكن مين فيهم ال star symbol الأساسي؟ الأول واحد
ماشي؟ طيب تعالى بس نشوف نقرأه من الكتاب و نرجعله
الآنبدنا نفهم بس اللي قلناه نشوف مثال عليه وبعدين
نتكلم أكتر بتفاصيله اللي أنا إيش بقولك بقولك ال
statement في language زي ال Java مثلا طبعا ممكن
تكون F ممكن تكون Y ممكن تكون D كتير فيه شغل صح ولا
لأ لكن أحد صور ال statement في ال Java اللي هي ال
F condition طب ال F كيف شكلها في ال Java؟ هي عبارة
عن IF small F تهيقوسفى expression بدى يكون فى النص
اللى هو الشرط بعدين لازم يجى تسكير تقوس بعد هيك
بديجى عندك statement تانية سواء كانت F ولا جملة
جمع ولا طرح ولا طرح بديجى كمان statement هيك شكل
ال structure تبع ال F و وراها بديجى else و وراها
بديجى إيش statement جالى الآن طب كيف أوصف هذا ال
syntax بتاع ال language؟ ماشي احنا الحكينا ان فى
language فى هذا الشكلكيف الأن بال Grammar بقدر
أوصف أن هيك شكل الفجر؟ قال لي simple خالص قال لي
هاي .. قاللي تطلع كده .. هاي .. هاي الكبر .. هاي
.. قال خالص بقى أجي بعمل non terminal اسمه
statementوبعمل السهم وبتكلم بتفاصيل شكله شكله بيجي
I F شكله بيجي فتحة cost شكله بيجي expression طبعا
اكيد ال expression لازم يكون لها تكميل أو تفاصيل
لك لان مش ذاكرها لسه هنا تسكير ال cost statement
اسم السهم خلاص شايف السطر هذا لحاله وصفلك على طول
ال syntax بتاع ال F الان لو المبرمج كتببنفس الشكل
هتقدر تطلع ل three من هذه يعني تعالى نفترض فرضيا
عشان نوضح الفكرة أكتر فى
افترضى المبرمج كاتب هذى كاتب المبرمج F وفتح قوس
واعتبريه كتب expression معينة اعتبريه كتبها مش
مشكلة لأ لأنه مالهاش وصف ال expression بس اعتبريه
كتبهاو سكر قص هقولك سكره زي هيك و بعدين كتب
statement و بعدين كتب else و بعدين كتب statement
هذا اللي كتبوا مين المبرمج خلاص ال tree لو بدك
تطلع ال tree بتبدأ من وين ال root من statement و
ال statement فقط تستبدل هنا بحالة واحدة شو هي
تستبدل ب Fوتستبدل بفترة قوس، مش هيك، هي صورة الـ
statement لو تستبدلها صح وتستبدل ب expression
وتستبدل بتسكيرة وتستبدل ب statement وتستبدل ب else
وتستبدل ب statement يعني المفروض لو طلعت الخريطة
هذه من اللي كاتبه المبرمج يعني هو كاتب صحلو ما
طلعتش الخريطة هاي مانا هو كاتب غلط صح ولا لا؟ الآن
سؤالي إليك هل هذه الخريطة اللي مكتوبة بالشكل هذا
بتقدر تطلع من ال grammar هذا؟ ولا يمكن ليش؟ لأنه
هذه ممكن تطلع معايا يعني ممكن ال statement تلاقي
ال if و تروح تلاقي ال إيش؟ تلاقي فترة الجوز و هذا
يلاقي هذه مثلا لكن لما تيجي الرجل هذه بدأ تنزل
المبرمج ليس كاتب، كاتب الجثث هذا لكن المفروض ما
كانت تحصل كانت الرجل هيك في الخريطة تحت الـ syntax
طالما مختلفين عن بعض إذا لا يمكن تتشكل الـ tree
لهذه الـ tree صحيحة بنقصد لأنه ليش مش راضي تتشكل
ال tree لأنه إيش بتقول الخريطة إن المفروض يجيني
جثث زي هيك لكن المكتوبgoes زي هيك طب هدولة مختلفين
إذا هذا الكلام مش مسموح فيه إذا error بيكملش ل
three طب افترضي أنا بدي أخلي ال syntax هذا سليم لو
أجيت أنا عدلت في الخريطة وقولت أنا حر بدي هيك تكون
شكل ال language مزاجي هي ال language تبعتي بدي
هيكون شكلها هيك إن كتب هيك صح هتصير هذه الجملة صح
ولو أجى كتب هيك كمان شوية صارت غلط يبقى أنا اللي
بحط الضوابطمن خلال الوصف الحقيقي أنا هنا بحط الوصف
الحقيقي لل syntax اللي بديه بعد ما بحطه خلاص بشوف
المبرمج إيش كتب والله هل أنا قادر أطلعله tree من
الحاجات اللي عندي ولا لأ إن طلعتله tree معناه هو
كاتب صح ماطلعتلهش tree معناه هو كاتب غلط باختصار
زي هيك الآن رجعها زي ما كانت عاد رجعها كانت هيكو
الرجعتي زي ما كانت هيك، تمام؟ السؤال الآن كمان
مرة، هل بتقدر تطلعي لهذه tree من ال grammar اللي
غاد؟ مابتقدرش، نفس الفكرة يا بنات، لو فرضنا جدلا
أنه لازم يكون هنا فاصلة منقوطة لو فرضت من عندي زي
هيك، وهو مش كاتب .. و كاتب صح هنا، كاتب صح ماحطش
الفاصلة منقوطة، مش هتطلع ال tree هل بتقدر تطلعي
انت tree من هذا الكلام؟ هي تطلعشلأن في فاصلة
ملقوطة هو مش كاتبها، إذا بدي تقولي أنا برضه إيش؟
في error أو في مشكلة و هكذا، فمن هنا نبدأ نتصور
الموضوع إنه لازم يكون فيه وصف كامل لكل صغيرة و
كبيرة في ال syntax ثم المكتوببيطلع منه tree ولا
بيطلعش منه tree بس طبعا مش تملة على كيفك يعني مش
هالجي أقول أه مهي tree مين جالك أنت بتطلع على هنا
إيش أستبدل وإيش مين أستبدل حساسة أطلع هذه إذا جيت
في استبدالات بعملها أطلع هاي معناها أن أنت شغال صح
وكاتب صحإيش بقصد بالاستبدالات يا بناتي؟ طبعا انت
تبهي انه هذه ممكن يكون فيه أكتر من جملة لل
statement احنا مش مباينة مع الاستبدالات لإن هو
حاططلي واحدة فيش غيرها باستبدلها لكن افترض فيه
while هيك شكلها مثلا من عندي وافترض فيه do هيك
شكلها أنا حر خلاص هيك اتدو مزاجي خلاص فرضت هيك
خلاص وجل أفندي المبرمج كتب وجل
مبرمج كتب زي هيك كتب
تمام واجه المبرمج كتبلي Y F مثلا هيك هيك كتب
المبرمجالان انت كل السؤال عشان تعرف ان هذي توافق
ال syntax ولا لأ انت بدك تبدأ من وين؟ من ال root
صح؟ ايش يعني ال root؟ يعني ال statement هاي بدك
تستبدليها بس مش على كيف تستبدلها حسب الأوامر الان
بدك هنا تلت خيارات لاستبدال ال statement انه ممكن
تستبدليها بكذا او تستبدليها بكذا او تستبدليها بكذا
فهل السؤال هل يوجد استبدالات انا ممكن اعملها عشان
اوصل للشكل اللي فوق؟ إذا كان مستحيل، معناه هو كاتب
غلط إيش بقصد لما بقول هل يوجد استبدالات؟ بمعنى آخر
هل بتطلع ل tree؟ هيك معناه استبدالات إيش قصة
استبدالات؟ ياله من أجي انا أقول ال statement
استبدلت في تضب ال y اللي فتحجزت أخر جزء إيش معناه
استبدلت يعني؟
فتحة قوس تسكيرة قوس تسكير القوس عارف لو كان هنا
مثلا في expression مثلا مثلا بدي يصيلها ال
expression هذه مالها برضه استبدالات فالسؤال بعد ما
بعمل استبدالاتي من هنا بتطلع هاي ولا بتطلعش إن هاي
بتطلع أنا هو كاتبصح إن ما طلعتش معناه وكنت بغلط
عشانك مش قادر أطلعها فانت دايما هكمتك اتفكري الآن
هل تستطيعي الحصول على هاي إذا بس قمت باستبدالات
طبعا انت مجبر بالاستبدالات مش ع كافك انت بتستبدل
زي ما بيقولك الخريطة زي ما بيقولك ال model أنا فقط
استبدل ال statement بهذه كلها كما هي أو بهذه كلها
كما هي أو بهذه كلها كما هي بس هي اللي عنديطب بدى
تكون هذه في يوم من الأيام صح لازم تكون خريطة فيها
زي هيك انه مسموح استفدال اسمه while مثلا if boss
goes الان طالما انا ضفت الخيار هذا هنا أصبح فيه
إمكانية أستبدل ال statement بحاجة تطلعلي هذه إذا
أصبحت هذه معلها مظبوطة وسليمة شفت كيف القصة
فالأساسبنحط هناك، طبعا هناك مانحطش على مزاجي أكيد،
بنحط على مزاج ال language كيف شكل ال F في ال
language؟ كيف شكل ال Y في ال language؟ كيف شكل مش
عارف مين في ال language؟ كيف شكل ال assimilation
في ال language؟ فبنحط بشكل كامل، و بعدين بنشوف
الراجل اللي كتب هذا و المبرمج اللي كتب هل بقدر
أطلعله Tree؟ يعني هل بقدر أعمل استبدالات تطلعل
كلامه اللي كاتبه؟ إذا لاجينا استبدالات تطلعل كلامه
اللي كاتبه، معناه هو كاتب صح أو بالمقلوب نفس
المعنى، أقول هل بقدر أطلعل Tree له؟لشغله بقدر
أعمله tree من اللي عندي إذا بقدر أعمله tree بقى
أنا كاتب صح شفت كيف؟ الآن هذه بقدر أطلعها tree
ليش؟ لأنك هتقوليلها عشان تطلعها هي خدي statement
واستبدليها بمين؟ بالاخيرة، صح؟ فبتكون طلعت لهذه ال
tree معناها مظبوطة لو شططتها أنا عاد من هنامش
هتقدر تطلعي لهذه tree مافيش tree او من هنا او من
هنا او من هنا او من هنا او من هنا او من هنا او من
هنا او من هنا او من هنا او من هنا او من هنا او
لأ لأ هو ايش بيسوي بالظبط مش انه بيعمل ال tree و
بيعمل mapping لأ هو الآن بيشوف حاله جادر يطلع ال
tree ولا لأ بيبدأ مع بعض بيشوف اول token مثلا اسمه
whileبتطلع على ال route اسمه statement هل في حاجة
ممكن نستبدلها من لسان نطلع ال while؟ أه لقينا
استبدال نطلع ال while خلاص مع السلامة أنت ناجحة و
أنت ناجحة يالا تكني للي وراه فممكن يكون علق في
خريطة دخل فيها في ال while فبصير يشايك في نفس
الخريطة طب هاد ال legend مطابقة ولا مش مطابقة؟
فطول ما هو بطابق أنت كأنك قاعد بتشكل tree بس هذا
بيكون بشكل implicit ضمنيلكن ماعملت فعليًا ..
ماعملت فعليًا أنا لـ Tree أنا قاعد ماشي هو كأني
بستبدل هذه و بستبدل هذه عشان أكون أسرح و هذا
هنشوفه بعدين نتكلم فيه لما ندخل من ناحية برمجية
لكن الآن انت فاهم الفكرة احنا ك human خينا نتكلم
ببساطة عشان نسهل على حالنا الموضوع القصة باختصار
الكلام المكتوب من المبرمج بطلعله Treeبناء على ال
grammar اللي موجود ولا لأ طلعتله tree يبقى أنت
كاتب بشكل سليم ماطلعتلهش tree ماانت كاتب بشكل غلط
طبعا انا اليوم و بداية المحاضرات هنتكلم ك human
نعمل ال tree لحالنا كبناء أدمين لكن لازم نوصل
لمرحلة بعدين لأ كحوسبة كيف بعرف كيف بيدور كيف بشكل
ال tree هذه خطوة لاحقة بس أنتي تفهم المبدأ الآن
إذا أنتي كإنسان عرفتي تعمل ال tree للمكتوبمن ال
grammar الموجود معناها هي سليمة ككمبيوتر كيف بيعمل
هنشوف الكلام ده بعدين تفاصيل ان شاء الله تمام لحد
هان؟ في اي سؤال في النقطة هاي؟ طيب خدوا break
دقيقة واحدة
العزيزي يعني كتب بتاع الشباب الإسرائيلي بصوت ورمحه
.. بصوت ورمحه .. بصوت ورمحه .. بصوت ورمحه .. بصوت
ورمحه .. بصوت ورمحه .. بصوت ورمحه ..ساعة و نحنا
بدينا نزل .. نزل ال driver اللي كان فيه .. نزل ال
driver اللي كان فيه .. نزل ال driver اللي كان فيه
.. نزل ال driver اللي كان فيه .. نزل ال driver
اللي كان فيه .. نزل ال driver اللي كان فيه .. نزل
ال driver اللي كان فيه .. نزل ال driver اللي كان
فيه .. نزل ال driver اللي كان فيه .. نزل ال driver
اللي كان فيه .. نزل ال driver اللي كان فيه .. نزل
فيه .. نزل ال driver اللي كان فيه .. نزل ال driver
اللي كان فيه .. نزل ال driver اللي كان فيه .. نزل
ال driver اللي كان فيه .. نزل ال driver اللي كان
فيه .. نزل ال driver اللي كان فيه .. نماعملش
graduate اه مابقى حاجة في قلبي تبقى عاطفة تفترحش
تفترحش تفترحش تفترحش تفترحش تفترحش تفترحش تفترحش
تفترحش تفترحش تفترحش تفترحش
بس الحقيقة تقضي مانعيش تروح تعالى و تقضي مانعيش
تروح تعالى اه عشان انا جاي كده اقعدت بس في
shooting انا كده اقعدت بس في shooting انا كده
اقعدت بس في shooting انا كده اقعدت بس في shooting
انا كده اقعدت بس في shooting انا كده اقعدت بس في
shooting انا كده اقعدت بس في shooting انا كده
اقعدت بس في shooting انا كده اقعدت بس فيكتير حد
عمال يقول من دبي و روح و يتعرف على سؤال يعنى مش
فاهم ان احنا نزل هذا البرنامج و نتعرف على سؤال
يعنى مش فاهم ان احنا نزل هذا البرنامج و نتعرف على
سؤال يعنى مش فاهم ان احنا نزل هذا البرنامج و نتعرف
على سؤال يعنى مش فاهم ان احنا نزل هذا البرنامج و
نتعرف على سؤال يعنى مش فاهم ان احنا نزل هذا
البرنامج و نتعرف على سؤال يعنى مش فاهم ان احنا نزل
هذا البرنامج و نتعرف على سؤال يعنى مش فاهم ان احنا
طيب خلّينا نرجع نكمل تمام الآن أنا بدي أسأل سؤال و
بدنا نشوف مين فيكم يحاوليجاوب عليه تمام او يطلع
يجاوب عليه طبعا بدنا مش ننسى زي ما قولنا ان في
اندي انا لل grammar اربعة components واتفاجنا ال
terminals ال non terminals ال production اللي هو
عبارة عن left side arrowright side طبعا ال left
side non terminal و ال right side هو mixing يا إما
بس terminal يا إما non terminal يا إما من هاي و من
هاي و ماننساش أنه في آخر component لازم يكون في
عندي ال start symbol تمام عشان نوصف زي ما قلنا قبل
شوية ال syntax على ال language الآن سؤالي كتالة
بدي أفترض language معينة بدي أشرحلك إياها و بدي
منك تطلع تكتبيلي ال grammar اللي بيوصفهاال
language بتقول ببساطة أنه أنا بسمح لي أكتب أرقام
من خانة واحدةو بينهم إشارة زائد يعني مثلا أكتب
خمسة زائد اتنين زائد تلاتة زائد واحد زي هيك أو
مسموح أكتب مثلا خمسة وأسكت لكن ممنوع أكتب خمسة
وزائد وأسكت خمسة زائد مين فعشان يكون ال syntax صح
لازم خمسة إذا كتبت الزائد أكتب معاها عايش الرقم
طبعا مسموح يكون الرقم عايش لحالهطب ومش مسموح اكتب
خمسة زائد زائد اتنين مش مسموح يعني فقط المسموح ان
الأرقام اللي عندي تكون من digit ويكون الفواصل بين
الرقم والرقم اشارة زائد فقط هاي ال language يعني
لو حتى كتبخمسة ناقص اتنين غلط مابتديش خلاص انا ال
language بس الموجودة عندى هي تاعت بس اه digit و
بينهم الزائد هى بس ال language اللى عندى طبعا ليش
انا بقول هذا الكلام لأنه لازم انت تحط ل grammar
بشكل سليم بحيث انه لو كتب حاجة من الغلط ال grammar
مايطلعلوش letter E عشان يعرف ان انا غلطوإنه إذا
كتب الصح ال grammar يطلعله ال tree عشان تكونها صح
فهذه الأمور ماتنسهاش إيش الفايد تروح تعملي grammar
بيسمحله بكتابة الصح ويروح يطلع ال tree ل 5 زائد
زائد 2طب صار كمان يطلع الغلط يطلعوا صح احنا لأ ال
grammar لا بيزيد في ال language ولا بنقص من ال
language خلاص انا بدي فقط الزائد هو المسموح والرقم
من خانة بديش ناقص بدي زائد زائد okay الآن ايش ال
grammar اللي ممكن يوصف هاي ال language مين يطلع
يكتب ال grammar اللي بيوصف هاي ال languageاطلعي
جربى، بدى تجربى عشان ايه؟ بدى أناقش الجواب اللى
بدك تطلعي فيه تكتبيه، بدنا نشوفه صح و لا غلط، بدنا
نعلمكم كيف تعرف انه صح و لا غلط، فبدى حد يجرب
طبعا، اللي بدك تطلعي معاه، بده يطلع و يطلع، انت
حرين، اللي عنده حال في بيه عالم، بده تطلع ..انا
عارف بحكيش ان اتفك عالم طبعا، بدك تجربى، بدك
تجربى؟ جربى نم زاد نم، ليش ماتجربى؟جاربي اللي ..
إيه؟ ليش خايف الجاربي؟ طيب وراها الجاربي إذا ..
طيب تمام
طبعا
ديروا بالكماللي بتجرب من كلية ال IT يعني المفروض
ان انتوا الهندسة تطلعوا تجربوا اكتر كمان مالكم؟
بغض النظر .. بغض النظر إجابتها سليمة او خطأ المهم
ان يكون فيه مقدرة ان تطلع تجربي عليها وما تخفيش
فماشاء الله عليكمشطرين طيب الآن استريح نناقش الحل
تبعك و نشوفه صح ولا غلط طيب الآن يا بنات عشان نعرف
الحل صح ولا غلط مطلوب من إيش أعمل؟ في الأول أخد
syntax أو خلّيني أخد string سليمة يعني أكتب واحدة
سليمة تمام و أشوف هل هذه بتطلع من ال grammar اللي
كتبته ولا لأ إذا و الله طلعت من ال grammar اللي
كتبته معناها إحنا ماشيين بالاتجاه السليم و ممكن
يكون الباقي صح و ممكن يكون غلط يعني هذا لسه مقياس
أوليبعدين حتى بدك تعرفي كمان إيش تكملي، يعني حتى
لو فرضنا أنه أنا أخدت خمس زائد ستة زائد سبعة
وظبطت، بدي أشوف الأغلاط، المفروض ولا واحدة من
الأغلاط إيش؟ تظبط، وحتى لو كمان واحدة من الأغلاط
تظبط، لسه برضه بده فحص ال grammar، وهذا هنشوفه
بالتدريج grammar عن grammar، بس خليني الآن أركز في
الحل تبعها، الآن أول حاجة أنا باخدها كمفال، أنا
بسكره أناخلّينا نقول خمسة زائد اتنين زائد تلاتة هل
هذه .. طبعا هي مكتوبة بشكل سليم هذه الخمسة زائد
اتنين زائد تلاتة أنا الأن بدي أعرف هل بقدر أطلع
لها شجرة من شغلها ولا لأ؟ مين ال start symbol
عندها؟ ال exception يعني أنا مش على كيفي بدأ أبدأ
ال road من exceptionالان ال expression هذه مالها
ستستبدل صح؟ و برضه مستبدلش على كيفي بستبدل بناء
على المكتوب و الموجود الان بدأ افكر ك human هل في
استبدالات لو انا استبدلتهم بتطلعلي هذه ولا لا دعنا
نفكر هتقوللي انت ال expression مالهاش الا استبدال
واحد غصب عني صح؟ يبقى انت مشبرة ان تعمليلي
statement ع كلامها و تعمليلي زائدع كلامها وتعمليني
statement، هذا إجباري، صح؟ طيب، الآن ال statement
الواحدة هي غصب عني بدا تستبدل بشو؟ ابنام زائد نام،
غصب عني، صح؟ وال statement التانية بدا تستبدل غصب
عني بإيش؟ ابنام زائد نام، والنام غصب عني بدا
تستبدل بأرقامالان هد هتستخدم برقم، هدي برقم، هدي
برقم، هدي برقم، هدي برقم، هدي برقم، هدي برقم، هدي
برقم، هدي
برقم، هدي برقم، هدي برقم، هدي برقم، هدي برقم، هدي
برقم، هدي برقم، هدي برقم،على برضه number زاد
number لأنه مافيش statement وستبدل غصب نعمل number
زاد number فواضح أن القصور الأول اللي موجودة في
الحل شوف أنه صرت أنا مجبر فقط أني أجمع بس أربع
أرقام يعني لو ال language تبعتي أجمع بس أربع أرقام
ويعطيلي العافية بس اللي بقول أه صح لكن المشكلة لأ
أنا ممكن أحط رقم لحاله ممكن أحط رقم زاد رقم ممكن
أحط رقم زاد رقم زاد رقم ممكن أحط ممكن أعمل ستين
رقم جانب بعضيبقى واضح إن الحل هذا ماله فيه مشكلة
إذا طالما أنا ماقدرتش أطلع ال string تبعتي من ال
grammar الموجود إيش معناته؟ معناته إنه هذه غلط لأن
أنا ماطلعش من ال grammar، مش هيك؟ طيب أنا قلت لازم
تكون هذه صح، أنا بطلب منك ال grammar يطلع هذه،
معناها grammarها ماله؟ بوصفش ال language صح، معناه
اللي grammar فيه غلط مش احنا متفقين إنه ده كتب صح
و ال grammar كان بوصف صح، لازم يطلع من الصح tree؟
احنا قبل شوية قولنا هذه ايش؟ هذه صح مش هيكفرطتنا
تقول بالعكس وطلبنا منها تكتب Grammar بس واضح ان ال
Grammar تبعها بيطلعش للصح لأن Grammarها ماله؟ في
مشكلة الان مين تطلع تعمل Grammar تاني صح فضل جربي
خد نفس القلم وجربيه فهمت الحل هذا ليش غلط؟ طيب انا
اخليك هنا عشان يتبين الأمور أكترلأن ده خربش أنا
هناك دايما إيش
بدك؟ محايا؟ تمام
هي بتجرب مش مشكلة هي بتجرب هي الفكرة اللي بتفكر
فيها انه بتحاول تعمل اتعداد تكملي ماتلاقيش كملي
يعني بتحاول انه ماتخليش اشي يوقف يعيد نفسه زي ال
recursionأه يعني مثلا ال X بتطلع X فكل X بتطلع X
فبتقدر تفرد جد مابدها وبتقدر تسكر جد مابدها عشان
تعمل زي مابدها فالتفكير كويس أن يكون ال non
terminal اللي جاب للسهم يبدأ بال non terminal بعد
السهم علشان إيش نقدر نعمل التكرارات اللي بنشوفها
الآن كذا تشتغل
طب مهم خلصنا تسعة خليني الآن نشوف يلّا .. خد طيب
.. بعرفش انت حللي و احنا الان بنناقش حالك احنا لسه
مش عارفين بدنا نناقش نشوف حالك صح ولا غلط طيب
خليني نشوف الان استريحي الان ممتاز .. استريحي طيب
الان نرجع لنفس الجملة مثلا واحد زائد اتنين زائد
تلاتة نشوف هبتطلع ولا مابتطلعشطبعاً هتبدأ هي
إجباري من الاستبدال الاستبدال الاستبدال الاستبدال
الاستبدال الاستبدال الاستبدال الاستبدال الاستبدال
الاستبدال الاستبدال الاستبدال الاستبدال
الاستبدال الاستبدال الاستبدال الاستبدال الاستبدال
الاستبدال الاستبدال الاستبدال الاستبدتال
الاستبدتال الاستبدتال الاستبدتال الاستبدتتستبدل
نفسها كمان مرة أيوة تصير تعمل إيش? expression لأن
هي كمان مرة تستبدل نفسها فبتصير إيش؟ زائد list ال
list اللي أنا طلعت مين؟ اتنين ال expression هذه
مالها الآن آه .. الآن في عندنا مشكلة مش هنخلص
هتصير لأبد expression زائد list مش هنخلص سهل و لا
.. طب إيش نعدل على حلها عشان نخلص؟أيوة انه كمال ال
expression ممكن تكون list هيك بنخلص ليش؟ لأنه
ساعدتها أنا .. و أنا شو بتسوي فيها ده؟ طيب شايفين
هيك كيف؟ اللي أنا مش خلصت تنتين ضالت واحدة ده يعني
بدي أنهي صح ولا لأ فإيش بقول ال expression هاي؟
list طبعا مش من جيبتي حطيتهامن المسموح الخيارات
المسموحة هانا مسموح أخد هاي ومسموح أخد هاي فانا
قاعد باخد على كيفي اللي تطلع لي letter E لهاي عشان
أتأكد أن أنا صح ولا غلط فالآن لو بدك تطلع لهذه
بتقولي أه بطلعها لو أخدت ال exception الأخيرة هذه
ل list و ال list هذه أخدتها واحد هتقولي لإن أنا
هايني طلعت شجرة لواحد زائد اتنين زائد تلاتة من ال
grammar المكتوبإذا واضح حتى الآن ال grammar تبعها
مافيش مشاكل لأنه طلعلي الصح طب السؤال لو بدك تكتب
واحد لحال و هذا مسموح هل بسمحلي هذا نكتبه لحال
expression تستبدل بال list تستبدل بواحد طب بدنا
نكتب هل هذا ال grammar بطلعلي واحد ناقص اتنين لأ
هل هذا ال grammar بطلعلي واحد زاد زاد اتنينلأ إذا
الواضح الآن أن ال grammar اللي موجود هذا grammar
ماله سليم و مافيش فيه مشاكل الان
أنا المكتوب واحد صح؟ هل إله شجرة من هدول؟ هل بقدر
أطلع في شجرة؟ هتقول إيه أه بقدر لو اخترت
expression اخترتها list مش هي و اخترت ال list واحد
تطلع إذا أصبحت هذه كانت موجودة في ال language طبعا
يا بنا تنتبهوا لقصة مهمةأنا لو بدى أمنع الحركة هذه
أن الرقم يبين لحاله لو قلت مش موجودة في ال
language هنضطر نعدل في ال grammar لو صارت مش
مسموحة الان أنا مسموحة مش قولنا مسموح يكتب الرقم
لحاله عشان هي بتطلع مافيش مشاكل لكن افترض يا جيد
قلتلك طب ممنوع تظهر معناه هبدأك تغير في ال grammar
لأن ال grammar بتطلعها صح وهي غلطفما تنسيش الفكرة
هذه، إذا الخلاصة الآن اللي بدنا نقولها أنه بالفعل
ال grammar الآن هذا grammar سليم مافيش فيه مشاكل
وصف بالتفصيل ال language اللي أنا طلبتها منك قبل
شويةطبعا انا هوقف هنا اليوم المرة الجاية ان شاء
الله بداية محاضرتنا كله زي هيك بدي اديكي وصف لل
language و نكتب ايش ال grammar وصف و ايش ال
grammar طبعا الأسئلة يا بنات بتيجي برضه بشكل عكسي
يعني في ناس ايش بيسووا بيعطيكي ال grammarو بقولك
شو ال language اللي بيوصفها يعني اعتبري انا ما
اتكلمتك و قولتك هذا ال grammar حطيتلك إياه، هيك و
قولتلك شو هو ال language اللي بيوصفها، هتقوللي اه
هذا بيوصف ال language اللي هي عبارة عن أرقام بينهم
زايد، هيك هتقوللي أو رقم لحاله، شوفتي؟ يعني طبيعة
الأسئلة نوعين، بجيبلكي grammarوشو بوصف أو بقولك طب
بدنا نوصف كذا وكذا وكذا في ال language شو ال
grammar فحنحاول ان شاء الله خلال الفترة الجاية
ناخد أسئلة كتير في هذا الإطار ان شاء الله ماشي
الحال في أسئلة شي تفضلي وينه؟
وين في أول سطر زائد؟ أه إيش صارت عندك؟ انتبهي انت
طالع يمشي بالدور صارت واحد زائد اتنينزائد تلاتة ما
هي ما اختارتش الأولى مش ال expression نفسها فيها
خيارين فاختارت الخيار التاني مسموح يا بنات نعمل لل
non-terminal أكتر من خيار مسموح القصة هذه حسب ما
يتناسب معك عشان تعمل ال grammar تمام هيك الأمور
موفقين ويعطيكم العافية