بسم الله الرحمن الرحيم اليوم ان شاء الله هنستكمل
آخر محاضرة معانا في الفصل اللي هي في chapter خمسة
section خمسة خمسة وطبعا لو احنا اتطلعنا في section
خمسة خمسة هتلاقي فيه تقريبا خمسة subsections احنا
بس هناخد منهم الخمسة هدول آخر اتنين subsections
اللي هم خمسة أظن .. خليني أشوف أسمائهم عشان
ماننسهمشطبعا خمسة أربعة خمسة اللي هناخدهم وخمسة
أربعة أربعة ونختم عندهم إن شاء الله رب العالمين
طيب اليوم في محاضرتنا إن شاء الله في عندنا تلت
جزئيات بدنا نهتم فيهم الجزئية الأولى عبارة عن
exercise أو عبارة عن سؤال استكمالي في موضوع ال SDD
وموضوع ال SDT تمام؟ احنا المرة اللي فاتتأخدنا مثال
كيف نعمل SDD لإيش يحول من infix ل syntax tree صح
ولا لأ و قبلها كنا ماخدين كيف نحول من infix ل
postfix و قبلها كنا ماخدين كيف نعمل الحسبة عند ال
root و أخدنا كتير أسئلة في هذا الإطار اليوم قعدت
في exercise برضه نفس الفكرة بنحول من SDED بدنا
نعمل SDD يحول من شكل للآخر بس مختلف عن ال infix
اللي هو بتكلم تحديدًا في ال while خليني بس أنا
أفتح على ال slide أو على السؤال نتكلم عنه دعني
أشوف أين راحت تمام
هيو طيب
هيو السؤال إيش بيقول السؤال بيقول بدنا نحول
من high level language ل three address code يعني
المطلوب نعمل syntax directed definition بيحول من
هذه الصورة لشو؟ ل three address code يعني ها
شايفين سؤالي اختلف نمطه عن الأسئلة اللي كنا ناخدها
قبل هيك أخدنا أكتر من نوع أكتر من نمط احنا المرة
اللي فاتتاشي types، اشي infix، اشي syntax tree
واليوم زي ما انتي شايفها السؤال بيقولك حولي من ال
high level language ل tree address code وطالما قال
حولي معناه انت كده إيش دي بتشتغل؟ بدك تعملي syntax
directed definition أو بدك تعملي translation
scheme صح ولا لأ؟ إيش أفرج ال SDD عن ال SDT؟ إن
والله بيكون ال rule جوا لجرامر، بس مش أكتروالله
نسينا هذا الكلام، مين بيكون فعال أكتر؟ ال
translation لأنه بيكون خلاص ال action جوا ل
grammar فعلى طول في مراحة ال parsing بنفذ ال rules
و بيخلص بينما في ال SDD أنا لأ بعمل لtery و بعد ما
أعمل لtery بيجي بحل ال rules عليها بناء على ال
bottom-up أو ال dependency graph زي ما أخدنا قبل
هيكالان السؤال بيقول ببساطة بدنا نحوّل من هذا
الشكل لطريقة discord طبعا و بدنا نعمل SDD هيك طالب
السؤال SDD طبعا عشان ان انا اقدر اعمل ال SDD اكيد
الكل فاهم انه بيكون في عندى نصين نص خاص بال
grammar و نص خاص بال semantic rules النص الخاص بال
grammar ايش بده يسوي؟ بده يوصف ال syntax اللى انا
بده اقوم بتحويله هنا مديني syntax لحاجة واحدة
لwhileفتتوقع كام production بتعملي في ال grammar
هنا؟ واحدة فيش غيرها لل while يعني نفسها المكتوبة
بتقول ال S بتعطيني Y مظبوط C أسود عارف لو كان هو
بده يكمل وقالك في لل four و في لل F و في و في و في
كان هتكمل ال S ممكن تكون على شكل while ال S ممكن
تكون على شكل four ال S ممكن تكون على شكل F ال S
ممكن تكون على شكل do while و الاخر ايه بس هو هنا
في سؤالي اقتصرعلى بس تحويل ال Y لـ Tree Address
Code عشانك أنا ال grammar طبيعي طلع سهل جدا مافيش
فيه إشي شكل ال Y زي اللي ما أحنا عارفين الأسس
بتعطيني ال Y لإفتاح course ال condition سكر ال
course ل statement هيك شكل ال Yطيب، الآن نجي للشقة
التانية، ايش الشقة التانية؟ عشان انا اقدر احوّل ل
tree address code لازم في الأول اكون فاهم كيف اكتب
ال tree address code بتاعتهاي و لا كيف احول يعني
ارجع لمثال زمان التقليدي حول من infix ل postfix طب
اذا انا مش فاهم ال postfix كيف احط ال rules اللي
طلعوا؟ مستحيلشوفتي كيف؟ إذا لازم انا أكون فاهم
الصورة اللى بدي أروحلها علشان أقدر أعمللها rules و
إلا كيف بدي أروحلها و أنا مش عارفها شو هي؟ صح ولا
لأ؟ الآن سؤالى هذا شو بدي أحول ل tree address code
لل while إذا .. إذا أنا مش قادر ك human الآن أكتب
tree address code لهذا مش هقدرأحط ال rules يبقى
الأن نقطة اللي بدنا نفكر فيها كيف نعمل ال tree
address code لل wild و بعد ما أعملها و أشوف كيف عن
ال tree address code بفكر عاد طب شو ال rules اللي
تطلع التحويلة طبعا ال tree address code احنا قلنا
قبل هيك هي شبيهة شوية بال assembly لكنها level
أعلى يعني هي level خلينا نقول بين ال highوبين ال
law يعني ليش سماها Tree Address Code؟ لأنه ممنوع
في ال instruction الواحد أو في التعليم الواحد تشوف
أكتر من Tree Addresses Maximum طب ليش أنا اعتبرتها
أعلى من ال assembly درجة؟ لأنه مسموح تستخدم فيها
الزائد مسموح تستخدم فيها الضرب كتير ومسموح تستخدم
فيها اليساوي بينما هذا الكلام كله مش موجود في ال
assembly فاتكلمنا عنه قبل هيك ال Tree Address Code
الآن عشان أعمل Tree Address Code لهذه لل function
Sالجلم هذا الفاضي طيب عشان انا اقدر اعمل code لل S
طبعا مين ال S يا بنات اللي هي ال Y هذه كلها صح
الشاطرين ايش هيقولولي هيقولولي المفروض نبدأ بسطور
لمين لل C codeليش بدي C code؟ لأن أنا لازم أعرف
هذه الـC في النهاية true ولا false لأن إذا كانت
true هعمل شيء معين هفوت على ال loop جوا إذا كانت
false وين هروح؟ هطلع من كل الـS هاي واروح للي
وراها مش أنا قاعد بكتب في code الـSمش هذه تاعة الـ
S؟ إذا الشرط ما اتحققش، وين بدنا نكمل؟ مش هنكمل في
الكودة، هنطلع بعد الـ S إيش في حاجة بعد الـ
function S؟ إسلام، مبارك الله فيك إيش في حاجة بعد
الـ function S؟بدي يطلع عليها، صح ولا لا؟ لكن إذا
الشرط كان متحقق، إيش بدي يسوي؟ بدي يفوت في اللوب،
صح ولا لا؟ عشان هيك أنا بتوقع code الـS الكبير بدي
يبدأ بشو؟ بدي يبدأ بال code تعالى الـC طبعا إيش
يمثل ال code تعالى الـC؟ احنا لان مش كاتبينه، مش
هنكتبه لأن الـC عبارة عن إيش يا بنات؟ الـC عبارة
عن Boolean expressionيلها تعريفات ويلها قصص ويلها
code هو ريحني ماحطليش ال C عشان أقعد أفكر فيها و
أقول كيف ده هتتحول وإيش قصتها وإيش code ريحني
قاللي خلاص عبر عن ال code اللي بدي يطلع ب C.code
خلصنا لإن هو مش مديني تعريف ال C عارف لو مديني
تعريف ال C كان أنا بضطر أفكر كيف أطلع لها code زي
ما أنا قاعد أفكر ال code بتاع الأسل الآن عشانك أنا
هعبر عن ال code ال C بحب كلمة C.code وانه اعتبر ان
كتب ال code بتاع ال Cالان في نهاية كود الـ C لازم
فيه two values أعرفهم هل الـ C true و لا هل الـ C
false ليش؟ لأن عند الـ true وين بده أروح و عند ال
false وين بده أروح باختصار طبعا إذا كانت false
هتقوللي خلاص هنروح للاشي اللي بعد ال S كلها إيش
فيها أنا هيروح يكمل فيها برا ال tree address بتاعة
ال S هذه هيكمل تحت لو كانت falseطيب لو كانت الـ
true هتقوللي هيدخل على ال body تبع mean تاع ال S1،
code ال S1 عشان هيك إذا true بدي فوت جوا هنا طيب
إيش بدي يكون هنا؟ هتقوللي بدي يكون code meanالـ S1
عشان ايش بتعبّر عنه S1.code زي ما عبّرت عن الـ C
code هذه الأسمة هي ممكن تكون Y ممكن تكون 4 ممكن
تكون F ممكن تكون whatever إلها كودها صح ولا لأ
فالآن هينكتب كود من ال S.code طب السؤال نهاية ال S
.code شو بدي أعمل فيه؟و اين بدى اروح؟ في نهاية ال
S dot code S و dot code بدى يرجع للأول طب طالما
انا بتكلم بدى يرجع للأول لازم يكون في label للأول
عشان اقوله روح go to لل label هذا مش بس هيك و
طالما انا توجه ال true و false لازم يكون كمان في
label لمين؟للتانى، ليش؟ عشان باختصار لما تكون الـ
C true روح لل label 2 يعني أدخل على ال function
تاعت أو ال code بتاع ال S1 طب خلصنا من كود ال S1
مش المفروض نرجع
عشان اخر سطر بتلاقيه هنا عبارة عن ايش مين ال S1
.next من اللذي يتبع ال S1 هتقولي اللي بدي اقوله go
to طبعا لمين ل L1 هاي باختصار طبعا الان هشوف شوية
تفاصيل بس انا جاعد بحاول الان اديكي ال structure
الكامل بتاع ال wild القصة باختصار بديكون code C
مكتوب في الأولبدي أكون عارف true ولا false من ال
code تبع المكتوب بناء عليه واحدة من تنتين يا بده
أقوله روح على label two عشان يكمل في ال S1 إذا
كانت true يا بدي أقوله اطلع من كل ال إيش المكان
طبعا بنات هذه إيش بنمثلها؟ إيش معناه اطلع من كل
البنات؟ إيش القيمة هذه؟ هذه القيمة اسمها ال S dot
nextيعني مش هذه الـ S في إلها next مش هذه الـ S في
إلها بعد ناس فأنا كيف بعبر عنها لما أقول له في
حالة ال false روح على ال S.next هيك بدأ أقول له S
.next يعني أيش بقوله في حالة false أن أنت طلع على
مين على الاشي اللي مكتوب ورا مين ورا ال S الرئيسي
الآن كمان مرة يا بنات أنا بدي أعمل codeأو الـ Tree
Address Code لمن؟ للجملة هذه الـ while اللي عندي
عشان أقدر أعمل ال Tree Address Code أول إشي بنتاج
نسوي نكتب code الـ C فبسميه C.code هذه أول نقطة
ليش؟ لأنه بناء على هذه الـ C يصير يا بفوت جوا يعني
يا go to ال S1 يا go to ال next تاعة ال S يعني ليش
اللي بعد ال إيش؟ اللي بعد ال Y صح ولا لأ؟ فعشان
هيك أنا في الأول لازم أكتب كود ال Cلأن الـ C كمان
مش معروفة فخلاص بقبل عنها في C.code لكن أنا بهمني
في نهاية الـ C إيش أكون عارف لازم أكون عارف هادي
الـ C true يعني الشرط متحقق عشان أعرف أين أروح ولا
الـ C هادي false عشان أعرف أين أروح طبعا برضه
مانساش أنه لازم أنا أكون عامل لعب لمينللمكان هذا؟
ليش؟ ليش أعمل label للمكان هذا؟ لأنه إذا دخلت أنا
جوا الشرط اتحقق وفُتت على ال C مش بتدرجع من جديد
للبداية تحت ال while صح ولا؟ عشاني كبداية ال while
لازم أعملها label عشان أقدر أقول go to لبداية ال
while مش هذه بداية ال while مش بدأت أكتب ال C
اتحقق الشرط دخلت في ال Sبعد ما أخلص الاسم مش بدي
أرجع لبداية ال wild من جديد إذا لازم أسجل عندي أنه
في label للبداية تاعة ال wild لإني محتاج أرجعلها
ممكن وممكن مارجعلهاش على حسب ال condition فهنا في
عندي أصبح label مابدي أنساه طيب الآن خلّيني نكمل
في حال ال C dot ال true يعني إذا الشرط متحقق إيش
بدنا نسوي؟ بدنا نفوت على code مين؟ ال S1 عشان هيك
برضه ال S1 لازم يكون له إيش؟Label الـ 2 مثلا، ليش؟
عشان أقدر أقوله go to لل S code بتاع ال S1 عشانك
إيش بتوقع بكتبها أنا؟ إيش الكتب بتكتبها أنا يا
بنات؟code مين؟ S1.code بدي أعبر عنه بـ S1.code لأن
أنا خلاص الشرط اتحقق اتفضل اكتب code مين؟ الـ S1
عشان هيك بدي أعبر عنه بكلمة S1.code طبعا في نهاية
ال S1.code وين بدي اروح؟ يعني مين ال S1.next؟ ايش
تساوي ال S1.next يا بنات؟ يعني مين ال next بتاعت
هذه؟ اللي هي ألوانماذا يعني هذه الجملة؟ انه لما
انا خلصت code الأسوان على كل الأحوال بدي أرجع
لألوان، هيك معناه فعشان هيك ايش بقوله؟ بقوله ال
next بتاعة هذه مين هي؟ هي الألوان، باختصار طيب،
نرجع بس لهنا، في حالة ال true، هقوله quote لمين؟ ل
label ال two، صح؟ يعني ال c dot ال true بتتساوي من
الآخر؟اللي هي ال label قالته مش هيك يعني إذا كانت
true روح لمين؟ لالتو، فظهرت للا طيب إذا كان false
وان بدأ أروح؟ أيوة S.next طبعا ال S مين هذه؟ مش S
ال label هذه ال S الكبيرة اللي أنا قاعد تشغّال
عليها مش هذا كله code ال S من ال next تبعها اللي
جاي وراهايعني إذا الشرط لم يتحقق من البداية أو في
أي وقت هاروح على ال issue اللي بعد ال while مكتوب
في البرنامج خلاص هيطلع من ال while ويكمل تكميل
عشانك عبرت عنها بكلمات S.next ال S بتاعة ال parent
ال next تبعه وهذا مش هاروحله إلا في حالة ال
condition false لكن إذا ال condition true خلاصكمل
في L2 إذا فات على L2 يعني إذا فات على ال S1 لما
حالة يعني اتحقق الشرط وفات لازم مرة جاون يروح في
ال wild يرجع من جديد يبحث الشرط فهذا اللي انتوا
شايفينه باختصار هذا ال structure تبع ال tree
address code طبعا عشان يكملو أكتب code المفروض
أكون عارف إيش هي ال C عشان أقدر أعملها coding أكون
عارف إيش ال S1 عشان أعملها coding لكن الكتاب سهل
علينا كلها ده قال خلاص عبر عن ال C1 ب C1.code عبر
عن ال S1 ب S1.code و رايح حالك و بس كان معنى هنا
بال structure بتاع ال three address code لل Y كيف
هاد ال Y نعملها three address code زي ما انت
شايفها فهي هذا الشكل طيب الآن سؤالي مش أنا .. عشان
أقدر أشتغل في ال ..في التحويل ايش ال output اللي
بدي يطلع من هذه الجملة three address code عشان هيك
ايش بتتوقع ال S.code هيساوي يا بنات ايش تتوقع
يساوي الشاطرين هيقولولي هيساويL1 concatenation مع
C.code concatenation مع label 2 concatenation مع
S1.code عشان كل المقارنة تكون محتوطة و طبعا خلال
ال concatenation لازم يكون في عامل الحسابات هذه
اللي احتاجها عشان اعرف حالي وين هاروح طيب عشان بس
نشوف القصة و بعدين تسألوا زي ما بدكوا تعالوا نشوف
الجواب و نتكلم فيه هايه باختصار هاي التحويل
طلعوا معايا عادى، إيش قالك؟ قالك بدي بس حاول أكبر
برضه و نشوف الأخيرة، الحين نرجع لها طلعوا معايا
إيش قال أول شيء؟ قال هاي التحويلات تبعتي، قال أول
حاجةطبعا هذا الشيخ تعني ال semantic rules اللي هو
منفصل الآن قال اول اشي بدنا نسويه عشان اقدر اكتب
ال code كامل تاء ال S ايش بلزمني؟ قال بلزمني label
one كمان شوية هحطه في مكان بلزمني label one ليش
label one؟ علامة على بداية ال Y عشان لما بدي
اروحلها اقدر اروحلها فبلزمني label oneماذا كمان
بلزمني؟ بلزمني level 2 ليش بلزمني level 2؟ علامة
على بداية ال S1 عشان واجد مابدي اروحلها اروحلها
مابديش اروحلها بلاش بعدين ليش بلزمني؟ ال S1 dot
next يعني هذه ال S1 مين ال next تبعها؟ مش لازم
احسبه؟ ليش لازم احسبه؟ لأن بعد ما بخلص code ال S1
لازم احدد وان بده اطير احدد وان بده اروح فلازم
أكون عارف مين ال next تبعي مين عد ال next لل S1
دايما؟الوان عشان هيك الشيء اللي بتساوي دايما ال S1
.next بساوي الألوان عشان وجد ما بدي أرجع برجع على
الألوان خلصنا طيب الآن كاملي بعدين إيش بدي ال C
.false يعني هذه ال C اللي أنا بدي أكتبها كمان شوية
مش في إلها يا false يا true في حالة كانت false وين
بدنا نروح؟على الاس dot next يعني بعد الاس كلها طيب
في حال كانت ال true و اين نروح على ال ال اتنين
الاصل انا حاط ال ال اتنين على مين على ال اس و لسه
انا ماكتبتش ال code انا جاعت بجهز لل code هذه كلها
تجهيزات في حالة ال true و انا اروح في حالة ال
false و انا اروح في حالة ال ال one من وين ماكان و
ال ال two من وين ماكان كل هذه تجهيزات الان تعالى
شوف هى ال output النهائي اللى بدور عليه هى
التحويلة هى ال code هى ال string ايش بيقول تعالى
شوفركز عالي بقولك ال code اللي بدور عليه تاع ال S
عبارة عن شو؟ هه عبارة عن شو؟ قال أول إشي بدنا نكتب
كلمة label هه بدأ أورجيك التحوير كيف بدأ تصير بدأ
أمسح حنا و أوريك إيش بده يصير هه قالك أول إشي بدنا
نكتب كلمة label كتبت كلمة label طيب بعد ما كتبت
label قالك concatenation يعني لزج عليها شو ألزج
عليها؟ كلمة ال one اللي هي قبل شوية عملهاهذه لزجة
الـ one ثم ماذا يقول الـ concatenation لزج وراها
code الـ C اللي المفروض يكون موجود لزجت وراها code
الـ C ثم ماذا يقول لزج وراها كلمة label كمان مرة
ان هذا عنوان جديد او label جديد ثم ماذا يقول لزج
وراها ال two سأكمل و أرى ماذا يقول بعد ذلك ثم ماذا
يقول لزج وراها ال aswan.codeشايفة؟ وهذا اشكالة هذه
الـ c.code الآن هذا اللي طلع معي شو هو اللي طلع
معاكي؟ هي الـ Tree Address Code للـ wild هذا اللي
طلع معاكي طيب واحدة ممكن تسأل و تقول ليه؟طب ماشي
ال L1 استخدمناها في ال code صح هيها مظبوط و ال L2
استخدمناها في ال code طب هدول مابيانوش معي في ال
code هدول ليش مابيانوش لإن هدول أساسا المفروض في
ذيل ال code بدي أبحثهم عشان أعرف حالي هاروح اين في
ال code يعني هدول parameters أنا قاعد بحطلهم ال
values وين بدي أروح في حالة true و حالة false
فلازم يكونوا معروفينيعني في حالة false وين اروح؟
في حالة true وين اروح؟ طب هدول مين هيتعامل معهم؟
وين هشوفهم هدول لو بدنا نشوفهم صح؟ في نهايةال code
بتاع ال C بيصير فحص اه انت يا C كنت true ولا كنت
false؟ اه والله كنت true خلاص go to ال two اه كنت
false اه go to ال next بتاع ال C شوفتي فلازم ال
values هذه اللي الأساسية يكون عارف و أماكنهم و
قيامهم عشان يقدر يكمل ال code لكن هو ما كتبهم لأنه
أساسا هو مش عامل ال code خلاص قالك هذا ال code
هيكون مكتوب لكن هدول ال parameter لازم يكون عارفين
ال values بتاعتهم عشان يقدر هذا يكملنفس الفكرة انا
نفذت ال S1 code ايش لازم تسوي اخر جملة بعد ال S1
code؟ بتقوله طير على بداية ال .. ال .. ال ..
الجديدة يعني مين ال next بتاعة ال S1 لازم تنحسب هي
عشان ياخدها و يطير عليها مين ال next بتاعة ال true
هي عشان ياخدها و يطير عليها فهذه حسابات لازم تنعرف
تنعملالخلاصة أننا حولنا من الـ Y لـ Tree Address
Code أو على الأقل لـ Structure بتاع الـ Tree
Address Code لأن فعليًا أنا لم أكتب الـ C Code
فعليًا لم أكتب الـ أسوان Code لأنه أصلا لم
يعطينيهم لكي أكتبهم لو يعطينيهم كانت كملت و كتبت
واضحة أن هناك أحد لم يفهم في أي سؤال كيف حولنا من
whileلتري address code في حد في عنده لبس أو شغلة
مش واضحاله يدوي يسأل قبل رؤية الجزء التاني من
محاضرتنا نكمله
طيب احنا محاضرتنا عبارة عن تلت أجزاء اليوم ديروا
بالكم هيخلصنا الجزء تمام الجزء التاني جزء سهل جدا
بيتكلم كيف نحوّلمن syntax directed definition لـ
Translation skill يعني كيف نحوّل من SDD ل SDT مش
هنقول ال SDT more efficient لأنه بيكون ال action
جوا ال grammar مش هيك حكينا طب الآن لو عندي
semantic يعني لو عندي SDD كيف أقدر أحوله ل SDT؟
الآن هذا بنشرحلكوا يعني خليني أرجع برجوع ال
subsection و ناخد مثال عليه مباشر، هاي المثالطبعا
يا بنات ال grammar هذا اللي موجود على اللوح السؤال
ايش بيقول؟ السؤال بيقول بده نحول ال grammar هذا
طبعا انتوا شايفينه هذا عبارة عن SDD صح؟ ليش SDD؟
لأن ال grammar لحال و ال rules لحال فهو بده يحول
ال SDT طيب أول حاجة كويسة انه لو أنا مش فاهم ال
grammarومش عارف إيش بيعمل، بيكون عندنا المقدرة
نحوله ل SDT، فهذا إيش كويس، لو أنا مش عارفه إيش
بيعمل، إيش بيشتغل، إيش بيعمل، زي ما أنت شايفها
قدامك، هل أنا لازم أفهمه عشان أحول ال SDT؟ لأ مش
لازم تفهمي طيب، أنا هذا مش هشرح ليش بيعمل، ليش؟ هو
هذا باختصار جاي من وين؟في حاجة اسمها Latex هذه ال
Latex بيستخدموها لما بيعملوا كتب بيعملوا reports
على أساس عبارة عن editor بتكتب فيه رموز زي ال HTML
بتكتب فيه رموز و بيروح بيحولها لصورة و ل figure و
لرياضيات و ل PDF file في النهاية يعني مثلا بكتب
جوا ال Latex slash figure بيروح بيحولها على شكل
figure و بدي أحطها في الوسط أحطها هناباتكلم عن
الخط الارتباطي المهم زي هي كان ال editor هذا
بيشتغل طبعا لكن احنا مش مطلوب من ان نفهم هذا ال
latex هذا .. هذا بيكون اللي عارفه و عارفه و مش
عارفه بلاش المهم هذا ال grammar ايش بيسوي جاعة
بيوريكي كيف هذا ال latex .. ال latex بيحول كيف
بيطلع الرموز او كيف بيطلع الكلمة يعني اذا انا كتبت
مثلا subscribe بممكن احطها تحت احطها فوق على حسب
ال command تبع ال latex فهذا لازم يحول صحشوفتي
كيف؟ لكن انا زي ما قلت مش معنى كتير في ال Latex
لكن أنا معنى فقط كيف أحول هذا ل SDT قالك عشان تقدر
تحولي ل SDT قانونين صغار اتركزي عليهم وتعرفيهم
بتحليها بدون ما تفهم أيش ال grammar بتسوي أيش
القانونين القانون الأول بقولك إذا كان ال attribute
synthesized حطي ال action هذا في الآخركمان مرة إذا
كان الـ semantic rule اللي عندي هذا الـ semantic
rule ال attribute تبعه من نوع synthesized إيش يعني
من نوع synthesized؟ يعني الأب بعتمد على الأبناء،
مظبوط؟ قالك هذا حطيه بين جثين ال rule وحطيه في آخر
ال production يعني كيف؟ يعني تعالي تطلعي على هذا
ال semantic rule خديلي هذا كمثال هذا بتتكلم عن
مين؟عن الـ B بتاعة مين؟ بتاعة الأبو، صح؟ بيقول هي
عبارة عن function في مين؟ لو كملنا هتلاقيها
function في B1 و في B2 يعني هذا الأب بيتمد على
مين؟ على الأب نهر، يعني هذا من نوع synthesizer،
صح؟ الان قاللي هذا الان بتحطيه بين جثين و بتجيبيه
و بتحطيه في آخر ال productionطيب ليش؟ ايش الحكمة؟
ان احط في الآخر قال لأنك بتكون شفت الأبناء قبله
فبتكون عرفت ال attributes بتاعة الأبناء لأنك بتعمل
بارسينج من الشمال لليمين فانت already شفت ال B1 صح
ولا لأ فعرفت ال attributes بتاع B1 بعدين شفت مين
ال B2 فعرفت ال attributes بتاع ال B2 إذا انت تقدر
تحل ايش؟الـ B تحت ال أب شفتي كيف؟ لأن هو معنى إيش
دايما يسوي أن أشوف ال attributes كلها قبل اللي بدي
أحسبه عشان مايصيرش خربطة لإني بمشي من الشمال
لليامين فجالي خلاص دائما و أبدا أريح راسك طالما أب
باعتمد على الأبناء يعني بدي أشوف الأبناء كلهم قبله
صح؟ فوين بدي أحطه؟ في آخر ال production لإني بكون
شوفت مين؟كل الأبناء قبله فهذه أول ملاحظة لو كان من
نوع Synthesize حطيه في الآخر بين جثين ويعطيك
العافية طيب لو ماكانش من نوع Synthesize يعني
inherited أو بيعطي قيمة يعني مثلا قال لي ال B
تساوي عشرين وإيه لازم أحطها قبل ال B؟ هو قاعد
بيعطيها قيمة قاعد بيقول ال B تساوي عشرين فالمفروض
هذه و أنا أحطها قبل ما أوصل ال B عشان أخد العشرين
و أستفيد منها جوا ال Bفإذا كنت أنا بعطي قيمة أو من
نوع inherited لازم و انت نحط قبل الرمز طب اديني
مثال يعني مثلا high فانا قاعد بحسب لمين ل ال B
high بقوللي خلي ال B تسوى عشرة الصح أحط هذه في
الآخر ولا قبل ال Bجاب للـ B عشان يستفيد من القيمة
ده في حسابات تعتمد على ال attribute هذا تكون أخدها
أخدها من الأبو و أخدها من الأخو فطالما بعطيه قيمة
لازم أحطها قبل الرمز عشان لو احتاجها ألاجيها عارف
لو أنا نجلت هذه في الآخر يعني أنا بشوف ال B قبلها
صح؟ طب افرض في ال B بدي أحسب ال BS هذه أو حاجة
تعتمد على ال BS هذهمش هقدر فقال لي خلاص ريح دماغك
طالما هي بتعطي قيمة طالما هي inherited حطها قبل
الرمز طالما هي synthesized حط ال action كله في
الآخر هاي كل اتنين rules تعالى نطبق ال rules و نحل
هذا السؤال كامل و نخلص الجزء التاني تعالى نشتغل
عليه السؤال بيقول حوليهذا ال grammar أو ال SD دي
ال SDT تعالوا كيف نشتغل حاجة أمسك الأولى هقول آه
هذه بي هذا قاعد للابن بيشتغل آه قاعد بيعطيله قيمة
إذا هذه المفروض تنحط وين؟ قبل بي عشان هيك هحط
action زي هيك و أسحبها و أحطها هنا شفتي كيف و خلاص
تيجي وراها ال بي لو روحت على ال بي خلاص و احتجت ال
بي اسم هي معروفة انا شفت ال value قبلهاطيب تعالوا
نكمل للي وراها اللي وراها في واحد اتنين تلاتة اربع
ماتفكريش انه إجباري لازم كلهم يكونوا مع بعض كل
واحدة حطيها في مكانها كل واحدة action شوفتي كيف؟
الآن تعالوا نتطلع أول شيش بقولك قاعد بحسب مين ال
B1 dot BS إيش بتساوي قيمة مين ال up هذا ال action
إيش رأيك وين نحطه؟أيوة قبل ال B1 مش هذا بده ال app
طب أنا بكون وصلت ال app قبله صح ولا .. عشانك هذا
بنجل وين؟ قبل ال B1 فبكون أنا شوفت ال app بعدين
ايش حسبت ال B1 بعدين دخلت على ال B عرفها شوفتي
كيف؟ طيب إيش رأيك في هذه ال action؟ هذا بحسب لل B2
إذا هذا ال action هو لازم تحطي .. حطيه قبل ال B1
.. المهم قبل ال B2 تنصح طالما أنا قاعد بعطي قيمة
لل B2يعني الـ B2 بدى يستخدمها كمان شوية لازم ال
action هذا تحطيه قبل مين؟ قبل الـ B2 هذا تحطيه في
الأول، تحطيه في النص، انت حرة المهم انه قبل الـ B2
طيب تعالى تطلع على هذا، اه هذا ال app بعتمد على B1
لو كملناها و بعتمد على B2 يعني ال app جاعة بعتمد
على الابناء ابجى هذا ال action وين هتودي حضرتك؟
على الآخرطيب تعالى للأخيرة برضه الأخيرة بحسب
attribute تانى لمين؟ برضه للأب و بعتمد على مين؟
على الأبناء برضه هذا ال action ممكن تحطيه في الآخر
طيب تعالى اعمليلي بس هادي ايش نسوي فيه هادي؟ خليني
ارفع بس شوية صغيرة خليني اعمل هادي تعالى ايش رأيك؟
هذا بيحسب قيمة الـ B1 و بتعتمد على الأب يبقى هذا
ال action بتحطه قبل ال B1 طب هنا برضه ال B2 قبل ال
B2 صح؟ قبل ال sub بعد ال sub اللي هم قبل ال B2
لازم يشوفها قبل ال B2 شايفة؟ لأنه إيش بيسوي؟ بيحسب
قيمة ال B2 بتعتمد على مين؟ على أبه إذا نزل نحط قبل
طب إيش رأيك في هذه؟ هذا بيحسب للأب بيتمد على
الأبناء بحطه في الآخر و هذه؟ خلاص سهلة القصة تعالى
نشوف الجوابنشوف الاشي كامل ايو مابيدوش اشي الدارس
هذا مافيش فيه اشي يعنى شايفة اللي توحى لناها شايفة
ايو اول واحدة حطها قبل ال B شايفة لإن هذي في السطر
اللي ورا يعني كتب و بعدين حط ال B شايفة و بعدين
إيش عمل؟ حط هذه قبل ال B1 و حط هذه قبل ال B2 و حط
آخر التنتين زي ما اتفقنا قبل شوية في الآخر و اللي
وراها حط ال B1 قبل ال B1وحط ال B2 جاب بعد ال sub
.. جابل ال sub .. المهم جابل إيش؟ جابل ال B2 و
بعدين حط ال باقيين في الآخر و كله نفس النظام يعني
الموضوع simple يعني حتى لو أنا مش فاهم ال grammar
مخلص بس أه بس أشوف أبو بيتمد على ابن أقر ميه في
الآخر ال action أه لأ بيحسب inherited يعني بيحسب
قيمة حدا بحطه جابله عشان يستفيد من قيمته يشتغل هي
باختصارطيب اتأكد انكم فاهمين حاولولي اللى تاوعى
اشتغلناها ال SDD مش تاوعى اشتغلناها هذه هذى مش
تاوعى عملناها لو بدك تحوليها ل SDT كده تسوي ايش
رأيك؟ هذا وين بده نحط؟ هذا بحسب قيمة الألوان صح؟
وين لازم أحطه؟ قبل في الأول هذا بده يجهز حاله ال
one ال two بده أحطه قبلطب هنا بحسب لمين؟ للأسوان
هذا وين بدنا نحط؟ قبل الأسوان أنت حرة عادة نحط
اللي هم قبل الأسوانالـ C dot false والـ C dot true
قبل الـ C مش مشكلة المهم قبل الـ C قبل ال while
بعد ال .. المهم قبل .. طالما بيحسب للـ C values
لازم ينحطوا قبل الـ C عشان لما يفوتوا الـ C يكونوا
عارفهم طالما بيحسب لل S one value لازم يكونوا قبل
ال S one عشان يكونوا عارفهم طب ال S dot code هذا
بتعتمد على الأبناء كلهم فهذا بينحط في الآخر فهي
التحويلة تبعتها باختصار
تمام؟ هاي شايفها؟ قالت لك الـ initialization اللي
هو قبل الـ C الـ L1 و L2 و Linear و C.false و الـ
S.next هذي الـ S بتاعة مين هذي؟ إذا لأ هذي مش ..
بحسبها عشان هذي قيمة يسويها و الـ C.true خلاص؟ هذا
كله .. طبعا واحد هتقولي طب لو عملتها قبل السهم قبل
الـ Y كله صح المهم قبل الـ C لكن طلع هذي و نحطها
جاب للأسوان طب لو حطيتها دي مع اللي فوق برضه مافيش
مشاكل المهم أنه هاي طب ال S dot code إجباري في
الآخر لأنه لازم أكون شايف كل ال values و أعرفها
عشان أقدر أنا أشتغل في الآخر هي باختصار هي كالجزء
التاني خلص اللي هو من SDD ل SDT في أي سؤال؟ واضح
الأمور؟تمام؟ طيب الجزء التالت والاخير اتكلمت ..
ابتدي تسألي؟ طيب الجزء التالت والاخير اتكلمت عنه
في بداية ال chapter لما قلتلك بدنا نشيل ال lift
recursion في ظل وجود ال rules كيه بدنا نسوي؟
بقولنا بتبطل ال rules القديمة او بتبطل القوانين
القديمة تنفعني لازم قوانيني جديدة فالان تعالي نشوف
هذا المثال و نفهمههي ال rules ركزي معايا شويه هنا
ال rules وهنا مثال على ال rules تمام؟ خليني أشوف
ال rules إيش بتقول شوفوا
الشكل بنات شوفوا الشكل هناهذا .. لو هذا مخبأ لو
هذا مش موجود ال action اه اعتبر ال action مش موجود
هذا ال action تمام؟ هذه a بتعطيني ay و هذه ال a
بتعطيني x شو تحولتها؟ هتقوليلي اكيد ال a بتعطيني
خد اللي مافيش فيها المشكلة x في ايش في r شايفها؟
انسى ال actions والتاني هتخبي هذه و تقوليلي y في r
او epsilon يعني لو انت لغيت ال actions منهم كلهم
فوق و تحت هتلاقي قانونك اللي انت عارفها زمانشوفتي
كيف؟ يعني لو انت لغيت ال actions خبتيهم هتلاقي هاي
.. هاي تحولتها مظبوطة زي ما انت كنت تعملي زمان بس
اللي .. اللي انضاف على الرسمة تبعتك اللي انضاف على
القوانين ال action كيف كان ال rule و كيف اتقطع و
كيف صار هاي اللي انضاف طيب اديني مثال او وارجيني
كيف اول ملاحظة انه مش هذه اللي كان فيها المشكلة يا
بناتاطلع على ال rule اللي عندك ال rule ايش بيسوي؟
بيقولك هنا في معادلة مثلا بتحسب قيمة ال attribute
بتاع الأبو اللي فيه المشكلة تساوي something
function في أي حاجة فانت المشكلة عندك موجودة هنا و
المشكلة موجودة في ال rule لأن ال a بتهطير المفروض
في التحوير طب ماهيش هتسوي في ال a هذه؟ غلط اخليها
زي ما هي فلازم يصير فيها إشي مش هيك قلنا المرة
اللي فاتت؟ عشان أركز و أشوف إيش اللي صار فيها
تعالي اتطلعي و في الأول أشوف التانية كمان اللي
مافيش فيها مشكلةخلاص عادي ممكن يكون فيه attribute
نفسه اللي فيه المشكلة يساوي function عادية هيك
الصورة العامة لاحظ انه دائما انا بتعامل مع
attributes هنا من نوع synthesize يعني القانون
انعمل و مبني على ال attributes اللي من نوع
synthesize عارف لو في attributes تانية مش
synthesize inherited ولا غيره ببطل هذا القانون
ينفع يعني هذا القانون بس special ان لو كانت ال
attributes اللي عندك جوا في ال action من نوع
synthesize بظبط الطبق القانونو بس هو اكتفى في
الكتاب بهذا .. بهذه الحالة و كيف قانونها و خلصناها
لكن عارف لو ان ال rules كانت inherited و بتبدأ
الأخ و بتبطل هذا ينفعك يعني هذا فقط يستخدم متى إذا
كان فيه rules و من نوع synthesized okay طيب تعالى
نشوف التحويلة هذه التحويلة بس بدها ملاحظة كويسة
يعنيكيف كنا نحوّل زمان لو ماكنش في ايروك؟ كنت تبدأ
من وين؟ مش كنت تقولي ال a بتعطيني اللي فيش فيها
تبدأ من هنا ولا من هنا؟ كيف كنت تسوي؟ في قانونك
العادى، إيش كانت ال a تسوي؟ تبدأ من ال
introduction اللي مافيش فيها المشكلة، مش هيك كنت
تسوي؟ مش كنت تقولي ال a بتعطيني ال x في R؟ مش هيك
كنت تشتغلي زمان؟ اليوم نفس الفكرة، هاي شايفة؟ قالك
هي ال x و هي ال R طيب شو هدول اللي هان؟ قال هدول
أجوامن هنا اتطلعي لي شوفي هذه و قارلي لي هذه كيف
صارت و اديني رأيك انت هذه ماتغيرتش ما هي ال X و R
تعاد زمان صح؟ لكن شوفي هذه كيف فتتها شوفي هذه كيف
عملها ايش بتلاحظي؟ ايش عمل في المعادلة؟ماذا فعل؟
بس استبدل الـ A بـ R.I برمزي جديد صح؟ وخلّى الـ A
تساوي يعني .. واللي شالها سواها بإيش؟ بـ R.S يعني
كأنه ضاف في الـ Attribute R.I وR.S وقطعها حط مكان
الـ A في الأول الـ R.I واللي شالها سواها بالـ R.S
قانون ثابت الأهم ده تطبق أوريك كيف تتطبقبس في
الأول بديت انتبهي ان هاي ال production هذه اللي
بتطلع ايه قالك ال X زي ما هي ال R زي ما هي مافيش
مشاكل لكن هذا ال rule قطعه كيف قطعه؟ راح شالها يحط
مكانها R dot I بعدين اللي شالها رجعها تساوي R dot
S طب طبق مثال وارجينية تعالي خدي هاي السؤال هذا
مثال بدي نطبقه الان وين ال left recursion هان؟EET
صح؟ هنبدأ من وين؟ نقول الـE القانون عشان نقول الـE
عبارة عن إيش الـT في R مش هيك؟ و هنحط هنا Action و
هنا Action مش هيك القانون بيقول ليه؟ إيش ال Action
الأول؟ وين المعادلة؟ إيش بسوا في المعادلة هذه؟ مش
بخب اللي .. اللي هي و بحط مكانها R.I و بعدين بقول
هذه اللي شلتها بعد الـR تساوي R.S مش هيك القانون
بيقول ليه؟ هي شوف كيف تحولت هي .. وين؟هذه هي
شايفة؟ ايه بتعطيني ال TR؟ و ال R.I شايفة؟ شال هذه
استبدالها ب R.I و بعدين رجع اللي شالها و سواها ب R
.S يعني هو ماشتغلش من كيف هو اشتغل على القانون و
القصة simple خالص يا بلاي و لا ادهاش شيء القصة
simple خالص قالك هذه معدلتك اللي عندك اقسميها نصين
كيف أكسبها نصين؟ اللي هي هذه .. اللي هي هذه كيف
أكسبها نصين؟ إيش بقولك هنا؟ بقولك سيبي كل شيء كما
هو بس اللي جابلي المساوية هذي استبدليها بإيش؟ ب R
.I فانا سيبي كل شيء كما هو .. هاي شايفة؟ شيبت هايا
.. طلعي؟ وين ال .. طبعا أنا حليتها .. هايا يعني
هنا إيش هنكتب هنا؟ R.I هيك الحل تساوي إيش؟ هايا ..
هايا .. خلاص .. شايفة؟شايفة؟ سابها زي ما هي بس
استبدال مين اللي جابله يساوي وهذه اللي شالها رجعته
تساوي ايش؟ ارضه تأثر طب هو ليش عمل هيك؟ لأن
القانون بيقوله عمل هيك شوف .. منك بس مقارنة خديلي
كده كده نص دقيقة تطلع إلى حالك شوفيها شوفي إيش سوى
في القانون وإيش سوى في المثال كيف حولها؟ طابق
الأتنين شوفي تطلع فيهم
اللي مش شايفينها قولولي بعيدها مرة و اتنين المهم
تكون واضحة هذا متهاش اشي هاي زي اللعب عادية زي شوف
الفرق متهاش اشي شوف ايش عمل هنا اعملي زيه هنا
ماعلكم ان شاء الله عليكم شطرين طيبلسه التانية شويه
أكبر منها بس هبقى نخلص من السهل عشان نشوف التانية
مابيديش انا اتكون لسه مش شايفين هاي اللي مش فاهم
او مش شايف او عنده اي problem يتفضل يحكيلي عشان
اختصر الوقت مش تسألوني مش عشان .. على الأقل اعملوا
معروف اللي بدهم يحضروا ال .. ال video يمكن مش
واضحلهم إشي معين مع أسئلتكم توضح as you
like أنتوا حرينخلونا نكمل .. هل تستهلي و لا خلاص؟
طيب خلونا نكمل .. خلونا نكمل بنات خلونا نكمل إذا
أنا اللي عملته هي صارت هي يعني هي صارت هي باختصار
هي اللي سوناها من هنا كيف انتقلت لهنا نفس القصة من
هنا كيف انتقلت لهنا هي اللي صارت الآن بدأ أركز على
مين؟ على التانيات اللي هو مين التانيات؟بدي أمسح
أوريكي مين هم عشان بدي أمسح حاجة عشان بدي أركز على
مين؟ هذه خلصناها، بدي أركز على هاي، هاي، هاي،
اتحولت لمين اتحولت؟ اتحولت لهذه، لهذا الصندوق، صح؟
هذه اتحولت لهذه، بدي أشوف إيش اللي صار في التحويل
عشان أطبق على هدولاللي صار في التحويل إيش بقول
ليه؟ بقول ليه خلاص مش بدنا .. مش بدنا .. بدنا نجيب
ال R مش ال R بنصير نشتغل على اللي كان فيها مشكلة
مش هيكنا نشتغل مش كنا نخبي هاي و تكتبي Y في R و
تضيفي إبسلون مش هي كان القانون فهيعملهم ال Y في R
و ال إبسلون لكن إيش اللي بده يصير؟ هذا ال rule هو
اللي بده يعطيني هاي و هايكيف عمل؟ اتطلع ايش عمل؟
قارنى هذه ايش صارت؟ هذه خلاص ثابتة، هذه الطول
عمرها ثابتة، ماتتغيرش R.S تساوي R12S والـY R.S هذي
هتكتبينهم زي ما هم في القانون، بس التفكير، هاي كيف
صارت هاي، بس، اما الباقي ثابت، ايش بتساوي؟ ايش
عمل؟ ايش استبدال؟ استبدال كل A بـR و الـA بالـR1 و
الـA1 بالـR، وخلّى المعادلة زي ما هيومش عادي يعني
بالعربي هاي إيش تتوقع أنها تتصير؟ هيقول أكيد زائد
T ويضرب في R صح؟ طب هذه المعادلة مش هيعمل فيها
هيستبدل ال E dot vowel بR1 dot I وهيستبدل ال E1 بR
dot I ويسيبها زي ما هي هاي طلعي شوفي هيها وينها؟
هيها هيها هيها خلّي هيهاعشان ماتتهوش، هي شوفي هذه
كيف صارت وشوفي هذه كيف صارت وقولي ليش رأيك الباقي
هذا ثابت، الباقي اللي بعد هيك R.S.R .. هذا كله
هيظل ماتتغيرش هو بس هذي بتتغير شايفة؟ ساب المعادلة
كما هي واستبدل E1 بالـR1 واستبدل E1 بالـR.I ليش
واستبدل هيك؟ لأن هيك بيقوله القانون القانون بيقوله
سيب كل شيء كما هو بس اللهم هذه فيها مشكلة استبدلها
بالـRهذه الفيديوهات مش هنسيبها دلوقت .. اه و سيبي
الباقي زي ما هو وهذا اللي أنا عملته في التحويل طب
الباقي هذا التكميلة التكميلة ثابتة ما بتتغير إيش
التكميلة؟ هاي التكميلة إيش القانون اللي بيقول
التكميلة؟ حط R وحط R Dot S تساوي R Dot One Dot S و
ال Epsilon R Dot .. خلاص هذا مابلعبش فيه هذا ثابت
فكل مرة هذا ينحط زي ما هو باختصار كيف؟
هادي هيا ال left recursion ال إيه؟ ال إيه؟ واضحة؟
خلاص ايه خلص ال .. طبعا هنا امكررة كمان واحدة ايش
هيعمل في التانية نفس الفكرة ناقص T في R و هياخد
هذي يستبدل هذي بR.I و هذي بR1.I او العكس R1 بعدين
R و يسيبها زي ما هي و يكمل نفس السيناريو هاي اللي
اللي بده يشوف تحت .. شايفين؟
القانون مش حفظ بس في ناس بدون ما يشوف القانون خلاص
فهم اللعبة كيف يحل خلاص تقول مرة بيستبدل وانتهين
أو زي ما هي بيحطها وانتهين لو حلتيها مرة مرتين
لحالك مابديك قانون خلاص بتحلي عليه عادي تمام هيكأي
سؤال؟ ختاما .. ختاما .. يعني اليوم الحمد لله كانت
أخر محاضرة نتمنى ان شاء الله أنكم تكونوا استفدتم
كويس من المساق و أنكم تستفيدوا منه زي ما قلنا في
البداياتفي ال career تبعكم وفي الشغل تبعكم لأن
احنا قلنا يمكن في بداية الفصل ان مساخ ال compiler
مش بالضرورة بس تخصصيه ل ال compiler المفروض بكرا
ان شاء الله لو اشتغلتي في عملية البرمجة وفي ال
software انه تقدر تستفيدي من ال techniques
الموجودة فيه فان شاء الله تكونوا استفدتم منه اكيد
بنتمنالكوا كل التوفيق والنجاح وان شاء الله دائما
نسمع عنكوا كل الأخبار الكويسة ويعطيكوا الصحة
والعافية وكل عام انتم بخيركنت سعيد اني درسكوا خلال
ال .. ال .. الجامعة كام بساعة او اتنين او تلاتة و
ان شاء الله بنشوفكوا في المستقبل في الماجستيري ان
شاء الله موفقين و يعطيكوا ألف عافية كل عام و أنتم
بخير و تنسوناش في الدعاء تدعولنا ان شاء الله