بسم الله الرحمن الرحيم اليوم ان شاء الله احنا
هنستكمل ال context-free grammar اللي أخدناه
المحاضرة السابقة و هنحاول اليوم ان شاء الله ناخد
مجموعة من الأمثلة و في الأغلب اليوم هنحاول يكون
المحاضرة باتجاهين يعني انا هحاول كتير اسألوبدي
منكم إجابات وبدي منكم مشاركة وبدنا أنتوا تعلقوا
حتى على اللي بيشاركوا يعني في طالبات اللي بيطلعوا
حلو على اللوح مثلا بدي حتى اللي قاعدين يعلقوا على
الجواب تبعها جوابها صح جوابها غلط إلى آخرهمالتذكير
اللي أخدناه المغرب اللي فاتت احنا حكينا في ال
syntax analyzer في عندي ثلاث أركان أو ثلاث أجزاء
لازم أخد بالي منهم الجزء الأول اللي هو ال tokens
اللي كتبهم المبرمج اللي جاييني من ال lexical
analyzerوالجزء التاني ال grammar اللي بده يوصف ال
syntax language والجزء التالت عملية ال parsing أو
عملية تشكيل لتري اللي بتتحقق ان المكتوب يطابقالـ
syntax قولنا لو letter E طلعت للآخر بدون مشاكل في
عملية ال parsing اللي هنتعلمها معناها أنه كاتب
المبرمج بطريقة سليمة تتطابق مع ال syntax في حال
عدم القدرة على إخراج هذه letter E و أننا مش قادرين
نطلعها من هذا ال grammar معناه أن المكتوب لا يطابق
ال syntax تبع ال language و يمكن ركزنا في محاضرتنا
السابقة علىكيف أوصف ال syntax من خلال ال grammar
هو اسمه context free grammar لكن احنا من باب
التبسيط سمينا ال grammar رح نقدر نقول خلال الفصل
ال grammar قولنا المرة اللي فاتت ان ال grammar
بيتكون من ايش؟ من مجموعة من ال productions ال
production الأول موجود عندى non terminal سهم
mixing terminals, non terminals من الإتنين على حسب
تمام؟ وقلنا إن أول production وأول non terminal هو
ال start symbol إلا إذا طبعا هو حاجة غير هيك هذا
ال default تبعناوهدوة مجموعة ال productions هدول
المكوّنين من ال non-terminal والterminal والسهم
وال star symbol كلهم بيمثلوا ال grammar اللي بيوصف
مين ال syntax تبع ال language ويمكن المرة اللي
فاتت أخدنا مثال كويس قولنا كيف نوصف language تتكون
من أرقام يفصلها إشارة زائدة المرة اللي فاتت وكتبنا
grammar وشوفناه واتأكدنا أنه مظبوط اليوم أنا بدي
أرجع لنفس المثالو بدي أكتبله حل على اللوح و بدي
أنتوا تقيمولي هذا الحل و تقولولي مظبوط مش مظبوط
شبه الحل اللي أخدناه مش شبهه فحاولوا تركزوا في
اللي بدي أكتبه و تدوني ملاحظاتكم عليه تمام؟ الآن
لو قلنا مثلا exhibition
عبارة عن exhibition زائد exhibition تمام؟ و ال
exhibitionممكن تكون في النهاية number وال number
ممكن يكون zero وال number ممكن يكون واحد إلى آخره
ال number ممكن يكون تسعةهنا ملاحظة صغيرة، أنا لما
بكتب ال expression مرتين، إيش معناها؟ معناه أنا
جادل أستبدل ال expression بالحالة هاي أو جادل
أستبدلها بالحالة هاي، فمسموح أعمل أكتر من تعريف
لنفسي ال non-terminal، أعمله أكتر من production،
هذا مسموحوحتى نفس الفكرة في ال number ايش معناه
number تعطي zero number تعطي one ان ال number ممكن
تبدأ لها بصفر او بواحد او باتنين طبعا من ناحية
كتابية وهذا هناخدها بعدين مسموح اكتب بهذا الشكل
مثلا اجي اقول ال number بدل اكتب عشر .. عشرة lines
اجي اقول مثلا ال number ممكن تكون صفر او شايفي شرط
ال او كيف؟ واحد او اتنين او لغايةتسعة مسموح للصورة
هذه يعني لو واحدة أتيت تقول أنا بديش أكتب التنتين
هدول و خلاص بدي أعمل expression and then
expression و أحط شرطة أو و أحط هذه هنا بصير مظبوط
مافيش مشاكل مافيش غلط ماضح؟ و هذا هناخد اختصارات
هذه بعدين لكن الآن خلونا نتكلم بهذا الشكلالآن إيش
ال language اللي أنا ده أوصفها هنا اللي هي أرقام
يفصلها زائد يعني ممكن أقول خمسة و أسكت صح قولنا
المرة اللي فاتت خمسة زائد ستة صح خمسة زائد ستة
زائد اتنين زائد .. جد ما بدي أرقام هذا كله صح في
ال language الآن أنا وصفتها بطريقة شوية مختلفةعن
اللي مرة فاتت لو فتحت الدفتر و اتطلعتي على آخر
محاضرة السابقة هتلاقي حلنا حل غير هذا طفيف، في
اختلاف طفيف بس أنا الآن سؤالي لكم الحل اللي انا
حاله على هذا اللوح في الأول بيوصف ال language
تبعتي صح ولا بيوصفش ال language؟ هذا أول سؤال يعني
شو ال language؟ أرقام بناتها زائد فهل هذا ال
grammar اللي أنا كتبته بيوصف ال language بطريقة
سليمة ولا لأ؟ إيش رأيكم؟
طبعا ايش بدك تقولي؟ لأ لإنه كان يحتاج لازم يقدر ان
.. يعني لو كان الأقل واحد طبعا .. طبعا .. طبعا ..
طبعا .. طبعا .. طبعا .. طبعا .. طبعا .. طبعا ..
طبعا .. طبعا .. طبعا .. طبعا
هل هذه بقدر أطلقها من هذا ال grammar ولا لأ؟ يعني
و كأنه بوصف ال language اللي أنا بدي إياها يعني طب
صح ولا غلط؟ طيب تعالوا نجرب شوية، خلاص أنتم معظمكم
بيقول صح، في حد بيقول غلط، كلكم بيقولوا صحأنا لسه
مش عارف، الآن احنا هنوصل مع بعض، هنتناقش في
الموضوع، بس أنا سؤالي المبدأي الآن، هذا ال
grammar، بص في ال language، شايف أنتي في مشاكل ولا
لأ بالنسبة إلك لحتى اللحظة، بالعكس بوصفش مشاكل،
فيه سؤال إليك؟ بيوصفها، طيب خلونا نأجل الإجابة
بتاعتكوا شوية، بس خليني أعمل لهذه ال three، احنا
خمس زيادة ستة زيادة سبعة، كيف أعرف صح ولا غلط؟ إذا
قدرت أطلعلها threeمن هذا ال grammar معناها مظبوطة
موجودة صح ولا لأ تعارض تقدر تطرعلي خمسة زائد ستة
زائد سبعة من هذا ال grammar نقدر نقدر ايش هتسوي
واحدة هتقول اللي بده يعمل زي هيك expression
expression زائد expression وهذه expression زائد
expression وهذه عبارة عن numberمش هيك؟ وهذه عبارة
عن خمسة وهذه عبارة عن number وهذه عبارة عن إيش؟
مثلا ستة و ال expression هذه عبارة عن number و ال
expression هذه عبارة عن سبعة صح؟ في واحدة هتحل زي
هيك يمكن تيجي واحدة تانية تقول أنا بديش أحل زيها
بدي أحل بطريقة شوية مختلفة بدي أقول expressionزائد
expression وهذه تقول إنها عبارة عن number وهذه
عبارة عن خمسة وهذه تقول إنها عبارة عن expression
زائد expression وهذه عبارة عن numberاللي هي ستة
وهذا عبارة عن number وهي سبعة يعني واضح انه لنفس
ال sentence صار في عندى two trees لنفس ال sentence
صح ولا لأ طب تتوقعى هذا شيء إيجابى ولا سلبي يعني
احنا قبل شوية ايش كنا نقول اذا لجينا ال tree لهاي
من ال grammar معناه اللي grammar مظبوط مش هيكنا
نقول طب يلا هاي زيادة الخير خيرين لجينا مش tree
واحدة لجينا تنتينفهل هذا إيشي إيجابي في ال grammar
ولا إيشي سلبي؟ إيش رأيكم؟ وليش؟ في الأول سلبي ولا
إيجابي؟ سلبي، ليش سلبي؟ لأن احنا مش حكينا إنه في
tree لازم تطلع منها، فممكن لو اختلفت يصير فيه
مشكلة؟ لأ، احنا لسه ماقلناش إشي تاني، عملية ال
parsing إشي تاني، الآن احنا إيش قلنا في الأول؟ بده
أذكرك من اللي قلنا، قلنا إذا هاي أنت قدرت تطلعيلها
treeمعناه هذه في ال language معناه هذه مظبوطة
معناه ال grammar وصفها صح هيك ما كنا نقول الآن هذه
مش طلعلها tree طلعلها تنتين فهل نقول زيادة الخير
خيرين إشي كويس إيجابي أنه مش بس واحدة اي تنتين
والله في إشي سلبي في الموضوع أه إيش رأيكم؟ أعتقد
هو .. سلبي؟ ليش؟ لأنه لما ال .. مبرنز جيكتور يجيه
ال tokens أه
طب شو المشكلة؟ ليش طب ما يكون تنتين؟ ليش؟
قصد انها جيت مثلا اه ايش هيبقى تقول انا بطلت ايه؟
لأ هلأ ممكن يعني ياخد ال three واحدة يفحص عليها طب
و ال three التانية شبه تانية فيها ممكن واحدة تكون
مثلا هاي .. يعني انت بتقولي سلبي ولا ايجابي؟ سلبي
سلبي طيب هاي مثلا more performance اكتر من التانية
اههلأ سلبي زي ما هى قالت تاوي ان قصته مثلا هياخد
زمان بزيادة في الفحص هذا أولا تانيا حيث هيك صارت
أساسا عدد خطوات ل trees أكبر مرة فات لما عملنا بس
number كانت خطوات ل tree أقل فماضطرنا نعمل .. ليش
ماهي هذه نفس الخطوات .. لأ لو كانت number هيك ع
السريع ماكنتش .. ماهي هي كنتي عشان تعملي exception
زاد number و تعملي 7 على طول طيب كويس علمه اه طب
هو من أولى في توسيل ال tree نبدأهذا موضوع تاني،
إحنا الآن بنحكي في الأول إنه هل لما بكون ال
sentence أكتر من ال tree هذا إيش إيجابي ولا سلبي،
هنجيها النقطة التانية كمان شوية، أه أجي دول هناك
فاش بديش أفطرها من الطريقة إحنا لسه شغالين على
الجامعة، بنتكلمش على الطريقة إحنا الآن في الموجود
هذا طيب، على كل حوال الإجابات اللي أجبتوها إجابات
سليمة هو سلبي يكون أكتر من ال tree لنفس ال
sentence، ليش؟ لأنه أنا بصير بحير ال system تبعي،
بصير أخد وقت أكتر في ال process، بصير أخد وقت أكتر
بالفحص، أنا مش عارف من هي الصح، هي والله هي، فبدي
الطريق يفحصها، ورجع يروح يفحصها ديففي مشكلة إذا
أنا حيارت ال system عند نقطة و هو مش عارف وين يروح
صح هيل و الله هيل فعشان هيك هذه الحالة بنسميها
ambiguous أو unambiguous عملية التحيير هذا ال
grammar اللي أنا كتبته على اللوح مشكلته إنه هذا
عبارة عن unambiguous grammarتمام؟ يعني هو في
إشكالية أنه ال sentence الواحدة ممكن يكون لها أكتر
من ال three إذا أنا على طول بقالك هذا ال grammar
غلط يعني لو أنا في يوم من الأيام قلتلك في handy
language أكتبيني ال grammar تبعها و روحتي كتبتيلي
grammar ambiguous بقولك غلط ليش ambiguous غلط؟ لأن
أنا مش معنى في التحيير أقعد أحيره و أقعد أزيد ال
process و مايكونش الأشي efficientلأ لازم انا يكون
الاشي اشي دايما unambiguous ماشي الحالة ده بقصد
ambiguous طبعا unambiguous العكس مش ..unambiguous
ال un هذه unambiguous يعني مش ambiguous لازم يكون
تمام عشانك هتلاقي انت طبعا أسئلة كتير في الكتاب في
هذا الدارس ايش يقولك يقولك اثبتيلي ال grammar
الموجود ambiguous او كيف يعني اثبتيلي يعني بدك
تضطر تطلع sentence اله اتنين اتريه وممكن يسألك
سؤال تاني يقولك هذا ال grammar المكتوب ambiguous
ولا unambiguous يعني مش ambiguousفعشان تعرفي بدك
تشوف ال sentence إذا إلها اتنان اتري ولا مالهاش
اتنان اتري بعدين في شغل صغيرة ممكن تصعب عليكم
الأمر وانتبهولها إذا في عندي grammarوال grammar كل
ال sentences اللي فيه مالهمش أكتر من ال three إلا
واحدة واحدة بس من كل ال sentences إلها اتنين three
خلاص على طول هذا ال grammar شماله ambiguous و هذه
مشكلة ليش لأنه بدك تسير أنت تدوري لما واحد يقولك
هذا ambiguous ولا لأ أبديك تروح تدوري مين ال
sentence اللي إلها اقتين تان مش هتروح تاخدي واحدة
وماتلاقيلهاش إلا بس حال واحد تقولي خلاص مش
ambiguous غلطمش ضروري كلهم يكون لهم حلين يعني انت
ممكن تلاقي كل ال sentences اللي بتكتبيه هم لهم حل
.. حل .. حل .. حل .. إلا بعض فخلاص هدول البعض هم
اللي خلوا ال grammarambiguous فبتكون تبقى القصة
هاي وهذا أحيانا ممكن نصعب و نسهل فيه الأسئلة، ليش؟
لأنه ممكن هيجيبلك ال grammar مايكونش كتير في
sentences انهم two trees فبتسيري تشغل دماغك مين
اللي ال tree اللي ممكن ال sentence اللي لها اتنين
ال tree عشان أقدر أعرف انها ambiguous وللأسف يمكن
تدوري كتير و تدوري كتير هو يكون فيه، ماتلاقيش
تروحي تفتقشي تقولي مش ambiguous لكن بالفعل أقولك
لأ تفضلي هاي في كان ال sentence الفلانية الطويلة
هذه إلا حلالةفللأسف أحيانا في بعض الأسئلة بدك
تتعبى لما تلاقي إيش أن الجملة إلها حلل بس اللي زي
هذا سهل يعني هذا مثلا simple خالص واضح أنه ممكن
أفرد من هنا و ممكن أفرد من هنا وبالتالي أوصل لحالة
نفس ال sentence وبالتالي هذا نسميه ambiguous إذا
الأن ال grammar اللي أنا كتبته على اللوحمشكلته
طبعا هو بيوصف ال language بيوصف ال language مش في
نقاش بيوصف ال language لكن مشكلته انه ambiguous
وانا ال ambiguous مش مطلوب مابديش ان انا اكون
ambiguous يعني لازم ا add to ب grammar مايكونش
ambiguous الآن هروح للثبت يعني بس في الأول في
دكتور السنة و خلاص سيبيني من الحل الماضي لسه لازم
اتكلم عن الحل الماضي هجيله كمان شوية الان بس
ركزيلي في الحل هذا لسه الآن بتقعد اتطور فيه و
بتقعد اشتغل عليهفي الأول وضحت الصورة هنا متى بنقول
عن grammar ambiguous و متى بنقول أنه مش ambiguous
إذا .. إذا لجيت sentence إلها اتنين tree أو أكتر
طبعا خلاص هذا ambiguous و هذا مش مطلوب .. بكون بدي
.. أنا مرفوض أكتب إشي ambiguous واضح؟ طيب الآن
نيجي للسؤال التاني كيف أعمل التعديل على هذا ال
grammarبحيث انه يبطل ambiguous وهنا برضه في
اقتراحين بدي اكتبهم .. اقتراح حدنا المرة اللي فاتت
بدي اكتبهم على اللوح و بدي رأيك هل الاقتراحين صح
ولا غلط ولا نص نص؟ مابتعامش بالاقتراحين، فاهمليش
ده اعمال؟ بدي اعيد كتابته هذا بحيث انه يبطل
ambiguous فكان الحالين كانت تاليةالنقاش هي أقول
expression عبارة عن expression زائد number زي ما
عملنا المرة اللي فاتت تمام؟ و هنا نقول expression
عبارة عن number و بعدين نيجي نقول ال number زي ما
أنتوا عارفين اللي هو من zero واحد لغاية تسعة هذا
الحل الأول في طالبة ممكنش تقول تقول أنا بديها زي
هيك expression عبارة عن numberزائد expression تمام
و بعدين expression ممكن يكون number تمام و ال
number ممكن يكون zero واحد لغاية تسعة الآن في
الأول هذا اللي أنا كتبته هنا ambiguous؟ لأ لأ ليش؟
لأنه من جهة واحدة لأن خمس زي ستة زي سبعة بيبقى لها
tree واحدة مافيش ليها tree تانية صح ولا لأ؟ طيب
الحل التاني اللي هان هذا ambiguous
برضه مش ambiguous لأنه بعفرت من الجهات التانية
يعني لو عملت خمس زائد ستة زائد سبعة جاربي مش
هتلاقي الا three واحدة لأنه هتضطر تقول exception
عبارة عن number اللي هو الخمسة زاد ال exception
اللي انت هتروح ترجعيها ستة زائد سبعة number زاد
exception إذا الواضح أن هذا الحل مش ambiguous و
هذا الحل مش ambiguousالان سؤالى إلكم هل الحالين صح
ولا الحالين غلط ولا واحد صح وواحد غلط ولا إيش
رأيكم في الموضوع؟ ولا ولا واحد صح أصلا؟ إيش رأيكم؟
فاهمين إيش سويت؟ أنا .. هذا .. بصوا في ال language
ما ننساش يا بنات اللي هو أرقام بناته مزايد لجيت
هذا مشكلته العويصة أنه في ambiguity ambiguous يعني
شجرتين لنفس ال sentence فبدي أمنع ال ambiguous
فكان في اقتراحين اقتراح أخدناها المحاضرة السابقة و
اقتراح انا اضفته اليوم في محاضرة اليوم هل الآن
الحالين هدول صح ولا غلط ولا fifty-fifty ولا
شرايحهم دعوني أتغير مكان النظرهنا جالتي التانين صح
طيب مين غيره؟ ايه السؤال ايه؟ هتفرج معايا لو غيرت؟
انا اللي بسألك مش انت اللي بتسألي انا اللي بسألك
انا غيرت بين الاتنين شايفهاش الحل الأول و التاني
عكست نعم زادك سيكتر يعني انت مش مقتنعة بجاوبتها
يعني ان انت مش هتفرج اه ماشي okay اه ايش رأيك يا
بنات؟ صح صح صح اهالباقية إيش بيقولوا؟ وين مكانهم
الإراءة بالباقية؟ واحدة تفت من جهة اليمين واحدة من
جهة الشمال ماعنها الأفضل؟ ماعنها الأفضل؟ ماعنها
الأفضل؟ ماعنها الأفضل؟ ماعنها الأفضل؟ ماعنها
الأفضل؟ ماعنها الأفضل؟
ماعاللي تحت أصح اللي تحت أصح طيب ما شاء الله عليكم
ناس جاله اللي تحت أصح ناس جاله اللي فوق أصح وناس
جاله التنين صح اه واش في كمان اه ليش؟ لإنه ما شاء
الله بيعطيك ال tokens من فوق انا مثلا بصنع ال
token الأول انا بضعه ان هو ال number انا لسه
مالصنع الباقى يعني لو كان ال exception هنا اول اشي
هضطر أستنى لسه الطيب لأ برضه لأ مش مظبوط هذي هتبين
معاكي بعدين في عملية ال parsing أنه لأ عملية ال
parsing بتمشي هيك و هيك اه باتنين صح؟ يعني الخلاصة
كام .. كام واحدة بتقول اتنين صح؟ ما شاء الله طيب
كام واحدة بتقول فوق صح؟ و اللي تحت صح؟ولا واحدة صح
هو انا لما افترض اكتب الexperience ماش اكتب اولش
الexperience بالأول بعدين اللي كنتش طالع في الآخر
مافرجتش جدا الشفرة جت في الآخر 5 زي 6 زي 7 طلعت
هيا 5 زي 6 زي 7 يعني من هاي ولا من هاي بتطلع طيب
طيب على هموم الطلاب أشطر أجابوا إجابة سليمة تمام؟
الإجابة السليمة أنه اللي فوق هي الأصح واللي تحت هي
الغلط ليش؟ بنتقولي الآن ليش؟ أنا بدي أذكركبشغلة
مهمة أن الجامع left associative operator إيش يعني؟
أخدتوها في ال data structure قبل هيك أو حتى في
الرياضيات أنه خمسة زائد ستة زائد سبعة كيف بتتم؟
لازم يكون الجامع الخمسة زائد ستة في الأول ثم تجمع
السبعة لأنها left associative operator صح ولا لأ؟
الآن سؤالي إلكم جاب الموضوع الحالينهذا الحل هو
عبارة عن خمس زي ستة سبعة من هذا ال grammar و هذا
الحل خمس زي ستة سبعة من هذا ال grammar مش هيك؟
الان مين الشجرة الأصح في التنتين؟ الشجرة الأولى
ليش؟ لأن left associative بخلصوبضيف بينما هذه شملت
أخدت الستة مع السبعة وبعدين ضفت الخمسة لكن احنا
بنعرف ان عملية الجامع left associative انه لازم
تخلص من الشمال لليمين اذا طالما انا قلت الشجرة هذه
هي الأصح من هذه اذا هذه من اي grammar بتطلع من ال
grammar اللي أخدناها المرة اللي فاتت اللي هو فوق
عشان ايه بنقول ان هذا ال grammar هو الصح و هذا ال
grammar هو الغلط ليش؟ لأن الجامع left associative
operatorوبالتالي العملية الحسابية لازم تخلص من
الشمال لليمين وبالتالي لازم ال tree اللي تطلع
معايا لازم تأكس ايش بيصير في العملية الحسابية
وبعدين لاحظوا اشي مهم انا لما قلت خمس زي ستة زي
سبعة يا بنات جابلي شوية في هذا ال grammar مش طلعله
شجرتين صح ولا لأ الان انا لما بدي اثبت احط هنا
number ولا احط هنا number ايش معناها مش بدي اثبت
احد الشجرتينمن باب أولى أن 5 زي 6 زي 7 هذه الأفضل
من هذه لأن هذه تأخذ مبدأ الـ left associative
فطالما انا اتفقت أن هذه هي الأفضل من هذه يعني بعد
اليوم وما يصير عندي 5 زي 6 زي 7 مالاجيش إليها إلا
هذه الـ tree معناه مين ال grammar اللي بتطلع هذه
ال tree؟ هو هذا مش هيك؟ لأن كيف نطلع؟ هم هاي
هتقولي لي هاي تعالي 5 زي 6 زي 7 اشتغلي على ال
grammar اللي فوق أه إيش هتسوي؟هتقولي ع ال grammar
اللي فوق expression check بعدين إيش هتقولي
expression زائد term زائد number و ال number خلاص
سبعة ليش لإن انت الخمسة و الستة مع بعض عشان هيك
هترجع تلاقي ال expression فرضت معاكي expression
كمان مرة زائد number و خلاص و هذه عبارة عن number
و نخلص فشايفة هذه الشجرة أصحى عشان هيك انا افترضت
و قلت إن هي بجهة أصحىطب الخمس زات ستة زات سبعة كيف
شكلها من اللي تحت؟ شكلها هكذا لأنها ستصبح بالنسبة
لي كده إيش هتكون عبارة عن إيش هذه number صح؟
فهتاخد نفس الشكل الغلط اللي تحت واضحة إذن ليش أنا
قلت إن اللي فوق هي اللي أصح طيب بعدين في شغل تاني
مهم يبقى ندخل بالي بالك منها أنا لما بدي أضمن أن
عملية تكرار بتصير للأرقاممجبر أن تمنل اللي هنا
يظهر بعد السهم لأنه لو ماظهرش افترض انك كتبت هنا
number وكتبت هنا number وماحطتش هذا هنا ولا هنا
هتجف على لقمين هتصير ال take to be ال expression
خمس زائد ستة و لا ستة زائد تمانية وخلاص و بتجف
علشان نقدر نعمل عملية تكرار تكرار تكرار تكرار جد
ما بدي أرقام لازم أحد الأطرافياخد نفس الاسم اللي
جاب للسهم لأنه لما بتاخد نفس الاسم بيصير عندك
إمكانية إيش؟ تكرار ايوة expression زي ال number
expression زي ال number expression زي ال number
فتتمل القصة هاي العالي السؤال طب اللي ورا أخل ال
expression هنا و أثبت هذي ب number ولا أخل ال
expression هنا و أثبت هذي ب number الجواب حسب ال
operator إذا ال operator left associative معناها
بدي أخلي النمتين الهدى هنا و هنا و أحط في الناحية
التانية ال number مثلاإذا كانت right associative
ومش ال case هي هذه لكن لو كانت right associative
كنت هقول إنه لازم يكون هذا number زي ال expression
عشان تفرد بالناحية ال right واضحة؟ إذا زائد، ناقص،
ضرب، قسمة، هدول شو؟ left associative واضحة؟ طيب زي
مين مثلا ال right associative؟ حد هندق مثال عن
right associative؟
main right associative المسواة لما انا اقول x
تساوي y تساوي z هذي كام بالتم بيخلص ال z مع ال yثم
بيحط النتيجة في X انتبهي عكس تماما عملته الجامعه
الجامعه كان بيخلص ال X و ال Y الجامعه بعدها بيروح
على Z لكن المساواة عكسهم تماما المساواة right
associative يعني بيخلص من وين؟ من اليمين للي شمال
ما تنسيش هذه المعلومة لأن لو كمان شوية غيرت في ال
grammar و طلبت مني تساوي هتلاقي الشكل اللي تحت
هيصير هو الأصح لأن فيه صارت يساوي كمان شوية هنجي
لدى المثال مش مشكلة لأ واضحت الآن الفكرة تبعتناطيب
في أي سؤال هنا لأننا بنطور شوية على السؤال تبعنا؟
في أي سؤال؟ طيب بنمسح اللوح عشان نبدأ نسألكم و
نشوف انشاطكم ان شاء الله
المهم احنا اتفقنا في الآخر ان exhibition عبارة عن
exhibition زائد number طبعا ابقى تنتبه ان الكتاب
مرات بيستخدم أسماء مختلفة مرة استخدم exhibition
هنا مرة استخدم list مرة استخدم string نفس الفكرة
هذه مجرد أسماء انت حرة في تسميتها المهم ال
structure بتاع ال grammar طيب exhibition زائد
number اوعبارة عن إيش؟ نام و خلص و نام هذا اللي
اتفقنا عليه توم من الآخر اللي هو خلاص المحاضرة
السابقة، مظبوط؟ طيب، سؤالي الآنمين تطلع تطوره بحيث
ال language تبعتي تصير كالتالي انه مش بس عملية
زائد انه انا بدي اعمل ال operators كلهم الزائد
والنقص والضارب والقسمة يعني كمان مرة ال language
تبعتي عبارة عن ايش ارقام يفصلهازائد أو ناقص أو ضرب
أو قسمة يعني مسموح اكتب خمسة واسكت مسموح اكتب خمسة
زائد اتنين ضرب تلاتة ناقص واحد جد ما بدك فجد ما
بدك مسموح تكتبي أرقاموجد ما بدك تحطي إشارات بناتهم
حطي ممكن أقول خمسة زائد اتنين زائد تلاتة واسكل
ممكن أقول خمسة ضارب اتنين زائد تلاتة أنا حر المهم
أن ال language تسمحني الآن بوضع أرقام و بناتهم أي
إشارة أنا بدي إياها من الزائد والنقص والضارب
والقسمة الآن مين تطلع تطور على هذا ال grammar و
تعمل ال grammar الجديد مين تطلع تحل تعمل ال
grammarبطلع حللي انا مش هقيملك حالك البنات اللي
قاعدين هم هم هم هم هم هم هم هم هم هم هم هم هم هم
هم هم هم هم هم هم هم هم هم هم هم هم هم هم هم هم هم
طبعا هي إيش بتعمل قاعدة؟ بتقول expression عبارة عن
expression زائد number كملي انت كملي كملي و بعدين
في ضرب و قسمة و بعدين عملت زي ما كان في زائد أضافت
عملية الطرح لأنه مسموح نعمل or or or أكتر من تعريف
ال expression فهي جالت زائد number و بعدين عادت
expression minus number و بعدين عادت expression
ضرب number و أخرش هتعمل expression على number و ال
expression هو number زي ما عملت و ال number zero
واحد اتنين إلى اخرين طيبطبعا بس تخلص و تستريح و
بنقعد نسمع قراءتكم في الموضوع طبعا استريح الان
الان هي حلت زي هيك زي ما انتوا شايفين فسؤالي لكم
حلها صح ولا غلط؟ و ليش؟ يعني تمام؟ perfect؟ مش في
مشاكل؟ لأ في مشكلة؟ إيش رأيكم في الحل اللي حلته
على اللوحة؟ انه مش أفكر ال expression أربع خمس
مرات
ماشي يعني هي بتقترح .. ماشي اقتراحها شغلة فنية ايش
بتقول expression .. expression of operator مثلا
اللي هم number مثلا هي بتقصد و اجي اقول ال of هو
زائد او ناقص او ضرب او تسمى مثلا هي بتقول و number
zero او واحد او اتنين او تلاتة الى تسعة طبعا الحل
اللى اقترحته نفس الحل اللى تحت مافيش فارق بس اقترح
سلطة productions لكن فى النهاية نفس المعنى تحت هو
نفس المعنى فوق بس اللهم بدلت كرر اربع مرات قملت
واحدة وقالت up عساس ال up بتجلب لزيادة او نقص او
ضرب القسمة نرجع لنفس السؤال الآن طالما هدول اتنين
equivalent الاتنين هدول صح ولا غلط وليش؟لو أنا كان
عندي خمسة ضرف أربعة ثالث تلاتة ضرف اتنين مثلا لازم
عملية الضرف التاني و عملية الضرف بعدين أشمع
فبالتالي أنا حصلت أن في هناك ضرب طيب
يعني جزك .. دي أفهم، يعني جزك أن الدرب بيقدرش يبين
معايا، بيقدرش يعمل خمسة ضرب اتنين، هيك جزك؟ بقدر،
بس الناس اللي في الدرب صعبة، إذا أنا خلتها كلها
left أساسياتي، حقيقة مثلا الجامعة قبل الدرب، وبهك
الإجابة هتطلع غلط لإن الأولاوية للدرب قبل الجامعة
إيش رأيكوا اللي بيقولوا؟ الناس اللي نايمين في
الآخر، جاعدين سكتين؟إيش رأيكم .. فهمتوا إيش قالوا؟
قالوا .. بيقولوا .. هم سامعكم بصوت آلي بيقولوا إنه
في مشكلة إنه في الأولويات أنا مش عامل حسابي لإنه
بدي .. إذا عامل أنا جامعة وضارب ممكن ياخد الجامعة
قبل الضارب في الحالة الهادى فما رأيكم اللي ورا
هنا؟ إيش رأيكم؟ كلام منطق اللي بيقولوا والله ولا
إيه علاقة بالمنطق ماالكوا
ساكتين في الآخر واللهفيش عندكم إجابة؟ طب أنا بقول
إشراكوا في اللي بيقولوه هم طب أنا أسهلها عليكم
أكتر من هيك الآن هل الزائد والناقص زيهم زي الضرب
القسمة الأولوية لمن أول يعني واضح أن الأولوية لضرب
القسمة أعلى ال priority لضرب القسمة أعلى صح؟ لكن
أنا في حالة زي هذا واضح أني مسوين في بعض أنا عامل
الزائدزي الضرب زي الناقص زي القسمة وهذا وين ممكن
يسببلي مشكلة ان لو انا كاتب expression خمسة زائد
اتنين ضرب تلاتة يمكن يروح يجمع الاتنين مع الخمسة
بعدين يضرب لأن انا مش مفرج الضرب اذا واضح ان الحل
الموجود الآن ال conclusion الحل فيه غلط ايش الغلط
انه مش واصف او مش ماخد موضوع الاولويات بالاعتبار
يعني على سبيل المثاللو أنا كاتب خمسة زائد اتنين
ضرب تلاتة وارد جدا انه يجمع الاتنين شوف يقولنا
left associated فهيقول خمسة زائد اتنين سبعة و
بعدين يضرب في تلاتة بينما ايش الصح يضرب الاتنين في
تلاتة و بعدين يجمع الخمسة فالواضح ان الضرب و
القسمة في بينهم اختلاف عن النقص و الزائد وهل لم
يتم راعاتهفي ال grammar الموجود طب أورجيلك الدليل
.. الدليل تعالى نعمل لهذه parsing tree من هنا ..
هي بتطلع ال parsing لأ بتطلع لكن تعالى نشوف شكلها
كيف هتقوليلي هنبدأ من expression .. بنطلع هذه صح؟
هتقوليلي expression زائد
او up زي ما بدك ايش نقول زائد .. خليني أشتغل عليه
هناإيش بدنا نعمل؟ زائد نم ولا ناقص نم ولا ضرب نم؟
آخر شي ضرب، بظبط؟ لأنك هتثبت النم معاكي، فغصب عنك
هتقول expression ضرب نم، مافيش قدامك خيار تاني إذا
بدك تطلع هاي، لأنه مش آخر واحدة بتثبتمش في الحال
تبع مش أخر واحدة بتثبت ماحدش فيه ذرع يلعب فيها
فأخر إشارة جابلها شو؟ ضرب عشان الكلام مضطر أقول
expression عبارة عن expression ضرب نم الآن خلصنا
من الضرب والنم اللي هو تلاتة صح؟ إيش ال expression
هاي؟ حد يقول ال expression زائد نم شيت؟ و ال num
اللي هي اتنين و ال expression اللي هي numوالنوم
اللي هان؟ خمسة خمسة، إيش سوى؟ خمسة و إتنين أخدهم
مع بعض و بعدين ضرب في تلاتة وهي المشكلة بينت زي
إيه؟ ليش بينت المشكلة هاي؟ لأنه أنا افترضت إن
الأولوية للأربع هدولة زي بعض طالما افترضتهم زي بعض
صار يشتغل lift associated مالوش داعو اللي بيشوفوا
من الشمال لليمين بطبقه لكن قصة ال lift associative
إذا أنتوا عارفين أو تتذكروا بتختلف في حال وجود
الضربوالزائد بيصير يميز وياخد الضرب في الأول أو
القسمة ثم بياخد الزائد يبقى الان واضح انه بالفعل
ال grammar المكتوب ماله فيه خلل .. كويس فيه خلل
منحنا السؤال التاني إذا بدك تطلع تجاوبه عليه
السؤال التاني الآن بدنا نطوره ال grammar اللي على
اللوح على أساس يصير مسموح يعمل الأولويات فمين بده
يعدد؟ جربي تعمل .. تعديش أطلع أكتبها بس أننا بنعمل
two of أب واحد بنحط فيه الضرب والقسمة أب وبدنا نحط
فيه الجامعة وبدنا نكتبيه عشان نعرف اللي بدنا
نتناقش فيه البنات يناقشوك فيه جربي تكتبيه وإذا
عندك حل تاني برضه بدك تكتبيه مش مشكلة بنات أي حد
بيطلع يكتب حلالباقيين بدهم يقعدوا يفكروا في الحل
اللي كتب عشان يدوني رأيهم، مظبوط او مش مظبوط،
تمام؟ خلّينا .. خلّي هذا .. أنا أستنى شوية في
المنطقة هذه، حاولي تحلي .. تمام؟ تمام، يلا و أنتوا
ركزوا على الحل تبعها و قولولي إيش رأيكم واضحة إيش
هتسوي هي الآن؟بتحاول تكتب ل Grammar تعيد كتابته
بحيث أنه يسمح بقصة الأولويات يعني لما نشوف خمس زي
اتنين ضرب تلاتة يضرب و بعدين يجمع يعني يعمل اتنين
و تلاتة مع بعض في شجرة و بعدين يجمع الخمسة طيب
وفي نفس الوقت مايكونش ambiguous لما نقول octopi
grammar مش بس بديك تطوريه ويطلع ambiguous، واش
الفايدة؟ ممنوع يكون ambiguous وفي نفس الوقت ياخد
الأولويات بعين الاعتبار طيب إيش رأيكم؟ هل هي هيك
حلة المشكلة ولا هي هي؟
الحل اللي أضافته equivalent لهذا و equivalent لهذا
ليش؟ لأن كل الفكرة expression و ال number هنحط
بينهم operator و ال operator يا of one يا of اتنين
يا زائد ضرب زائد ناقص يا ضرب قسمة فهي هي مش هتتغير
اشي يعني في الآخر هذا و هذا و هذا واحدبس انت
الفكرة انه بدلا تحط الأب مرة واحدة عملتيها
عناجلتين يعني فصلتيها في two production انه ممكن
تكون زائد ناقص ممكن ضرب قسمة لكن في النهاية خمسة
زائد اتنين ضرب تلاتة هتقعد نفس الصيغة فواضح انه
هنا مش مظبوطة مية بالمية ليش؟ لأنه هي اش سوّت
اعادت كتابة هذا و هذا و هذا الآن زي بعض واضحت؟
لأنه انت الأب اللي هانأعطيتي خيارين يا up one يا
up اتنين و ال up one كذا و ال up اتنين كذا فانت
خلاص سيرتي قادرة تحط بين ال expression و ال number
علامة من الأربعة و هترجع ال expression التاني
تحطيه لعلامة من الأربعة فماخدتيش ببالك الأولويات
بس ماما هل جيت عندك درم اشمع نعطيه خيار تاني بلش
ماما درم expression يعني expression left to right
غلط اكثر او .. الضرب نفسه .. الضرب نفسه left
associated يعني لما انا اعمل اتنين ضرب تلاتة ضرب
اربعة لازم يخلص الاتنين في تلاتة في الأول و بعدين
يضرب الأربعة لو راح ضرب تلاتة في أربعة و بعدين
اتنين غلط لأنه كمان الضرب left associated اه إيش
بتقولي؟ بدك جربي إيش؟ جربي يالا تقعدي تغيري تمام
جربي هنشيل الأحمر اللي هان و تجرب في نفس المكان
تاني يالا جربي شوفي حلو جربي تانيو برضه نحاول نقيم
الحالت تبعها نشوفه مظبوط او مش مظبوط طيب
استريح نتكلم في الموضوع استريح طيب نقعد شوية نشوفه
الان هي اش كتابات listزائد number بس فاهمين إيش
يعني انت كيف تقول زائد وضرب ضرب number
و list على number و بعدين وين طب الزائد و الناقص؟
كيف بنعمل زائد و ناقص؟ كيف يكون في نفسه؟ أي
exception نفسه؟ هو خلاص بيصير ambiguous نفس
الفكرة، مش أنتي تعملي زي هيك إيه جي كلمة؟ او
exception نفسه؟إيش أفرق؟ إيش أفرق؟ إيش
هي مثلا؟
ماشي بس هنا في عندك مشكلة دخلت هي في مشكلة ال
ambiguous ليش؟ لأنه .. لأن صارت ال exception انا
اروح كده اوصل ل .. بدك تروح ل list و ال list
بترجعك لوين؟ ل exception و بترجعك تاني طب ما انت
لو عملتيها أنا مش هنبطل نقدر نعمل loopيعني مش
هنقدر نعمل تكرار مش مشكلة المحاولة جيدة بس الفكرة
خلّيني مش مشكلة الآن تمام بدي أسمع القراءة الآن
عشان نختصر الوقت بدي أسمع إيش بدك تقولي و إيش
تقولي و نحله أول إشي بحط أنا .. كويس اللي بحاول
أحسن من اللي ما بحاولي بحط ضرب الطفل لحاله و بحطهم
لحاله و بعدين بحط ال exception هو ال exception
رائد أو مائد التمام اهه بس هيك انا .. ماشي هنوضحها
كويس كويس اه انا حالها هيك انا صار عندي إجباري اني
لازم يكون عندى ضرب او قسم قبل لأ احنا بنوضحها كيف
صارت اه نفس حكيها طيب
اه
بتقف، بيصيرش فيه loop بيصيرش فيه loop، مفيش تكرار
الأرقام بيصير، بتقف عجد رقمين و خلصنا طيب، الآن
خلّونا نفهم كيف نحل الأسئلة اللي زي هذه أخي بدي
أمسح كله كويسة، يعني محاولتها كويسة من هنا لكن
ماوصلناش للنتيجة النهائية مائة بالمائة، تمام؟
خلّينا نشوف كيف بدنا نحل السؤال اللي زي هنا طيب،
الآن كل trickعبارة عن إيش؟ باختصار زي ما جالت
الفكرة هناك شوية أنه أنا لما بكتب خمسة زائد اتنين
ضرب تلاتة الفكرة تبعتي مش هدول واحدة واحدة لازم
يكونوا مش الشجرة لازم تشجر هدول مع بعض صح ولا إذا
هدول لازم أعمللهم non-terminal لحالهم non-terminal
خاص فيهم ليش؟ عشان أضمن أن هذا ال non-term لما
يتفكفك يتفكفك للضرب و للقسمة شوفت انت كيف؟ طيب كيف
بدي أعمل الإضافة هاي؟ جالي أضيف إضافة كيف إضافة؟
تعالي نرجع مش أنا كان عندي هنا expression زي ال
term أو expression minus number خليني أتغير ال
number الآن كلمة number بس في الأول ثاني أو
expressionطبعا يا بنات الزائد والناقص زي بعض يعني
مش هغير عليهم هيضلوا في نفس ال list زائد قبل ما
كتبناه لكن الشطارة انه الان بدي أبطل عن كلمة
number و أعمل non terminal جديد يمسك جواته الدرب
والقسمة علشان هذا هو اللي شجرني الدرب والقسمة
يكونوا مع بعض مايروحش مع الزائد عشان هيك إيش بقول
expression زائد مثلا نسميه termالان صار في عند ال
term إيش بقصد فيه؟ non-term الجديد هيفرع الضرب إذا
بدي و هيفرع القسمة إذا بدي طب ليش أنا عملت الحركة
هاي؟ عشان أضمن أنه يكونوا مع بعض تعون الضرب عشان
أضمن يكونوا مع بعض تعون القسمة مش يروح للزائد طب
ليش أنا ماعملتش هذا الكلام للناقص؟ لأن الناقص
والزائد شبه بعض و نفس الأولويات و left associative
فماعندي مشكلة في الناقص فبروح بكررterm و بقول
expression term تمام؟ الآن السؤال شو هو ال term؟
طبعا لو أنا بديش ضرب و جسم يا بنات بقول ببساطة
term لو بديش ضرب و جسم انا بقول ال term هو zero او
واحد او اتنين و خلصنامهم .. يعني خلاص بقول ماذا
بقول term number و number zero خلاص Zero واحد مش
بتكون خلصته بتعمل لجد ما بدك زاد وناقص لأ الآن أنا
لأ بتدخل الموضوع في وين؟ في ضرب و قسم مافعش بسوي
باجي بقوله ال term هاي عبارة عن شو؟ كيف تعمل الآن
أرقام بينهم ضرب مش ذوي تعلمناها؟ هتقولي ليه term
ضرب سمى اسم جديد number factor دلوقت دلوقت دلوقت
دلوقت دلوقت دلوقت دلوقت دلوقت دلوقت دلوقت دلوقت
دلوقت
factor مش مشكلة فال factor هو بنات number ال
factor هو zero أو واحد او اتنين لغاية تسعة شايفين
ايش التعديل الطفيف اللي عملناه الآن هنثبت ان هذا
صح كل اللي صار انه انا هاي عملت non terminal وخلت
ال non terminal هذا يطلعلي من ضمنها الضرب و القسمة
ليش انا عملت هذه الحركة عشان لو ال term في ضرب و
قسمة يخلصوا جاب المينقبل الزادى، خلصوا قبل مين؟
قبل الطلاقة، عشان كده أنا بأضمن أن هذا الأولوية مع
بعض فال trick بيقوللي بسهولة، الاش اللي له أولوية
أعلى ما تسويهوش في السابق، اعمله non terminal
لحاله وخده وصير فرع منه، الآن بنيجي لسؤال جديد،
طيب ال term هذا إيش بدي منه؟ مش هذا اللي بيفرعلي
أرقام بينهم ضرب؟ كيف بيفرعلي أرقام بينهم ضرب؟
بيقوللي ال term في factorأو تشايف الاسم Han والاسم
Han؟ طيب السؤال ليش ماعكستش factor في term؟ لأنه
حتى اتضارب left associated طيب السؤال التاني ليش
كررت الاسم مرتين؟ عشان أقدر أعمل اتكرار فخلاص لازم
أكرر ال term مرتين جابله بعد عشان أضمن ال sequence
بقى الأرقام بعدين ليش حطيتها على الجهة الشمال
عشانها left associated؟باختصار في فك .. طب ليش
ماكررتش ال term كمان مرهين؟ عشان ما تصيرش
ambiguous مش بتصير term في term زي expression زي
expression مش إذا بتفرق من اتجاهين مش بتصير
ambiguous عشانك هذا كله مرفوض أكرله مرتينالان ال
factor هذا عبارة عن ايش؟ خلاص أرقام طب بدأ اتأكد
ان الشغل اللي انا اشتغلته هذا صح تعالوا ناخد
sentence و نعملها parsing tree و نشوف مثلا نقول
خمسة زائد اتنين ضرب تلاتة نعملها parsing tree تعال
هتقوليلي هنبدأ ب exception ال exception عبارة عن
ايش؟ exception هذا انتبه يا بنت هذا إذا بدك في
مخيلتك هو termال term عبارة عن هيك افهمي معناها
كمان افهمي معناها ال term عبارة عن إيش؟ إيش
تتصوروا صورته؟ يا رقم، يا حاجات مضربة في بعض، يا
مجسومة، يا ضربوا جسمها، ليش؟ لأن مش ال term هيك
بتشجر شغلات؟ اللي أنا مايجيبني يقولي خمسة زائد
اتنين في تلاتة، ما بالنسبة لي هذا كله term، صح ولا
لأ؟ فعشان انا ايش بقول expression زائد termطيب
الآن نسينا ال term هدا ال expression هدا كيف بدي
أوصله لخمسة؟ بدك تقوليني عبارة عن إيه؟ term و ال
term عبارة عن factor و ال factor عبارة عن خمسة صح؟
طب بدأ أسأل سؤالك سريع لو أحنا قولنا ال expression
مش بس term وضفنا عليها factor يعني بدل أروح أعمل
term و أعمل factor أعملت factorبيصير ambiguous
ممنوع لأنه بيصير عندي طريقين بتصير يا بتقول
expression مباشرة للرقم يا turn a factor فصار
بتحييه في .. ambiguous ممنوع بقى ومادش الحركة هاي
مدريش انا افكر بكرا اقول عشان اختصر أعملها طب انت
عشان تختصر يمكن انا اعملتي ambiguous صار في طريقين
يوصل للخمسة فانتفر على الغلطة الشيعة اللي بيقلطوا
فيها كتير واضحيت؟ طيب الآن التعرف ال term هذا ال
term كم بتطلعه؟term دكتور لو سمحت اعيد اخر مقطة
ماشي بده اعيد اخر مقطة الان في البعض اش بيقول مش
انا ال expression بدل لو اديها على term بدل لو
اديها على factor بدل لو اديها على حمسة ايش بيصير
لو قلت كمان ال expression factor
مش أسرعلي؟ بقوله أسرعلك لكن صار ambiguous ليش؟
لأنه صار فيه طريقين من ال expression إيه وصل لخمسة
expression factor factor خمسة أو expression term و
term factor فصار طريقين فصرت ambiguous فممنوع أعمل
حركة زي هيك طيب نرجع الآن لشغلنا تمام مرة الآن ال
term إيش قلنا term في factor ال term هذا خلاص
factorوال factor اتنين و ال factor تلاتة لحظة الآن
إيش صار؟ اتنين في تلاتة بعدين زاد عليهم إيش؟ خمسة
شوفتي كيف؟ فخلاص صار عندي الآن ال grammar بيوصف ال
language اللي اتكلمنا عنها و بياخد في باله ال
associativity تبع ال operators اللي هي left و
بياخد في باله الأولويات اللي هم للضرب و للقسمة
تمام؟ طيبال break جيجا واحدة عشان نبدأ نتناقظ
السؤال هذا جيجا واحدة break
اه
تفضلي
طيب خلّيها بعد ال break عشان نعملها عشان الكل
يستفيد لإنه الآن بهذا بيصير cut
مش مسموح
تبقى قاعدة في الميكروفون تبقى قاعدة في الـأنا كنت
قد رأيت أفضل أفضل أفضل أفضل أفضل أفضل أفضل أفضل
أفضل أفضل أفضل أفضل أفضل أفضل أفضل أفضل أفضل أفضل
أفضل أفضل أفضل أفضل أفضل أفض
طيب يا بنات خلوني نبدأ الان نكمل لو سمحتوا هدوء
الان لو سمحتوا هدوء هدوء بنات هدوء لو سمحتوا هدوء
خلاص تمام نرجع الان نكمل في ال grammar ففي سؤال
ايش سؤالك يعني لو كانت بدك تسأل عن ايش خمسة مثلا
ضرب اتنين زي التلاتة كيف ابتنين يعملها تري صح
تعالوا نشترل يالا يا بنات اول حاجة هتبدأ بال start
symbol اللي هو expressionال expression عبارة عن
إيش هنا expression زائد term expression زائد
term term factor وال factor تلاتة ال expression
عبارة عن إيش term term term termفي factor و ال
factor و ال term بتكمليهم بتخلص مافيش مشاكل انت
دايما تخيلي هاي عشان ماتغلطيش اتخيليهم اتضربوا
الجسم كتلة واحدة اتبعيها رقم فبتصير سهلة عليك ايش
زال ايش فبتقدر تشتغل بنات دايما تخيلوا القصة هاي
انه كله اتضرب على بعض و بالقسم بهذا كل واحدة واحدة
اتبعيها في مخيلتك زي رقم واحد عشان ماتوهيش و تعرف
ال expression من الأول ايش بيبدأ تنفكوكمان مرة
لاحظوا ان احنا لسه كل هذا ال tree بدى يشتغل ك
human لسه ماشتغلناش ك system كيف بيعرف انا قاعد
لسه بفكر ك human كيف اطلع ال tree من ال grammar
وقاعد بحذر و بفكر اه لأ لسه بدلنا كذا و كذا صح ولا
لأ فهذا بعدين هيتعدل ان شاء الله قدامي طيب لان بس
في إضافة أخيرة على هذا ال grammar بدنا نضيفها و
بدى انتوا تفهموا .. بديش تطلعوا تحلوا لكن بدى
تقولولي الفكرةلو كان عندي زي هيك خمسة زائد اتنين
ضرب تلاتة لمين الأولوية أكتر من الضرب والقسمة
للأقواس .. للأقواس .. صح؟ يعني في الحالة اللي هي
إذا أنا أصيب على اللوح لازم يجمع خمسة زائد اتنين
بعدين يضرب في تلاتة لأن الأولوية للأقواس أكبر صح؟
الآن سؤالنا لو بدنا نعدل على هذا ال grammar بحيث
نسمحبالأقواس، إيش التفكير العام بيقول؟ كيف
بنعملها؟ إيش الفكرة؟ إيش الفكرة؟ كويس،
يعني بدنا نعمل non-terminal جديدلل level ال
priority تبعه أعلى بنفس الصورة اللي قبل شوية و
أعمل تعريفه شهو هو مش أنا من الأول card expiration
زائد number لما أجى أضربه القسمة اعملت non
-terminal لضربه القسمة و نزلت تحت عرفته الآن أجى
أولويه أعلى كمان لضربه القسمة اللي هو الأكواس أكيد
هعمل non-terminal لجديد و أبدأ أعرف أن هذا عبارة
عن أكواسولو أجى أعلى وأولوية أعلى من الأقواس هعمل
كمان non terminal تاني جواته ويمثل الاشي اللي بده
أولوية أعلى تعالوا نشوف تحت الأقواس كيف صارت
هتقوليلي هانجي من هنا نغير ال
factor هذامش term في factor، term على factor أو
factor ال factor كان زمان number، الآن بدنا عشان
نخلي number، بدنا نعمل أولوية الأجدد إيش نقول؟ ال
factor عبارة عن بين جثين أي expression تيجي بين
جثين، تب وما جالش أي term لأنه في النهاية إيش ما
يكون بين الجثين ضرب قسمة بإيش ما يكونأولوية أعلى
فهدي أعم و أشمل فجال مش بس في حكاية الضرب و القسمة
اللي عملها التيارب لأ جال كل ال expression بما
تشمل او ايش نقولها اللي بنات او number شك خلص خلصت
ال factor هو number و ال number
فلس zero أو واحد أو اتنين إلى الآخر تعالوا نتأكد
أن هذا صار برضه كلام سليم مافيش فيه مشاكل بس أنا
قبل ما أحل عليهم بدي تفهم الفكرة أنه كل ما بيزيد
أولوية بيزيد non-terminal الجديد طب ليش السياسة ال
non-terminal الجديد؟ عشان يضمن أن هدول كلهم واحدة
واحدة مع بعض الآن إيش فكرة أن ال expression
بالجسيم هنا؟ أن هذا كله يتضبط و يخلصعشان يصير هذا
ال factor فهمت كيف؟ يعني لو انا عندي في ترضي ال
term علىالجثين فيها expression لازم ياخد مين
الجثين و يخلصه مع أن الجسم أولويتها عالية بس ليش
احنا قلنا له الجثين أولوية أعلى و لو أجى حاجة هنا
أولويتها أعلى من الجثين هيعملها نون تيرمال وهكذا
فالموضوع للأولوية سهل جدا تفعله فكرته ال trick
تبعته نون تيرمال جديد و تكملي طب تعالوا نتأكد الآن
ان نعملالـ 3 لمين؟ لـ 5 زائد 2 ضرب 3 تعالوا كيف
بنعملها؟ هتقوليلي بدنا نبدأ ب expression طبعا يا
بنات الناس الشطرين بيستوعبوا أن هذه factor و
بيستوعبواالكل هذه term في الآخر إيش ضرب إيش term
لأن هذا جوا تحت الأولويه له فعشانك إيش هنقول إحنا
ال expression term عبارة عن term و ال term عبارة
عن إيش عن factor شوفتي لأن هذه الأولويه الأعلى لها
اللي هي جوا في جوا في جوا صح؟ و ال factor عبارة عن
إيش افتح يقص expression طبعا هنا لحظة شوية لأ لأ
أنا term في factor أيوة معلش أيوة أنا term في
factor صحيحهنا على أساس نحن لا نضرب فقط هذه وخلاص
نقول عبارة عن term في factor ال factor اللي كان
عبارة عن ايش عبارة عن تلاتة number مش هي term هذا
كله مش term في factor اللي قالها نرجعله هذا بنات
هذا expression بعدين term بعدين factor مانساش هذا
الكلامالأن expression term ال term مش بدنا نضرب
term فيه factor term فيه factor ال factor هذا
عبارة عن إيش عبارة عن number و ال number ثلاثة طب
الآن ال term هذا في نهايتين صح هو factor لكن هو
term و هو expression في الآخر صح انا لأ عشان أيش
بقول ال term هذا عبارة عن إيش عشان أطلع القوسين
فاكتور والفاكتور عبارة عن إيه if تهيه cost مش على
كيفك منتهى if تهيه cost exception لأني استبدلت
بهذه if تهيه cost exception مش عامة سبت من ال
grammar بس استبدلش على كيفي وبعدين تسكيرة ال cost
ال exception هذا كيف ده طالع خمس زائد اتنين برجع
exception زائد
term وال termfactor و ال factor number و ال number
اتنين و ال expression اللي هنا term factor number
خمسة شوفوا إيش بيصير الآن الخمسة و الأتنين بيخلصوا
و بعدين بنضربوا في تلاتة إذا صار عندي مبدأ الأقواص
موجودكل trick او كل الفكرة ان انا بس زودت non
terminal جديد و هكذا كل ما بيجي level priority
تبعه اعلى كل ما هتزيدي non terminal جديد في بطمه
زي ما بيسموها جواته عشان يكون اضمنه يكون واحدة
واحدة تمام لحد هان؟ تمام في اي اشكالية لحد هان؟
واضحة الأمور؟ طيب ضايل سؤال بدي اسألهونتناقش فيه
ونحلوا و تحلوا و نختم ان شاء الله الآن ركزوا معايا
في ال language اللي بدي أشرحها لأن لازم أنا أشرح
ال language صح عشان تقدر تعملي ال grammar صح تمام
ال language إيش بتقول؟ بتقول عندك .. حلو بس أنزح
في الأول
عندك في لغة البسكال راجزي معايا عندك في لغة
البسكال في حاجة اسمها block كيف شكل ال block او
كيف ال syntax تبع ال block هاي قال في keyword
اسمها beginو بتخلص ب keyword end طبعا بنات ال
block في الجابة زي هيك و هيك يعني فتحتي الجزء سكرت
الجزء و في النص بدت تكتب ال statements قعدت في
البسكال بقولك لأ تكتب begin هذه ال keyword و بتسكر
ال block ب end طب إيش في جوا ال block قال مسموح
يكون فاضي مسموح ك syntax يكون فاضي زي برضه في ال C
و الجابة مسموحومسموح يكون فيه statement واحدة طبعا
الأن ال statement لها تعريف أنت فترضيها رقم عشان
ما ينفصل فيها اتبعيها مفصلة أو جازة يعني مايبدوش
تعملين non terminal تفصيل لل statement خلاص ممكن
يكون statement واحدة وقال إذا كان فيه أكتر من
statement وهذا مسموح لازم يفصلهم فاصلة منقوطة يعني
لو بدي أكتب كمان statement بحط فاصلة منقوطة
statement خلاص ممنوع أخر واحدة تكون فيها فاصلة
ونقوطة بدي أكتب كمان واحدة فبقولك أنت حرة جد ما
بدك جوا بتحط statements بس بشرط لازم يكون بيناتهم
فاصلة ونقوطة أو ممكن يكونش ولا statement أو يكون
statement واحد هيك ال syntax السليم طيب افترضي أنا
جيت الآن كمبرمج كتبت begin و كتبت end و كتبت
statementو حطيت فاصلة منقوطة و تقولي غلط مش مسموح
لك طيب افترض احطت كمان واحدة statement فاش مشاكل
سبتها فاضية فاش مشاكل كتبت ان شاء الله مليون
statement و كل واحدة فاصلة منقوطة بس اخر واحدة
بدون فاصلة منقوطة مسموحة الان سؤالناش بيقول اكتبي
ل grammar اللي بيوصف ال syntax هذا تعالى blockواضح
السؤال، مين تكتب ال grammar؟ فكر، مضيقك تفكر، و
خرب إشي في الدفتر كمان، فكر و خرب إشي و اطلع يكتب
يعنى
أه حد قدري يعرف كيف نكتب ال grammar اللي بيوصف ال
block في البسكال أه
مين يطلع يجرب
Gerbian طبعا يا بناتي تتذكروا لما أخدنا المحاضرة
اللي فاتت ال if condition إيش كنا نكتب؟ طبعا
الكلمات ال keywords هذه خلاص هتظهر زي .. بنفس
الترتيب في ال production وإذا فيه عندك list من
شغلة معينة ما هنتعلمنا قبل شوية كيف نعمل listمن
أرقام، list، من أي إشي فالعلم السابق اللي أخدته
هذا بأهلك أنك تحلي السؤال هذا بشكل كويس على كل
حوار خلينا نشوف إيش الحل عندها تمام قاللي هتحلوا
في الآخر بديوا تقيمولي حلها و بعدين أنا بحله و
بنختار إن شاء الله
طيب إيش رأيكم في الحل اللي حلته؟ إيش تقييمكم؟ هيك
تقييم سريع صح ولا غلط؟ إيش رأيكم؟
ه؟ أول سؤال وين ال end؟ وين ال end؟ يبقى على طول
خلاص أيش ماله الجواب؟ مش مديني خريطة ال block لأنه
ال block لازم يبدأ باش؟ وين ال beginning وين ال
end؟ حتى قبل ما أفكر في الموجود الآن، مش هفكر فيه
لأنه طالما مش موجود ال structure بشكل سليم، معناه
أن هذا غلط مين بدأ يجاوبه صح؟ جربي؟ جربي، يلا أخر
محاولة عشان تجاوب، جربي فضل،
حل جنبها
طبعا ال epsilon تمثل انه فاضي عشان تكتب epsilon
اذا بدك اه epsilon عادية ابسلون تمام زي ما انت
كانت بقى مش مشكلة اه ايوه ال statementsممكن تكون
statement .. مجموعة من statement .. او statement
واحدة تمام استريحنا يلّا قلنا نقش اللي .. إيش
رأيكم في الحل اللي هي حلته؟ هيش بتقول .. بتقول في
begin لازم أبدأ فيهاوفي end لازم تكون موجودة وفي
في النص حاجة بتاعتها تعريف اسمتها ال body طبعا ال
begin و ال end هدول terminals مش اللي هم استبدالات
اللي يله استبدال اللي بتتابع معاه ال body اللي هو
احنا إيش قولنا يا فرق يا list يا واحدة صح؟ راحت
إيش قالت؟ قالت أول خيار في ال body يكون epsilon
وهذا خيار سليمطبعا لو كان ال syntax لا يسمح أن
يكون بين ال begin و ال end إلا statement على الأقل
ساعتها غلط الحُط هذه دائما أنا بتبع ال syntax
الحقيقي طالما ال syntax الحقيقي يسمح بوجود الفرار
هي عبّرت عنه بالجملة هذه و هذا شيء سليم بتكن تبقى
للقصة هذه افترضي أنا في الشرح قلتلك مش مسموح
الفرار يكون ساعتها هذه بيصير غلطواضح لكن احنا قلنا
مسموح إذا أصبحت هذه مظبوطة و لازمة طيب الشغلة
التانية أن ال body ممكن يكون statements تعالى نشوف
إيش صرفت ال statements هذه يعني مش أنه فراغ أنه في
إشي إيش جلتلك ممكن تكونstatement واحدة أو أكتر إذا
أكتر بفصلهم الباصلة المنقوطة الإجابة صحيحة بس كننا
نكتبها عادي بشكل formal هيك بالمصطلحات صح إجابتها
مافيش بيها مشاكل ممتازة الان بيجي بنقول ال block
لإن انت عارف ال block مظبوط ولا لأ ال block عبارة
عن ايش؟ عبارة عن beginوأنا بدي أخد تسمية optional
statements optional statements ليش بقصد optional؟
يعني أنه أه أو لأ وبعدين إيش بيجي؟ M ال M بالنسبة
لل optional statements عبارة عن إيه؟ واحدة من
تنتين، يا فرق إبسلون، يا statementslist زي ما هي
عاملة مثلا أو list سميها whatever يا فرق يا list
يا statements زي ما هي سمت، كل التسميات صحيحة الآن
ال statements list هاي ممكن
تكون هي statement واحدة وخلصنا أو ممكن تكون أكتر
من واحدة كيف بنعمل أكتر من واحدة؟ الاسم اللي هي
بديك تحطيه زي هيك فاصلة منقوطة يا بديك تحطيه ع
الجهة هذه يا ع الجهة هذه مين اللي بيحكم عشان ما
نغلطش هل ال statements left associative ولا right
associative تنفيذ الجمال طالما ال sequential بنمشي
يعني left associative يعني سرط الإسم نفسه بديك
تحطيه هنا اللي هو statements
list.statement1 فصارت هذا عندك حرية الخيار لو بدك
تكتب statement و تسكتي تستبدل هذه بيه؟ ب statement
لو بدك تكتب تلتين بتاخدي هذه و بترجحي هذه ل
statement و بتقدر تعمل list زي جد ما بدك زي ما
شوفنا في الأرقام قبل شوية خمسة زي ستة زي سبعة زي
تمانية فهذه موجودة ليش؟ عشان تعمل لك التكرارات في
ال statement و هذه موجودة ليش؟ عشان تختم فيها أو
قد أبد فيهاشوفت انت كيف؟ بس كمان مرة ما تنسوش انا
ليش فضلت احط هذه على إشمال الفاصلة المنقوطة يعني
ليش ما بدلتش؟ ليش ما حطت statement فاصلة منقوطة
statement list لأن حتى ال statement left
associated بده يسير من الشمال لليمين يمشي
sequential وبالتالي لازم يكون على الشمال عارفين لو
ال statement من تحت لفوق بتنفذ هو؟ كان عكسكيلا
تنسوش القصة هذه يعني انا كمان مرة بأكد على
المعلومة التالية بلا تنسوا ان انا بغلط فيها كتير
طالما انا بتكلم عن تكرار معناها اسم ال non
-terminal اللي جاب للسهم لازم يوجد بعد السهم عشان
يقدر يعمل التكرار وإلا ولا عمره بيصير التكرار الآن
طالما بيجي بعد السهم السؤال احطه في الجهة اليمين
احطه في الجهة الشمال التكرار يفرد هيك التكرار يفرد
هيكهنا بدك تسأل نفسك سؤال كيف التنفيذ بيتم left
associative؟ right associative؟ لأنه بناء على هذه
المعلومة هتعرف أين تحطيها هذه تعني التكرار فهذه ما
هتنسى المعلومات هذه ومش تحذير مش لأنه أنا دايما في
أنثلتنا كانت دايما على الإشمال يعني دايما على
الإشمال اتفكروا للأبد دايما على الإشمال لأ لأنه
دايما بنتعامل هنا مع operators ومع حاجات تتنفذ من
الشمال لليمين لكن أي حاجةهلاجيها عكست إنه لازم
أخلصها من اليمين لليشمال، هبطل أعمل زي هي و هيمول
معانا أمثلة، بعدين لازم أجلبهم واضحة؟ أعطيكم الصحة
و العافية