بسم الله الرحمن الرحيم اليوم إن شاء الله بدنا
نستكمل في chapter 5 يمكن إحنا ال section الأول
لجيناه معروف بالنسبة إلينا أخذناه زمان اللي هو كيف
نعمل translator تحديدا كيف نعمل syntax-directed
definition ويمكن توقفنا عند المثال هذا الموجود
بداية section 5 يا بنات كان في مثال اللي هو كيف
أحسب ال value بتاعة ال infix عند ال root مش هيك
ولا لأ؟ وكان بالنسبة لي أن هذا مثال أخذناه في أول
الفصل طب شو الرسم اللي على اللوحة دي؟ أو شو الجدول
اللي على اللوحة؟ أو شو ال syntax-directed ال
definition اللي على اللوحة ده؟ إيش قلنا شو هذا
تبعيش؟ هو نفسه ال infix اللي بحسب قيمته عند ال
root لكن شال ال left recursion مظبوط؟ قول الأشياء
الـ Left Recursion علشان يهيؤله الـ predictive
بارسة هاي بس هو نفسه يعني تغير شكلا ولم يتغير
مضمونا هذا بيوصف infix وبتحسب القيمة عند ال route
طبعا كيف جدريطلع ال semantic rules هاي حكينا فيه
قانون موجود في آخر ال chapter كيف لو أنا عندي
grammar مع ال rules وفي عندي left recursion كيف
بقدر أشيل ال left recursion وأعدل ال semantic
rules بحيث تكون أنها يعني متكافئة مع ال grammar
اللي موجود عندي بالكامل كيف أقدر أغيره وهذا القانون
في آخر الشبطر إن شاء الله موجود تمام؟ لكن الآن
هناخده إحنا كمسلم أن هذا خلاص ال syntax-direct
definition جديد شكله لكنه مضمونا معروف بحسب قيمة
ال infix عند ال root تمام؟ وبدنا نجرب ناخد مثال
الآن بدنا نقول مثلا تلاتة ضرب خمسة كيف بدنا نعمل
ال annotated parsing tree إيش هتقوليلي أنت؟ كيف
نعمل تلاتة ضارب خمسة يا بنات؟ هتقوليلي أول إشي ال
T عبارة عن إيش؟ F T bar مشيك؟ وال F هذا عبارة عن
إيش؟ عبارة عن digit وال digit عبارة عن تلاتة طيب
ال T bar عبارة عن إيش؟ ضارب F T bar وال F هذا
عبارة عن اللي هي خمسة وخلصناها طبعا عارفة لو في ضرب
ستة ضرب سبعة كنت هكمل ال T bar هاي ضرب F T bar ضرب
F T bar فكل مرة هذه بتضيف رقم جديد لكن أنا لأنه
المثال تبعي تلتة ضرب خمسة خلاص هقول ال T bar هذي
عبارة عن إيش؟ عبارة عن إمسنو الآن أنا هيك إيش سويت
عملت parsing tree عادية الآن عشان أعمل annotated
parsing tree لازم أعرف إيش ال attributes وكيف
بحلها طيب قبل ما نحل ال attributes الموجودة هنا من
نوع inherited ولا من نوع synthesized إيش رأيكم؟ في
الأول إيش ال synthesized attributes اللي هو ال
attribute اللي بيتمد على الأبناء مظبوط أو لا؟ طب
إيش ال inherited attribute اللي بعتمد على الأبناء
أو على الأخوة أو على ال parent؟ أو على نفسه واضحة؟
الآن كيف أعرف إن هادول ال attributes اللي هان
inherited ولا synthesized تعالى مسكيهم بالدور من
الأول الآن أول ما ببدأ هنابيقول لي ال T bar لها
value طبعا المسمى ماعندي فيه مشكلة يسميه inherited
يسميه value يسميه N1 يسميه X يسميه whatever ماعندي
مشكلة لكن أنا المعلومة اللي وصلتني أن هذه ال T bar
لها value لها قيمة وعشان أحسبها بتعتمد على مين؟
على الأخ يبقى واضح إن هذا ال attribute تعتبر من نوع
inherited عشان هيك هو فضل يسميه inه اختصار لكلمة
inherited لكن مش بالضرورة كان يسميه هيك بس هو حاب
يسميه inherited عشان تعرفي إن هذا مش synthesized
بتمشي على بناء فقط واضحة كيف عرفت؟ إنه لجيت هذا
الأخ أو هذا ال attribute بعتمد على الأخ اللي هو ال
F وبالتالي أصبح inherited طب كملي بنفس القانية
الآن بحكي T dot Val بحكي عن أي attribute؟ لمن؟ لل
T ولا لل F ولا .. لمن فيها دول؟ ال T dot Val بحكي
عن ال T يعني بحكي عن تحت ال up إيش تساوي كقيمة؟
بتساوي value معينة لل ابن لحظة هذه مختلفة عن هذه
وكأنه بيقولي إن الـ T bar لها اتنين attributes
واحد سماه N وواحد سماه Sin كمان مش بحنشوف إيش جسبت
يعني لكن أنا عرفت المعلومة من هنا إن الـ T bar لها
خمتين مختلفتين X1 X2 and 1 and 2 وإحنا ما عندنا
مشكلة يكون ال .. ال .. ال non terminal له أكتر من
ال attribute مش هي اللي قلناها قبل هيك؟ طيب نرجع
لموضوعنا الآن الـ T ضد ذال لمين بيحكي؟ عن الأبو،
صح؟ تساوي إيش؟ قيمة الإبن، إذا هذا النوع إيش؟
Synthesized لأن الـ up تتمد على الإبن، هاي ال up
تتمد على الإبن، فهذا من نوع Synthesized طيب،
كاملة، الآن في ال production اللي وراها بتكلم عن
مين الآن؟ طبعا الإبنات ال T one bar مش هذا non
-territorial هو نفسه ال T لكن بيميز ال up عن الإبن
زي ما قلنا زمان، فبحط الواحد أو الإتنين للتمييز
فالآن هو بتكلم عن ال attribute مين؟ تبع مين هنا؟
بتاع الإبن يعني بيقول ال value هذه بتاعة الإبن
تساوي مين؟ ال value بتاعة الأبو يعني واضح أنه
بيعتمد على الأبو وبيعتمد على الأخو يعني عشان أعرف
ال inherited هذه لازم أكون عارف هاي أخو ولازم
أكون عارف ال parent إذا هذا من نوع إيش بيكون
inherited كمان عشان هيك إيش سما inherited طيب، كم
ليه؟ الآن بيتكلم عن الـ T bar dot sin لمين ال T
bar dot sin؟ يعني مين؟ الابو، مش حاطط واحد هنا
عشان يقول الابن قيمة ال sin بتاعة الابو تساوي قيمة
ال sin تاعة الابن هذا inherited ولا synthesized؟
synthesized طيب، كم ليه؟ لما تي بار بيعطيني إبسلون
خلاص بيقول لي الـ T bar dot sin تساوي ال T bar dot
n بيتمد على نفسه يعني ما فيش مشاكل هذا synthesize
بيتمد على نفسه أو على الأبناء لما بيكون على الإخوة
أو ال parent بيصير Inherited أخر واحدة الـ F2D خلاص
الـ value بتاعت الأب بتساوي القيمة بتاعت الإبن إذا
واضح إن ال attributes الموجودين عندي هان منوعين في
منهم synthesized وفي منهم inherited تمام؟ الآن
تعالوا نبدأ نشتغل علشان أنا أحل ال attributes
تتوقعي لو عملت bottom-up traversal ولا عملت depth
traversal بظبط في هذا المثال اه ولا لأ؟ وليه؟ ليش
بظبطش؟ في inherited values صح ولا لأ؟ هم لو كانوا
كلهم من نوع synthesized زي زمان يعني بعتمدوا دائما
على الأبناء فخلاص ال bottom-up أنا بشوف الأبناء في
الأول يعني بتظبط ال bottom-up بتسير أو ال depth
traversal بشوف الأبناء في الأول برضه بتظبط لكن هنا
الوضع مختلف هنا بعضهم synthesized وبعضهم بعتمدش
على الأبناء بعضهم بعتمد لازم أزور الأخو لازم أزور
الأبو إذا بطلت ال bottom-up أو ال depth traversal
اتفيدني هنا شوفتي كيف؟ إذا ما بقدرش أمشي بنفس
الترتيب طب كيف بدي أحلها؟ الآن أنا بدي أحلها ك
human بعد شوية بنتكلم كيف ك systematic نشتغل طيب ك
human بدي أحاول أمسك ال attribute اللي بنحل اللي
بيتمد على الإبن عشان أخلص منه وبعدين أشوف الأخوة
والأمور هاي والأبو يعني مثلا لما ال F بيعطيني
digit إيش بيقول لي في الحالة هاي؟ بيقول لي في
attribute لل F اسمه VAL بدى يساوي قيمته شو؟ ال
digit يعني بالعربي بدي أقول هنا يا F dot VAL إيش
تساوي يا بنات؟ تلاتة فهذه الحلقة هذه من النوع ال
synthesizer السهل هذا اللي بتنبغي على الأبناء على
طول ممكن أنا أجي مباشرة ك human وأخلص من الحاجات
اللي زيها وأقول هنا يا F dot VAL dot VAL تساوي
خمسة خلص من الحاجات السهلة طيب واحدة بتفكر تيجي
هنا إنها بتفكر إن ال bottom-up يظبط فهنا نشوف إيش
هيصير لما ال T bar بتعطيني epsilon إيش بيقول
القوانين هنا تعالي تطلعي معايا بيقول لك ال sin تاعة
ال T bar بتساوي ال inherited تاعة ال T bar صح؟
يعني هنا فيه sin أنا لسه مش عارفة صح؟ وفي
inherited أنا برضه لسه إيش؟ مش عارفة، يبقى واضح إنه
ما بظبطش فيها ال bottom-up هذي، يبقى أكيد لازم أزور
ناس قبله عشان أعرف القيم هذه وأجيبها وبعدين
أكمل، صح ولا لأ؟ وهنا بتبين معاكي إنها مش
synthesized، يعني أنا مش هقدر أحلها، طب إيش بدي
أسوي في الحالة هذه؟ بدي trail and error، أقعد
أجرب، أقول طب جرب خد من هنا، جرب خد من هنا، عبال
ما أقدر أحلها كلها، شوفتي كيف؟ فالآن لقيت إنه أنا
ال T برا للإبس ومش قادر أحل واحدة هتقول طب خليني
أجرب لما ال T bar بتطلق ضرب F T إيش بيصير مثلا أنا
بجرب تجارب في الآخر هتشوف كيف الصح لأن لو أخدنا T
bar ضرب F T bar إيش بيقول لك هنا بيقول لك قيمة ال
inherited بتاعة الأبن مظبوط؟ يعني عن مين بتكلم في
الحالة هذه؟ على هذه اللي أنا بتحسبها إيش تساوي
inherited الأبو طب أنا مش عارف inherited الأبو لسه
شوفت كيف؟ يعني واضح أنه كمان مش هقدر أحسب هان قبل
ما أحسب هان، عشانك ممكن لحالي أتسلسل و أقول طب
خليني أجرب الـ production هاي، يعني أنت زي هيك شوي
شوي بتطلع معاكي في النهاية عارف لو كانت كلها
synthesized كان أنا تعبتش التعب هذا، كان أنا أقول
بوتم أب خلصنا، جبت تلافين سا خلصنا، لكن لأنه فيهم
inherited بصير لأ لازم ازور دايما الـ notes اللي
بتخليني احسن قيمة الـ inherited value في الأول اللي
هم غالبا بيكونوا اخوة أو بيرن طيب الآن أنا بس
واردكوا كـ exam اللي لو بدت من تحت بدت من هم الظبط
كتير تعالوا نجرب طب لو أخدنا T F T bar ايش بيصير
هاي تعالوا جربوا T F T bar ايش بيقول لي هنا
inherited meanالـ T bar يعني .. يعني انهرتت مين في
هدول؟ ها دي شيف؟ انهرتت الـ .. مش لما أقول T
بتعطينا F T bar ايش بيقول لي؟ انهرتت الـ T bar صح؟
مالها؟ بتساوي الـ value بتاعة الأخو اللي جنبي يعني
أيوة هذه هتصيري الآن ايش؟ تلاتة شوفتي كيف؟ طبعا هو
ليش بعمل هيك يا بنات الفكرة أنه أنا عشان هذه خمسة
مش النتيجة أن تكون تلاتة في خمسة خمسة عشر طب كيف
بده يعرف؟ لازم يجيبها من برة لأنه لما غيرت أنا الـ
algorithm لما غيرت الـ grammar اتغيرت الـ rules
فالتلاتة هذه برة منعزلة عشان ايه كانش بروح بسوي
برحلها لهان و بدخلها جوا عشان يضرب تلاتة في خمسة
فهذه كمان شوية هنشوفها لهم في الـ simulation خلينا
بس نكمل بنفس القلية أنه والله لما أنا عملت الـ T F
T bar جالي بشكل واضح وصريح الـ inherited بتاع هذا
الإبن يساوي الـ F dot value اللي هو الأخو، هذا، إذا
أنا عرفت هذا الآن كاملة في كمان قانون جنبها
semantic rule تاني ايش بيقول الـ T dot val عن مين
بيحكي؟ عن الـ up T dot val تساوي السن تاع مين؟ يعني
كأنه هذا له كمان سن أنا عايش؟ مش عارفه لكن واضح أن
أنا عرفته عرفتها صح؟ لأن هذا بتساوي هذا فلو قدرت
أعرف هذا بعرف وين بعرف هنا صح ولا لأ طيب الآن
تعالوا نرجع تاني أنا حسبت هذه وحسبت هذه وخلصت
وخلصت اللي فوق الآن مضطرة أرجع لهذه تاني أشوف
القصة كمان مرة تعالوا نرجعي تاني لما تي بار
بتعطيني ضرب أف تي بار ايش بيقول هذا بيقول
inherited القبلاللي هي مين؟ اللي هي هاي لأن أنا
ماكنتش أحسبها قبل شوية ايش هتساوي inherited الابن
هاي؟ بتساوي inherited الأبو المحسوبة اللي هيها،
تلاتة، مظبوط؟ ضرب الـ value بتاعة الـ F اللي جنبي
اللي هي خمسة فبصير تلاتة في خمسة، خمسة عشر إذا هاد
الآن خلاص مالها انحسبت الآن بتقدّمي معلومة مهمة
عارفة لو الـ T هي طلعت ضرب F تي الـ T اللي تحت ايش
هتصير مش فيه F جديدة بتتنضرب افترض أنك كنت عامل
تلاتة في خمسة في ستة الخمسة عشر هي اللي أنا حسبتها
هتنضرب في الستة فهيرحلها تحت يضربها في ستة و لو
عامل ضرب سبعة هيرحليه نتيجة كلية و يضرب في سبعة و
دال سؤال زي هيك ماشي لكن أنا السؤال قد خلص بس
تلاتة في خمسة طيب خلينا نكمل احنا على كل حوال
..الآن أنا حسبت هاي من هنا مظبوط؟ كم ليه؟ ايش
بيقول لي هنا؟ بيقول لي synthesized الأبو بيساوي
synthesized الأبن هذا يعني هتقولي لي هذا الـ
synthesized بيساوي هذا يعني لو عرفت أنا هاي بعرفها
لكن لسه أنا مش عرفت لكن أكيد لو عرفت هاي هتعرفي
هاي هتعرفي هاي صح؟ لأن هذا بيساوي هذا و طبعا بيقول لي
هذا بيساوي الـ synthesizer قبل لكن لسه أنا مش عارف
بدي أحاول أحلها طيب انقرش ضال علي production
ماخدتهاش الـ T إبسلون الـ T عطتني إبسلون لما الـ T
بتعطيني إبسلون ايش بيقول لي عاد بيقول الـ synthesizer
تبعتها بتساوي الـ inherited تبعتها يعني هتصير الـ
synthesizer 15
و هذه ايش هتساوي؟ خمسة عشر و هذه ايش هتساوي؟
خمسة عشر و خلصت .. الآن بس هنا في ملاحظة تبدأ
تنتبهي لها الملاحظة الأولى اللي أنا اتكلمت عنها
قبل شوية أنه كل ما أنا بزيد بتصير الأرقام اللي فوق
شمالها تنزل لتحت و تنضرب في الـ F تنزل لتحت و
تنضرب في الـ F و كأنه النتيجة النهائية وين بتتجمع؟
تحت هذه مرحلة مهمة لكن لأنني بديها عند الـ route
اضطريت أعمل variable تاني يطلعها لفوق فصرت أقول له
الأب يساوي قيمة الإبن الأب يساوي قيمة الإبن الأب
يساوي قيمة الإبن لغاية هذا يعني كمان مرة ليش أنا
للـ T bar استخدمت two variablesالـ variable الأول
استخدمته اللي هو الـ inherited عشان كل مرة يغذي
القيمة للي تحت عشان تنظر الفئاف و تنزلها و تنظر
الفئاف و تنزلها عارفين لو هو مش طالب النتيجة عند
الـ root كان بلزمنيش شيء خلاص بلاقي جواب النهائي
وين في الآخر تحت لكن لأن هو بده النتيجة عند الـ
root اضطريت أعمل كمان attribute عشان بعد ما يخلص
الحسبة أرجعه فوق، كيف أرجعه فوق؟ الأب يساوي الإبن،
الأب يساوي الإبن، الأب يساوي الإبن فبتطلع لحالها
لفوق، فعشان هي كانت سمينها synthesized بينما التاني
inherited يبقى هل أنا بحاجة للتنتين هذول الـ
inherited و الـ synthesized؟ الجواب على حسب السؤال
إذا السؤال مش طالب النتيجة عند الـ root خلاص و أين
ما تكون النتيجة في الشجرة بلزمنيش الـ synthesized
خلاص ما نحتاج نتيجتي في الآخر الـ inherited وين؟
تحت في الشجرة لكن إن كان السؤال زي ما بنأخذ لأ بدي
أشوف النتيجة فوق عند الـ root الآن أنا صرت ملزم أضيف
attribute تاني من نوع synthesize عشان أرحلها و
أرجع فيها لفوق وهي اللي صار زي ما أنت شايفها لما
قلنا تلاتة في خمسة أخذ التلاتة و ضربها في الخمسة
و جاب الناتج الآن افرض يضرب ستة في ستة و يحط النتج
تحت في سبعة هيضربها سوا و يحطها تحت خلصنا الآن طب
أنا بتطلعها فوق شايفة كيف رجعها فوق لما تصير
epsilon يعني خلاص خلصنا خلاص الـ synthesized يساوي
الـ inherited و الـ synthesized بيساوي الـ
synthesized و الـ synthesized بيساوي الـ synthesized
لما تطلع لحالة فوق شوفتي كيف طلعها فوق هذه من آخر
لما نخلص سواهم عشان يلقطها في الـ Synthesize
Attribute و يبدأ يشطلقها في الـ Variable التاني اللي
احنا سميناه Synthesize طبعا أنت مش بضرورة تسمي نفس
التسميات أنا قادر أسمي T.N1 اللي هي بتتنزل القيم
تحتو T dot N two اللي بتطلع القيام فوق بس هو أخذ
أسماء related أنه اللي على شكل inherited بيحب
يسميها اختصار N I N H اختصار الـ inherited و اللي
هي الـ synthesized بيحب يسميها ايش Sin عشان تتعلم
أن هاي synthesized و هاي inherited بس مش أكثر لكن
أنت حرة في التسمية واضحت هاي كيف اشتغلنا؟ طبعا يا
بناتي اللي اشتغلتها أنا هادي الـ Notated Parsing
Tree بس زمان كانت سهلة على السريع من تحت لفوق كنت
تحليها اليوم لأ بدك تتفكري مين .. كيف أحل .. ايش
الـ production اللي أخده في الأول فتشوفي قعدنا نجرب
أكثر من مرة جربنا هال بعدين قلنا طلعنا هال بعدين
رجعنا هال بعدين جينا هال صح ولا لأ فبدك تنتبهي
للقصة هاي طبعا كيف العملية الـ systematic بتتم كمان
شوية هنتكلم في الموضوع هذا لكن أنا الآن بهمني أن
تستوعب الصورة أنه لو بكون في inherited بيطل الـ
depth traversal بيطل الـ bottom-up يجيب معايا في
الأمثلة هذه لازم أزور بطريقة معينة اللي أقدر أحل
فيها الـ notes الآن أي سؤال في المكان هذا عشان هيك
الـ section الأول خلص نروح للـ section التاني اللي مش
فاهم أي شيء هنا يسألني إذا مش فاهم ليش الـ two
attributes يسألني إذا مش فاهم ايش يعني inherited
ايش يعني synthesized جاب للسؤال معلش عشان توضح أكثر
لو قلت ضرب ستة يا بنات، لو قلت ضرب ستة، ايش كان
حيصير؟ هاد الـ T كانت هتعمل ايش؟ T ضرب F T bar، الـ
F هاد ايش هتصير؟ ستة، أيوة، الآن الـ inherited هاي
تساوي الستة في الـ inherited اللي فوق صار 6×15 يعني
90، لأن هذه صارت إبسلون تنحط في الـ Synthesize و
سيكون الـ Synthesize هذا بيساوي الـ Synthesize
اللي تحت و Synthesize اللي تحت و تطلع التسائل اللي
فوق و كل ما بتزيدي تحت بيصير كل مرة يضرب، يضرب،
يضرب لكن آخر واحدة فقط اللي ما بتحط الـ Epsilon
يعني خلصنا الجواب جاهز الآن بننقله على Synthesize و
أنا ليش قلت بننقله؟ لأنه في السؤال طالبين نطلع
القيمة عند الـ Root عارف لو مش طالبين نطلع عند الـ
Root؟ هذا ما بلزمنيش خلاص هذا الـ Synthesize ما بلزمنيش
الـ synthesize خلاص بلاقي جوابي وين في الآخر؟ في ال
inherited بس هو لإنه بدويا عنده الـ root اضطرت
أنقله على الـ synthesize و أصير أطلعه بطريقة الـ اب
يارت الابن والاب يارت الابن أو يعتمد على الابن و
هكذا باختصار، اه سؤال خلاص، ما مضحك في أسئلة بنات
واضح السؤال، طيب الـ synthesize بعتمد بس على نفسه و
على الأبناء بس صحيح الـ inherited على الآباء و نفسه
الـ synthesizer كله .. اه يعني الـ synthesizer هو في
النهاية inherited لكن مش العكس يعني .. بس ثم خلاص
قاعدة المصطلحين مختلفين على أساس انه الـ inherited على
الأخوة أو على الأبناء أو على الـ parent فهمتي كيف؟
بينما الـ synthesizer فقط على الأبناء في
أسئلة؟ طيب الآن بدنا نستكمل الدرس، كيف نستكمل
الدرس؟ evaluation orders يعني بدي يعلميني كيف بشكل
systematic أعمل زيارات للـ Node و أحل الـ annotated
يعني ما بديش أقعد كل شوية أحذر، ابدأ من هنا طب ابدأ
من هنا طب ابدأ من هنا طب ابدأ من هنا طب ابدأ من
ابدأ من هنا طب ابدأ من هنا طب ابدأ من هنا طب ابدأ
من هنا طب ابدأ من هنا طب ابدأ من هنا طب ابدأ من
هنا طب ابدأ من هنا طب ابدأ من هنا طب ابدأ من هنا
طب ابدأ من هنا طب ابدأ من هنا طب ابدأ من هنا طب
ابدأ من هنا طب ابدأ من هنا طب ابدأ من هنا طب
dependency و الـ tree و قصص كتير أخدته و notes و مش
عارف إيش لكن على كل الأحوال على كل الأحوال ما
تقلقوش احنا هنشرح اللي بهمنا هنا الآن يا بنات لو
أنا عندي production زي هيك، عندي semantic زي هيك
كيف أعمل dependency graph لها دول عشان أعمل
dependency graph لازم تعمل في الأول الـ tree و
عليها تعمل الـ dependency زي قبل شوية كيف تشتغل الـ
annotated كنت ترسم بالأسود الـ tree و بعدين بالأحمر
تقول أيش اتحلي عليها وهي نفس الفكرة لما بتعمل
dependency graph تحط في الخلفية الـ tree و بعدين
عليها هنشتغل، هنعمل الـ dependency الآن افترضي انه بس
الـ grammar كله تبعنا جملة واحدة زي production
واحدة كيف نعمل الـ tree؟ هتقوليلي E عبارة عن إيش؟ E
زائد T مظبوط؟ أيوة الآن تعالى أفهمك إيش اللي هيصير
هذا الآن، كم attribute موجود عندها؟ هتقوليلي تلاتة
هتقوليلي الـ E هذه لها attribute صح؟ اسمه Val كيف
هتعبر عنه في الـ dependency؟ هتيجي تقولي الـ E هاي
اللي هي الـ parent و تعمل دويرة زي هيك واسمها إيش؟
Val هيك أنا حطيت الـ attribute الأول كـ node لأن كل
attribute يمثل node عندك، الآن في كمان attribute
لمن؟ للـ إي و لا للـ ابن يعني للـ إي هاي، وهذا كمان
إيش هتماليله؟ كمان note هيصيروا نتين، طب هل في
ضايق الـ attributes؟ أ، في الـ T الهفالعليها جهانة
إيش هسوي؟ note قال بعد ما بتحطي الـ note الآن بتحطي
الأسهم، مين باعتمد على مين؟ الآن الأبو باعتمد على
مين؟ على الـ E1 فبرسمها زي هيك يا بنات، شايفه السهم
اللي زي هيك؟ هذا إيش معناه السهم؟ إنه لازم أعرف
هاي حتى أقدر أعرف هاي، الـ deal يعني لازم أعرفه قبل
الرقص عشان أنا أعرف هاي عشان أعرف هاي، هل بس هيك؟
والله في إشي تاني برضه، الـ E بتعتمد على مين؟ اتدوا
دفع عشان هيك هي رسمتيش الرسم اللي بالأسود بنسميها
dependency graph إنه خلاص ورجتني مين بعتمد على مين
مين لازم أعرف قبل مين؟ خلصت القصة يعني لازم أحل هاي
و بعدين أحل هذا الـ attribute عشان أقدر أحل هذا الـ
attribute، شوفتي كيف مقطع الـ dependency سهل خلاص
attribute بعتمد على مين؟ حطيهم note الـ attributes و
منهم قسم، خلاص بيعرفني، طب هذا شو لزومه؟ هذا كمان
شوية هيساعدني مين أزور قبل مين عشان أحل الـ
attributes تبعتي، هناخد مثال كمان شوية واضحة كيف
بنرسم؟ ما تعكسيش، إيش معنى هاي؟ طبعا مش مهم الأماكن
الدوائر يا بنات، يعني لو بتاخد الدويرة هذا و تحطها
في الزاوية هناك مش مشكلة، المهم أنه لازم السهمين
يروحوا عليها، مش مشكلة، بس احنا بنفضل دايما نحطها
جنب الـ non-terminal تبعها عشان أكون عارف ما أخلطش
لكن أنا حاورّف إن هي الرسمة اللي بدور عليها اللي
بالأسود، اللي بالأحمر هذه بس مخطوطة كخلفية عشان
أقدر أحدد عليها الـ notes و مين بيتمّيد علي مين مش
أكتر زي هذا، أنا اللي بالأسود عشان أقدر أحدد مين
اللي بدي أحسبهم بالأحمر، الأحمر هو المطلوب في الـ
annotated تمام؟ طيب لو عندي هيك، وعندي هيك، وهادي X
و هادي Y و السهم هيك إيش هتفهميه؟ إنه لازم أحلّي الـ X
عشان أعرف الـ Y، عكست السهم لازم اعرف الـ Y عشان أحلّي
الـ X باختصار، طيب تعالوا الآن ناخد مثال، بدنا نعمل
الآن dependency graph للتلاتة ضرب خمسة، يعني على
نفس المثال اللي كنا نشتغل عليه، بدنا نعمل dependency
graph يعني الآن أنا مرشح السؤال يكون اعملي بارسينج
تري، مرشح السؤال يكون اعملي annotated parsing tree
اللي بالأحمر، مرشح السؤال يكون زي اللي هنتعلمه جديد
الآن، اعملي dependency graph، الحلو في الـ Dependency
Graph عشان تعمليها بدك تعمل نفس فكرة الـ annotated
ان الخلفية تكون parsing tree بعدين تشتغل عليها
Dependency، واضحيت؟ طيب الآن نجي على سؤالنا اعمل
Dependency ل 3 ضرب 5، طبعا 5 أهمي ليش؟ بالأحمر لأن
الأحمر هذا مش سؤالي، هذا اللي بالأحمر هذا الـ
annotated حلو
يعني خليني أنزل بس هذه كانت، أيوة إذا لما بقوللي
أعمل dependency graph ل 3 ضرب 5، الـ step الأولى
بدي أعمل الـ tree العادية في الأول، الـ tree العادية
الخلفية، الـ notated، الـ عفوًا الـ tree الـ parsing
التالتة درهين عملتها خلاص الآن تعالوا نشتغل للـ
notes كيف نشتغل؟ بدك تاخد في الترتيب production و
production مش شرط .. بشكل عشوائي بأي شكل بديكي
يعني على سبيل المثال لما القف بتعطيني digit أطلع
عليها إيش .. إيش .. إيش فيها notes و مين بعتمد على
مين؟ تعالي تطلعي
طبعا مش شرط تبدأ زيها مهانة، ابدأ من أين ما بديك بس
احنا دايما بنفضل، مرات بكون البداية من الأطراف من
الـ leaves مرات تكون أسهل، لجيتها مش ظابط بسيبها
برجعلها بعدين لإن ممكن تكون هي synthesize و أرتاح
و أخلص شوفتي كيف؟ لكن مش غلط يعني ابدأ من أين ما
بديك على كل حال يعني، طيب الآن أنا بترجع لمين
أنا؟ للـ grammar لازم بعد ما ترسم ترجع لمين؟ للـ
grammar عشان تقدر تحلي
هي الـ grammar أول
حاجة، أقول إنه تطلع على مين؟ لما الـ F بتطلعلي digit
إيش بيقول هنا السؤال؟ كم attribute عندي؟ اتنين
واحد للـ digit واحد للـ value تحت الـ F هايهم هذا
الأول يعني، و حط اسمها عندها عشان ما تلخبطيش لإن
الاسم كمان شوية تحتاجيه، تعرف أن أنت هي هاي، وعندك
نقطة لمين؟ للـ digit، و بعدين بتحط الاسهم إيش السهم؟
افلة digit هيك خلصت بتاعة الافلة digit، طالما في
زيها في الرسم خلصي منهم على طول إنك خلص عرفتيها
فأنا على طول باجي بقوله هنا اسمها Val وهذه digit
بنحلش قيم بناتها بنعمل dependency graph، بحلش بقولش
خمسة، بقولش تلاتة، ما لي دعوة أنا برسم notes و أسهم
فقط هي الـ dependency graph، بحلش، وهنا إيش؟ لسه هام
خلاص، ولو كل الدائرة روحتلها F digit خلصتهم، بخلصهم
لأنه خلاص شفت هذه الحالة كيف، الآن تعالوا نفكر لما
قال الـ T F T bar إيش بديه يسوي؟ قال لي الـ T bar هاي
اللي هي الابن هذا له value اسمها inherited صح؟
حطيها وين هذا؟ اللي هي هالي صح؟ هيها بالأحمر إيش
اسمها؟ inherited، وإيش كمان؟ و الـ F دي إلها value،
مظبوط؟ بدي أحطلها دويرة، وينها؟ هاي، محتوطة،
مظبوطة أو لا؟ و بعدين إيش هعمل عشان أخلص اللي فوق
مرة واحدة؟ السهم، يعني في ناس بحبوا يحطوا الـ notes
في الأول كلهم، و بعدين يحطوا القسم، أنا بحب على
السريع، إذا بيّن الندين و السهم بخلص على السريع،
الآن ما خلصناش من الـ rules بتاعة هاي كاملة، إيش
بقولك كمان؟ بقولك الأبو إله قيمة اسمها Val بدي
أعبر عنها بدورة و أسميها Val، و بقولك كمان الابن
إله قيمة اسمها sin، يعني بدي أعبر عنها بدورة و اسمها
الـ sin، و أش أعمل؟ أسهم هيك، ليش أسهم هيك؟ لأنه عشان
أعرف الـ Val لازم أعرف قبلها الـ sin، فهذه بتعبر عنها
بهذا السهم، أنا يقعد بشكل في الـ dependency، طيب الآن
هنفس لمين؟ لما الـ T بتعطيني ضرب F T bar إيش بيصير؟
تعالوا نشوف الـ T عططني ضرب اف تي بار، اول اشي
بيقول لي الابن هذا في انه inherited يبقى على طول
بدأ اروح على الابن هذا اعمله إيش note و اسميها
inherited بعدين كملي، و بيقولك كمان في الابو انه
note اسمه inherited الأبو هي هي شايفة الأبو هي
أطلع على الأبو محتوطة هي مش هحطها محتوطة وبعدين
عندك إيش الـ F اللي هي الأخو فيه له node اسمها Val
اللي جنبيها الآن تعالي نحط الأسهم عشان أعرف قيمته
الـ inherited بتاعة الابن لازم أعرف الـ inherited
بتاع الأبو والـ Val بتاع الأخو يعني كيف هتمثلها؟
هيك وهيك صح ولا لأ؟ عشان أعرف الـ inherited بتاع
الابن لازم أعرف inherited الأبو لازم أعرف Val
الأخو شوفتي كيف؟ هيبقى إيش؟ زي هيك شوفتي؟ طبعًا في
ناس على طول كانوا من أول ما حطوا الـ node والـ node
نزلوا الخط في ناس بيشتغلوا زي هيك وفي ناس بيحطوا
الـ nodes وبعدين بيوصلوا طيب، الآن ما خلصناش،
أنا خلصنا مين؟ هي، لكن كم ليه؟ إيش كم ليه؟ بقول لك
T bar يعني لمين السن هي؟ للأب، يعني حاجة للأب هذا
وينه؟ اللي هو هي، همحتوطة مظبوط؟ إيش تساوي سن
الابن؟ يعني الابن كمان إيه إيش؟ سن وبعدين أنا
عايز أعمل.. شوفتي كيف؟ خلاص.. هي.. هي.. هي سن
وهي سن محتوطة وهي تبدأ عليها هذي لأن هي اللي
لازم أعرفها عشان أعرفها هذي.. كيف؟ عشان أعرف قيمة
الأب لازم أعرف قيمة الابن طيب، الآن مين ضال علينا
عشان نخلص رسمتنا؟ اللي هو الـT bar بتعطي إبسلون مش
هي أخر production استخدمته؟ وين الـT bar بتعطي
الإبسلون؟ الـT bar.. أه.. وين؟ أه هيها إيش
بيقول لي؟ بيقول لي هذه الـT bar إلها سن وإلها
inherited بدك تحط الـ node-ين إلها هذه الـT bar إلها
سن وإلها inherited محتوطين ومين بيعتمد عليها؟ السن
لازم يعرف الـ inherited قبله عشان كيف أمثل؟ خلاص
الرسم هي كجهاز الرسم الآن خلصت اللي مرسومة بالأحمر
اسمها dependency graph إيش بتسوي الـ dependency هذه
باختصار؟ بتقول لي مين لازم أحسب قبل مين عشان أقدر
أحسب حساباتي يعني الواضح أني لازم أحسب هذه بعدين
هذه عشان أقدر أحسب هذه وبعدين لازم أحسب هذه قبل أن
أذهب لهذه وبعدين لازم أحسب هذه وهذه قبل أن أذهب
لهذه وبعدين لهذه وبعدين.. يعني واضح مين لازم
أحسب مين لازم أحل عشان أخلص الـ annotated لو بدي
أعمل annotated طيب الآن السؤال يا بنات ركزي شوية
السؤال كيف بدي أزور الـ nodes عشان أقدر أحل بدون
مشاكل قال لي الآن بعد ما أنت عملت الـ dependency
بده تعمل حاجة اسمها ordering إيش يعني ordering؟
يعني مين أول node بدك تشوفيها؟ مين ثاني node بدك
تشوفيها؟ مش أنا عندي يمكن عشر أو أحد عشر node هنا،
رتبيهم مين أول؟ مين ثاني؟ مين ثالث؟ مين الرابع؟
افرضي جاءت فلانة قالت أنا بدي أزور هذه في الأول
وبعدين بدي أزور هذه في الثاني بدي أشوف شغلها صح
ولا غلط وبعدين بدي أزور هذه في الثالث وبعدين بدي
أزور هذه في الرابع وبعدين بدي أزور هذه في الخامس
اعتبري ما في شيء باقي طبعًا شغلها هذه صح ولا غلط؟ صح
ليش صح؟ لأن أنت هتوصل لخمسة هتكون ثلاثة مريت عليها
وبالثلاثة عشان أحسن قيمة هذه بتكون شوفتي هذه الآن
إذا أنت صرت في ثلاثة هذي بتعتمد على هذي بتكون مريت
على هذي زمان طيب شفتِ أنتِ كيف؟ فإيش بيقول لي؟ بيقول لي
الشرط اللي لازم أنتِ تلتزمي فيه لازم رأس السهم يكون
الرقم اللي عليه أكبر من الرقم اللي عند ذيل السهم إيش
معناه أنه لازم أكون شوفت الـ deal تبعه فيه الأول
قبل ما أوصل عشان أنا أقدر أحله يعني المقصد اللي
هنقوله أنت ما تفكري أنه في order واحد للحل هي اختارت
هذا الـ order واحد اثنين ثلاثة أربعة خمسة ممكن تيجي
فلانة تقول أنا بدي أزور هيك تقول لها إيش بدك تقول
مثلًا أنا ما بديش أعمل زي ما هي عملت هنقول لها إيش بدك
تقول أنا بدي هيك بدي واحد بدي اثنين بدي ثلاثة بدي
أربعة بدي خمسة.. بدي ستة.. برضه هذه صح لأن أنت مش
هتوصل لستة إلا تكوني شوفتي خمسة وشوفتي ثلاثة يعني
بيكونوا خلصوا هدول حسب القيمة إذا كل هذا صح أي
order بيحافظ على الشرط إن رأس السهم الرقمي اللي
عليه يكون أكبر من الـ delta السهم إذا ما فيش أي
مشاكل طب إيش رأيك في هذا الـ order؟ لو عامل أنا
التسعة هنا وعشرة هنا ما ينفعش لأنه لما أزور تسعة طب هذا
لسه ما زورتش طب هذا مستحيل أعلى كله بهذا صح ولا لأ؟
ما تنفعش لكن هذا تسعة وهذا عشرة إيش بيصير؟ بتظبط فأي
order بدك إياه بتقدر على طول تعمليه بدون مشاكل
طيب وضحت الآن يا بنات ليش إحنا تعرّفنا على الـ
order علشان أعرف الـ nodes كيف أزورهم عشان أحل؟ طب
زمان ليش ما تعرفت على الـ order؟ يعني زمان لما
أخذت في الشبات اللي الأولى لأن كنت أنا ملبوط مقطع
صح؟ فكنت أشوف دائمًا الـ leaves كنت أشوف دائمًا
الأبناء قبل الأب فكانت تتعلم اليوم الوضع اختلف صار
هذي بتعتمد على هذي هذي بتعتمد على هذي هذي بتعتمد
على اللي تحت هنا صار لازم أنا أعمل dependency
بعدين ordering بعدين تنفيذ خلاص أي order بتحطيه
سليم بتشتغلي عليه إيه كنت بتتراحى؟ يعني أنا لو
بدي أرجع أحل الـ annotated اللي قبل شوية مش هتعب
ليش؟ لأنه قاعد يغششني مين شوف أول ومين شوف ثالث
ومين شوف ثالث يعني بيقول لي خلص هذه وبعدين خلص هذه و
بعدين خلص هذه وبعدين خلص هذه فبصير بمشي كل شيء
بلاقي جاهز قدامي لما خلص كل الـ annotated بدل قاعد
تجرب قبل شوية كتير واضحة؟ في أي سؤال؟ طيب شطورين
ممتازين bravo امتحانكم على الثمانية إن شاء الله
ثمانية وده.. خليه سبعة ونص صحين دي رجلكم
سبعة ونص صحين بيخليني خليه
سبعة ونص خليه ستة وش وش.. بخليه ستة ديلي بالكم
صدقين بخليه خمسة كمان خليهم.. ديلي بالكم.. خليهم
.. ديلي بالكم باجي لحالي وبسفرك وبروح على طول
طيب.. طيب.. طيب.. البلجين مش مشكلة وراهم جاهزين
طيب الرسمة بتاعة الكتاب هي نفسها اللي رسمناها قبل
شوية هيها
طبعًا هي الـ dependency graph شرحه وبعدين هي الـ
dependency graph هي نفسها الرسمة اللي رسمناها قبل
شوية هي نفسها الـ dependency اللي رسمناها بس أنا عامل
order معين هو عامل order معين شايفينه؟ تمام هالـ
order وفيه مشاكل؟ أنا كيف أقرر؟ دائمًا أشوف كل
الأسهم طول ما في رقم على رأس أكبر من رقمنا على
الذيل ما في مشاكل لاجيت الـ.. لأ، على طول في مشكلة
تمام طبعًا هو عمل أكثر من order في مثال الكتاب قال
بظبط كذا وبظبط كذا وبظبط كذا وبعدها حكى الـ
conclusion اللي أنا قلته طيب، قال يا بنات في
حاجة اسمها as-attributed وفي حاجة اسمها الـ
attributed إيش بقصد في الـ as-attributed؟ قال لك إذا
كل الـ attributes من نوع synthesized هذا بنسميه..
الـ grammar هذا.. الـ definition هذا بنسميه as
-attributed باختصار يعني أنا المطلوب مني عشان أحدد
S ولا مش S أطلع لك كل الـ attributes الـ semantic
rules اللي في الـ grammar إذا كلهم بيعتمدوا على
أبناء كلهم بيعتمدوا على أبناء زي زمان S-attributed
والـ S-attributed على طول بتتحل بالـ depth
traversal وبتتحل بالـ bottom up خلصنا إن لاجيت بعض
الـ attributes إيش inherited وإيش مش inherited الـ
synthesizer بتبطل.. لسه ما قلتش الـ بتبطل it's
attributed لكن ممكن تكون الـ أو ممكن ما تكونش الـ
إيش شرط إنها تكون الـ attributed؟ انتبهي بقول لك إذا
كان في inherited لازم يكون يعتمد على الإخوة اللي
على شماله أو الـ parent إذا اعتمد على الأخ اللي على
اليمين هذا مش الـ attributed طبعًا إيش بقصد ب الـ
attributed يا بنات؟ يعني إنه من اليمين للشمال
بتظبط معاه إحنا مش عملية الـ parsing لما كنا نعملها
مش بنمشي من اليمين للشمال فأنت تخيلي إن أنا عندي
ABC خلاص؟ أنتِ هتشوفي الـ B قبل الـ C صح؟ فجالك لو الـ C
بتعتمد على الـ B فما فيش مشاكل ليش؟ لأنه أنا هشوف الـ B
على كل حوالي وبعدين هروح للـ C فلما الـ C بتعتمد
على أخوها اللي على شماله فهذي بنسميها الـ attributed
يعني من شمال ليمين بتخلص لكن لو كان العكس بتكونش
الـ attributed كيف العكس؟ يعني افترض الـ B بتعتمد
على الـ C طب أنا هوصل الـ B في الـ.. في الـ.. في الـ
parsing ولسه ما شوفتش الـ C إذا هذه مش LLL
attributed هذه بدها نظام ثاني خاص في التعامل معاها
شوفتي كيف؟ أما الـ top down والـ left to right بتظبط
مع الـ LLL attributed طب الخلاصة أنا كيف أحكم إن
هذا LLL attributed ولا مش LLL attributed بشوف كل
الـ attributes إذا كلهم synthesized خلصنا as
attributed طب بعضهم inherited بشوفوا بيعتمد على مين
طيب على أبوه ما فيش مشاكل طب على أخو مين؟ يا أخو فيهم
أه بعتمد على أخو اللي عشماله فيش مشاكل
attributed طب أخو اللي على يمينه بطلت ال
attributed وصارت حاجة تانية class تانية إن شاء
الله وإن شاء الله كلهم بعتمدوا على الأخ و العشمال
إلا واحد قال يمين بطل كل ال syntax هذا بطل كله ال
attributed بكون الـ Attributed إذا كلهم انطبق عليهم
القرار طيب تعالوا نشوف هل هذا المثال S Attributed
ولا L Attributed ولا لا L ولا S فاكرولي فيها
الـ attributed طب تعالى نشوف الآن هنا الإبن بعتمد
على أخه اللي وين؟ على شماله، إذا بطلت S بطلت S،
ممكن تبقى L وممكن لأ، هي الآن مشروع L طب شوف اللي
تحتها، الإبن اعتمد على أخه وعلى أبوه أخوه اللي على
الشمال، إذا هذه ال attributed ما خالفش الشروط،
اعتمد على الأب أو الأخوة اللي على الشمال، إذا ال
attributed طب تعالوا نشوف المثال اللي وراها
إيش رأيكوا فيها هذه ال ولا أس ولا لا ال ولا أس؟
تعالوا نشوف الأبو باعتمد على الأبناء يعني لحد
اللحظة مشروع أس ومشروع ال لأنه الأب باعتمد على
الأبناء، بدا يكمل الأخو الآن function بدلالة يعني
بعتمد على مين باعتمد على الأبو و باعتمد على ال c
اللي عيمينه إذا مش ال عارفة لو هذه مش موجودة يعني
بس باعتمد على الأبو خلاص بتصير ال attribute ال
لأنه باعتمد على الأبو طالما الأبو أو الأخو بيصير
الـ I inherited إلا إذا اعتمد على الأبو الابن بيتم
دعو الأب وهذا inherited الأب بيتم دعو الأب
synthesized خلاص
خدوا break خلونا الآن نخلص ال break خلونا في ربع
ساعة نخلص برضه المحاضرة إن شاء الله طيب الآن بدنا
ناخد مجرد سؤال ممكن تتبري exercise يعني ما فيش في
إيش إيانية جديدة مجرد مثال جديد طيب إيش بيقول
السؤال؟ بدنا نعمل syntax directed definition لل
declaration إيش بتنقصد بال declaration يا بنات؟
يعني لما بتعرفي أنتِ في language مش بتكتبي int x أو
ممكن تكتبي int x y z.y.z صح ولا لأ؟ إيش يعني لما
تعملِ float x.y.z يعني ال x و ال y و ال z ما لهم
صاروا من نوع float طيب السؤال طب إيش دخل ال
translation؟ إيش دخل ال definition؟ ما أنتِ خلاص ما
أنا بقدر أعمل grammar لل syntax هذا طالما أنا بقول
definition إيش تتوقعي ال action اللي لازم نعمله؟
انسِ لي هذا انسيلي هذا أنتِ لما واحد يقولك int x
خلاص هو ك syntax مظبوط إيش بتتوقعي فيه action بدي
أسويه؟ بدي آخذ إن نوع ال x انتجر، بس float Y بدي
أخزن إنه نوع Y فلوت بس مش أكثر طب كيف بدي أخزن؟
أنا ما بدي أخاف من أسئلة زي هذه يعني بمعنى خلاص
مديش أعمل والله code و أعمل hash table و bot خلاص
بقدر أقول function اسمها add و أكتب تعريف ال
function و هذا ال function عبارة عن تخزين لقيمة ال
type جوا كده و خلاصنا يعني سهل الأمور بتكون سهلة
جدا ما تتعجدي في الأمور لما بتحسي بدك تعملي action
في السؤال بدّه استبزه خطوات عبري عنها ب function
صغيرة وعلى الهامش على جانب أوصي في ال function
قولي ال function هذه بتكون بواحد اثنين ثلاثة بعد
إن قدرتِ تعمليها ب C و الله بتجيبيها that's fine
it's okay فأنتِ ما تخافي من صيغة سؤال و الله كيه
بدّه أروح أخزن ال type خلاص بعمل function اسمها
أخزن type شوفتي كيف؟ فالأمور سهلة خالص ما تجليجي من
الموضوع هذا بتاع ال actions طيب، الآن نرجع لسؤالنا
أول شيء أنا بدي أعرف ال declaration ال declaration
عبارة عن شو؟ type و list check مش قابلة قلت int
list float list check يعني ال declaration ببساطة
هي عبارة عن type ثم list طيب ال type هذه ال T شو
هي؟ float double إنتجار whatever طب ال list أخذناها
زمان مش أخذنا exercise كيف تعمل list of
identifiers ال list عبارة عن list فاصلة ID أو ID
خلصنا هيك .. هيك خلص منين؟ ال syntax، ال grammar
الآن بتسينا نفكر بعد كده، عند كل production إيش
بدي أعمل؟ اللي هو ال rules تبعته أول شيء راكزيليها،
شايفة؟ هاي ك grammar مش في مشاكل الـ declaration هو
بدي أجي type ثم list ال type هو integer أو float أو
double أو whatever ال list هي list فاصلة ID أو ID
خلصت هيك ال grammar خلصت الآن تعالى نفكر في ال
rules شوية عشان نفكر في ال rules شوية أنا بس بدي
أسألك على شغلة هنا لما احنا بنقول ال list بتعطيني
list فاصلة ID و ال D بتعطيني TL سؤال شو نوع ال ID
بدّه يكون؟ مش بدّه يكون ال type يعني واضح أن ال type
بدّه يورث قيمته لل L و ال L بدّه يعطيها لل ID و
يعطيها لإبنه ليش لإبنه؟ لأن ابنه ممكن يشي يعمل
ID ثاني فواضح أنه أنا بلزمني attribute لل L ياخد
قيمة ال attribute تاعت ال T وكل مرة يعطيها لل ID
ويعطيها لإبن ال L ويبقى العملية مستمرة صح أو لا؟
فهذا من نوع إيش بنسميه inherited إذا واضح أن ال L
هذه لازم يكون فيها inherited attribute عشان ياخد
القيمة من برة ويورثها للأبناء طب السؤال هل هذه ال
L بلزمها كمان synthesize attribute؟ احنا الآن مش
مطلوب نعمل نتيجة عند ال root صح؟ أنا بس مطلوب إنه
لما بيجي ال ID يحط في ال إيش؟ في الجدول لما بيجي
ال ID يحط في الجدول إذا أنا ما بلزمني attribute
يطلع النتيجة عند ال root عارفة لو هو طالب مني حاجة
تروح عند ال root بعمل كمان لل ال زي ما عملنا قبل
شوية Synthesize وبيصير في الآخر آخذ قيمة ال
inherited وأرجعها لكن هنا ليش ما عملش inherited و
synthesize زي أول اكتفى بال inherited لأنه هنا مش
ملزم يرجعش لل root هنا بس على مطرح يدّي حط
قيمته يدّي حط قيمته خلاص خلاص شوفتي ليش هنا
مضافش synthesize وقبل شوية في ال infix هناك أضاف
لأنه هناك كان السؤال طالع ال root النتيجة فإضطر يضيف
شيء زيادة مضحكت؟ طيب تعالوا نشوف الآن بشكل واضح
تعالوا نشوف لما
ال T بيعطي Int إيش هتعمل رولك بالها هتقول ال T dot
I تساوي Integer صح هاي لما ال D بتعطي T مش هيك ها
IntX Y Z مش هذا ال T مش هذا ال list مش قيمة ال T
بتروح لل list صح ولا لأ عشانك أنا في الأول لازم
أعرف قيمة ال T أساسا شو هي ال T ما هي قيمة الـ T
التي أريد أن أدعيها للـ List للباقي؟ لذلك عندما
نقول هنا T يعطيني Int لازم الـ T هذه يكون لـ Value
اللي هي قيمة الـ Type فما هي الـ Type هنا؟ Integer
طب وعندما تكون float ما هي؟ float إذا الـ T هذه
انعرفت ما هي قيمتها؟ لذلك عندما D تعطيني TL ما
تتوقع أن نفعل؟ أكيد أقول ال type هذه تاعت ال T
راحلها للأقل خلاص وما تعملش أكثر من هيك عشانك لاحظ
إيش سوى قال ال L هذه في لها value تأخذ قيمة ال
value تاعت تاعت تاعت تاعت تاعت تاعت تاعت تاعت تاعت
تاعت تاعت تاعت تاعت تاعت تاعت تاعت تاعت تاعت تاعت
تاعت تاعت
تاعت طيب ممتاز تعالوا الآن لما ال L بتعطينا ال
فاصلة اي دي إيش حضرتك بدك تسوي أكيد تسوي حاجتين
تقولي ال type بتاع ال L هذا يساوي ال type بتاع
الأبو صح؟ هذه أول حاجة عشان لو بدّه يكمل إيش الحاجة
الثانية ال ID اللي طلع بدك تحطي نوعه الأبو ال type
بتاع الأبو إيش ال type بتاع ال ID بتاعه مش ال L
inherited عشانك إيش بيسوي بيقولك لما ال L بتعطيني
ال ID ركزي في الأول عليه هذه نسيلي هذه شوية أول
حاجة ال ID هذه وضحت إن هذه ال ID قيمتها ال
inherited بتاعة النوع طب إيش ال action بتاعنا نسوي
إنّه الابن هذا بدي آخذ مين ال type بتاع الأبو قالك
الابن ال inherited بتاعه بتساوي ال inherited الأبو
وهضلها طب لما ال L تعطينا ال ID يعني آخر واحدة
ال L بتعطينا ال ID و خلاص ما ضلّش ال تورث خلاص
هيقول ال ID هذه ال type ال ID ال L أبو هذه ال
type ال ID ال .L شوفتِ كده يعني سهل إن أنتِ تحطي
الخطوات الاصطناعية الاصطناعية
الاصطناعية الاصطناعية الاصطناعية الاصطناعية
الاصطناعية
الاصطناعية الاصطناعية الاصطناعية الاصطناعية
الاصطناعية الاصطناعية الاصطناعية
الاصطناعية الاصطناعية الاصطناعية الاصطناعية
الاصطناعية الاصطناعية الاصطجابنا وراها dependency،
في أي سؤال هنا؟ في حد مش فاهم إيش هنا؟ حد مش فاهم
حاجة هنا، جابنا وراها dependency؟ هاي اللي قولنا
عنها، دي مجرد function إنها خلاص بتاخد ال ID و
بتاخد ال node و بتحطهم في الجدول، خلاصنا ماليش
دعوة، مضحك؟ طيب تعالوا نشتغل dependency، نرسم
الخلفية بالأحمر و بعدين بالأسود نعمل ال nodes
هتقوليلي ال D عبارة عن إيش؟ T و List و ال type
عبارة عن إيش في ال note و ال L L فاصلة ID L فاصلة
IDالـ ID الان الرسمة جهزة الان بقى إيش نعمل نمسك
كل production نشوف مين هم ال attributes نحط عليهم
دوائر و نحط الأسهم تعالى نبدأ مثلا من الـ T أعطت
float إيش بقول الـ T أعطت float في عند اتنين
attributes ال float نفسه و ال type تاع ال T و
السهم يعني هتيجي تقوليلي هنا هنا في دويرة اسمها
type بظبطو هنا في دورة تمثل الـ float النوع و هنا
في إيش سهل طيب تعالوا نكمل لما ال D بتعطيني ال T
لجان
ال L هذه لها attribute اسمه inherited هذه بدي أحطه
اسمه inherited و ال T هذه لها attribute اسمه type
هي محطوط و هيصير عندي إيشسهم هيك الآن لما ال ال
بيطيني ال فاصلة ID اول اشي ال ال ابن هذا اله
inherited و ال ابه اله inherited تعالى نتطلع ال اب
موجود وهي inherited من؟ ال ابن و هيك السهم انه
لازم هذا يدي قيمة هذا و في كملة و في كمانAt time
هذه الـ function يا بنات بتمثلها زي هيك دويرة تمثل
الـ function نظبط هذه الـ function بتعتمد على مين؟
هذه الـ function بتعتمد على مين؟ هي على ال ID وعلى
مين ال L؟ وعلى الأبو عشان هيك هذه ال ID وهذه الأبو
هتعمل هيكو تعمل هيك هذه ال function عشان أقدر
أنفذها لازم أكون أعرف ال ID اللي بده أحطله ال
value تحت ال type و لازم أكون أعرف ال type شوفتي
كيف خلصت من مين من ال .ID الآن هنعيد ال ال .ID نفس
الفكرة عيدي في inherited للأبن اللي هو هذا و في
inherited للأبو هي موجودو بعدين بدنا نعمل ال
function ال function هاي دوارة ال function طبعا
بنات انا ممكن احط دوارة في اخر الدنيا ماليش داعي و
اين مابديك حطيها حطيها المهم ان في دوارة تمثل ال
function و هاد عشان تنعمل بدها تكون عارفة ال ID
اللي بدك تجيها و تكون عارفة ال inherited اللي
كتبناها مش ال inherited هاي
الان اشضر علي اخر اشي الال بيعطيني ID مافيش شي غير
ايش فانكشن هي ها هتاخد من اين؟ من ال ID و ال
inherited اللي انا حسبته هذه الرسم اللي بالاسود هي
ال dependency المفروض الاردنسي يشتغل بعدين
orderingترتيب الذكية و بعدين حلي ال notes طبعا هي
رسمة الكتاب هي نفس رسمتنا بس ما اختلف شكل بسيط هي
رسمة الكتاب الكتاب طبعا متعود بيحط بدل ال notes
بيحط الأرقام على طول خلاص بعمل order على طول رسمتي
و رسمة الكتاب شبه بعض بس اللهم يمكنك ترفعي حد لفوق
شوية بس اما هى اتطلع اقارنيه اذا جيت فيه اختلاف
قوليلي اختلاف .. لا لا اتطلع شوفوا و قولولي اذا
فيه اختلاف و قولوليبس خلص خلص خلاص في أيه أسئلة؟
في أيه أسئلة؟ يعطيكم العافية