بسم الله الرحمن الرحيم اليوم إن شاء الله بدنا
نستكمل في chapter خمسة في section خمسة ثلاثة و
section خمسة ثلاثة تقريبا ما فيش فيه شيء جديد هو
مجرد exercises ممكن تتبريد أسئلة جديدة بس مش أنه
درس جديد أو موضوع جديد الموضوع أنا عارفة مجرد
أسئلة جديدة عليه ويمكن السؤال اللي بدنا نبدأ فيه
بدنا نعمل syntax directed definition بيحول من
infix إلى syntax tree هاي السؤال بدنا نعمل SDD يعني
syntax directed definition بيحول من infix إلى syntax
tree طبعا في الأول واحدة هتسألني إيش ال infix احنا
أخدناها قبل هيك اثنين ناقص خمسة زائد أربعة ناقص D
زائد B مسموح نستخدم ID numbers في ال infix تمام
هذا ال infix طب إيش ال syntax tree احنا قبل هيك
أخدنا ال parsing tree و اتكلمنا مرة عن ال syntax
tree ال parsing tree اللي هي فيها كل ال details
أنا بحط ال non terminal بيستبدأ زي ما كنا نعمل
parsing أما ال syntax tree هي من الآخر ال operation
مين مع مين الحسابات مين مع مين يعني على سبيل
المثال لما نيجي نقول مثلا أربعة أو a زائد أربعة ناقص
c مثلا شو ال syntax tree لهذه ال syntax tree لهذه
هي عبارة عن ناقص ال c زائد ال a الأربع على طول زي
ما أنت شايفها ال leaves على طول هي ال numbers و ال
identifiers ال internal nodes اللي هم ماهيش ال
operators من الآخر بيديني بيقولي إيش العملية اللي
بيبدأ يتم على طول يعني أنا بيبقى يقولي a بدأ تنجمع
مع 4 و بعدين النتج بيبدأ ينطرح مع c فهذه بيسميها
ال syntax tree اللي بيكون فيها ال internal node هو
ال operator و بيكون فيها ال leaves هي ال operands
بتاعة هذه ال operator هاي باختصار تمام؟ الآن هو إيش
بيقول له؟ بدنا نعمل syntax directed definition
بيحول من infix إلى من؟ للشجرة هاي إلى ال syntax tree طبعا
احنا أخذنا كثير قبل هيك أمثلة على هذا ال infix
أخذنا قبل هيك أنت بتتذكر إيه؟ يحول من infix
إلى postfix و أخذنا في المحاضرة الأخيرة تتذكري كيف يحسب
القيمة عند ال root بتاعة هذا ال infix و اليوم
هيوضيف لسؤال ثالث طب كيف نحول من ال infix إلى مين إلى ال
syntax tree يعني بده الآن tree حقيقية فيها nodes
وفيها leaves وفيها قيف زي ما أنت شايفها و مؤشر هذا
بيأشر على مين وعلى مين هيكلة tree دائما طبعا
عشان أقدر أحل سؤال من هذا النوع قلنا قبل هيك كيف
تبدأ تحلي أول شيء تركيزي بيكون في ال grammar اللي
بيوصف ال syntax بعد ما بحط هذا ال grammar بسير
أفكر عاد عند كل production إيش ال role المناسب
للحصول على التحويلة المطلوبة تمام؟ الآن إيش ال
grammar اللي بيوصف ال infix أزهجنا منه؟ Expression,
expression زي ال term, expression, expression ناقص
term ال term, term في factor أو على factor و ال
factor expression أو ID أو number يعني أزجناها ده
واضحيت لك اللي لازم نحط هو كأساس علشان تفكر إيش ال
rule اللي بجيب له بدي يكون وهنا أنا بدي أحاول بس
أرسم رسمة خفيفة بعدين هنشوف التفاصيل من الكتاب لكن
احنا بنحاول الفكرة اللي أفهمها من باب التذكير كنا
نقول expression بتعطيني مثلا expression زائد إيش
term و بديش أعمل ال ... خلاص ال term إذا بدك مش
مش مشكلة ها term في factor
تمام؟ طبعا ممكن تكملي ال expression ناقص term و زي
ال term أو term و ال term ترفي factor أو على
factor أو factor إذا كنت تفهم لها كاملة بس أنا
بدي اخذ بس samples عشان نشوف كيف نفكر في التحويلة
المطلوبة تمام؟ و بعدين نشوف الجواب بشكل كامل طيب
بعد هيك بدنا نقول إن ال factor ممكن يكون
expression بين قوسين أو number
أو ID ليش أنا سمحت ال number و ال ID؟ لأنه هي
كطالب اليوم في السؤال أن ال infix قد تحتمل أن يكون
A ناقص 4 أو زائد 4 ناقص C طالما يسمح بوجود ال
identifiers في ال infix أنا لازم أعدل و أطور على
ال grammar اللي عندي لو لا يسمح لا يسمح لكن يسمح
أنا في السؤال و الثاني أنا أضفته طيب، الآن تعالوا
نفكر إيش ال rule اللي أنا بدأ أحطه بجواب كل واحدة
فيهم يعني مثلا، لما ال factor بيعطيني number لما
ال factor بيعطيني مثلا رقم أربعة إيش المطلوب منك
تسوي؟ في الحالة هذه، في التحويل، إيش نعمل في
التحويل؟ هتقولي بدنا نعمل leave اللي هو number
أربعة، مش هيك؟ مش أنا في النهاية عشان أعمل الـ
syntax tree اللي اتكلمنا عنها مش يا إما بتعمل
leave يا إما بتعمل node ال node اللي جوا فيها ال
operator فيها طرف يمين وطرف شمال و ال leave ما فيش
فيها شيء بس فيها الرقم number و قيمته أو ID و
سمته مش هيك؟ هي باختصار طبعا أنا قلت لك قبل هيك
إذا فيه task بدك تعمليها في التحويل ما تلخمي حالك
افترض فيه function معينة بتقوم بالمهام اللي بدك
إياها و بعدين على جانب بتقول ال function فلانية
بتقوم بواحد اثنين ثلاثة أربعة و أنا قدرت أعمليها
implementation okay ما قدرتِش بلاش لكن احنا بنسهل
الموضوع خالص الآن القصة باختصار، لما ال factor
بيعطيني أربعة، إيش المطلوب أسوي؟ المطلوب أسوي
leave تمام، اللي هي number أربعة، طب كيف بتسويها؟
خلاص، اعتبر في function جاهزة أنت ورايا دماغك، قول
في function اسمها create leave، make leave تمام،
و حطيلها للبرامج التسلطية و خلاصنا، و عليها مش هشرح
إيش بتسوي ال function والله إن قدرتِ كمان تكتبيها
بعد هيك بشكل كامل أنتِ اتخلصتِ السؤال من كل
اتجاهاته لكن أنا بقول دائما ال problem تبعتك
جسميها إلى sub problems واحدة واحدة خلصيهم بالدور
احنا بنقبل بال function و description عليها و
خلصنا يعني لو ما عملتيها بجواب ب C مش مشكلة مقبول
خلاص؟ إذا نرجع لسؤالنا الآن لما ال factor بيعطيني
أربعة أو number إيش المطلوب نسويه في الحالة هاي؟
بدنا نقوله make leave أو new leave طب ال leave هذا
شو هو؟ إيش أساس ال leave؟ ID إذا كان ID فاصلة A
مثلا أو number فاصلة أربعة بس هيكون ال leave لأن ال
leave بتكون من إيش يا بلدتِ في الرسمة لما رسمنا
هاي مش قولنا زائد a أربعة ناقص c فأنت ال leaves
عبارة عن إيش عندك ال leaves في الآخر يا ID و بتقول
ال extreme تبعه يا number و بتقول ال value تبعته
هاي ال leaves اللي عندي صح ولا لأ؟ طيب إذا واضحة
الآن لما ال factor بيعطيني number هتقول لي خلاص
سهلة make leave number أربعة لما ال factor بيعطيني
ID هتقول لي سهلا اعمل make leave ID فاصلة ال
extreme تبع هذا ال ID اللي بدك إياه طيب لو ما عطانيش
factor لو عطاني مثلا هادي يا بنات ال term term فيه
factor إيش نساوي في الحالة هادي؟ هتقول لي لازم أعمل
create ل node ال node فيها الضرب فيها الشق اليمين
اللي بدي أشير عليه و فيها الشق اليمين اللي بدي أشير
عليه صح ولا لأ؟ إيش الشق اليمين اللي بدي أشير
عليه؟ اللي هتطلع من term مش ال term هتطلع له في
الأكل مثلا شجرة و ال factor هذه مثلا تطلع لي شجرة أنا
لما بشوف هذه الصيغة بقول بالزمني node ثلاثة أجزاء
الجزء الأول هي ضرب الجزء الثاني الجهة اللي بتأشر
عليها اليمين هي شايفة كيف؟ و الجهة اللي بتأشر
عليها اليمين بغض النظر إيش تمثل الشمال، لأن الشمال
ممكن تكون شجرة كاملة زي هذه، طلعي في النقص اللي
فوق هذه شايفة الطرف اليمين إيش هو؟ شجرة كاملة فأنت
تطلع في كل intro node في كل operator بتلاقيها
بتأشر شمال على شيء وعلى اليمين على شيء و بتتحدد ال
operator مش هيك ال node ال intro node بينما ال
leave لأ ال leave لأ ال leave يا ID و رقمه قيمته يا
number و قيمته خلصنا يعني أنا مش محتاج أعمل في ال
grammar تبعي في ال rules إلا make node و make leave
أو new load و new leave صح ولا لأ؟ فتكون تبقى على
القصة هي طيب الآن في شغل ثاني مهمة أنا لما قلت له
ال factor اعطاني أربعة إيش قلنا هنسوي؟ قلت لي هنعمل
leave صح؟ و تقولي number صح؟ و قيمته أربعة هذا
خليه في الهواء ولا حط له إيش الاسم؟ هو factor dot
val مثلا بقوله factor dot val أو factor dot note
أو factor dot leave إذا ما بدك تسميه اللي بدك تسميه
إياه أما لازم هذا ال leave ليش يكون له اسم؟ ليش
يكون له اسم؟ عشان لو كمان شوية واحد بده يقشر
عليها أسويه بالاسم هذا شوفتِ كيف؟ عشان يصير يقشر
عليها واضحة؟ هاي الأركان تبع الشجرة تبعتي اللي بدي
أعملها طيب تعالوا الآن نشوف الـ grammar ونتكلم فيه
نشوف بشكل أوضح تمام؟
تعالوا نشوف شوفوا
طبعا هنا عمل المثال مقتصر على الزائد والناقص لكن
أنت ممكن بنفس الطريقة تكبري للضرب والقسمة تطلع من
الآخر لما الـ T أعطت number إيش قال بدنا؟ بدنا نعمل
function أو class whatever زي ما بدك new leaf هذا
الـ leaf عبارة عن إيش؟ الـ object مثلا الـ number و
هنا إيش نحط؟ الـ value تبعته أربعة، خمسة، ستة على
حسب فأنا إيش عملت في المنطقة هذه؟ أنا عملت leaf
فيها number رقم أربعة وإيش سويت كمان؟ وعطيتها اسم
سميها T.node سميها whatever خلاص المهم تحطي لها
اسم خلاص إذا بمجرد ما هي الـ production تكون موجودة
حيكون أقبلها طلع object أو طلع leaf فيها الـ node
اللي هي number 4 مثلا طيب لو الـ T أعطت ID إيش
بيصير؟ نفس الفكرة بدي أقوله بدي أعمل leaf المرة
هذه أركانها ID فاصلة القيمة تحت هذا الـ ID A,B,C,D
whatever تمام؟ وهذا الـ leave اللي أنا عملته بدي
أساوي قيمته مين؟ مين بدي أشير عليه؟ الـ T لأن الـ T
طلعته يعني الـ T بدي تكون بتأشر على هذه الـ leaf
باختصار فـ T dot note بتساوي هذه القيمة اللي أنا
طلعتها طيب لما الـ T بنات مثلا الـ T أعطت E والـ E
أعطت شجرة معينة أنا ركزيلي على هذه .. عفوا هنا إيش
أنا شغالين .. اه الـ T أعطت الـ E هذه ماذا سنفعل في
الحالة هذه؟ أكيد ستقولي الـ pointer تاع الـ T بدي
أشير على الشجرة اللي طلعت تحت الـ E صح أو لا، ليس
هذه الـ E بتتنجلب وتصبح شجرة في النهاية وتصبح
الـ E dot node تأشر عليها طب لما الـ T بتعطيني الـ
E هذي، ماذا سنفعل؟ ليس هناك creation لـ node ولا
leaf لكن بس هخلي الـ node الـ value هذه تأشر على
مين؟ على المكان تاع هذا عشان ذلك إيش اختصر وقال
الـ T dot node تساوي الـ E.node لأن الـ E هذا
هتتفرق على الـ syntax tree كمان شوية فلما أقول الـ
T بتساوي E يعني خلاص هذا الـ T.node هتأشر على نفس
الـ E اللي كان تأشر عليها فكيف بأعمل الحركة هذه؟ T
.node تساوي E.node يعني هذا هو نفسه هذا لكن لحظة
هنا ما عمل creation لـ node physical فعلية لا عمل
leaf ولا عمل operator لأن بس اللي بعمل leaf ال
operator الـ operands لكن لما يقولي E تساوي T و الله
T تساوي E أنا ما عملت إشي أنا مساوي إن هذه الـ node
اللي موجودة عندي صار فلان زيها صار فلان يأشر عليها
سواء E بتساوي T أو سواء T تساوي E نفس الفكرة فهدول
التنتين شايفين كيف قال لي خلاص الـ value بتاعتها
تساوي الـ value بتاعتها باختصار طيب تعالوا تطلعوا في
الأولى مثلا لما الـ E بتعطيني E زائد T إيش في حالة
نسوي A في operator الآن لازم أعمل في الحالة هذه
إيش؟ Node طب من إيش بتتكون الـ node؟ هي اللي أنا
عملتها الـ internal node من إيش تتكون؟ بتتكون من ال
operator النقص أو الزائد هنا في حالتي زائد زائد طب
خلصنا هيك الـ node ولا لأ؟ لسه هذه الـ internal node
فيها طرف شمال وطرف يمين على مين بتأشر من ناحية
الشمال؟ على مين بتأشر من ناحية اليمين؟ عشان هيك
إيش بقوله أنا؟ بقوله بتأشر من ناحية الشمال على
الشجرة اللي بتطلع من وين؟ من الـ E1 وبتأشر من ناحية
اليمين على الشجرة بتطلع من وين؟ من الـ T مش .. مش
.. مش هذه طلعت شجرة الـ E وهذه الـ T طلعت شجرة الآن
أجت الـ E هذه اللي هي عبارة عن زائد قال لي خلاص هذه
بنعمل node اسمها زائد وبتأشر على هذا الطرف و
بتأشر على هذا الطرف هاخد مثال أنا هوريكي مثال كامل
لنفس الـ infix اللي فوق كيف تطلع الـ tree بس أنا
جاية بحاول أشرح لك كيف عمل الـ semantic rule اللي
بتطلع الـ syntax الـ tree واضحة؟ طب لو عمل ناقص يعني
لو قال الـ E بتعطيني E minus T إيه نسوي في الحالة
هذه؟ بدنا نقول في Enter node ناقص بتأشر على الـ E
هذه وبتأشر على الـ T هذه وهذه كلها على بعض لها
اسم شايف الـ E dot node هذه عبارة عن إيش؟ اسم ال
node الكامل لما أنت عملت الـ node هذه مش إلها اسم؟
مين اسمها؟ E dot note أو E dot note طيب خلّيني أعمل
مثال عليه عشان تتطهر الصورة أكتر للي لسه مش
واضح له خلّيني أمسح هذا الكلام ونعمل مثال ونشوف
والمثال ده نشتري عليه A زائد أربعة ناقص C تمام؟
بدكم مثال الكتاب مثال كتاب ماينس أربعة خلاص زي ما
بدكم أي مثال بيمشي الحال بس خلينا نشتغل زي مثال
الكتاب اللي هو a-4 زائد c طيب الآن عشان نقدر نعمل
التحويل إيش بدك تسوي في الأول بدك تعمل الـ parsing
tree مش هيك اتفقنا وبعدين بتحلي الـ attributes
عليها يعني الـ annotated parsing tree بتطلع معاكي
الشيء التحويل المطلوب مش هيك يقول لنا نشتغل كيف كنت
تتعامل دائما مع الـ syntax derivative definition؟
هتعمل الـ parsing tree وتحلي عليها الـ attributes
وتظهر النتيجة التحويل المطلوبة وهذا ما كنت تفعله
في الأول الآن ماهو الـ parsing tree لـ a minus
four زائد c؟ هتظهر هنا هتقول اللي باختصار الـ E مش
هيك عبارة عن إيش؟ E زائد T والـ E هي minus T و E هي
T و T هي ID و T هي NUM اللي هو أربعة وهذه A
ID اللي هي C الآن عملنا الـ parsing tree إيش هنسوي
الآن بدنا نحل الـ attributes عليها صح ولا لا طبعا
كيف أحل الـ attributes لو إجيتي تتطلعي هتلاقي دائما
الـ parent بعتمد على أبناء الـ parent بعتمد على
أبناء الـ parent بعتمد على أبناء إذا واضح أن كلهم
synthesized واضح أن هذا as attributed grammar يعني
الخلاصة bottom up بحلها deep traversal بحلها اه
بحلها بسهولة تعالوا نشتغل عادي طالعة تطلعي لما الـ T
بتعطيني ID إيش بيقول لي الـ rule بيقول لي اعمل على طول
leaf مال هالـ leaf؟ إيش بتتكون الـ leaf؟ بتتكون من
ID قيمته إيه؟ مين اسمه؟ T dot node اسم الـ leave
هاي صح؟ لأن هو هيه قال لما الـ T أعطت ID مش أنت
عملت leave لل ID شو اسمها هذه؟ T dot node هي يعني
المسئول عن الـ leave هذا الـ T عشان هيك عملت له
value وسميته T dot node أشير على الـ ID اللي أنا
عملتها أو الـ leave اللي أنا عملتها طبعا الشاطرين
هيقولوا نفس الفكرة لهدول هيعملوا dot node وهيعملوا هنا
leaf number team to أربعة و سير هذا إيش بيأشر عليه
ونعمل هنا إيش كمان ID الـ c والـ t dot node دي
مالها برضه تأشر عليه على السريع خلصتهم bottom up
بتاع تبقى بنشتغل تمام طيب الآن تعالى نشوف طب لما
الـ E بتعطيني T إيش بيصير هتقولي لي خلاص هاي طالع
القانون اللي أنا حاطه قبل شوية يقول لي خلاص نفس ال
value تبعته هتساوي الـ value بتاعت الـ T يعني
هتقول لي بالعربي dot node هنا خلاص أشير على طول على
القيمة اللي هنا صح أو لا؟ أنا كنت أقول لو هذه خمسة
و E dot naught سوى خمسة خلاص على طول تاخدوا القيمة
مباشرة تبعدها مش بيضلنا نجهلم في بعض صح أو لا؟ لأ
هذه نفس الفكرة هذه قيمتها هاي وبيقول لي هناك E dot
naught سوى E dot naught يعني بالآخر هاي بتصير تأشر
على هاي يعني هذه هي نفس قيمة هاي يالوا افترضت أن
هذا object يعني هذا هي قيمة الـ object مثلا فرطها
مؤشر هذا قيمة المؤشر حسب احنا إيش بنفرض في الشغل
تبعنا طيب الآن تعالى نكمل بنفس الطريقة لما الـ E
بتعطيني E minus T تعالوا اتطلعوا إيش بيقول لي لما الـ E
بتعطيني E minus T إيش بيقول لي أول حاجة بيقول لي إيش
اعمل node هذه E بتعطيني بتعمل node تعمل إيه هو ما
بدك إن شاء الله في آخر الدنيا المهم ما بدك تعمله
المهم الأسلاك تبعيتها ورايها التواصلات بتاعتها
ورايها أنا بتعملها هنا جنب هذه لأنها إلها إيش
اسمها؟ minus صح؟ مين الطرف؟ هي شايفة؟ E بتعطيني ال
E طبعا الإبن ماقص الـ T الإبن التاني الآن إيش
بتتكلم؟ بقول قيمة الأبو يعني مين؟ يعني هذا إيش
هتساوي؟ جال بدنا نعمل note اسمها ناقص الطرف
الشمالي بتأشر عليه مين هو الـ E1 هذا يعني هذا الـ
E1 إيش قيمته؟ هذا بيصير تأشر على الطرف الشمالي
يعني هذه معناها أن هذا الطرف هيقشر على هذه، صح؟
يعني هذه هتاخدها هيكها باختصار لأنه إيش بيقول لي؟
بيقول لي الـ E dot node اللي هي تقشع E dot node
القبل، صح؟ يعني إيش هذه قيمتها؟ هيها، هيها يعني
بالعربي هذه هتصير هيها قيمتها، صح ولا؟ طيب الجزء
هذا بيقشر على مين؟ قال له الـ T.Note قيمته تساوي
الـ T.Note اللي هي الـ T.Note تاعتها دي اللي هي الـ
T.Note تاعتها دي اللي هي وين؟ اللي هي هذه تابوا قبل
شوية مش هيها؟ يعني هذا هيأشرها شوفتي كده؟ يعني صار
عندي الآن Note leave، leave تعالي للأخيرة لما الـ
E بتعطيني E زائد term إيش بقوللي؟ بقوللي برضه نفس
الفكرة بدي أعمل إيش؟ Note لزائد هذا هيأشر على مين؟
على الإبن هذا صح؟ اللي هي هايها وهذا هيأشر على
الإبن هذا اللي هي هاي الآن إيش اللي أنا رسمته
بالأحمر هنا باختصار؟ اللي رسمته زائد بأشهر على C
وعلى ناقص والناقص بأشهر على A وبأشهر على 4 شايف
الرسم هاي؟ هي اللي أنا عملتها الـ syntax tree هاي
طلع مش هذه ال syntax؟ النقطة دي عبارة عن إيش؟
عبارة عن تلاتة أجزاء الزائد والطرف الشمال والطرف
اليمين هاي الزائد والطرف الشمال والطرف اليمين طيب
إيش الطرف الشمال؟ ناقص بالظبط A4 شوفتي كيف ..
الخلاصة أنه أنا حصلت على syntax tree من ال grammar
اللي موجود عندى ببساطة و ال idea مش صعبة ال idea
الفكرة سهلة أنه ال leave بدي أعمله لما بكون عندى
ID أو number في الآخر و ال internal node بدي أعمله
لما بكون في عندي operator زائد أو ناقص لأن هي طبيعة
ال syntax ال syntax tree عبارة عن إش يا بنات؟ عبارة
عن nodes و leaves ال leaves يكون فيها الأرقام و ال
identifiers و ال internal nodes يكون فيها ال
operators واضحة فهذه باختصار القصة تبعتنا الآن
اللي مش فاهم إيش يسألني هذا ال grammar ال
conclusion هذا ال grammar أو syntax directed
definition بيحول من infix ل syntax tree باتباع ال
rules اللي هناك اللي هي عبارة عن create لل note أو
create لل leave create لل leave متى؟ لما بكون عندي
number أو ID create لل note متى؟ لما بكون عندي
operator that's it هاي كل اللي قلناه الآن اللي
عنده سؤال يتفضل يقول السؤال اللي مش فاهم إشي يتفضل
يقول تمام؟ نكمل؟ طيب الآن عشان نكمل يا بنات
ال grammar هذا لو بدأ أعمل predictive parser هل هو
صالح لذلك ولا لأ و ليش؟ بقدر أعمل predictive
parser ليش؟
لأن في عندي left recursion هيك خليني أقول المصطلح
الصحيح مش ميه ده مكررة left recursion طيب أيش
الحل؟ أغير الشكل، أحافظ على المضمون، أطبق قوانين
left recursion، مظبوط؟ طيب، هل قوانين left
recursion السابقة اللي أنا أتعلمتها، بقدر
أستخدمها؟ مش أنا أتعلمت أشتري left recursion قبل
هيك و أخدت قوانين؟ بقدر أستخدمها و أشتغل؟
أنا مش عارف، أنا بسأل، أنا بدي جاوب، أنا بدي منكوا
جواب، يقولوا لي أه أو لأ، كلكوا قلتوا اه مع انه انا
جاوبتوا المحاضرة اللى فاتت نفس السؤال و قلت لأ
معناه انتوا نايمين و مابتدرسوش، أنا سألت السؤال و
جابت المحاضرة اللي فاتت قلت لكوا لأ بظبطش اليوم
ولا معاكم خبر في المحاضرة السابقة و بتقولوا أه
بنفع احنا قلنا بنفع بشرط ما يكونش مقترن مع rules
بيصير بنفع بسبب وجود ال rules المرة اللي فاتت قلنا
بظبطش أستخدم القوانين السابقة ليش؟ لأنه مش مديني
كيف أتعامل مع ال rules طب شو الحل؟ الحل قلنا في
آخر chapter 5 هناخد قوانين جديدة للـ Left Recursion
تورييني كيف تتعامل مع الشقين الشق هذا و الشق هذا
عشان أقدر أستخدمهم لكن مش اليوم هناخد القوانين هذه
المرة الجاية واضحة؟ طيب نتكلم في الآخر أنت شكلك مش
هتهدأ اللي جيبه مع الساعة ستة على الجامعة طيب طيب
خلونا الآن بس نكمل عشان نخلص و نتكلم براحتنا في
الآخر طيب هذا مجرد المثال اللي احنا حلناه قبل شوية
نفس المثال اللي انا حلته بس قاعد بوريكي في النهاية
ال syntax tree اللي طلعت طيب الآن إيش ال grammar
هذا؟ إيش رأيكوا في ال grammar هذا؟ شو عبارة عن
إيش؟ أيوة هذا شيلنا منه شيلنا منه ال left
recursion ممتاز و طبقنا القوانين اللي ما أخدناهاش
اللي قولنا هناخدها بعدين طبقنا القوانين وطلعلي ال
grammar شكلا جديد لكن مضمونا واحد إيش المضمون تبعه
من infix ل syntax tree لا تنسيش القصة هاي طيب الآن
هذا ال grammar ممكن أسأل عليه تلت أسئلة مختلفة
السؤال الأول ممكن أقولك اعمليلي parsing tree ل a-4
زائد c هذا السؤال بس مش هنعمله الآن عملناها قبلك في
أمثلة سابقة السؤال التالت ممكن أسألك عنه أقولك
اعمليلي annotated parsing tree زي ما عملناه
بالأحمر و لازم تطلع في الحالة هذه إيش حتى على
الجديد هذا لازم يطلع اللي هو syntax tree السؤال
التالت برضه اللي جاوبناه المرة اللي فاتت و اللي
الآن برضه الكتاب سألنا عنه و هنجاوبه اعملي
dependency graph خدناه المرة اللي فاتت تمام متى أنا
بحتاج ال dependency graph؟ يعني هل هذا السؤال أنا
بحاجة ال dependency graph فيه ولا لا؟ ما رأيك في
هذا السؤال هل أنا بحاجة ال dependency graph ولا
مافيش داعي؟ أيوة
طالما في inheritance معناه أنا بحاجة ال dependency
graph أنا كيف ممكن أحكم؟ عشان أحكم بشوف testing
لكل ال attributes اللي عندي إذا راجعتهم كلهم من نوع
Synthesized يعني S Attributed خلاص ما بديش
Dependency لأن الـ Bottom Up بحلها الـ Depth
Traversal بحلها الـ Issue Automatic بحلها لكن إن
راجعت لأ راجعت فيه Attribute مرة بعتمد على الأخ و
مرة بعتمد على الأب و مرة مش عارف بعتمد على مين مش
عارف أحلها إلا إذا عملت قبلها Dependency Graph
يعني مين أزور في الأول و مين أحل في الأول عشان
أقدر أحلها و عشان أقدر أحدد خدي نظرة عامة على ال
Attributes تعالي أوريكي كيف مثلا الآن هو بتكلم عن
attribute تبع مين لأبوه لإن هي الإيهانة تعتمد على
الـ E bar note أو الـ Synth يعني الأب تعتمد على
الأبن هذا ما فيش مشاكل هذا الـ Synthesize انتشار
اللي تحتها بتكلم عن E bar value لها يعني بتكلم عن
هذه وتساوي ال value بتاعة ال T اللي معاه أخوه إذا
هذا inherited طالما شوفت inherited خلاص بريح دماغي
بقول بيلزمني dependency graph حتى أحل طب واحدة
بتقول أنا لو ما عملتش ال dependency graph و رسمت الـ
parsing tree بقدر أحل ولا بقدر أشحل؟ طبعا بتقدر،
بس هتظل تعيدي و تزيدي ألف مرة في اللي الرسمة
تبعتك، إيه تطلعها، اه لازم أعرفها دي في الأول،
بعدين by trial and error تروح تحليها دي، اللي
جديها بتعتمد على حاجة تانية، و تظلي رايحة جاية في
الرسمة طالعة نازلة أكتر من مرة عبال ما تحليها،
بتحليها في النهاية لكن كل مرة بدك تشوفي وين لكن ال
dependency برايحك خلاص ال dependency بيقولك روحي
هن هن هن هن هن هن هن هن هن هن هن هن هن هن هن هن
هن هن هن هن هن هن هن هن هن
هن
هي بنسويه الآن، هيك الكتاب شغال طبعا الآن ليش همسح
الرسمة؟ أمسح اللي بالأحمر بس؟ واشتر على هاي؟ ولا
أمسحها كلها؟ اللي بس اللي بالأحمر؟ ليش؟ طب ما نخلي
الأسود؟ أيوة، ال grammar اختلف يعني، أنا على طول
إيش دي أسوي أنا؟ أيوة، برافو عليك شاطرين صحصحهم، ما
شاء الله عليكم صحصحين على الآخر
بالمرة اه؟ بالعكس هي أساس ال compiler هنا و
المفروض اللي أخدته المشروع عشان تعرفوا ليش أن هذه
أساس ال compiler و الله أن جد هي لو أخدت المشروع
كان عرفت بالظبط أن loop ال compiler هو هنا عارفين
ليش هذا loop ال compiler؟ أنتم مش عارفين، أنا بدأ
أجاوبها السؤال، أنا بدأ أجاوبها المهم هذا loop ال
compiler لأنه قاعد يعلمك الآن كيف أحول من صورة إلى
صورة بالظبط هذا اللي أنت دائما هتسويه في ال
compiler ال compiler عبارة عن إيش؟ عشان تكون في
الصورة تحويل كامل من شكل إلى شكل كيف بدو يتم تحويل
ال compiler من شكل إلى شكل؟ من خلال ال syntax
directed definition بس لكن طبعا هيكون الكلام
الموصوف هنا شو هو؟ كل تفاصيل ال language هنا هو
مركز على مين بس في ال language؟ على ال infix تنسيش أن
ال infix مقطع من ال language ال language مش بس
while ال language مش بس do ال language مش بس
function ال language فيها operators فيها infix
فيها relations و بضل ده فهنا المثال صغير أخذ حاجة
من ال language اللي هي ال infix و قعد يعلمني كيف
هذا ال infix أحوله مثلا لل tree وقدام هيمسكوا كمان
لو كان معناه وجد في شباتر 6 و 7 كان هعلمني كيف هذا
ال prefix أحوله لـ tree address mode شفتي كيف؟ ليش؟
لأنه و كان و إذا حورته لـ tree address mode كيف بعد
هيك أعيد نفس الشغل و أحول من الـ tree address mode
للـ language تبعتي اللي هي الـ low machine فدائما
التحويل هتجي بياخد نفس الـ structure شفت انت كيف؟
لكن أنا بديكي أمثلة بسيطة لسهالمشروع لم يكن
المفروض المشروع المشروع كان الـ infix مع جمال
while مع جمال do بلغة معينة تعمليلها syntax
directed definition يطلع الإشي بلغة تانية فالحمد
لله الله عفاك و بس أنا ندمان أنه الله عفاك فيها
يعني يالا لعله خير طيب لعله خير لو سألتيني السؤال
الأسبوع اللي فات كان ماشيلتيش المشروع أيوة سألتني
متأخر طيب على كل أحوان لأ لما هو لازم أنتوا في
النهاية الـ compiler أحنا بنشرحه ليش عشان تقدر
تتخيليه واقع مش أنه تخيلي إيش قاعد نشرحه و أنت مش
فاهمه وين ده مكانه في الـ compiler هذي مشكلة يعني
كل الدروس هذي لـ direct يعني relation لـ ال compiler
فإذا ماكنتش شايف هذه المشكلة معناه فيه خلل فأنا
بتحمل جزء أنه ما خلت المشروع طبعا طيب على كل أحوان
الآية الخلانة نتابع نتابع بدنا نعمل اللي هو A ناقص
أربعة زائد C تمام فبنعملها parsing tree في الأول و
بعدين بنحل عليها الـ dependency زي ما عملنا المرة
اللي فاتت الآن كيف بنشتغل أكيد هتقوليلي E مظبوط
ايش هتعطي الـ term و الـ E bar الـ term هذا شو يكون I
D على طول خلاص الآن الـ E bar يجب أن تكون ناقص T E
bar الـ E bar يجب أن تكون زائد تير E bar الآن خلصنا
الـ E bar الأخير يجب أن تكون إبسلون و الـ term هذا
يجب أن تكون ID ولا number و الـ T هذا numberوخلص
ودي هذه خلصت الآن بالأسود ايش رسمنا على اللوح الـ
بارسنج تري لـ A-4ZC الآن بدنا نشتغل dependency
وقلنا المرة اللي فاتت عشان تشتغل الـ dependency بدك
تشوف كل واحدة ايش عاجبالها attributes و تحطيهم ك
notes و تشوف مين بعتمد على مين و ترسم الأسهم تبعتك
و بعدين بيجي الترقيم الكتاب بيختصر و بيعمل الترقيم
على طول من الأول خلاص إحنا بدنا نشتغل بالترتيب
عشان هيك لو بدي أخد كمثال الـ T بيحطيني ID إيش هنا
فيه attribute مظبوط اسمه node هي attribute اسمه
node وفيه attribute أنا عملته اللي هو الـ leaf صح؟
اللي هو بيدمثله .. خلاص بيدمثله بهذا اللي بعتمد
على الـ ID هذا بعتمد على الـ ID، بظبط؟ الآن مين
بيتمد على مين هنا؟ أنه أنا لازم اعمل creation لهذا
leave عشان اقدر اعرف قيمة الـ node، باختصار، إذا
أنا مثلت الـ object اللي عندي بـ nodeومثلت الـ
attribute بتاعها ده برضه بـ node تانية وعملت السهم
مين بيتمد على مين خلصنا هذه إذا الـ T أعطت ID طبعا
نفس الفكرة لما الـ T بتعطي number هتقول نفس الفكرة
هتقوللي هذه عبارة عن نقطة زي هيكة وهذه عبارة عن
اسمها node وسهم منها لهان هي dependency وهتقوللي
نفس الفكرة الـ T اللي هنا اللي هي nodeمصبوط مع الـ
object اللي أنا عملته هنا الـ identifier لحظة أنا
ليش ما رسمتش الـ leave هان ولا رسمت الـ number هان
لأن أنا مش مطلوب مني أن notated مش مطلوب مني أحل
لو طالب مني أحل بيطلعوا معايا مرسومين لازم أرسمهم
أنا مطلوب dependency وقلنا المرة اللي فات
dependency فقط ايش الـ attributesومين بعتمد علي مين
فقط هذه الـ Dependency مش طالب مني أحل النتيجة ففي
فرق بين الـ annotated وفي فرق بين الـ dependency
الـ dependency بتيجي أول وبعدين بيجي الـ annotated
يعني قاعدين نكمل عليها وبعدين و نرسم كمان طيب،
خلّيني نكمل الآن تعالوا نتطلع لما الـ E بتعطيني TE
bar وينها؟ أول واحدة، صح؟ أول إشيش بقولك، بقولك
هذا الـ App in of value اسمها Noteوهذا الأبن له
value اسمها sin خلّيني أضعهم، أول شيء هذا له value
اسمها null وهذا الأبن له value اسمها sin ومن يتبد
على من؟ هيك السهل يعني لازم أعرف هذا عشان أعرف
هذا، مش هيك قلنا المرة اللي فاتت، هيك اللي فوق
لازم يعرف هيك لسه ما خلصناش فيه كمان attributes الـ
E bar هذه نفسها كمان لها attribute تاني اسمه
inherited والـ T هي الـ attribute اسمه node
هينيراثمو الـ T مرسوم الآن مين بتبدأ على مين؟ هي
عشان تتحسب الدعرف هي عشان هيك بنعمل السهم ايش؟ هيك
شوفتي كيف؟ على طول لما أداني الـ E بتعطيني الـ T E
bar حطيت الـ attributes اللي اتكلم عنهم ووصلت
الأسهم بناتهم طيب، لأن نكمل بنفس القالية لما الـ E
bar بتعطيني ناقص T E bar يعني هان أول إش إيش
بقولك؟ بقولك هذا الإبن إلها attribute اسمه
inherited، صح؟ تعالوا نشوف الإبن، وين الإبن؟ اللي
هو هذا، صح؟ إله اسم إيش؟ inherited طيب هذا هو
الحاجة كمان الـ object هذا اللي أنا بدي أعمله تمام؟
وين أنا وصلت؟ تمام الآن الـ object هذا بعتمد على
مين؟ على الـ E bar على الأبو، مظبوط؟ وعلى مين كمان؟
يعني عشان أحسب هاي لازم أكون عارف هاي و أكون عارف
هاي من الآخر مش هيك؟ أنا مش عشان أحسب هاي لازم
أكون عارف الـ a bar inherited يعني مين هذا الـ a bar
بالنسبة له؟ الأبو صح؟ و لازم أكون عارف مين؟ الأخو
يعني كيبنا مثلة بالأسهم يعني يا بنات لازم أكون
عارف هايو لازم أكون أعرف إيش؟ هاي مش هاي هيك بيقول
مش بيقول الـ E inherited تساوي in you node اللي هي
ناقص الـ T dot node و الـ E dot node هدول مع بعض هاي
هم بيقولوا لأ طلعي طلعي هاي بدوا اتنين value عشان
يعرف تاعت القبل مين هم الاتنين الـ value أول إشي الـ
T وين هالـ T؟ هاي هالي جنبهالـ value تبعتها اللي
أنا رسمها و مين كمان الـ inherited بتاعة مين؟ بتاعة
الأبو عشان هيك أنا قلتله هذه الـ node عشان تلحسب
بدها الـ T بتاعة الأخ و بدها الـ inherited بتاعة
الأبو هاي هم رسمين فوصلت أسهم عشان عرفت هايشوفتي
كيف؟ الآن بنفس القالية كاملة، في إشي تاني، أه في
إشي تاني موجود معاهم، إيش بيقول؟ بيقول الإيبار
هذه، مظبوط؟ اللي هي إيبار من الأبو، يعني الأبو
هذا، وينه؟ هايو السن أنا برسمه، ماله؟ بساوي السن
بتاع الإبن نفسه، يعني هذا الإبن توا إله إيش كمان؟
إله سن في size طبعا، وبرسم إيش؟ هيك سهمشوفتي كيف؟
هدولة كلهم طلعتهم من وين لما الـ E bar أعطتني minus
TE bar لجيت فيه معادلتين المعادلة الأولى كانت
تتكلم منه هذا و هذا عشان أعرف هذا و المعادلة
التانية بتقولي السن تاع الأب و بيساوي السن تاع
الأبن فعملتله attribute ووصلته هذا كان له مرسوم من
أول الآن تعالوا هنعيد نفس القصة تاني لما الـ E
بيعطيني زائد TEإيش هنسوي؟ نفس الفكرة هتقوليلي هذه
إلها inherited عشان تنحسب بدها الـT الأخر و بدها
inherited الأب هيك بكون خلصت المعادلة الأولى
المعادلة التنش بتقولي بنفس القلية سن الإبن هذا
بيعطي
الأب لأن سن الأب بيساوي سن الإبن هذا لما أعطتني زي
الـT نفس اللي صار قبل شوية بالظبط تمام؟ طيب أخر
حالة لما الـ E bar بتعطيني إبسلون إيش بيقول ببساطة؟
بيقول السن تاع الإبن هو نفسه .. هو نفسه مافيش ابن
و أب هنا السن تبعه بيساوي الـ inherited تبعه يعني
بالعربي هذي إيش حامل سهم هيك؟ إن السن تبعه بيساوي
الـ inherited تبعه فهذه بيعبّر على بالسهم هذا مش
السن أسنانه سن .. synthesizedو الـ inherited .. الـ
N H inherited
طيب وضحت طيب خلصنا هيك وضحت الـ dependency هيك وإذا
كنتوا تشوفوها بشكل أرتب هيه طبعا لاحظوا يا بنات أن
الـ dependency هنا في الكتاب إيش عمل؟ رقمهم يعني
إحنا بعد ما بنعمل الـ notes مش بيقولنا بتيجي مرحلة
.. مرحلة الترقيم طبعا فبديك ترقميهم بشروط اللي
اتفاجن عليها المرة اللي فاتتمية لمية بقى الرقم
اللي فوق دايما العراق السهم أكبر من الرقم اللي
عليه السهم تمشي الأمور إن شاء الله تمام؟ هي رسمة
الكتاب وهي رسمتنا للتان في النهاية واحد طيب إيش
خلاص؟ في الأول .. هذا الدرس خلاص يالا هو الطلاب
ولا بيباركات ولا حاجة؟ ماشي في الأول في أسئلة هنا؟
مافيش أسئلة؟ break طبعا الآن في سؤال تاني في سؤال
في نفس الموضوع تاني إيش السؤال بيقول السؤال بيقول
بدي أعرف type من نوع array كيف يعني؟ يعني لو كتبنا
مثلا Int X إيش نوع الـ X هتقوليلي انتي؟ Integer
الآن في طريقة تعريف array في language معينة زي هيك
بكتب Int 2إيش يعني لما بكتب انت اتنين؟ إيش معناها؟
أنه أنا عملت بالظبط array من عنصرين من نوع integer
طيب ممكن أكتب زي هيك 1 2 3 هذه عبارة عن
إيش؟ عبارة عن array of array هي صح array two
dimensions لكن كيف بنعرفها؟ array of array كيف
يعني؟ يعني بقول عندي array من عنصرين كل عنصر فيها
array من تلاتة هي نفس المعنى array two dimensions
ممكن أكتب برضه هيك
1 2 3 هاي عبارة عن array كام dimension؟
تلاتة dimension array of array of array of integer
بس الأولى عنصر التانية عنصرين التالتة تلاتة عناصر
طيب كيف اوصفها؟ جالب تقدر توصفيها بطريقة كتابية
كالتالي ان هاي أنا بوصفها زي هيك بقول array افتح
قوس 2 فاصلة array افتح قوس 3 فاصلة
integer سكر الأقواس هيك أنا وصفت هاي ال array طب
بدأ أوصف هاي كيف أوصفها؟ قال هادي أوصفها array
افتح قوس 2 فاصلة array افتح قوس 3 فاصلة integer سكر الأقواس سكر الأقواس هذه إيش وصفها؟ array
افتح قوس 1 فاصلة array افتح كمان قوس 2
فاصلة افتح كمان قوس array افتح array كمان قوس
3 فاصلة integer و سكر الأقواس وهكذا قد ما
بدك تعمل هيك الوصف طيب الآن إيش السؤال؟ ماشي
افهمنا الصيغة والوصف إيش السؤال؟ السؤال اعملي
syntax directed definition بيحول من هاي لهاي
للصيغة يعني بدي يكتبلي الصيغة تاعة اللي أنا كاتبه
يعني لو أنا كتبت ك code زي هيك إيش يطلعلي في ال
syntax directed definition يقوللي ال type تبعك هو
array في array في array حسب اللي أنا كتبتهيعني
اللي بده يطلعوا حسبة ال type من زمان كنا نكتب
infix ونطلع الحسبة عند ال root اليوم بدنا نكتب
type ونطلع ال type النهائي عند ال root بوضح إيش
اللي بدنا نسويه؟ type قلنا عشان نشتغل سؤال من هذا
أن أول أشي بتفكر فيه شو هو ال grammar اللي بيطلعلي
القائمة هذه، مظبوط؟ واتوقع هذه بالنسبة إلكوا سهلة،
ليش؟ لأنه هتقوللي هي عبارة عن type ثم list مش هيك؟
واخدنا زمان كيف نعمل list ID فاصلة ID مش هيك ولا
لأ بس هنا بدل كلمة ID إيش هنعمل list من إيش؟ من
هذا ال block افتح قوس number سكر القوس
هادي أكرر حاجات ما .. يعني أتبري هذه ID مش بتعرف
تعمل list في ID من زمان؟ الآن هي مش ID هي افتحي
قوس number سكر القوس مابنقدرش نعمل منها حاجات
ما بدنا؟ بنقدر مش بدنا بنعرف نعمل list ولا لا تمام
إذا هيك هنفكر هنقول أنا في النهاية أن الشكل تبعي
هو عبارة عن إيش عبارة عن type أساسي ثم list و ال
list هي عبارة عن إيش افتح قوس number that goes ال
list جد ما بدك بتقدر تحطي و في الآخر ال list بتكون
إيش epsilon خلينا نشوف كيف و بنتكلم تطلعليش كتير
على ال attributes ركزي على
الجهة الشمال كبيرة
كثير احنا
عشان نحاول التصوير نجيب قد ما نقدر يعني طيب
ايه
هي هنظر خالص خلاص طيب المهم المهم تعالوا تطلعوا
معايا قال ال type هو عبارة عن إيش؟ هو عبارة عن
basic ثم list مش هيقول نفسي هذه list؟ هي طلع الشكل
عبارة عن إيش ال type الكلي؟ عبارة عن basic اللي هو
integer, float, double whatever ثم list اللي هي ال
C تمثل ال list اللي هنشوفها كمان شوية طيب تعالي
تطلع على ال basic، إيش ال basic؟ يا integer، يا
float، يا double، على حسب اللي معرفهم هنا، بظبط؟
طيب إيش ال list؟ طلع على ال list قالك بدي افتح قوس
و نام و سكر قوس و بعدين كمان مرة بدي منها فجد ما
بديك بتقدر تعملي افتح قوس، نام، سكر، C ال C بترجع
افتح قوس، سكر، جد ما بديك لما ما بديك خلاص بديك
تواقفي بيقولوا ال C هذي إيش؟ epsilon طب أنا ممكن
أعملها بشكل تاني احنا خدنا شكل تاني شوية مختلف في
ال list of identifier لو تتذكرى على كل حوال مش
خلاف المهم حتى الفكرة هنا مش صعبة انه أنا قاعد
بقول ال C عبارة عن هاد ال number وراها C الآن لو
بديك تشيلي ال C مش هتحطوا مكانها number C number C
number C جد ما بدك واحدة اتين تلات جد ما بدك إذا
واضح ان هذا ال syntax او هذا ال grammar بيوصف إيش
ال syntax اللي اتكلمت عنه اللي هو عبارة عن type
ثم افتح القوس رقم ساكر القوس و جد ما بدك بتعمل من
هذا الكلام في حد عنده اعتراض أو في حد مش فاهم كيف
هذا ال grammar بيوصف هذا الشكل بتاع ال type واضحة
أكمل ولا في أسئلة لأننا بنبني على الموضوع هذا إذا
إيش مش واضح يقول لي لأ مش واضحة اه بتسألي أكيد
واضح الأمور في حد مستصعب؟ طيب، الآن تعالوا نفكر
شوية في ال rules هدول، تمام؟ بدي تفكر، بديش تحفظ،
بديش تاخد الاشي مسلم قدامك، بدي تفكر شوية، الآن
لما ال T بيعطيني B C والـ B عبارة عن integer ولا
float؟ مش هذا بدي يورث ال type تبعه لل C؟ ليش؟ مش
هذه array في array في array في array؟ for basic في
الآخر؟ for integer أو for float؟ صح ولا لأ؟ عشانك
المفروض أن هذا اللي بيعرف ال type تبعه عشان يقول
لل C خد فضل هيوا عندك لإن انت في آخر ال C هذه اللي
هي افتح قوس number سكر القوس جد ما تعمليهم مش
هتعمل array في array في array .. إيش أخرها؟ مش فيه
basic ممكن تكون اقرر في integer أو في float فلازم ال
basic يودي قيمته لمين ل C يعني واضح أن ال basic
هذا لازم يكون في value صح؟ طب أنا ال basic مش لازم
احسبه في الأول قبل ما هو ال D صح؟ لما ال B بيعطينا
integer إيش يكون ال basic في الحالة هذه؟ فعشان إيش
قال لي؟ قال لي شايفة؟ قال لي ال B دو ال type في
الحالة هذه إيش؟ integer طب لو ال B أعطاني float؟ ال
type تبع ال B float فخلاص صارت ال B الآن ال
type تبعها معروف صح ولا لأ؟ طيب تعالوا نفكر
شوية الآن هذا ال B معروف لما نقجت ال C مش هذا
بدي ورث قيمته لهذا، مظبوط ولا لأ؟ فالمفروض ال C
dot basic إيش يساوي ال B dot T صح ولا لأ؟ طب هل
خلص ال C dot basic وخلصنا ولا لأ؟ هنا بدك تميزي
ال C شغلتين ال C ال type الأساسي، إيش ال type
الأساسي؟ array if تحي قوس ال number فاصل ال basic،
مش هذا ال type اللي أنا بدي إياه في الآخر، إيش ال
type بتاع هذه؟ مش هي كل هذه؟ مش هذه هي ال C لازم
يكون هذا ال type بتاع ال C عشانك ال C فيها two
values فيها ال type الكلي وفيها ال basic تبعه اللي
أخدوا من جاره عشان هي فيها كمتين شايفة كم؟ فيها CT
اللي بدأ تنحسب اللي هي ال array في array في array
حسب اللي موجود و ال basic طبعا ال basic أخد كمته
من وين؟ من ال B عشان كمان شوية يحط هانا في الآخر
طيب إيش بيقول هانا؟ إيش فاهمين إيش بيقول هانا؟
هانا بيقول مش في type أساسي للشجرة إيش ال type
الأساسي للشجرة؟ هو نفسه ال type الأساسي لل C اللي
هو هذه لما كتبنا هذه شايفاها؟ مش هذا كله هو ال
type الأساسي لكل جملة اللي هو نفسه ال type بتاع ال
C فعشان كشجال قال ال type بتاع الجملة كلها هو نفسه
ال type بتاع مين؟ ال C اللي بدي أحسبه الآن لسه ما
حسبتوش بدي أحسبه الآن طيب تعال نشوف كيف بدى يحسب
لما ال C بتعطيني number بين قوسين C قوليلي انسيلي
هذا شوية إيش ال type تبع ال C هذه مش ال type تبع
ال C هاي array شكل ال number هذا 2 فاصلة ال C
one dot T لإن أنا لسه مش عارف يمكن هذه خلصتو ممكن
هذه تعطيني إيش ال array تاني صح ولا لأ ف ال type
تبع هذه باختصار هي عبارة عن ال array 2 فاصلة حسب ال
type تبعها إذا هذه أعطتني كمان شوية كمان قوسين هصير
إيش هذه هتصير ال array و هكذا طب إذا ال C أعطت
epsilon خلاص بحط ال basic على طول هنا صح ولا لأ
فعشان كمان تستغربي من القصة التالية أن إيش بيقولي
بيقولي باختصار ال type تبع هذه هو array قيمة ال
number اللي هنا لكن هنا إيش حاط ال C اللي هو لسه
مش عارف إيش حاتجيب والله إن ال C جابت array بحط
array ال C جابت خلاص خلصت بحط ال basic صح ولا لأ ف
.. و بهيك هذه بتظل تمشي بدون مشاكل و هناخد مثال
عليها طيب إيش بدنا نعمل؟ طب شو ال basic بتاعها؟
إذا هذه array مش بدها basic؟ مين ال basic تبعها؟
مش basic ال up؟ عشان هيك إيش كمان سوا؟ نجل إليها ال
basic يعني أنا الآن لما قلت C تساوي number C1 هذه
عبارة عن إيش array فاصلة ال number فاصلة C1 خلاص
طيها العافية طب ما ال C1 هتحتاج ممكن basic في
الآخر طب كيف تاخد ال .. من و مين بتاخد ال basic
تبعها؟ من الأبو اللي جابوا من ال B مش هذا أخد ال
basic فالمفروض الـ basic كمان يش يودي للـ ابن عشانك
إيش دائماً بنقول كل ابن بياخد الأساسي تبعه من مين؟
من الأبو تبعه اللي هو كان integer أو float فكل ما
بيطلع له ابن بياخد الـ basic منه عشان أخر واحد تحت
هو اللي بيحط الـ basic بشكل صريح فكيف بيحطه وما
خدوش وضاع منه فعشان هيك الأبو إيش بيسوي كل ما
بيكون فيه C يعني فتحة array معينة بيقولوا اتفضل هي
الـ basic عندك من عندك هي اتفضل هي الـ basic عندك هي
الـ basic عندك أخر واحد تحت خلص بيحط الـ basic اللي
أخده من الآباء خلّيني أخد مثال و أنضح الصورة بشكل
أكثر ناخذ مثال و نجربه و بعدين نشوف الأسئلة تبعتكم
و نوقف إن شاء الله ناخد
المثال لانت اتنين تلاتة المطلوب اعملي annotated
parsing tree يعني لازم أشوف نتيجة التحويل تاعتها دي
إيش تطلع array of array إذا أنا شغال صح مش هيك هذا
إيش تعويلة لازم تطلع إيش تجاوب الصح؟ إيش لازم
تتحول لو أنا شغال صح؟ array of array هذي لو أنا
شغال صح لازم يطلع array اتنين array تلاتة integer
إذا طلع الشيك معناه أنا غلطان مش هيك لازم تطلع هيك
النتيجة عشان أعمل annotated إيش هتسوي في الأول؟
parsing لمين؟ لهذه مش هيك قلناها و بعدين بنحل
عليها إيش الـ parsing تبع هذه؟ هتقول لي T الـ basic و
الـ C الـ C عبارة عن إيش افتح قوس number ساكر القوس
C تانية الـ C هت عبارة عن إيش افتح قوس number ساكر
القوس C تالتة و الـ C الأخيرة Epsilon تعالوا الآن
نحاول نحل الـ attributes تبعتنا طبعاً طبعاً الأصل أن
كنت أعمل dependency عشان أعرف أحل لأن فيها
inherited بس خلاص أنا اتعودت على inherited اللي
بياخد من هنا فهحل على طول بدون dependency طيب عشان
أحل تعالي تطلعي طبعاً الـ basic هذه ما خلصتاش خلصيها
هذه الـ basic إيش هتكون الـ basic is Int عشان نخلص
الـ issue مظبوطة لأ تعالي نشتغل الآن لما الـ basic
أعطاني الـ Int إيش قال لي B dot T تساوي integer خلاص
integer قيمة integer خلاص طيب لما الـ T أعطاني بيه C
إيش بيقولي بيقولي D to T تاعتهاي تساوي الـ C to T
تاعتهاي يعني إذا أنا عرفت الـ C to T تاعتهاي
بعرفهاي
مش هيك؟ طيب هذه أول معلومة أن الـ D to T تساوي الـ C
to D لأن لازم أحسب هذه في الأول عشان أعرف هذه كمان
مش هنجي نحسبها وإيش بيقول لي كمان الـ C dot basic
هذا الـ C dot T و الـ C dot basic إيش بيساوي؟
integer عشان ما أضيعش القيمة تبعتة الأساسية هيك خلص
من الـ T بتعطيني بـ C طبعاً لسه ما حسبش الآن تعالي
كاملة لما الـ C بتعطيني الكلام هذا الـ C إيش
بيصير؟ يعني لما بتحطيني هاد إيش بيصير؟ قالك الـ c
dot t بتاعة الـ up يعني مين عن مين بيحكي؟ عن هذه
اللي أنا لسه بتحسبها إيش تساوي؟ طلعي قال لي اكتب
تساوي هاي بدأ يعرف ليها تساوي array if تهيقص الـ
number اللي هان اللي هو في حالتنا اتنين فاصلة
Tie بالإبن اللي أنا لسه مش عارفه، مين الـ Tie
بالإبن يا بنات؟ الـ T و T هذي، صح؟ يعني لو أنت
عرفتي هاي، هتحطيها هان و هذي كلها هتحطيها هان، و
بنخلص، صح ولا لأ؟ طيب، الآن بدي أشوف هايلما الـ C
هذه أعطتنى هذا الكلام طبعاً فى بس ملاحظة نكملها C
dot basic بتاع التهاي لإنه كاملى ماعملتاش هذه مش
تاوي أنا قولت الـ num C1 حسابي توقف تهان كاملى فى
حاجة تانية أن الـ basic بتاع الإبن يساوي الـ basic
بتاع التهاي يعني الـ basic بتاع التهاي مش يساوي
ال integer عشان ما يروحش مني خلاص integer طيب الآن عيدي
لما الـ C أعطتني number هذا الكلام هتقول نفس
الفكرة بيقول لي القانون array ثلاثة فاصلة اللي هي
مين الـ C اللي تحت هذه dot T إذا أنا عرفتها بحطها
هنا و هذه كلها بحطها هنا و هذه كلها بتصير هنا مش
هيك؟ دهوا الحسابات؟ طيب الارش كمان بيقول لي و الـ C
dot basic إيش بيساوي integer نظبوت؟ الآن إيش ضال عندي
آخر واحدة الـ C صوت إبسلون، إيش بيقول لي؟ الـ C ضد T
هتساوي .. اللي هي integer إيش يعني هتعمل أنت؟ هتحطي
هذه وين؟ هنا إيش بتصير هذه؟ integer و هذه كلها وين
هتحطيها؟ هنا إيش صارت؟ الـ Ray اتنير الـ Ray تلاتة
integer، هذه كلها بتنقليها هنا إذن واضح إنه أنا حولت
من شكل الـ .. الـ syntax بتاع الـ type لإيش حولته
للوصف تبعه لإيش هو هذا الـ type هيك هو الطالب هنا
في المثال هذا تمام هيك؟ في أي سؤال؟
طبعاً هذا أكيد إله علاقة كبيرة في الـ compiler كمان
مرة لأنه أنا بتكلم على الـ types دي ربالي أيوة لأ
.. لأ لأ هو لازم تعرف تتأكد أيوة عشان تجيب درجة
عالية تمام؟ إن شاء الله أقول لكم تجيبوا درجات عالية
فجزء هذا كله في لب الـ compiler يصب في الـ .. فبدأ
يحكي في الـ types يعني لم يحكي في الـ infix بدأ يحكي
في الـ types تمام؟ طيب أي أسئلة الأمور واضحة يعطيكم
العافية