بسم الله الرحمن الرحيم اليوم إن شاء الله احنا
هنستكمل الـ 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 اللي لها اثنين tree وممكن يسألك
سؤال ثاني يقول لك هذا ال grammar المكتوب ambiguous
ولا unambiguous يعني مش ambiguous فعشان تعرفي بدك
تشوفي ال sentence إذا لها اثنين tree ولا مالهاش
اثنين tree بعدين في شغل صغيرة ممكن تصعب عليكم
الأمر وانتبهولها إذا في عندي grammar وال grammar كل
ال sentences اللي فيه مالهمش أكثر من ال three إلا
واحدة واحدة بس من كل ال sentences لها اثنين three
خلاص على طول هذا ال grammar شماله ambiguous وهذه
مشكلة ليش؟ لأنه بدك تسير أنت تدوري لما واحد يقول لك
هذا ambiguous ولا لأ؟ أبديك تروح تدوري مين ال
sentence اللي لها اثنين tree مش هتروح تاخدي واحدة
وماتلاقيلهاش إلا بس حال واحد تقولي خلاص مش
ambiguous غلط مش ضروري كلهم يكون لهم حلين يعني أنت
ممكن تلاقي كل ال sentences اللي بتكتبيه هم لهم حل
.. حل .. حل .. حل .. إلا بعض فخلاص هدول البعض هم
اللي خَلّوا ال grammar ambiguous فبتكون تبقى القصة
هاي وهذا أحيانًا ممكن نصعب ونسهل فيه الأسئلة، ليش؟
لأنه ممكن هيجيب لك ال 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 إيش معناها مش بدي أثبت
أحد الشجرتين من باب أولى أن خمسة زائد ستة زائد سبعة هذه الأفضل
من هذه لأن هذه تأخذ مبدأ الـ left associative
فطالما أنا اتفقت أن هذه هي الأفضل من هذه يعني بعد
اليوم وما يصير عندي خمسة زائد ستة زائد سبعة ما أجيش إليها إلا
هذه الـ tree معناه مين الـ grammar اللي بتطلع هذه
الـ tree؟ هو هذا مش هيك؟ لأن كيف نطلع؟ هم هاي
هتقول لي هاي تعالي خمسة زائد ستة زائد سبعة اشتغلي على الـ
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 صفر
واحد اثنين إلى آخرين طيب طبعا بس تخلص وتستريح و
بنقعد نسمع قراءتكم في الموضوع طبعا استريح الآن
الآن هي حلت زي هيك زي ما أنتم شايفين فسؤالي لكم
حلها صح ولا غلط؟ و ليش؟ يعني تمام؟ perfect؟ مش في
مشاكل؟ لا في مشكلة؟ إيش رأيكم في الحل اللي حلتّه
على اللوحة؟ أنه مش أفكر الـ expression أربع خمس
مرات
ماشي يعني هي بتقترح... ماشي اقتراحها شغلة فنية إيش
بتقول expression... expression of operator مثلا
اللي هم number مثلا هي بتقصد وأجي أقول الـ of هو
زائد أو ناقص أو ضرب أو تسمى مثلا هي بتقول و number
صفر أو واحد أو اثنين أو ثلاثة إلى تسعة طبعا الحل
اللي اقترحته نفس الحل اللي تحت ما فيش فرق بس اقترح
سلطة productions لكن في النهاية نفس المعنى تحت هو
نفس المعنى فوق بس اللهم بدلت كرر أربع مرات عملت
واحدة وقالت up عساس الـ up بتجلب لزيادة أو نقص أو
ضرب القسمة نرجع لنفس السؤال الآن طالما هدول اثنين
equivalent الاثنين هدول صح ولا غلط و ليش؟ لو أنا كان
عندي خمسة ضرب أربعة ثالث ثلاثة ضرب اثنين مثلا لازم
عملية الضرب الثانية وعملية الضرب بعدين أشمع
فبالتالي أنا حصلت أن في هناك ضرب طيب
يعني جزك... دي أفهم، يعني جزك أن الضرب بيقدرش يبين
معايا، بيقدرش يعمل خمسة ضرب اثنين، هيك جزك؟ بقدر،
بس الناس اللي في الدرب صعبة، إذا أنا خليتها كلها
left أساسياتي، حقيقة مثلا الجامعة قبل الدرب، وبهيك
الإجابة هتطلع غلط لأن الأولوية للدرب قبل الجامعة
إيش رأيكم اللي بيقولوا؟ الناس اللي نايمين في
الآخر، قاعدين سكتين؟ إيش رأيكم .. فهمتوا إيش قالوا؟
قالوا .. بيقولوا .. هم سامعكم بصوت آلي بيقولوا إنه
في مشكلة إنه في أولويات أنا مش عامل حسابي لإنه
بدي .. إذا عامل أنا جامعة وضارب ممكن ياخد الجامعة
قبل الضارب في الحالة هذه فما رأيكم اللي ورا
هنا؟ إيش رأيكم؟ كلام منطق اللي بيقولوا والله ولا
إيه علاقة بالمنطق ما لكم
ساكتين في الآخر والله فيش عندكم إجابة؟ طب أنا بقول
أشرككم في اللي بيقولوه هم طب أنا أسهلها عليكم
أكثر من هيك الآن هل الزائد والناقص زيهم زي الضرب
والقسمة؟ الأولوية لمن؟ أول يعني واضح أن الأولوية لضرب
والقسمة أعلى ال priority لضرب القسمة أعلى صح؟ لكن
أنا في حالة زي هذه واضح أني مسوين في بعض أنا عامل
الزائد زي الضرب زي الناقص زي القسمة وهذا وين ممكن
يسبب لي مشكلة إن لو أنا كاتب expression خمسة زائد
اثنين ضرب ثلاثة يمكن يروح يجمع الاثنين مع الخمسة
بعدين يضرب لأن أنا مش مفرج الضرب إذا واضح أن الحل
الموجود الآن ال conclusion الحل فيه غلط إيش الغلط
أنه مش واصف أو مش واخد موضوع الأولويات بالاعتبار
يعني على سبيل المثال لو أنا كاتب خمسة زائد اثنين
ضرب ثلاثة وارد جداً أنه يجمع الاثنين شوف يقول لنا
left associated فهيقول خمسة زائد اثنين سبعة و
بعدين يضرب في ثلاثة بينما إيش الصح؟ يضرب الاثنين في
ثلاثة وبعدين يجمع الخمسة فالواضح أن الضرب و
القسمة في بينهم اختلاف عن النقص والزائد وهل لم
يتم مراعاته في ال grammar الموجود؟ طب أورجيلك الدليل
.. الدليل تعالى نعمل لهذه parsing tree من هنا ..
هي بتطلع ال parsing لأ بتطلع لكن تعالى نشوف شكلها
كيف هتقولي لي؟ هنبدأ من expression .. بنطلع هذه صح؟
هتقولي لي expression زائد
أو up زي ما بدك إيش نقول؟ زائد .. خليني أشتغل عليه
هنا إيش بدنا نعمل؟ زائد نم ولا ناقص نم ولا ضرب نم؟
آخر شيء ضرب، بظبط؟ لأنك هتثبت ال num معاكي، فغصب عنك
هتقول expression ضرب نم، ما فيش قدامك خيار ثاني إذا
بدك تطلع هاي، لأنه مش آخر واحدة بتثبتمش في الحالة
تبع مش آخر واحدة بتثبت ما حدش فيه ذراع يلعب فيها
فآخر إشارة جابلها شو؟ ضرب عشان الكلام مضطر أقول
expression عبارة عن expression ضرب نم الآن خلصنا
من الضرب والنم اللي هو ثلاثة صح؟ إيش ال expression
هاي؟ حد يقول ال expression زائد نم شيت؟ وال num
اللي هي اثنين وال expression اللي هي num وال 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 ففي سؤال
إيش سؤالك يعني لو كانت بدك تسأل عن إيش خمسة مثلا
ضرب اتنين زي التلاتة كيف ابتنين تعملها tree صح
تعالوا نشترل يالا يا بنات أول حاجة هتبدأ بالـ 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 لازم ياخد مين
القوسين و يخلصه مع أن القوسين أولويتها عالية بس ليش
احنا قلنا له القوسين أولوية أعلى و لو أجى شيء هنا
أولويته أعلى من القوسين هيعملها non-terminal وهكذا
فالموضوع للأولوية سهل جدا تفعله فكرته الـ trick
تبعته non-terminal جديد و تكملي طب تعالوا نتأكد الآن
إن نعمل الـ 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 هذا عبارة عن إيش عشان أطلع القوسين
factor و الـ factor عبارة عن إيه if تهيئة cost مش على
كيفك منتهى if تهيئة cost exception لأني استبدلت
بها if تهيئة cost exception مش عامة سبت من الـ
grammar بس استبدلتش على كيفي وبعدين تسكيرة الـ cost
الـ exception هذا كيف ده طالع خمسة زائد اثنين برجع
exception زائد
term و الـ term factor و الـ 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 .. مجموعة من statements .. أو statements
واحدة تمام استريحنا يلا قلنا نقش اللي .. إيش
رأيكم في الحل اللي هي حلتة؟ هيش بتقول .. بتقول في
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 عبارة عن إيه؟ واحدة من
اثنتين، يا فرق epsilon، يا statements list زي ما هي
عاملة مثلا أو 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 ومع حاجات تتنفذ من
الشمال لليمين لكن أي حاجة هلاجيها عكست إنه لازم
أخلصها من اليمين لليشمال، هبطل أعمل زي هي وهيمول
معانا أمثلة، بعدين لازم أجلبهم واضحة؟ أعطيكم الصحة
والعافية