بسم الله الرحمن الرحيم اليوم إن شاء الله بدنا
نستكمل و نخلص آخر section مطلوب منها في أربعة اللي
هو أربعة أربعة إن شاء الله يمكن احنا ختمنا
المحاضرة السابقة بحاجة اسمها LL one grammar ولا مش
LL one grammar وقولنا هذا كتير درس مهم و كتير في
أسئلة بتيجي عليهضروري تقدر أي grammar تاخديه تقدر
تحكمي عليه الالوان ولا لأ قولنا ممكن تحكمي عليه
بسرعة قبل القوانين اللي خدناها على أساس لو شفتي
left recursion لو شفتي بداية متكررة واضحة لو شفتي
انه ambiguous شجرتين لنفس ال tree على طول تقدر
تقولي مش الالوانلكن انت بتخافي تتطلع على ال
grammar تلاقي لا هو مبين فيه left recursion ولا هو
مبين فيه بداية مكررة ولا هو مبين ambiguous ساعتها
انت مضطرة تلجأ إلى القوانين التلاتة اللي اتعلمناهم
المرة اللي فاتت ان ال epsilon مايطلعش مرتين او
اكتر من مرة من ال productions بتاعة ال non
terminal نفسه انه مايطلعش نفس البداية مرتين او
اكتروإن في حال الـ non-terminal جواته إبسلون
مايتقاطعش ال first و ال follow وليش قلنا مايتقاطعش
ال first و ال follow في حال هذا ال non-terminal
يكون إبسلون لأنه لما يكون ال look-ahead واقف على
جوس مثلا و الجوس هذا ممكن يكون في البدايات تاعت
هذا ال non-terminal و ممكن يكون في ال follow فبصير
محتار مش عارف هذا الجوس هو بداية و لازم أستبدل هذا
ال non-terminal بالإيش اللي بطال البدايةوالله هو
هذا ال ghost من اللي بيجي ورايا و لازم أستبدل هذا
ال non terminal بال epsilon فبصير هنا تحيير فهذا
الشرط التالت اللي بيخليك تقول إنها مش الألوان بس
هاي التلات الشروط اللي موجودين و مش صعبين كانوا
تمام؟ و زي ما شفتي بيعتمدوا كانوا شكل كبير على ال
first و ال follow إنه لازم في كل أحوال أحسب ال
first لل non terminal عشان أقدر أعرف والله طلع نفس
ال non terminal .. نفس ال terminal مرتين ولا لأ
كيف بيجيك تعرفي؟ بيجيك تحسبي first و first و first
و تشوفي؟إذا طلع ال ghost مرتين من نفس ال
production أو productionين لنفس ال non-terminal
معناها دايش مش الألوان فابدك تنتبهي وزي ما قلنا
بتحسب ال first تاعت ممكن تضطر تحسب ال follow كمان
زي لما كانت بطلع ال epsilon ممنوع يتقطع ال first
مع ال follow وكيف نحسب ال first وكيف نحسب ال
follow برضه خلصنا المحاضرة السابقة ولاجيناها مش
صعبة كتير لكن أكيد بده شوية تركيز خصوصا لما بكون
ال first مخبىيعني عندك non-terminal .. non
-terminal .. non-terminal و بعضهم إبسلون و بعضهم
بدون إبسلون طب خلص من الأول و ممكن يستبدل بفراغة
بدي أكمل في التاني يعني بدها شوية معلومات ضروري ما
تنسيها نهائيا عشان تقدر تحلي صح و هذا كله احنا
اتكلمنا عنه باستفادة المحاضرة السابقة اليوم قعدنا
نستكمل و نشوف كيف نعمل ال parsing وقلنا قبل هيك أن
عشان أعمل ال parsing في عندي طريقتين recursiveو
non recursive ال recursive سهل خلصناه اليوم بدأ
ناخد ال non recursive و عشان انا أقدر أخد ال non
recursive ضروري أفهم الرسمة هذه في الأول هي ال non
recursive هان زي ما تشايفين بتمدش على function
تستدعي نفسها كل المطلوب عشان أقدر أعمل عملية
parsing بدى يكون في عندي stackهذا ال stack بنحط
جواته تفاصيل ل grammarلـ productions تبعت ال
grammar اللي بتوصف ال language كيف بالظبط كمان
شوية بنشوف المهم أنه لازم يكون فيه ending stack
هذا أحد الطرفين الموجودين الطرف التاني الموجود
اللي هي ال sentence اللي أنا بدي أشوفها في ال
language ولا مش في ال language بطلعلها tree ولا
بطلعلهاش tree إذا هذه ال sentence طلعلها tree من
ال grammar اللي موجود هنا معناها خلاص هي في ال
language إذا ما طلعلها treeمعناه هي مش في ال
language باختصار طيب كيف بدي اشتغل الاتنين هدول مع
بعض بدون recursion قال لازم حاجة تكون عارفاها في
الأول اسمها parsing table يعني لازم نعمل حاجة
اسمها parsing table ومن هذا ال parsing table بقدر
أمشي بين هذا و بين هذا و بين هذا كيف بالظبط هنشوف
التفاصيل بتاعة هذا ال algorithm بس في الأول بدنا
نشوف كيف نطلع ال parsing table عبارة عن إيش ال
parsing tableجال ال parsing table symbol خالص
عبارة عن جدول صندوق زي هيك تمام؟ بنحط فيه كروز كل
ال non terminals اللي موجودة في ال grammar اللي
انا بتشتغل عليه يعني على سبيل المثال لو بدنا نشتغل
على ال grammar بتاع الزائد والنقص وبضارب القسم
اللي أخدناه المرة اللي فاتت في بداية ال section
اللي هو هنا
هذا ال grammar يا بناتي لو بدنا نشتغل عليه تمام
كيف بدنا نعمله ال parsing table عشان أقدر أشتغل
عشان أعمله ال parsing table حكالي كل non-terminal
بدي يكون في raw الآن كم non-terminal عندي؟ حد
قوللي ببساطة E ومش عندي كمان؟ non-terminals مين
فيه كمان في ال non-terminals؟ E bar ومين فيه كمان؟
و T و مين فيه كمان؟ و T bar و مين فيه؟ F هدول كل
إيش ال non terminals اللي إيش اللي عندي هدول
هتعملهم كصفوف الآن بدنا نعمل كأعمدة كل ال
terminals اللي موجودين عندي مين ال terminals اللي
موجودين في ال grammar؟ هتقولي لي في عندك ال ID،
مظبوط؟ و إيش فيه كمان؟ هو عندك الزائدوعندك الضرب
وعندك الأقواس وإيش فيه كمان؟ في شي تاني؟ وعندك ال
dollar sign المهم بالعربة بدك تحطي كأعمدة كل ال
terminals الموجودين عندك وكصفوف كل ال terminals
الموجودين عندك طيب عملنا هذا الكلام إلى أن كي
بنشتغلجال مش انت حسبت ال first المرة اللي فاتت لأن
هذا الجدول بتشكل من ال first و ال follow اللي
حسبتهم يعني انت مابتقدر تعمل هذا الجدول إلا تكون
حسبتي زي ما عملنا المرة اللي فاتت ال first للجميع
و ال follow للجميع بعدين بتعمل إيش ال table بعدين
بتعمل إيش ال parsing سواء recursion أو non
recursion خلاص؟ طيب من باب التذكير لما حلينا المرة
اللي فاتتفاهم المعادرة ايش ال first E كانت يا
بنات؟ ايش ال first E؟ بديش نعيد الحل، بدي ع السريع
فتحة ال course و ال ID، مش هيك كانت؟ ع السريع و
بدي first ال E bar، مين هي؟ زائد و أبسلون، بكمل
بعدين، الان رجعلي ل first ال Eفتحة القوس من أين
أتيت؟ من أي production؟ غلط أنت الـ E .. أنا بحكي
عن الـ E، ماحكيش عن الـ F هتقولين الـ E تي إي بار
هي طلعت فتحة القوس ماليش ده قعد في الـ package صار
أنت في النهاية الـ E بتستبدلهاش بهذه ولا بهذه أنت
الـ E كل استبدالاتك إلها إيش؟ إيش عندها
productions هذه ال production هي اللي طلعت لي فتحة
القوس وبالتالي أنا بكتب قبال الـ Eوفتحة القوس ايش
باشي بكتب هنا ان ال E لما بتعطيني T E bar تحت فتحة
القوس يعني هديش معناه الجملة ان فتحة القوس بيكون
بداية ل E او بطلع من E كبداية اذا استخدمنا هذا ال
production بتاع E اما ماليش علاقة بحاجة تانية
شوفتي كيف؟ طيبالان نفس الكملة بنفس الطريقة الان
عندك ال E مع ال ID من أي production بيطلع؟ فش غيره
TE bar نفسه عشان هيك مش هاتيش تسوي هنا E سهم TE
bar فهي باختصار اذا أنا انخلصت ايش؟ اول row كامل
طبعا لو كان في production يعني في بدايات تانية ضرب
زائد كله هروح اكمل تحتهلو كان في productions أخرى
طلعت حاجات تانية كنت هستخدم ال production الأخرى
اللي بتطلع الحاجات التانية فانت بدك تكون مقيدة هذا
فتحة القوس من ال E من أي production تحديدا طلع بدك
تكتبي تحتها ال ID مع ال E من أي production بدك
تكتبي تحتها طيب بدي أفرض مثال جدلا من عندي من عندي
فرضية هيك بس عشان نستوعب الدارس أكتر لو كانت هذه
هيكوفتحة قوس مثلا T إيش هتسوي حضرتك بين فتحة القوس
و E للأسف هتحط تنتين وهذا سارنا الألوان ليش؟ لأنك
هتقول القوس بيطلع من ال E إذا استخدمت هاي أو
التانية إذا اتنين productions في نفس المربع هذا
ambiguous هذا نطأ الألوانلأن هذا معناته أن فتحة
القوس ظهرت من مكانين مختلفتين first الـte bar فتحت
قوس و first ال production التاني فتحت قوس وقلنا
ممنوع مش قلنا المرة اللي فاتت ممنوع أنه يتكرر نفس
ال term الأكتر من مرةفعلى طول بتبين معايا في
المربعات إذا كان نطق الألوان بتلاقي فيه مربع ماله
من المربعات إيش أخد جواته تنتين production فإذا
انت خلصت مربعاتك و لجيتي فيه تنتين في أي مربع على
طول بتحكم أيه على هذا أنه مش الألوان طبعا هذا مش
موجود بس أنا حطته لو كان موجود الآن أنا همسح فترة
القواصل لأنه ممنوع المرة اللي فاتت قولنا يظهر نفس
ال terminal مرتين into productions مش هيك تنسيش
القوانين المرة اللي فاتتتمام؟ طيب الآن بنفس القليل
يا بنات بدنا نشتغل على ال E bar ال E bar او ليش
ايش بيقوللي الزائد الزائد من وين طلعت؟ من هذا ال
production صح؟ إذا حضرتك هتيجي تقولي ال E bar عند
الزائد إيش هتستبدليه؟ E bar زائد T E bar في المربع
عادى بتحطيه مظبوط ولا لأ؟ طيبكملي ايش لاجينا؟ ايوة
ركزي معايا شوية هاد ال epsilon ايش معناها؟ معناها
ان ممكن ال E bar تكون فراغ صح؟ في الحالة هاد ال
look أهد علاش يكون واقف؟إذا كان صح الحاجات اللي
بتيجي بعد مين؟ بعد ال E bar صح ولا لأ؟ عشان هيك
أنا هقول ال E bar بتطلع epsilon عند الحاجات اللي
بتظهر ورا مين ال E bar في الحالة هذه أنا بالزمن
أحسب ال follow E bar إيش ال follow E bar يا بنات
مرة فاتت خدناها؟follow E bar اظن ان كانت مش عارف
تسكيلة جوس دولار اتأكدوا اننا في دفتر Q عشان نقدر
نشتغل تسكيلة جوس ولا فتحة جوس كانت تسكيلة جوس اذا
ايش هسوي عن تسكيلة الجوس يا بنات حاجة اقول عن
تسكيلة الجوس ال E bar بتعطيني epsilonليش؟ طب ..
ليش أنا أخدت إي بار تبتدي؟ لأن الـ epsilon بتطلع
من إي بار لإبسلون، صح ولا؟ طيب، على فرض أنه ماكانش
في epsilon هان، على فرض كانت مثلا بي سي والبي
بتعطي إبسلون والسي بتعطي إبسلون، هي هي، هتسيري تحط
إي بار بتعطي مين؟ بي سي، يعني أنت لازم تحط مين
اللي طلعت الـ epsilon للفلواتالأن هي الـ Epsilon
بتطلع بشكل صريح قاعد مش حاطب ال PC بتطلع بشكل صريح
من وين؟ من هذا ال production يعني في production
جاهز E bar بطينا Epsilon إذا هذا وين أنا هحطه ال E
bar بطينا Epsilon عند ال follow بتاع ال E bar إذا
هحطه هنا انا هحطه وين؟بس بديك برضه تفهم ايه
المعنى؟ ايش المعنى؟ المعنى يا بنات انه لو ال look
ahead واقف على تسكيرة ghost مسموح لك ال E bar تكون
epsilon ليش؟ لأنه انا عارف ان تسكير ال ghost بيجي
بعد ال E bar اذا انت E bar ممكن تكون epsilon نفس
الفكرة ال dollar sign بيجي بعد ال E bar اذا مسموح
لك يا E bar تكون epsilon بس في الحالتين هدول اللي
عند الرموز بتظهر بعديلكن الأشياء اللي بتظهرش بعدي
غلط أحطها ده الكلام بعدين في ملاحظة صغيرة لاحظ أنه
أنا هنا ليش ما اتعاملتش يا بنات مع ال epsilon مع
ال follow في ال E ليش ما اتعاملتش مع ال .. لأنه
مافيشش جوا ال E epsilon وطالما مافيشش جوا ال E
epsilon معناه أنا بيعنيش من بيجي ورايا لأنه غلطأنا
بستبدلش ال E بـ Epsilon عشان أتطلع اللي بيجي ورايا
فبتطلعش على ال follow طب ليش أنا في ال E bar
اتطلعت على ال follow لأن ال E bar ممكن تكون
Epsilon وبالتالي طالما ممكن تكون Epsilon معناها
لازم أشوف مين الرموز اللي بتظهر ورايا عشان أختار
ال Epsilon باختصار طب ليش الزاد ماحطتش عندها ال E
بتحت ال Epsilon لأن الزاد هي بتطلع كبدايات
فاستبدلتها على طول بيش باللي بتطلعها أنا بس ال
Epsilon بحطها عند اللي بتطلعولي ال follow، هاي
باختصاروبهيك أنا خلصت الإبارت خلوني بس أكمل بقية
الجدول و بعدين أسمع أسئلتكم الآن بنفس الفكرة أنا
بده أشتغل T بدك تحسي بفيرس T إيش الفيرس T المرة
اللي فاتت كانت؟ إيش كانت الفيرس T عندكم؟ فتحة
course و IDمن وين طلع من أي production؟ فتحة القوس
طالما مافيش شغل أي نفسها عشانك حضرتك إيش هتسوي ال
T مع فتحة القوس إيش هتيجي تحطي تحتها؟ T بتعطيني F
T bar وعند مين كمان؟ وعند ال ID هتيجي نفس الفكرة
ال T بتعطيني F T bar طيب هل هتطلع ال follow؟ لأ
مافيش epsilon عشان أقول من الرموز اللي بتيجي ورايا
فخلص خلصنا طبعا؟ طيببس خليني أكمل طيب بعدين بجي
لنقطة اللي بدأ اقولها ال T bar ايش ال first تبعها
ال first من المرة اللي فاتت تاع ال T bar ايش
بيساوي ضرب و Epsilon ايش حضرتك هتساوي مع الضرب
هتشوف الضرب من وان طلع الضرب طلع من هاي اذا هتحط
ال production هدا وين بين ال F بين ال T bar و
الضرب، مظبوط؟ هتيش تقول ال T هنا مظبوط
سهم ضرب F تي بار تي بار طيب ال epsilon ايش هساوي
فيها ايوة بدي اشوف ال follow تاع ال T bar تمام و
احط عنده ال T bar تحطين ال epsilon طبعا مش هكمل
هشوف الحل كامل الان موجود بس هاي الفكرة و بعدين
اخر ايش ايش عندك ال F ال F ايش بتطلق كبدايات هاي
فرس ال Fانتبه هنا حتتميز القوس طلع من أول
production وال ID طلع من تاني production إذا
بالنسبة لل F مع ال ID مين هتختاري؟ FID لأن ال ID
طلعت من هذا ال production فهتنسخي FID هنا وفتحة
القوس من أين طلع؟ من F فتحة قوس E تسكيرة القوسو مش
هطلع على ال follow لأنه مافيش في ال F أبسلون و
بهيك أنا عملت ال parsing table تمام؟
طيب ال parsing table هذا اللي أنتوا شايفينه ممكن
نعمل فيه تعديل طفيف كمان شوية هشوف التعديل بس ده
أقوله من الآن أنا ال E يا بنات مين ال follow بتاع
ال E؟ مين ال follow بتاع ال E؟الـ follow تعالى
إيه؟
تعالى إيه؟ مين هم؟ تسكير ال course؟ و دولار؟ أه
الآن يعني المكان هذا و المكان هذا إيش تفهمي؟ يعني
افترض ال look ahead واقف هنا يا بنات ال look ahead
وعندي أنا شغال في ال Eإيش هتفهمي أنه مستحيل تسكيرة
القص يطلع من وين؟ من ال E فالمفروض تقولي error صح
ولا لأ لكن عشان تقدر تكملي مش الفتحة القص أو
تسكيرة القص مش E بتجي بعد ال E فانت ممكن تقولي
خلاص برمي ال E و بسجر سلة error عشان أقدر أكمل
يعني هدول النقطتينممكن يكونوا نقطة بداية جديدة صح
لما يقولي E مع تسكير القوس هقوله error لأنه عمره
ما بيجي تسكير القوس من ال E لكن أنا عارف إن هو في
ال follow تعليه وبالتالي كيف بقدر أكمل أني خلاص
أنسى ال E و أشوف إيش وراه؟ هذا على ما أحجيها كمان
شوية أجلها النقطة مش مشكلة أحجيها بالتفاصيل أجلها
النقطة هذه خلاص المهمهذا الـ parsing table اللي
أنا عملته بريحني في عملية ال recursive decent
parsing و بريحني في ال non recursive طب كيف بريحني
في ال recursive؟ لو بدي أعمل ال function E يا بنات
لو بدي أعمل ال function E إيش حضرتك هتقولي؟ شوف
السهولة if lookahead idهتستدعي هذه صح؟ هتسيرش
تقولي استدعي T استدعي E bar else if ال look ahead
فتحت course استدعي T استدعي E bar else error صح
ولا لا؟ على طولطيب تعالى اعمل ال E bar كيف حدث
برمجيها بال recursive زى زمان if lookahead ID يعني
استدعى F T bar else if فتحة في ال E bar احنا
شغالين if lookahead plus match plus استدعى T
استدعى E bar else خلاص nothing مش كنا نقول else
nothing مافيش مشاكل شوفتى كيف يعني المقصدانه هذا
الجدول بريحني كتير في ال recursive decent parsing
ليش؟ لأنه خلاص الداني من الآخر هذه ال E مين
بداياتها في الجدول فانت كل اللي هتعمل ال F قلص
للبدايات و خلاص قلص الرمطبعا لحظة هذا متى يظهر
أهميته إذا لم يكن البدايات واضحة يعني افترضي هذا
TE bar او T مثلا E E bar T مثلا او مش عارف مين
ومين ومين طب انت كيف تشتغلي اختار هاي ولا اختار
هاي ولا اختار هاي صعب عليكي في الأول صح ولا لا لكن
تخيل انت عارفة in advance بدايات ال E وكل واحد ايش
ال production تبعه على طول تدخل في كودكif look
ahead كذا هاي ال production if look ahead كذا هاي
ال production else error شفت على السريع طبعا ليش
أنا ماكنتش أحس بالمشاكل زمان لأن زمان كان يعطيني
بدايات على طول جاهزة for خد كل هذه if خد كل هذه
لكن شغل اليوم البدايات مخبية فانت لما بتعملي
بارسينج تابل زي هيك انت شو سويتى طلعت البدايات
بشكل واضح لكل production مين بدايته عشان تقدر
تبرمج ال research انتبعك بسهولةفواضح إنه انعكس شغل
اليوم على تسهيل برمجة الـ Recursion وعشان تستمعوا
بيها أكتر، بدي أقول للبنات اللي قاعدين، يلا
اعمليلي Recursion لهذا اللي قاعدين هيقولوا ماشي،
إيه؟ ويعملوا يسكتوا ويقفوا، ليش؟ لأنهم مش عارفين،
يختاروا هاي و لا يختاروا هاي، صح؟ صح ولا لا؟ تقدر
تكملي؟ مش هتقدر تكمليلكن الآن بوجود هذا افترض عند
الزائد مثلا بدي اختار E بتعطيني التانية E bar T
افترض خيربوجود هذا هتحللي على طول ايش هتصير تقولي
function a if id match كذا match كذا او sorry if
lookahead plus if lookahead plus if lookahead plus
if lookahead plus if lookahead plus if lookahead
plus if lookahead plus if lookahead plus if
lookahead plus if lookahead plus if lookahead plus
if lookahead plus if lookahead plus if lookahead
plus if lookahead plus if lookahead plus if
lookahead plus if lookahead plus if lookahead plus
if lookahead plus if lookahead plus if lookahead
plus if lookahead plus if lookahead plus if
lookahead plus if lookahead plus if lookahead plus
if lookahead plus if lookahead plus if lookahead
plus if lookahead plus if lookahead plus if
lookahead plus if lookahead plus if lookahead plus
if lookahead plus if lookahead plus if lookahead
طيب ماشي هذا أحد الفوائد لل first و ال follow أو
لهذا الجدول انه سهل علي يمين موضوع ال recursion
لكن في فائدة تانية مااخدنهاش ده ناخدها الآن انه
كمان بيعمللي طريقة جديدة لل parsing لا تعتمد على
ال recursion بتعتمد على ال stack اسمها non
recursive parser اللي بدنا نتعلمه الآن يعني هذا
كمان هستخدمه في ال non recursive ده نشوف الأن كيف
نستخدمه الآن في أي أسئلة اتفضلوااللي بيسأل على كل
اللي شرحت فيه السابق اتفضل اه
لأن فرضة فرضية زيادة هو مش موجودة في السؤال في ال
E bar عفوا اه
أيوة انت هنا جادر اذا بدك تسهل على حالك في ال code
ايش تقولي سطقة للزيادة ماكناش نعمله زمان else اذا
look ahead مش تسكيلات جوس ولا دولار error جادر
تعمل error من المكان هذا على طول مش هيك؟ لأن لازم
ايش اللي ورايا يكون يا تسكيلات جوس يا دولار فممكن
تعمل الفحص في المكان هذا وممكن ما تعملهوش لأن اللي
ورايا هيعمل ماشي زي ما كنا نعمل زمان فبالعكس
هتداكي option زيادة كمان انك تريد تكشف الخطأ من
المكان على طولبطحت؟ تمام في أي سؤال تاني؟ أخر
سطرين في ال F؟في الـ E bar أه ليش هنا هنا بنسوي؟
الآن إذا ال first E bar فيها إبسلون إيش يعني first
E bar فيها إبسلون؟ يعني ال E bar ممكن تستبدل
بإبسلون هذا المعنى في الأول كيف تستبدل بإبسلون؟
يعني ممكن ال E bar نختاريها مين؟ إبسلون طب السؤال
متى أنا بستبدل ال E bar بإبسلون؟ إذا كان ال look
ahead واقف على حاجة بتيجي ورايامش هيك؟ انت متى
بتستبدل الـ E bar بالإبسلون؟ إذا كان لك أهد مش
واقف على البدايات و واقف على الأشياء اللي بتيجي
بعدي عشان هيك أنا إيش بقوله؟ بقوله بحط ال E bar
إبسلون للناس اللي في ال follow اللي بيجوا بعدي مين
اللي بيجوا بعدي ال E bar؟ تسكيبتوا الجوز والدولار
فجيت تحتهم إيش؟ حطيت بس في الحالتين هدول إحنا
بنستبدل ال E bar بالإبسلون okay؟ أي أسئلة؟ تمام؟
كمل؟ ديروا بالكوا هذا كله اللي بيبقى أشرحه مهم جدا
و كله جاي في الامتحانات تدرسوه و عشان تكونوا في
الصورة الامتحان جاهز و خلص و رجعت و حلته كما شاء
الله أطبعه بالكامل يعني انتبهوا انه خلص و جاهز
فانتبهوا رقزه فكل كلمة بحكيها الآن مهمة مضايقوش
ولا كلمة ممكن كلمة صغيرة على درجات و أنتوا مش
حاسين فكل كلمة بتنحكوا رقزوا فيها و تفهموها و
تسألوا واضح؟ طيبطيب تعالوا الآن نشوف كيف هذا الـ
parsing table هيستخدم بس قبل ما أروح أشوف استخدامه
بدا أعطيكم مثال تاني على الـ parsing table للمثال
هذا متذكرين
المثال أخدناه المرة اللي فاتت اللي قلنا ألا ألوان
و مش ألا ألوان و ختمنا فيه؟ بدنا نعمله parsing
table هذا
هذا طيب هذا المثال يا بنات بدنا
نعمله بارسينج
تابل عشان
نعمله بارسينج تابل لازم في الأولش تحليال first و
ال follow لازم تجهزيهم و احنا حلناهم المرة اللي
فاتت لكن بتكتبهم من باب التذكير ايش ال first بتاع
ال S اول شي ها ال first بتاع ال S اي و اي ثانوية
بس هنرتب عشان اللي بيدرس و بيراجع first ال S ايش
أخدنا المرة اللي فاتت كان اي و اي اي و اي طيب و
first ال أسبارE و Epsilon طيب و first ال E B طيب و
بدنا follow ال S إيش كانت دولار و ال E طيب و ال
follow لل أسفر إيش كانت دولار و ال E طيب و follow
ال E أخر واحدة
كانت الـ T بس كانت حسب ما كانت .. شوفوا احنا
حليناها المرة اللي فاتت الان عشان اعمل ال parsing
table كام رو بديكون يا بنات؟ كام رو؟ على كل non
-terminal رو صح ولا لأ؟ طبعا أيه .. هاي الأولاني
اللي هو مين؟ S ومين؟و مين و E هذا الروز طيب كام
عمود حسب اللي عندك جداش في عندك I و في عندك T و في
عندك E و في عندك A و في عندك B و في عندك Dollar
هاي كل ايش ال terminals الان كيف بنشتغل هتقوليلي
عادي انت هتقوليلي اول اشي مين فرستاتال S مين first
ال S؟ ال I من وين طلعت؟ من هاي، إذا هذه بتحطها بين
مين و مين؟ بين ال S و ال I عشان هيك حاجة بين ال S
و ال I بقول ال S بتعطيني I E T S أسبارة، هذه أول
واحدة، الآن في كمان first اللي هو ال A small من
وين بتطلع؟ من ال S بتعطي إيه؟ وين بتحطها؟ هناما
طلعتش ع ال follow لأنه مافيش epsilon طيب الأسبار
ايش ال first تبعها ال E وين نحط هنا الأسبار E S
ولأنه في epsilon بده أروح أحط الأسبار بتعطيني ال
epsilon عند ال follow تاع الأسبار وين ال follow
تاع الأسبار الدولار
و ال E كمان مرة الانش بتلاحظى انه صار ال box فيه
تنتينإذا هذا ليس الألوان و أثبتناها المرة اللي
فاتت مش الألوان عشان هيك لاحظي إيش المعنى يعني
الفكرة وين أنه لما I look ahead يكون واقف على E و
أنا جاهد في انتظار الأسباب أنا بكون محتار هل ال E
هاي هي البداية يعني أستبدل هاي بهاي ولا هل ال E
هاي هي اللي ورايا و أستبدل هاي بهاي فهنا بيصير
ambiguous هنا بيصير تحيير عشان هيك هنا بيصير
المشكلة عشان هيك هنقول لما في إبسلون ممنوع يتقاطع
ال first و ال follow تقاطعوا معناه حيظهر الحالة
هذه جوا حيظهر أكتر من ال production في نفس المربع
طبعا خلينا نكمل أخر واحدة ال follow ال first ايه
بس هتيجي عند ال ليش عند ال B بس إيش تعمليه ال E
بتاعة ال Bالآن لو سألتك هذا أسأل ألوان ولا لا، إيش
هتجاوبي؟ لأ مش ألألوان، ليش؟ لأنه two productions
in the same square أو في نفس المربع، خلاص على طول
يعني هنا بتوصلي لمعلومة إنه لو واحد قالليهذا ال
diagram الألوان و مش الألوان و روحت حبيتي تجيب
الفيرستات و تجيب الفلوات و تعمل ال parsing table و
تتطلع عليه في الآخر لقيت مربع فيه تنتين و قولت مش
الألوان خلاص كلامك صح بس مشكلة الطريقة هاي أنها
طويلة بتجيب كل الفيرستات و تجيب كل الفلوات و بعدين
تروح تجيب ال parsing table بس بتظبط عشان اللي قالش
بقول تلجأيش للطريقة هاي التلجأي أفضل للتلاتة rules
بس التلاتة rules هتعمل ال first و ال follow بس
بشكل جزئيإنه لهاي اشتقاط و مشتقاط و الاخرية وهذه
أسرع لكن إن مش جادرة و مش عارفة خلاص روح لهذه و
اتخذتبس طبعا لما أكون مجبرك في السؤال اعمليلي
بارسينج تابل مش ماتروح تعملهوش لأ بديك تعمليه
ساعتها ال بارسينج تابل بس بقول لو كان السؤال
الالوان و مش الالوان انت مخيرة تعمليه او تحليه على
القوانين زي ما بدك واضحة ال بارسينج تابل كيف
بنطلعه؟ مافيش فيش ال بارسينج تابل سهل الآن تعالوا
طب نشوف كيف عملية ال non-recursion بدها تسير
تعالوا نشوف ال non-recursion كيف بده يسير
وهنا الرسمة اللي احنا بدينا فيها، بدي أمسح الآن
هذه يا بنات، تمام؟ الآن إيش قالك؟ قالك عشان نقدر
نشتغل recursion، non recursion عفوا هذا ال parsing
تبدأ تجهزيه اللي تو جهزناه قبل شويةوال stack أول
ما ببدأ بيكون بس فيه حاجة واحدة بيكون بس دولار و
ال start symbol و فاضي بعد هيك ال stack أول ما
ببدأ بيكون فيه الدولار و إيش في ال top؟ ال start
symbol خلاص هذا ال stack بيكون زيكي هيكي لحظة
البداية و بيكون هذا الطرف جاهز اللي هو بدي أفحصه
اللي هو ال look ahead وين واقف عشان أفحص هذي في ال
grammar ولا مش في ال grammarطيب كيف بدنا نشتغل؟
جالي الآن بدك تطلعي هنا مع ال top بتاع ال stack
الآن هنا عبارة عن إيش؟ non terminal صح؟ وهنا عبارة
عن إيش؟ دايما terminal فجالك بدك تروحي على الجدول
وتشوف التقاطع تاع ال A مع ال Eجالك فيه عندك
احتمالين يا يكون فراغ مافيش اشي و هذا اللي معناه و
هنعمل action معين يا بيكون فيه production جوه الان
لو كان فراغ ايش المعنى اللي انت هتفهميه المعنى ان
ال a لا يمكن ان تظهر مع ال E عشانك في الحالة ده
ايش بنسوي بنقول ال a هذي غلط و امشي شوف اللي وراها
خلاصمش بنعمل skip للغلط كنا بنقول في أحد ال
strategies في ال recovery أن هو أول يقول كيف يكمل
خلاص يعمل skip للمشكلة و يكمل لما يلاقي إش يقدر
يبدأ من عنده صح ولا لأ؟ طيب طيب سؤال تاني لو كنتي
عارفة أن ال A بيجي ورا ال E اللي في ال stack هذا
إيش الصح؟ أنه بنرمي ال E و بنكمل من ال stack طبعا
أفترض ال stack كان ماشي مليان فيه شغلات كتيرلأنه
لما بيكون ال A بيجي ورا ال E خلاص بشيل ال E لأنه
هذه نقطة بداية جديدة الآن أنه هذا بيجي ورايا و هي
اللي ورايا هي ورايا و هي ورايا مش هيك بقدر أكمل
عشان هيك أنا بيهمني أكون عارف ال A من اللي بيجي
ورا ال E ولا لأ و بنميزها برمز اسمه sink كمان شوية
هنشوفه يعني لو أنا كتبت sink هنا يا بنات إيش هتفهم
ال sink يعني ال A ممكن ييجي ورا ال E يعني في حالة
الخطأإرمى من ال stack ليش؟ إيش يعني شيلت من ال
stack حاجة و رميتها؟ يعني روحت للي بعدها، صح ولا
لأ؟ مظلوك ولا لأ؟ و أنت ال A تيجي بعد ال E صح ولا
لأ؟ نقدر نكمل علامة هذه بتاعة التكملة جايها كمان
مرة يعني، مش مشكلة، خلّيها جايها كمان مرة ارجع
الآن تبرفش ال sink كيف أنا معاكم؟الان تبقى لا فيش
sink جايها كمان مرة .. كمان شوية الان خلينا نفعل
احتمالين فيش غيرهم الاحتمال الاول انه فراغ و انه
لا يمكن ال A تطلع من ال E و انه نعمل رسالة error و
نعمل skip لمن؟ لل A و نكمل الاحتمال التاني انه هنا
يكون فيه اشي اش يعني فيه اشي؟ اش الاشي اللي بيكون
ان ال E بيعطيني مثلا TE bar مثلاإنه بأعطيني
production مش انا اتوقع انه نقطة production في
الحلقة ديش هتسوي حضرتك هتشيل ال E من ال stack و
تحط مكانه بالمعكوس تحط مكانه E bar T لصير ال top
هو ال T ليش بياخدوا ال top بال T لإن دي first high
انا في النهاية فبحطهم بالمعكوس شوفت كيف ال stack و
بنكمل عادي الآن A مع مين مع T بتشوف A مع T افرض
لجيت T بتعطيني Aهنشيل ال T ايش هنحط مكانها؟ ايه؟
ماشي الحال؟ طب ايه مع ايه؟ مظبوطة مظبوطة خلاص pop
من ال stack تجوزت الفحص وامشي يا look ahead انه
مافي مشكلة في الأول وكمل طب امتى بنخلص؟ اذا وصلنا
لل dollar sign مع ال dollar sign بدون أي errors
معناه هذه ال sentence مكتوبة بشكل سليم وصحيح وفي
ال languageإذا كان فيه أخطاء مش مكتوبة بشكل سليم
كل شخص يقول لي اقرر ويكمل اقرر ويكمل كيف يكمل كمان
شوية هحكي عن التكميل انا في الأول هعطي مثال بدون
أخطاء انه يمشي كامل صح و بعدين هنعمل انه لو في خطأ
كيف يكمل واضحيت عشان نسوي تعالوا ناخد مثال مافيه
أخطاء خليني بس ناخد المثال و بعدين نسمع الأسئلة
خليني أخد المثال هاي المثال يا بنات بقولك بدنا
نبدأ نتأكد هاي ال stack
هي أول ما بنبدأ يا بنات ال stack إيش بيكون فيه على
ال top أول start symbol وهذه الجملة الصحيحة اللي
مافيش فيها خطأ اللي بدنا نعملها عملية parsing إننا
نتأكد إن هي في ال language ولا مش في ال language
وتنتهي بإيش؟ بالدولار أول ما هتبدأ حضرتك هتروحي
على ال parsing table تشوف ال ID مع مين؟مع ال E،
روح تطلع التقاطع تبع ال ID مع ال E، إيش هتلاقي
فراغ ولا فيه production؟ فراغ طلعت يعني، روح شوف
ال ID مع ال Eفي production اللي هو E T E bar صح
ولا لأ؟ إذا إيش هنسوه في الحالة هاي؟ هنشيل ال E
ونحط مكانها بالمعكوس E bar وT ال T تصير هي ال top
عشان ايش قالك؟ قالك شيل ال E وحط مكانها إيش؟ E bar
T بحيث ال top من يكون ال T الآن كملي كل ما بتلاقي
ال terminalnon-terminal روح على الـ parsing
terminal عشان تحسم الأمر أنه في خطأ ولا كمل إذا في
إشي معناه كمليه في ال stack عيدي ID مع T روح يشوف
الجذول ID مع T إيش هتلاقي في المربع هتلاقي إشي
مكتوب إيش يعني إشي مكتوب يعني شيل ال T لحالها و
استبدليها ب T bar و F شال ال T إيش يستبدلهابتيبار
و F الآن عادي ID مع F طلعي في المربع تقاطه ID مع F
هتلاقي F بعطيني ID يعني شيل ال F و حطه مكان ID
الآن هتلاقي ID ID في الحالة هذه بوب امشي ا look
ahead يعني خلاص هذا صح هذا موجود هذا بطلع مافيش
مشاكل فكيف بدي امشي الآن بمشي look ahead خطوةيعني
بيصير وين واقف اللوك هتقعد زائد و ال stack بيشيل
ال top اللي هو ال ID بيقول خلاص صدفش فيه مشاكل و
بنكمل عد نفس الطريقة يا بنات زائد مع مين؟ مع اللي
كان على ال top زائد مع ال T bar، روحوا شوفيها إيش
بتلاقيها؟ epsilon ال T bar، بظبط؟ فرح مسحها، الآن
إيش ضال؟ زائد مع E bar، روحوا شوفيها هتلاقيها زائد
T E barمظبوط فشار ال E bar و حط مكانها زائد E bar
زائد مع زائد بيشيلوا بيشيلوا بيكمل ID مع ID هيكمل
كمل كمل لما في الآخر يوصل دولار مع دولار يعني خلص
بتطلع مافيش ولا أي خطأ ماصارش فيه أخطاء يبقى فعلا
ال sentence هاي هي في ال language فهو فعليا إيش
عمل؟ هو عمل parsing يا بنات هنا بس على شكل non
recursiveماعملهاش ال cares ال function تسادي نفسها
كل قصته stack و look ahead و parsing table شيل في
ال stack و حط في ال stack و شيل في ال stack و حط
في ال stack لما يخلص dollar sign مع dollar sign
خلصنا في ال language موجودة هذا لو كان مافيش أخطاء
الآن هنعيد المثال لو كاتبين خطأ طبعا لازم إذا
كاتبين خطأ مش يقول error و يطلعيقول الـ error
ويكمل ال parsing لما يخلص دولار مع دولار ويكون
كتاب لرسائل الخطأ مش هيك اللي المفروض يسوي طيب
جابلي الألم أروح على .. بتاع الأخطاء في أي مشكلة
حد مش فاهم كيف عملنا ال non-recurgent parsing
simple خالص زي ما أشايفه بس تابعي مع ال parsing
تابعيفي أي أسئلة يا بنات؟ في أسئلة ولا خلاص؟ طيب
خلونا الأن ناخد خطأ يعني نعتبر أن الجملة المكتوبة
فيها خطأ بس قبل ما أعتبر الجملة فيها خطأ بدي أحسن
ال parsing table شوية احنا مش تاوي عملنا ال
parsing table هيو يا بنات ال
parsing table هيو مش هذا عملناه
أه؟ بدي أحسنه شوية، شوفوا كيف بدي أحسنه، راجزوا
معايا، راجزوا معايا إحنا اتفقنا إنه لو كان الـ
look ahead terminal و
ال top بتاع ال stack non terminal، إيش اتفقنا
نسوي؟ بدي نشوف المربع التقاطهإذا في إيش بيستبدل،
بيستبدل، صح؟ افترض أجينا بين الزائد والإي لقنا
فراغ Stop Error خلصنا، بدك تسجل رسالة Error بدنا
نشوف كيف نكمل الآن كيف نكمل الحين في الأول خلاص
طالما الزائد فراغ إيه معناه الزائد بيطلعش من الإيه
معناها أول حاجة error الآن ضال السؤال طب كيف أكمل؟
ألغي من وين؟ ألغي من ال stack؟ ولا ألغي من ال look
ahead؟ ألغي من هنا؟ أي و ركزي معايا قال إذا هذا
الزائد مش من الناس اللي بيطلعوا بعد ال Eبطلعش كمان
بعد الـ E لا هو بطلع من الـ E ولا هو بطلع معاه بعد
الـ E معناه خلاص برايح راسي و من وين بشيله من فوق
بقول هذا لا يمكن يبين معايا خلاص بقول error انت
كاتبلي زائد زيادة و خلاص امشي يا look ahead وكمل
عملية ال parsing سؤال لأ طيب افترض لو كان انه زائد
من الناس اللي بتفهر بعد ال E و افترض هنا كان في
مثلا A bar و في T و في .. مليان ال stackولا جيت
الزائد ولا جيت ال E وعندي معلومة من زمان أن الزائد
ممكن يجي ورا ال E كيف نكتكملي أشيل ال E وخلاص و
أكمل الزائد مع ال E bar ولا أمشي من الزائد اعمله
skip ايش الأفضل؟
ليش؟ طيب ما هو الزائد ممكن ييجي ورا الـ E صح؟ طب
ما أشير ال E و خلاص صرت في نقطة بداية جديدة مش
أهلا بيقول الزائد ممكن ييجي ورا ال E صح ولا فأنا
خلاص برمي ال E و بجيب اللي ورا هي نقطة بداية جديدة
أن أنا أقدر أكمل كودياحنا الان skip كنا نكمل يا
بنات ال strategy مش كنت بتعمل skip skip skip لما
تمسك نقطة أنك تقدر تبدأ من عندها طب ما أنا الزائد
هذه ما هي بتيجي ورا ال E ما أنا لو رميت ال E هاي
خلاص بدأت من جديد صح ولا لأ مش أنا بدأو نقطة بداية
لكن إذا الزائد لا يمكن يضام ال E ولا ورا ال E بس
ينرمي من فوق لغاية ما ألاقي حاجة أبدأ من عندها
المشكلة عند ال error لازم تقدر تلاقي نقطة تقدر
تبدأ من عندهافأنا طالما بعرف أن الزائد ممكن يجي
ورا ال E ما خلاص ما برمي ال E و بمسك اللي وراها
فصارت ال E bar مع الزائد مرشحة إيش؟ اتكمل عادي
طبيعي عشان الزائد بيجي ورا ال E رمينا ال E خلاص
صرت في اللي وراها إيش أنا رميت ال E؟ يعني تبتدت
فيها فراغ وسجلتي error معناه ممكن تقدر تكملي فعشان
تخديها من الآن قاعدة ومسلمةإذا كان هذا فراخ بدك
تفحص الزائد مع ال E هل هذا الزائد ممكن من الناس
اللي بيظهر ورا ال E؟ أه ممكن إذا بترمي من وين؟ من
ال stack لأ مش ممكن كمان يجي ورا ال E بترمي من
وين؟ من فوق، هي باختصار بس ضال السؤال طيب أنا كيف
أعرف بيجي و لا بيجيش؟ من ال follow عشان الحضرة
جنابك تعالي لل follow E مين هم ال follow E كانوا؟
مين هم ال follow E؟ال follow E ارجع شوفيها ال
follow E تسكير القوس و الدولار مش ال first ال
follow هذا مش ال T يا بنات هذا .. هذا خلاص هذا مش
مثال تاني هذا .. هه .. هذا جديد هذا .. هه .. هذا
قديم هه .. خلاص هذا .. ايوة نسوى تسكير القوس و
الدولار ايوة عشان هيك هنجي عند تسكير القوس ايش
هنكتب؟ هنكتب كلمة sink ايش مقصود فيها sink؟إنه هذا
يظهر بعد هذا و هذا يظهر بعد هذا و هدول ما كتبتش
عنده sink لأنه لا يظهر خلاص ريحت دماغي طب هنا ليش
مافيش sink لأن استخدمت ال first و ال follow هنا في
sink اه لأنه مافيش follow ايش ال follow بتاع ال
تيكان يا بنات؟ ايش follow التيكان؟ شوفوا الدفتر
عندكم ايش follow التيكان؟ الزائد يعني هحط عندها
sink و الدولار sink و مين كمان؟Sink خلاص و هذه
مابحطش فيها sink لان استخدمنا ال first و ال follow
و الأخيرة استخدمنا ال first ايش ال follow بتاع ال
F follow بتاع ال F ايش ال follow بتاع ال F اللي
حلينها المرة الماضية بقمين اتضارب طيب
تعالوا لان نشوفبنات راجعوا شوية تعالوا نشوف كيبنا
نحل على الأخطاء الآن تعالوا نطلعوا نشوف كيبنا نحل
الآن افرضي .. افرضي ان ال look ahead واقف على زائد
وانا شغال في E ايش هتسوي حضرتك في الحالة هاي error
error وكيف هتكملي حرف على الزائد حرف على الزائد
لأنه لا يمكن الزائد يجي ورا ال E ولا يبدأ من ال E
نبقى مع السلامة طب افترضي كنا ..الـ look ahead هنا
و هناخلاص برفعليه لأن sink معناها أن هذا بيجي ورا
ال E فممكن أكمل من عنده فبرمي من ال E عشان هي كبس
عدلت الجدول اللي حطيت الصينكات هدول لما بتشوف
الصينك .. يعني دلوقتي ستحتي تلت احتمالات في
التقاطع يا فراغ يا sink يا production إذا
production تستبدليه ومشينا إذا فراغ أبيض ارر و
بتشيلي من فوق إذا sink برضه ارر و بتشيلي من ال
stack طب ليش شيلت أنا من ال stack لأنه نقطة بداية
جديدة لما بشيل ما هذا بيجي ورايا و ورايا فمقدر
أكملشوفتي كيف؟ فهي ال .. ال .. ال sink و الحين
بناخد مثال و بعدين نسمع أسئلتكم و بنختم ال session
هذا بس في الأول أنا بدي أعمل ال sink هاي شايفين يا
بنات؟ هاي اللي توع حليناها إحنا أيوه .. أيوه عدله
و عمله جاهز للأخطاء و حط ال sink زي ما احنا عملنا
بالظبطيبقى لما بدك تشتغلي على الخطأ أنه يعمل حسابه
الخطأ هتشتغل على هذا الجدول المعدل مش الـ parsing
table اللي قبل شوية واضحة؟ طيب تعالوا الأن ناخد
مثال افترضي كتب زي هيك يا بنات بنات افترضوا كتب زي
هيك لاحظوا أن هذه فيها إيش؟ فيها errors فعلا لأ
تعالى نشوف عملية ال parsing كيف هتم طبعا بس في
ملاحظة صغيرة قبل ما نشتغل احنا قلنا اذا التقاطع
sink من وين هترمي؟ من ال stack بس في استثناء واحد
إذا كان هذا الـ non terminal اللي بدك تشيله هو ال
start و لسه بدين بشيلهش عارف ليش؟ لأن لو حضرتك
شيلتي هي الدولار وهي ال E لو شيلتيه خلص هتبطل اعمل
parsing بس قال لي هي الاستثناء الوحيد انه لما بكون
انا داخل لسه من ال start symbol تجاوزا بشيل من
وين؟ من فوق عشان يقدر يتكمل لكن لو ال E هادي في
النصف فوق بشيل منه عادي خلاص تعالوا نشتغل
هيقارن هاي مع ال E هتروح تطلعي هتلاقي sink المفروض
كان يشيل من وين؟ من ال stack بس لأنها ال star
symbol هيشيل من وين؟ من فوق فال look ahead where
هيصير؟ ال look ahead هنا و إيش هيسج رسالة؟ arrow
فهي أول arrow لقطه وقدر يكمل الآن طيب ال ID مع ال
E روح يشوف تطلع ال ID مع ال E تي إي بار ال ID مع
ال Tف تي بار مظبوط ال ID مع ال F زي ما كنا نشتغل
ID ID بوب ID بوب ID ضرب مع تي بار ضرب ف تي بار روح
شوف ايه المتجهة موجودة درب مع ضرب بيروحوا الزائد
شوفيها مع ال F شوفيها الزائد مع ال F sink ايش يعني
sink يعني شيل ال F كاملي لأن هذا الزائد ممكن تجي
مع اللي ورايافعلى طول شال ال F وكمل طبيعي بس إيش
سجل؟ error زائد مع T bar هتلاقي epsilon زائد مع E
bar خلاص كمل عادي لما خلص لكن الخلاصة طلع كام
error؟ errorين وخلاص ومش بارسنج طبيعي شفتي كيف؟
واضحيت؟ في أي مشاكل؟ الآن بدا تسأل .. تسأل
مافيش أسئلة؟ كل عامة بخير طيب break قبل ما أنتقل
لل chapter الجديد قبل ما أنتقل لل chapter الجديد
بدي بس سؤال للشاطرين سؤال للشاطرين الآن
إيش الستراتيجية بتاعة ال error اللي احنا
استخدمناها هنا إذا أنت تتذكر احنا كنا فيه أربع
استراتيجيات لل error ال panic mode و ال phrase
level mode و ال global correction و ال error
production مظبوط أخدنا أربع احنا هاي أي واحدة فيهم
ال panic ولا ال phrase ال panic ولا ال phrase إيش
ال panic معناها؟ إيش ال panic معناها؟إنه لما بلاقي
غلط بيبقى يعمل skip، skip، skip لما يلاقي بداية
يقدر يبدأ من عندها إيش ال phrase بيعمل؟ إنه لما
بلاقي غلط بيحاول يفهم معنى الغلط و يكمل هاي من
النوع عيّن ال phrase ولا ال panic الأول اللي هو ال
panic ليش؟ لإن أنا لما بلاقي errorبصير أدور على
بداية جديدة، صح؟ يا بعمل skipات، يا إذا هي بتجي
ورايا برمي من تحت، صح ولا لأ؟ طب السؤال كيف هذه
ممكن نطورها، نعدل عليه ال books هذا على أساس نعمل
phrase level recovery، إيش نسوي؟ كيف
أعمل هذه الجثة؟ كيف نعمل .. هنا panic mode
recovery، كيف نعمل ال phrase level؟كيف نعرف؟ أنا
أقولكوا باختصار عشان كوش شكرين، تمام؟ الآن، لو بين
الزائد والإي لجيتي فراغفي البنك اللي كنتش هتسوي
تعمل skip للزائد صح؟ عشان تصبح phrase بدك تحط
function هنا معينة تسميها مثلا fail ويروح على هذه
ال function ياخد الطرفين الزائد والإي ويحاول يتعرف
على الغلط ويعرفه هل ال إي زائد زيادة زائد ناجس
ويحاول يفتي فيه ويطلع نتيجة ويكمل يعني بس الفرق
الوحيد أنه بدل ما نعمل skipبدنا نعمل ايش؟ details
function انه يروح على ال function يشوف شو الغلط
اللي موجود تحاول تعمل expectation له وبعدين تكمل
هذه الفرق الواحد بينهم شوفتي كيف؟ انه ماعملش ي
skip ومشي لأ راح أخد الطرفين وحاول ايش يعرف شو هذا
غلط وهك ال phrase ال phrase برميشال phrase من مطرح
ما بيصير الخطأ بيحاول يعرف شو هو الإقصار نسي زائد
كتب زائد فبيحاول يعمل شوية ال process اللي اتعرف
عليه و يقدر يكمل هذه باختصار واضحة يعني التعديل
طفيف لو بدنا نخليه يعمل ال phrase خلاص؟ لكن هو
بالحالة هذي إيش panic خلاص؟ الآن تعالوا ندفوت على
ال chapter الجديد طب أنا بناهي هذا ال chapter
الجديدزي ما تشايفين بالنسبة إلنا مش جديدsyntax
directed translation واحنا عمليا أخدنا نوعين
syntax directed definition اللي هو بيكون فيه rules
منفصل عن ال grammar وفعليا بيكون عندي نوع تاني
اللي هو translation scheme اللي هو بيكون ال rules
موجودين وين جوا ال grammar و بنعلمهم بال brackets
هدول عشان نعرف أن هذا ال action الموجودبإمكانك انت
تعتبري chapter خمسة في الغالب مجرد exercises زيادة
و أصعب شوية لأن احنا أخدنا كتير أسئلة في ال syntax
directed definition و translationوكنت مرشحة تاخد
أسئلة عليها في المتحان النصفي وبتوقع لما رجعتي
النماذج النصفية السابقة شفتي كتير أسئلة لل
Transition Scheme ومن هرده انك قعدت تحلي فيهم
واحنا already أخدنا انت بتتذكري حول من infix ل
postfix احسب قيمة ال value عند ال root اخدنا اعمل
تبع ال symbol tables أخدنا كتير أمثلة غير أسلوب ال
exercises طب إيش اللي بيصير هنا اللي بيصير هنا
مجرد أمثلة جديدةأصعب نوعا ما شوية في بعض المناطق،
تمام؟ لكن أنا عندي الإمكانيات نحلها، ليش؟ لأن أنا
عارف من زمان أنه لازم أفكر في الأول كيف أعمل ال
grammar للبسه في اللاجوش، بعدين كل production كيف
أعمل ال rule على جباله اللي بيقدر يعمل
translation، فهذا الكلام لن يتغيرلكن ضال السؤال
تختلف من صيغة إلى آخر ف انت ما تجلجي من هذا ال
chapter ال chapter مافيش فيه إشي جديد كتير فيه
معظم مجرد exercises وأسئلة جديدة طبعا أول ما ببدأ
ال chapter ببدأ بمثال في الأول ببدأ زي ما تشايفين
بتعريفالنوعين اللي عند ال SDD انه بكون ال rule
منفصل يعني بحل في الأول بعمل ال tree و بعدين بعمل
ال annotated اني أحل عليها ال rules عشان تطلع
النتائج اللي بديها عملتي التحويل او ممكن يكون
موجود direct جوا ال grammar وهذا بنسميه ال
transition scheme فبدأ يوريكي البدايات هاي عساس ان
انت كأنك مش عارف اشي لكن هذا كله انت عارفاه فهنمشي
عنه بسرعة مش في اشيطبعا هنا يمكن في حاجة جديدة
بسيطة في الـSynthetic Definition في حاجة اسمها
الـSynthesized Attributes وفي حاجة اسمها Inherited
Attributes احنا مين أخدنا منهم الـSynthesized ايش
كان الـSynthesized Attribute معناه؟إن ال attribute
عشان يتحل قيمته في ال annotated parsing tree بعتمد
على ال children على حاله أو على ال children تبعونه
عشان هيك احنا لما كنا ناخد الدرس هذا زمان كانت كل
ال attributes اللي نتعامل معها من نوع synthesized
عشان هيك كنا نقول زمان ال bottom up traversal أو
ال depth traversal بيسد الغرض ان يحل كل ال
attributes لأنه بتشوفي دايما في الطريقتين هدول ال
children قبل ما تشوفي مين ال parent و بتقدر يتحلي
لكن لو اليوم قلتلك ان لأ في عندي inherited ايش ال
inherited ان عشان احل ال attribute بتاع ال node
بيلزمني اعرف معلومات من ال app attributes من ال
app اوالـ siblings من الـ إيش اللي معايا في نفس ال
level وبالتالي زي عملية ويراثة يعني لازم أورث
القيم من برا عشان أنا أقدر أحله وهذا بنسميه
inherited attribute يعني بيعتمدش على أولاده عشان
الحل بيعتمد على ناس يا parent يا siblings وبالتالي
هل طريقة ال bottom up traversal و ال deep
traversal بتنفع؟ مابتنفعش ليش؟ لأنه في ال deep
traversal أبقى بشوف الأولاد قبل الأبلكن هنا عشان
أقدر أحسب قيمته لازم أشوف ال app و الأخوة قبل ال
node وبالتالي أكيد في لها طريقة معينة عشان نقدر
نحسب ال attributes بس مش اليوم المرة الجاية هناخد
الطريقة هاي تمام؟ بس من اليوم افهم الفرق بين ال
inherited و بين ال synthesized طبعا في ال grammar
هل كلهم بيكونوا synthesized؟ هل كلهم بيكونوا
inherited؟ هل هما mixing؟ حسب السؤال ممكن تلاقيهم
كلهم synthesized زي السابق وكنا نسميهم as
attributed فهذا كان تظبط معاه ال bottom up
traversal و ال depth traversalو ممكن يكونوا mixing
inherited على synthesize و في الحالة هذه ميكفيش
لحاله ال bottom up ولا ال depth of the basin لازم
زيارات لل note بطريقة مختلفة هتشوفها المرة الجاية
علشان نقدر إيش انحل ال attributes الموجودين عندى
طيب هذه ملاحظة ماحدش يقولي خلص قبل إلا ربع دقيقة
عشر كتير ممكن خلصنا بس ال chapter هى العلم اللى
بتدوروا عليه ما شاء الله عليكم شطرين
طيب بنات لحد تلان انا بتطمنكوا يعني العشر دقايق
بتحكي فيهم مراجعة يعتبر مافيش اشي جديد هذا المثال
شايفينه؟أخدتهوا قبلك ولا لأ؟ هذا أول مثال بدأنا
فيه ماكانش مشروع عندكم في الكتاب لكن مشروع اللوح
اللي هو احسب ال value بتاعة ال infix and ال root
هذا ماكانش موجود في الكتاب مثال الكتاب كان ال
postfix بس أنا شرحت هذا المثال أول مثال أخدناه ف
.. فايه زي ما نشوفه؟ ايه ال infix وكيف نحسب ال
value and ال root فبدأ يعملك ال grammar و بدأ
يعملك ال definition طب كيف نعمل ال annotated يا
بنات؟أكيد هيديني sentence أعملها letter E في الأول
و بعدين أبدأ أحل عليها ال notes و هنا بظبط ال
bottom up traversal و الدب في ال traversal ولا لأ
بظبط لأن أي attribute بيتمد على ال children يعني
اتطلعي تيد وتبال تحت الأب و بتساويvalue الأبناء
الأب مستوى الأبناء فبالتالي هذا من نوع synthesized
attributes هذا ال grammar كله as attributed يعني
كل ال attributes فيه synthesized وبالتالي bottom
up أو different traversal بتقدر الغلط طبعا هو عمل
مثال عمل
مثال هاي المثال
جالك كيف نعمل تلاتة ضارب خمسة زائد أربعة عادي
عملها parsing tree بعد ما عملها parsing tree قعد
يحل ال attributes لغاية موصلة النتيجة عند ال node
وهذا المثال حلناه في أول الفصل تمام فهذا اسمها
annotated parsing tree طبعا هنا في معلومة مهمة
ماخدنهاش بس بذكرها ايش بيقول دايما ال semantic
rules تبعتك حاولي ما تكونش ال dependencies تبعتها
circular بمعنىما تكونش ال a مثلا .. اه يعني خليني
أورجكيها فوق مكتوبة ما تكونش ال a عشان تنحسب
بديعرف ال b في الأول وما تكونش ال b عشان تنحسب
بديعرف ال a في الأول طب هيك صار مشكلةإن مين أعرف
الأول هذا بقت ما اتفتت بيتسميه ال circular أو
dependences طبعا مش شرط يكونوا اتنين ممكن يكون زي
هيك عشان أعرف ال A بدي أعرف ال B وعشان أعرف ال B
بدي أعرف ال C وعشان أعرف ال C بدي أعرف ال A برضه
هذه نفس الفكرة أنا مش قادر أعرف هذه قبل ما أعرفهاي
ومش قادر أعرفهاي قبل ما أعرفهاي ومش قادر أعرفهاي
قبل ما أعرفهايفنفس الفكرة فبقولك حاولي تنتبهي ان
ال dependencies ال circular بالطريقة هاي هذا مشكلة
مابتجيش اي طريقة ان انا اقدر احل عليه فبنحاول
دايما ان ال semantic rules اللي هنا ماتاخدش هذا
الشكل ال circular ونحاول نحله لكن في حال وجوده
اكيد هيتعامل معاملة خاصة و هذا برا ال scope تبعنا
خلاص؟ طيب الان هذا ال grammarعبارة عن ايش يا
بناتي؟ شايفين هذا؟ شايفين هذا؟ لو قلنالك نعمله
predictive parser بنقدر ولا لأ؟ predictive parser
بنقدر ولا لأ؟
نقدر نعمل predictive parser؟
أنا بحكي لهد ليش؟ ليش هفيل؟ في lift recursion واضح
ت ت هي ت ت إ إ إ في lift recursion عشان نعمل بتكتب
بارثر لازم حد بتشيل ال lift recursion في الأول بس
هنا قعدت في مشكلة جديدة عليها ماكنتش زمان زمان أنا
كنت أخد ال grammar لحالي بدون rulesأو إذا كان فيه
rule جواته كان print زاد إشي مش مؤثر مش حسبة صح
ولا لأ اليوم الوضع اختلف إذا ال rules هذه داخلة
جوا مابقدرش أشيل ال left recursion بدون ما ألاقي
طريقة للتعامل مع ال attributes إيش أسوي في ال
attributes؟ يعني أديكي مثال بسيط هذه إيش تحولتها
بنات في ال left recursion؟ هتقوليلي T
السهم طبعا ال T bar أنا بحكي عن ال T bar مديش ال T
العادية ال T bar هتقولي ضرب F T bar مش هيك أنا
بحكي عن ال T bar و في الآخر or epsilon مظبوط و ال
action هذا لو دل قاعد زي ما هو طب وين ال F هذي وين
ال T مافيش T شايفك كيف؟أنا إيش بقول، الآن انت
مخيّرة كيف تساوي، هيك ممكن تفكيرك الأول يكون إنه
اعتبر ال action كأنه مش موجود وحلي وحطي مش هيك
ممكن تفكري كنت لو حطيته زي ما هو وشلت ال left
recursion، هيصير فيه خربطة، ليش؟ طب ال action في T
ضد ذال، طب المعادلة الجديدة بطل فيها T أساساصح ولا
لأ؟ طب كيف من وين بتجيب هذا ال value؟ إذا واضح
أنها مابتركبش، مابتظبطش، مابتيجيش، إذا مستحيل أنا
أشيل left recursion إذا في عندي action و حسابات
بدون ما أخد في الحسبان الحسابات تبعتي، شفت انت
كيف؟ فهي اللي بدنا نقوله عشان هيك .. طب إيش الحل؟
الحل أن فيها هنتعلم بعدين قانون جديدفي آخر محاضرة
للـ left recursion في حال وجود rules كيف ينعمل الـ
left recursion وكيف يتعامل مع ال rules عشان يطلع
الإشي صح هذا مش اليوم هناخده القانون هناخده بعدين
المهم لما يطبق هذا القانون على هذا المثال هيطلع
معاه أي grammar اللي توشفناه هاي هذا ال grammar
شايفين هذا ال grammar عبارة عن إيش يا بنات؟ هذا ال
grammar شل ال left recursionانسى ال rules .. انسى
ال rules .. مش كنت تشيل ال left recursion قبل هيك
و يطلع هذا الجواب فت بار و ت بار ضارب فت بار او
ابسلون مش كنت تخليه زي هيك اليوم مش اللي جات جديد
انه أخد بالحسبان و هو بيشتغل ال semantic rules و
اتغيرت شايف ابطرت ال semantic rules زي اول و كيف
طلعت ال semantic rules هذه هناخدلها قانونها قدام
بس المهم انه صار في عندي grammar
مضمونًا شبه السابق اللي قبل شوية شوفته لكن شكلًا
يختلف، بس صار شكلًا مناسب لمين؟ لـPredictive bar
صار، الآن طيب بتقدر نعمل 3 ضارب 5؟ بتقدر تعمليها
ولا لا؟ هه بندق بدون in هذا مش حاضر، 3 ضارب 5
بتقدر ولا لا؟ كيف بتعمليها؟ ال T بتعطيني F T bar و
ال F بتعطيني طبعًا إيش نقول؟أف تي بار وال تي بار
بتعطيني طبعا الأف الأولاني هتعطيني تلاتة والتي بار
هتعطيني درب أف تي بار والأف هت بتعطيني خمسة والتي
بار الواحد هت إبسط خلاص بتطلعيها يعني هاي بالعربي
نفس ال language اللي كانت قبل شوية لل infix لكن
اللهم شال ال lift رجل المرة الجاية بنكمل من هنا
يعطيكوا العافية