بسم الله الرحمن الرحيم اليوم إن شاء الله بدنا نكمل
في الـ section ثلاثة أربعة الـ recognition of tokens
طبعًا أنتَ من المرة اللي فاتت بدينا نشوف الـ
description تبع الـ token اللي هو الـ pattern على
شكل regular definition يعني خلاص أي token كان
موجود عندي المفروض أني بقدر أكتب له regular
definition وصف على شكل رياضي وهذا اللي احنا عملناه
المرة اللي فاتت، اليوم إن شاء الله بنحاول نستكمل
ونحاول من هذا الـ regular definition نطلع حاجة
بنسميها الـ transition diagram، عارفين إيش يعني الـ
transition diagram؟ المفروض أخذتوها قبل هيك يمكن
في الـ VHDL تمام؟ أذكركم لو أنا مثلًا في دائرة صفر و
أجى A بروح دائرة واحد مثلًا، وإذا كنت في واحد و أجى B
بروح على اثنين مثلًا، أجى C بروح مثلًا على ثلاثة مثلًا
فأخذت حاجة زي هيك قبل هيك، هاي بنسميها احنا state
diagram أو بنسميها transition diagram، الحلو في الـ
transition diagram أنه البرمجة تبعتها systematic
و سهلة جدا، ليش؟ لأنه أنا ببساطة كل الـ code هيكون if
else، ليش؟ لأنه لو أنا مثلًا في دائرة صفر و أجى
input a و أنا هروح هقول له خلاص بيصير في دائرة واحد
خلص code الصفر، الآن أنا بدأ أعمل code لواحد، إذا أنا
في دائرة واحد و واجه C بده يروح على ثلاثة، else أجى B
بده يروح على دائرة اثنين، else طبعًا error ما فيش
مكان يروح من واحد، فخلصت دائرة واحد، لو أنا مثلًا في
دائرة ثلاثة بكمل، يعني المقصد أن الـ transition
diagram برمجته سهلة جدا و systematic وما فيش فيها
شيء، كل قصتها switch أو cases أو if else باختصار
لأن برمجتها سهلة، بدنا نحاول اليوم نتعلم كيف أنا من
الـ regular definition أحصل على هذا الشكل، طبعًا أنا
ليش بدي أعمل هذا الكلام؟ احنا قلنا إنه بدنا نحاول
الـ computer بشكل systematic يفهم الـ token و يتعامل
معاه، مش هيك ولا لأ؟ فاحنا روحنا أول خطوة عملناها
عملنا regular definition، المفروض عشان يقدر
الكمبيوتر يستوعب ويعمل الـ coding ويتعامل ويتعرف
على الـ tokens، المفروض أشوف صورة أسهل للكمبيوتر من
الـ regular definition، علشان هيك لازم يكون فيه
مقدرة أن نحول من صورة الـ regular definition
المعادلات الرياضية بطريقة ما نحولها لوين؟ للـ state
diagram، إذا نجحنا و حولناها للـ state diagram أصبح
عملية الـ coding تبع الـ lexical أسهل بكثير لأنه صار
يعمل coding لدوائر switch if else، فانا بكون بسطت الـ
problem، لكن افترضي هذا مش موجود واكتفيت بالمعادلة
الرياضية، صعب أطلع code و أبرمج، مش أنه مستحيل، صعب
يعني أما أنتِ شفتي مثلًا تعريف الـ ID كان عبارة عن
letter بعدين افتحي قوس ghost concatenation مع letter
or digit الكل closure، فهذا كان definition، فتخيلي
أنه أنا قدرت هذه الصورة أحصل فيها على هذا الشكل
مثلًا لو بقدر، هتقولي لي أكيد أبرمج من هنا أسهل من ما
أروح أبرمج من هناك، لأن هناك ممكن التعقيدات تزيد في
closure و concatenation و combination من العمليات
و قصص كتيرة، صح ولا لأ؟ فممكن إذا احنا قدرنا نوصل من
هذه الصورة لهذه الصورة، أتوقع الـ code ما له مش هيصير
أسهل، وعملية الحصول عليه أسهل، وشكل systematic عشانك
احنا دورنا في الـ section ثلاثة أربعة بدنا نشوف بالفعل
كيف كل regular definition، كيف ممكن تحوليه لـ
transition diagram، هاي اللي بناخده في الجزء الأول
محاضرة اليوم، أن كل regular definition احنا نعمل
فيه نحوله لهذه الصورة، واضحة ليش نحول لهذه الصورة؟ في
الطريق أن أنا أعمل code lexical سهل بشكل
systematic، هي كل الهدف تبعنا، فلازم أشوف طب كيف من
الـ regular definition أنا بوصل للمكان هذا، تعالوا
نشوف، طبعًا عشان نشوف هو بدأ بمثال سهل جدا، قال
اعتبري أن أنا عندي هذا الـ grammar موجود، أول خطوة
عشان نشتغل Calexical لازم أعرف مين الـ tokens اللي
هنا، مش هيك؟ عشان أحط لها التعريفات، وعشان أقدر
أجيبلها الـ state diagram، وبعدين أقدر إيش؟ أعمل الـ
code، مش هي الخطوات تبعتنا؟ الآن مين الـ tokens اللي
موجودين هنا؟ هتقولي لي معلومات سابقة، الـ F و الـ then
و الـ else و الـ ID و الـ number و الـ reload، هي هتقول
كل هدول الـ tokens اللي هنا، صح ولا لأ؟ طيب الآن إيش
بدنا نسوي بعد هيك؟ المفروض أعمل regular definition
لمين؟ لكل token موجود عندي، مش تعلمناها ده المحاضرة
السابقة؟ يعني أنتِ المفروض عندك المقدرة الآن، الـ 6
tokens اللي موجودين هدول، تعمل إيه لهم regular
definition من المحاضرة السابقة، يعني مثلًا الـ F إيش
الـ regular definition تبعها؟ هيقول لي سهلة، سهم IF الـ
VIN سهم T-H-E-N الـ L's سهم E-L-S-E الـ number
أخدناها المرة اللي فاتت، الـ ID أخدناها المرة اللي
فاتت، يمكن اللي زاد علينا المرة اللي فاتت مش رافعينه
reload، كيف نعمل تعريف للريلوب؟ طب عندك تسألني في
الأول كواصف شو هو الريلوب؟ أنا الجواب، الريلوب هو
أصغر، أصغر أو يساوي، أكبر، أكبر أو يساوي، لا يساوي، أو
يساوي، إذا كيف تعمل الـ definition؟ آه، كيف تعمل الـ
definition للريلوب؟ concatenation ولا or؟ or، خلاص
هتقولي أن الريلوب سهم أكبر أو أصغر أو أو يساوي أو
أكبر أو يساوي أو يساوي أو لا يساوي، صح ولا لا؟ فكله
هيصير إيش عندك؟ عملية or، فأنت بتكون هيوصفتي الـ
language، فزي ما تم لحظة أن عملية إن أعمل regular
definition موضوع simple خالص مش صعب، و خصوصًا إنه
يرتكز على بس ثلاث عمليات رئيسية، اللي هي الـ
concatenation و الـ or اللي هي الـ union و الـ
closure، يعني ما فيش عندي حاجات كتير بتعمل منها هذه
العمليات، هما ثلاث شغلات، combination منهم بطلع أي
regular definition بدي إياها، بطلع أي token بدي إياها
فالعملية أسهل بكثير، تمام؟ بس أنا بحاول أسهلها أكثر
مش لأني كـ human، للـ computer، عشان هيك أنا مضطر
أحاول أنتقل لهذه الصورة عشان الـ computer يقدر
يستوعب هذا الشكل و يقدر يعمل له coding، لأن هذا الشكل
أسهل للـ computer من شكل regular definition، أنا
بالنسبة لي كـ human ما بتفرقش معايا، أنا بقدر أحل على
regular exception على طول، و بقدر أحل على هدى على
طول، لكن إذا بدي شيء systematic و الـ computer لحاله
يعمل generation لـ code لأ، لازم أنا أمشي في خطوات
تسهل العملية، واضحة؟ طيب تعالوا الآن نشوف الـ
definitions، هيهم بناء على المحاضرة السابقة، هي كل
الـ definitions الـ tokens اللي شفناهم في الـ grammar
اللي قبل شوية، طبعًا عرف الـ number عرف الـ letter عرف
الـ ID عرف الـ F عرف الـ then عرف الـ else وعرف الـ
reload اللي هي عبارة عن oring لهدول، طيب تعالوا
الآن نشوف الخطوة المهمة اللي بنتكلم فيها، كيف أنا
أقدر أعمل الـ transition diagram أو الـ state
diagram لكل token، يعني أنا عندي كم token هنا؟
ستة؟ مظبوط؟ طبعًا هذا مش token هذا في اتجاه تعريف
الـ token، أنتَ عندك الـ token، هم هي regular
definition للـ number هي regular definition للـ ID
هي regular definition للـ F و للـ then للـ else للـ
reload، 1 2 3 4 5 6
مظبوط؟ ماشي، مش هتفرق معانا، هم ستة لكن مش هتفرق ستة
سبعة، جد ما يكون فيه tokens بعمل لها أنا regular
definition، مش هيفرق، المهم أنه لازم يكون فيه
regular definition، طيب الآن أنا بدي أعطي مثال واحد
على الـ relop، بدي نشوف كيف الـ relop هاي الـ
definition تبعها، كيف بدي أحوله لـ set diagram، فإذا
أنتِ فهمتي هذا المثال هيصير سهل عليكي تحولي أي
واحدة من هدول، بس حاولي تفهمي كيف بدي أشتغل، تعالوا
أوريكي كيف بدي أشتغل، الـ relop، هتقولي لي أكيد لازم
نبدأ بدائرة بداية، و أعطيها مثلًا رقم صفر، الآن أنتِ
من دائرة البداية بدك تقولي إذا والله أجى أصغر مثلًا
الـ input، إذا أجى أصغر بدك تروحي وين؟ على دائرة إيش؟
دائرة مثلًا رقم واحد اللي هي دائرة الأصغر، مظبوط؟ لكن
أنا ما أقدرش أقف هنا و أقول أنه خلاص، لجيت إشارة أصغر
لأنه وارد جدا يكون وراها يساوي، عشانكِ لازم أنا
أفحص و أكمل على حسب الموجود، فعشانكِ أنا هكمل، ولو
كان وراها يساوي، الآن أنتِ خلصت الصورة لجيت عندك أصغر
أو يساوي، صح ولا لأ؟ عشان هيك إيش بقول؟ بميز الدائرة
هذه بدائرتين في بعض، الدائرتين في بعض معناه أن هذه
acceptance state، معناه أن هذه لجيت عندها token، يعني
أنا مش هوصل اثنين مثلًا، أديها رقم اثنين، أنا مش هوصل
اثنين إلا إذا شفت أصغر و شفت يساوي، يعني بالعربي أن
أنا وصلت اثنين، صار في عندي token اللي هو less or
equal صح ولا لأ؟ علشان هيك أنا أيش الـ code اللي بدي
أسويه عند اتنين؟ لو بدي أعمل code بقوله بس بدي أعمل
return مش هيك؟ مش عارف أرجع في الآخر الـ token اللي
هو reload طب هل أعطيله value؟ لأنه طالما مجموعة لازم
يكون له attribute مين اللي أنا بدي أرجعه؟ مين اللي
إنت لاجيته الأصغر أو يساوي ولا الأكبر ولا الأكبر
يساوي؟ فلازم أنا أيش أسويه؟ أعطيله attribute value
أنا هاكتب هيك less or equal طبعًا مسموح نكتب أسماء
زي true و false و return و else و return مسموح
بالشرط تكون عاملة تعريف الـ tag فوق إن الـ LT
وتديها رقم ف أنا خلاص هعتبر إن احنا عاملين الـ LT
برقم فوق و بقى بتستخدمها عادي بس تتذكر يا دي
المعلومات السابقة تمام؟ إذا أنا لو وصلت لدائرة
اتنين كل اللي هسويه reload طيب بدي أذكرك بشغلة
مهمة المعلومات هذه من وين بيقراها؟ يعني لما أنا
بكون في state zero بتاع وإيش بقول؟ لو اجى input
أصغر، بدي أروح لواحد، مش هيقولنا؟ وإذا اجى input
ورايه ساوى، بدي أروح لاتنين، بعدين أقول له return
إني لجيت reload وين هذا بيقراه؟ من وين بيقراه
الأصغر؟ وين موجود؟ في keyboard؟ في ملف؟ في
buffer؟ في الـ buffer مش احنا اتفجنا عشان نفهم القصة
بالكامل إنه بيروح على الملف اللي بدوي فيه على ال
tokens بيقرا كل الـ characters و بحطهم في الـ buffer
فممكن أصغر كان هنا أو يساوي و مش بيكون فيه لقسيم
begin اتفاجنا الـ exam begin و بكون الـ forward اللي
بيبدأ معاه ففعليًا هذه قيم من؟ الـ forward ف أنا لو
الـ forward أصغر إيش بيصير في الـ forward؟ بيمشي
خطوة الـ forward صح ولا لأ؟ لكن بكون في دائرة واحد
فمين في الـ forward اللي ورايا؟ الـ يساوي فلما بيجرى
الـ forward اللي ورايا طبعًا الـ forward أشماله هيمشي
هنا لكن أنا بكون وين وصلت؟ لاتنين فبيقولوا لاجيه الـ
token أزرع ويساوي فخلاص الـ forward بيجيب هنا إنه
خلاص لاجيه الـ token فأكيد لازم في عملية في البرمجة
تصير إنه لازم أحرك الـ axiom begin لمين؟ للمكان
الجديد عشان يبدأ يدور من الجديد فما تنسيش هذه
المعلومة إن الـ characters هدول اللي أنا جاية بدور
وين الـ token تبعه؟ من وين بيجيه؟ بيجيه من الـ forward
اللي أخذناها قبل هيك في الـ buffer لأن العلاقات
كلها في بعضها هذا كله مندمج في بعضه الموضوع واضحة؟
مش أخذنا قبل هيك في section 2 الـ buffer قولنا
بناخد من الملف و بحط فيه الـ buffer و بنصير نقرأ
character character من الـ buffer صح ولا لأ؟ فعملية
التعرف على الـ token الآن على شكل Transient Diagram
زي هيك مش صعبة أنا ببدأ... هيك بتبدأ القصة أنا
ببدأ من D على Zero و الـ exceed begin واقف هنا و الـ
forward واقف في بدايته أيش الـ forward؟ أصغر هتعملي
effects والله إذا الـ forward أصغر إيش بقولك
الجواب؟ روحي على واحد خلاص ماذا يحصل في الـ forward
عندما أجدك؟ يمشي خطوة عشان يشوف الـ letter... الـ
character اللي وراه الآن صار على يساوي صح؟ الآن مش
بقوله إذا كنت أنا في واحد و كان الـ forward يساوي و
أروح على اتنين و بمشي الـ forward معله... خطوة لكن
خلاص اتنين إيش هتسوي؟ هتطلعني من كل الـ code لأنها
لقطت token فبتعمل return طب بدأ أسأل سؤال جدلي هنا
شوية على فرض إنه أنا كنت في واحد تمام؟ وماجانيش
اليساوي مثلًا اجاني أي character غير اليساوي إيش
بدك تسوي؟ بدك ترجعي إنك لجيتي أصغر عشان كيف
تتمثليها بدك تقولي إذا اجا other إذا اجا other يعني
مش يساوي في الحالة هذه إيش الدائرة التلاتة بتكون
مثلًا return reload
less than شوفتي كيف؟ شوفتي؟ فخلاص بس في مشكلة هنا
إيش المشكلة؟ إنه أنا صارت ماشي forward مش صار ماشي
خطوة الـ forward فبتروح مني هذه عشانك بنعلمي بنجمة
هنا إيش النجمة هذه معناها؟ إنه في character زيادة
أنا مشيت عليه لازم نرجع نفحصه كمان شوية عشان هيك
المفروض لما بنفذ الـ code هنا لازم في الأول أخد
بالي إن الـ forward لازم شماله يرجع و حقيقة كمان مش
بس الـ forward بيرجع كمان الـ xin begin بعد ما بلاقي
الـ token إيش بيسوي الـ xin begin؟ بمشي عشان يبدأ
يبحث في اللفة الجديدة الـ token الجديد مش أنا مش
كان الـ xin begin واقف على أصغر و وصل لهنا الـ
forward خلاص لاجأ لما وصل لاجأ مش يساوي لاجأ أي حاجة
other لاجأ أنا مثلًا كانت بضرب مش الـ token اللي
لاجيناه؟ مش الأصغر؟ فبديقول return أصغر صح ولا لأ؟
الآن الـ forward و الـ Xen begin وين بيروحوا؟ بيمشوا
هنا يعني خلاص بالعربي بدهم يمشوا على اللي بعد عشان
المرة الجاية يبدأ الـ Xen begin من مكان جديد و يبدأ
يطلع منه الـ forward دائمًا يا بنات الـ forward ببدأ
من مطرح الـ Xen begin هذا الـ forward حدود الـ token
فلازم الـ Xen begin يجف على المكان اللي بدأ أفحصه
بثبات الآن الـ forward بيصير يمشي بالدور بيصير يمشي
بيصير يمشي بيصير يمشي بدور على الـ token إن لاجأ الـ
token و خلص حين عرفت بدايته و نهايته فبدأ أرجعه
لكن إيش بدأ أساوي عشان ألف لفة جديدة صح؟ بدأ أمشي
الـ begin لورا الـ forward إذا ماكانش ماشي زيادة إذا
كان ماشي زيادة برجعه و ببدأ الـ begin من مطرح احنا
رجعته ليش؟ علشان نقدر نكمل مايضيعش مني ولا
character طب أنا كيف أعرف حالي ماشيت زيادة ولا لأ؟
إذا حطيت النجمة هذه شايفة تغيّر أنا ماحطتش نجمة ليش
ماحطتش نجمة لإن أنا مامشيتش زيادة ماشيت أصغر ماشيت
يساوي قولتله يعطيك العافية لجيت الـ token لكن هنا
ماشيت other إيش يعني other؟ يعني حاجة اجت بعد
الأصغر مش يساوي شوفت كيف؟ فصار واصل هنا هذا انفحص
ولا لا الـ other مانفحصش مش إنت هترجح لاجيت الـ token
هذا طب هذا الدرب اللي كان هنا مش مانفحصش مايمكن
يكون token تاني عشان هيك إيش النجمة معناها؟ إنه
لما تفحص المرة الجاية لازم ترجع خطوة خلاص أيوة
يعني خلاص إنت لاجيت الأصغر ارجع خطوة يعطيك العافية
رجع الأصغر وبدأ من وراه ماضياش الدرب هي الفكرة
تبعتها طيب على كل حوالي هذا النقطة هرجعلها
بالتفصيل الممل بس خليني أنا أوضح النقطة أهم منها
بعد ما نرجعلها تاني أو ذكروني إذا ما رجعتش تاني
احنا بس طب هذا صح لأن في عندك لو طلعت شوية وارد
جدا يجيني لا يساوي هذا معناه لا يساوي في ال
language تمام؟ فوارد جدا إنه أشوف بعد إشارة الأصغر
اليساوي وهذا له معنى إنه لجيت less or equal وورد
يجيني إشارة الأكبر وهذا معناه إنه لجيت not equal
إذا ما جاش الأثنين هذول بتظهر الخيار الأخير اللي
هو الـ less ده عشان ذلك لازم أنا هنا برضه أعمل إذا
اجى أكبر أعمل دويرة جديدة يعني خليني أقول هذه
تلاتة هذه أربعة مش مشكلة الترقيم و أجي أقول أنا
return لمين يا بنات؟ relope اللي هي نية not equal
شايفة كده؟ فعملتها سهلة الشجرة جدا سهلة الـ state
diagram أنا بدأت من zero إذا جاني أصغر لسه مقدرش
أفتي فيها مقدرش أقول اللي جيت أصغر لأن word يجيني
يساوي و تسير أذره يساوي و word يجيني إشارة الـ إيش
الأكبر هذه في الـ language هذه معناها إنها not
equal طب لا اجت هاي ولا اجت هاي ما ضلش قدامي غير
إنها كانت أصغر بس بكون ماشي إيش هنا؟ خطوة زيادة
other فبحط نجمة عشان أعمل indication إنه لأ لازم
أنا أرجع خطوة عن هذا الـ character عشان أفحصه المرة
الجاية هي كل الفكرة باختصار طيب الآن أنا في zero
ما جهاش أصغر أجه أكبر هتعمل حاجة بنفس الفكرة هتقولي
هروح احنا ندورها جديدًا، صح؟ طب هل هتفتح و تقولي هذه
acceptance؟ لأ، لأن ممكن word يجي يساوي وراها، صح
ولا لأ؟ فبكمل، بقول لو أجي يساوي وراها، بيصير عندي
acceptance، و إيش؟ بقوله return لمين؟ تجدوا مش
محلول هذا يا بنات، بس حاولوا تتركزوا و تفهموا
معايا، تمام؟ الآن بتشوفوا حلو، محلول في الكتاب
المهم أكبر أو يساوي، إيش هتروح ترجع هنا؟ return,
greater or equal طيب افرضي من هان ما جاش يساوي اجة
طبعًا other أي حاجة ثانية هتعملي دورتين و نجمة عشان
تقولي إن هذا ما نفحصش عشان يرجع عنه للمرة الجاية و
تعملي return لمين؟ إنه لقيت greater than اللي هي
هذه شوفتي كده؟ هذه ما نفحصش عشان أنا حطيت نجمة إن
هذا لازم إيش أرجع عليه في اللفة الجاية؟ طب هيك
خلصنا ولا ضايل فيه إشي؟ ضال يساوي، مش هيك؟ هاي إذا
أصغر، عرفتي وين هروح، هاي في أصغر أصغر يساوي،
هاتين ثاني خلصتهم، وإذا أكبر، أو sorry تلاتة هم،
هاي تلاتة خلصتهم، وبعدين هاي و هاي، هيك خلصتهم،
مظبوط؟ ضلّت اليساوي لحالي، صح؟ عشان هيك إيش بقول،
إذا أجى يساوي على طول بدي أعمل خلاص return equal
خلصت طب افترضي لو في لغة زي الـC++ الجابة ولا الـC
كانت موجودة يساوي يساوي هيك شكلها ساعتها أنا مش
هقدر أمشي هكمل يساوي وبعدين أعمل مافيش داعي لأدار
إلا إذا كانت هذه موجودة إذا التنتين موجودين إذا
هذه وهذه موجودين ساعتها لازم يكون أداريعني افترض
فيه يساوي وفيه يساوي يساوي طب هذا مش موجود بس
بقول على سبيل المثال لو موجودين ساعتها هتسيه اللي
بتقول هنا لو أجى كمان يساوي فيه إشي تاني ولو أجى
other بتظهر يساوي لحالي طب افترض هنا مش هتحط يساوي
لحالي مش هتحطي هذا الـ other يعني الفكرة أنه سهل
جدا أعمل من الـ .. الـ .. الـ definition للـ state
diagram بتبقى شاشة هالطول وين الدوار اللي عندي
بعمل الـ state diagram وبخلصه طبعا الآن موضوع
الترتيب الأرقام حرّة إنت فيهم يعني أنا مش شرط امشي
صفر واحد اثنين ثلاثة الآن ممكن الكتاب يعمل ترقيم
ثاني ممكن أقول صفر واحد اثنين ثلاثة أربعة اثنين مش
مشكلة أي ترقيم اعمليه ما أنت في الآخر هتبرمجيه حسب
الترقيم اللي إنت سويته طبعا طب الآن أنا هذه لو بدا
أبرمجها يا بنات كيف بدا أبرمجها هذه الرسمة كلها
هتعملها بالـ C ولا بأي لغة هتقوليلي سهل جدا
هتقوليلي switch الـ state اللي إنت فيها case zero
طبعا إذا أنا الآن في state 0 خلاص، إيش هذا؟ مالـ
switch لمين؟ للـ forward يعني افترضي أنا بدأت من
state 0 خلاص، مش بتفحص الـ edge إيش عليه؟ عشان أعرف
أين بدي أروح الـ edge مش هو الـ forward اللي في الـ
buffer مظبوط ولا لا؟ فبقوله إذا الـ forward أو إذا
الـ input يا ستي زي ما بديك أصغر وأنا في state zero
إيش الـ state الجديدة؟ خلاص هيعطيك إيه .. اه else
if لسه أكبر إيش الـ state الجديدة؟ حسب رقم هذي
تبريها رقم 100 مثلا، هتقولي الـ state صارت 100 else
if يساوي state مثلا خمسين هروح على الست خمسين else
error مافيش صح؟ يعني إذا أصغر في مكان إذا أكبر في
مكان إذا يساوي في مكان طب هو character لمش منها
دول error معناه مش موجود عندي هذا الـ token شفتي
كيف؟ طيب افترضي بدنا نعمل الـ state مية كيف
بتبرمجيها؟ أنا في الـ state مية هتقولي if الـ
forward يساوي روح على الـ state هذه else if other
روح على الـ state هذه أو حتى else بدون else if ما
خلاص else يعني على طول هذه ما ضلّش مافيش error هنا
يا هان يا هان شوفتي كيف؟ أنا هنا برجعش forward لأ
بدي أبرمج هذه إشي تاني لإنت برمج هذه الآن برمجة هذه
ما فيها إشي ما فيها نجمة ولا غيره if forward يساوي
روح لهذه الدائرة else روح لهذه الدائرة تعالي طب
نبرمج هذه الدائرة هذه الدائرة إيش ده أبرمجها؟ خلاص
ما بديش إشي بدي أرجع، return, reload, greater or
equal صح؟ طيب هذه كيف نبرمجها؟ آه فيه نجمة يبقى
لازم قبل ما أقوله return بتقوله retract ارجع خطوة
لأنه في هذا character الـ forward لازم يرجع عليه
عشان نفحصه طب خلاص عمل الـ retract يعني رجع عنه
خلاص إيش بقوله الآن return إنّي لجيت reload greater
than باختصار شوفتي كيف؟ طيب تعالوا نشوف كيف الكتاب
عمل بالأرقام هذا المثال قالك هيو باختصار
مش صعب خالص جالك أنا مرشح من zero يكون عندي أصغر
من البداية أو يساوي أو أكبر هاي باختصار طبعا طيب
الآن طلع لما عمل الأصغر إيش جال أول شيء أنا في zero
إذا كان أصغر إيش هتقولي في codeك؟ خلاص للـ set واحد
ويعطيك العافية هيك خلص code الـ zero else if يساوي
codeك إيش صار؟ خمسة else if أكبر codeك إيش صار؟
خلاص خلص code الـ zero انتهى فإنتي أي دائرة الآن
automatic بتعملين الـ code تبعها يعني الآن لو بدي
code ثلاثة شو يقول code ثلاثة؟ خلاص return reload
not equal على أساس الـ not equal المعرفة فوق برقم
في الـ tag طيب بدي دائرة مثلا ثمانية إيش كودها؟ لأنه
فيه نجمة Retract ارجع خطوة عشان ما يضيعش الـ other
هذا عشان أنا أ .. أفحصه المرة الجاية فبقوله
Retract يعني رجع مؤشر اللي في جوا الـ buffer راجعه
خطوة خلاص لأنه اللي جاي هذا بينفحص تمام؟ وبعدين
إيش بقوله؟ Return Relop Greater Than هذه القصة
سهلة فلحظة الانتقال من الـ regular definition بتاع
الـ Relop لرسمة الـ Relop ولا حاجة سهلة جدا مافيش
فيه إشي مباشرة وهذا الـ code هو كمان شوي هنشوفه
هيكون أسل وأسل الـ code تبعه، فيه له code، تمام؟
خلينا نشوف الـ code بالمرة عشان نختم النقطة هذه
تعالي أوريكي الـ code بالمرة، هاي الـ code قدام، بس
هنرجع لكل هذا اللي سيبناه طلع على الـ code، إيش
بيقول الـ code؟ شاف الـ code ما أسهله؟ طلع، إيش بقوله؟
بقولك أنا عندي function بتترج في الآخر token من نوع
reload لأن هذا تعريف للـ reload اتطلع أول ما بدأ
وين بدأ Galaxy switch state يعني أنت في أي state
واقف أنا واقف في الـ state الأولى Zero تمام؟ دي
بتاعة الـ reload الآن إيش تجتعملي؟ if else إيش الـ
input؟ عشان أعرف أين بده يروح فإيش جالك Galaxy C
تساوي next car؟ طبعا احنا الـ C من وين بنجيب قيمتها
المفروض؟ من الـ buffer الـ forward هو هنا ممكن تجيبه
من keyboard بس احنا الصح من وين بيجيه من الـ buffer
الـ forward اللي كنا نتكلم عنه فبده يفحص هذا الـ
forward شو هو إذا لجأ هذا الـ forward أصغر إيش
بيقوله الـ state الجديدة تبعتي؟ واحد طبعا بنرجع
للرسمة ونشوف اللي قبل شوي تحت الكتاب إيش كان
بيروحه؟ واحد طيب إذا كانت الـ state يساوي وين بيروح؟
على خمسة إذا كانت الـ state أكبر وين بيروح؟ على ستة
else؟ فين؟ شوفتي هي اللي ناس اللي ناسيين هاي الرسمة
هاي الرسمة طلع شوفي ها أنا في zero الأصغر راح وين؟
واليساوي راح وين؟ والأكبر راح وين؟ ستة والـ else
راح وين؟ فالّ لإنّ مافيش شيهانة صح ولا لا؟ دائرة
ثمانية إيش كودها؟ عشان مكتوبة برضه retract و retire
و return يعني صح تعالى هاي الـ code يعني واضح إنّ الـ
code مافيش فيه إشي سهل خالص هاي شايفة هاي اللي قبل
شوي راح على واحد وخمسة وستة و error وبعدين case
ثمانية طبعا هو ما حله كله إنت طبعا لازم كل الدوائر
اللي في الرسمة كلها من ألفها إلى آخرها كل دائرة
عمليلها codeها هو أخد هنا كـ sample دائرة صفر و
دائرة ثمانية بس وجالك ما هي نفس الجثة هتكون في كل
الدوائر if else وخلصناه دائرة ثمانية هي دائرة
ثمانية إيش دائرة ثمانية؟ شافش عمل؟ retract ليش عمل
retract؟ لأنه عليها نجمة لأنه كان ماشي خطوة زيادة
فالـ forward لازم ما يضيعش هذا الـ character يرجع
عنه عشان يفحصه المرة اللي جاية طبعا في كل مرة ببدأ
فيها البرنامج يفحص الـ forward والـ extreme begin
يكونوا مع بعض فبمشي الـ forward بالدور لما يلاقي الـ
token بوقف إن كان ماشي زيادة برجع عنه عشان الـ
Xيم اللي ما رجعه الـ begin يبدأ من أول character
وراة فما تنسيش القصة هذه على كلّ أحوال فقال لي
retract وبعدين خلاص إيش بترجع؟ reload اللي هو الـ
token اللي هو الـ attribute تبعه GT طبعا هان عمل
class سماها read token تمام عشان إيش؟ يحط التعريف
تبعه فيه واضحة تهان؟ في أي مشاكل؟ في مشاكل؟ ما إنت
لو درست درس الـ buffer ومتذكرة بتقوليش جهازك أنا
بذكرك بتتذكر أيام ما كنا جاب المحاضرتين قولنا في
buffer عشان نسرّع العملية تاعة القراءة من الملف فأنا
بروح على الملف بقرا كل الـ characters مرة واحدة و
بنيجي وبنكتبهم hand مش هيك في نص الـ buffer الأول
فممكن كان فيه أصغر يساوي X Y المهم فيه كلام كثير مش
هيك؟ قولنا عشان أنا أتعرف على الـ token كـ human
اشتغلت في عندي الـ axiom begin وفي عندي الـ forward
قلنا لك سين بيجين والـ forward بيبدأ مع بعض بعدين
بمشي الـ forward خطوة وخطوة وخطوة لغاية ما يلاقي
detection للـ token بمجرد ما يلاقي الـ token خلاص
عرفت بدايته ونهايته بروح برجعه وببدأ لك سين
بيجين من ورا هذا زمان كنت أشتغله كـ human اليوم لأ
بصير أشتغله كـ state diagram إنّه خلاص كـ state
diagram ببدأ من دائرة zero اللي هي الـ extreme
begin والـ forward واكفيه مع بعض الآن ببدأ الـ
forward يقولي إيش الـ character اللي عنده بدأ منه
بعرف أي دائرة هروح فالـ forward افترضي كان أصغر
معناه إنّ أنا روحت دائرة واحد الـ forward مش بيصير
فيه بمشي عليه وراه لجى يساوي بمشي عليه وراه خلاص
الآن لجيت الـ token فبدأ أقوله ارجع إن لجيت كذا
طبعا في اللفة الجديدة المفروض الـ begin يمشي ورا
الأصغر أو يساوي والـ forward يبدأ من جديد عشان
يلاقي token جديد فهيك العملية بتصير باستمرار بالظبط
لازم يبدأ من ورا الـ token اللي جاء في عندنا مشكلة
أنه لما بكون فيه لجمة معناها الـ forward ماشي خطوة
زيادة عن الـ token فبتصير حدود الـ token ماشي عنها
خطوة فبنقوله ارجع خطوة عشان أعرف حدود الـ token
الصحيحة واللفة الجديدة يبدأ الـ begin من وراها و
بتبقى العملية automatic باستمرار واضحة الأمور تمام
أيه ده الشيء يا عمارليش؟ لأنه أنت بدك ترجع في
الآخر مش هي كأحنا شغلنا في شبطر اتنين كنا نرجع الـ
token اللي بنلاقيه لما كنا نلاقي token من نوع
number مش أنا عملتله class لـ number لما كنا نلاقي
token من نوع ID مش عملتله class للـ ID طب اليوم في
token جديد من نوع reload فالمفروض أن أنا أعمل class
لهذا الـ Relop اسمه Red Token فهمتي كيف؟ Relop
Token يعني بس للـ relation مشكلة لازم نعمل class
فهو بيقولك فرصة عملنا class هينوعه Return Token
طبعا هذا أكيد هيورث الـ token الأساسي ويضيف عليه
الـ value بتاعة less than أو greater than أو الأخره
أو الـ lexime تبعه تمام؟ لأنه فيه الـ lexime أكبر أو
أكبر وساوي okay طيب في أي سؤال لحد هان؟ طيب الحلو
في الموضوع الآن من هذا المثال المفروض أي regular
definition أوريكيها تعمليلي على طول إيه؟ الـ state
diagram سهل العملية تعالوا ناخد كل الموجودين و
نشوف كيف نعملهم الـ state ونتكلم بعض الملاحظات
على كل واحدة طبعا بعضهم ممكن يصعبوا الـ state
يسهلوا لكن in general العملية سهلة تعالوا
الآن نشوف الـ token اللي ورا اللي هو الـ ID هي هي الـ
regular definition بتاع الـ ID
هذا الـ ID شايفينه؟ شايفين هذا الـ ID؟ تمام؟ كيف
بدنا نعمله الدوائر تبعته؟ إيش رأيك؟ أكيد في الأول
هتقوليلي بلزمني start جديدة صح؟ بلزمني start جديدة
غير الـ start هاي مش هاد الـ start كانت لمين؟ للـ
reload وخلصت الـ definition كامل وعملت هذا الـ
definition transition كامل الـ diagram كامل صح ولا
لا الآن بدك تبدى تعمل الـ definition لمين أو state
لمين؟ للـ ID فلازم تحطي رقم start طبعا الرقم من وين
هيبدأ يا بنات؟ إيش آخر رقم أنت شوفتيه هنا؟ كان
ثمانية يبقى بدك تبدى بالرقم الجديد هل أستطيع أن
أستخدم رقم الموجودين؟ لأ لأن هذا شغله حاله مخصص
فماقدرش أستخدم نفس الرقم لازم أعمل رقم جديد طبعا
مش شرط أمشي sequential يعني آخر شيء ثمانية أنا حور
بدي أبدأ من عشرين أنت حرة شوفتي كيف؟ لكن احنا
بنبدأ ما نبدأش بالترتيب فهنا خلصوا من الثمانية
بقول مثلا الـ start الجديدة من وين؟ تسعة طب وواحدة
ممكن تسأل تقول طب أنا مش حابب أبدأ بالـ .. بالـ
Relop حابب أبدأ بالـ ID بمشي الـ .. أبدأ من Zero و
أعمل شجرة الـ ID أو الـ state diagram بتاع الـ ID و
بعدين أبدأ في الـ .. في الـ baguette فأنت حرة في
الترتيب المهم أنه كل token كل regular definition
له state diagram خاصة فيه بـ .. بدايته واضحيت؟ الآن
الـ ID كيف بدنا نشتغل؟ اه إيش رأيك؟ من تسعة هنبدأ
كيف بدنا نشتغل في الـ ID؟ هتقولي researcher letter
هروح لـ state مثلا عشرة طيب؟ بعدين letter أو
digit ضلك في الـ state عشرة مش هيك؟ لأنه خلق
letter أو digit letter وdigit شعمل الـ state
الزيادة ما تكلفني الـ code الزيادة لأمتى بنظلنا
هيك؟ لما يجي other
acceptance ونجمة يعني أنت بدأت من تسعة أجى letter
روحت على عشرة أجى letter على عشرة letter عشرة
digit عشرة letter عشرة أنت لسه قاعد بتلف أجى حاجة
مش letter و مش digit خلاص واضح أنه لجيت الـ ID
فبيجي other عدعشان هيك إيش بقوله ليش حطت النجمة
عشان أفهمهم أن أنا مشيت خطوة زيادة هذا الـ other
اللي هو مش letter ولا digit لازم ينفحص في المرة
الجاية لازم ارجع عنه ما نضيعوش عشان هيك بنحط النجمة و
بنقول خلاص وصلنا طبعا أنت مش هتوصل لـ 11 إلا إذا
لجينا identifier طب السؤال إيش بدنا نعمل في الحالة
هاي return إيش ID طب ميمكن الـ ID موجود شفناها قبل
هيك بنحطه في الـ table؟ طبعا .. طبعا بدي أذكرك الآن
بشغلة مهمة هنا يعطي العافية وصل لمرحلة أنه لجأ
التكل موجود الآن إيش بدنا نعمل؟ بدنا نعمل كنا
الكلام نسويه زمان إيش كنا نسويه زمان؟ أجيب الـ
symbol table هل هذا موجود جوا لو مش موجود جوا؟ إذا
موجود جوا رجعيه زي ما هو إذا مش موجود جوا روح
وحطيه ورجع الـ reference اللي عليه صار لأ فمتنسيش
هذا الكلام اللي بدنا نسويه الكلام السابق بيروحش
بضيعش بظال موجود أنت بس هذا وظيفته أنه لجالك تكل
من نوع كلمة هيك بده يقول لي طب شو هي الكلمة؟ كيف
بتعرفها؟ شو تفاصيلها؟ لازم أرجع لمين؟ للـ symbol
table اللي أنا عامله أدور على هذه الكلمة هل هي
موجودة جوا ولا لأ؟ إذا موجودة جوا رجعها وبقوله
لجيت لك الكلمة الفلانية اللي هي في الـ symbol table
في المكان الفلاني يا ضينا العافية خلصنا من الـ
lexical مش الكلام مش غير lexical طيب ما لجهاش جوا
مالجهاش جوا إيش بدنا نسوي؟ بدنا نضيفها جوا و
رجع ليها to kill فهذا كله أنا بدي أسويه الكلام طبعا
الكتاب شوف كيف عبر عنها شايف
إيش عبر عنها؟ قال ثاني
شوف إيش عمل؟ الكتاب إيش عمل؟ استخدم functionين إيش
الـ function الأولى بتسوي الـ get token؟ بيروح بدور
في الـ symbol table إن لجها هيرجّها ويعطينا
العافية طب ما لجهاش نهار بتيجي الـ function الثانية
الـ install إنه هذا معناه ID بدي أخزنه وأرجعه طبعا
أنت مش ملزمة تعمل زي الكتاب الـ two functions أنت
قاعد تعمل function واحدة اللي هي إيش هيسوي؟ هيروح
يدور في الـ symbol table إن لجها يرجعها ما لجهاش
بيخزنها و بيرجعها فالمهم أنه في task لازم تقومي
فيه .. هذه اللي بتواصلكيها رسالة في task لازم
تعمليها قبل ما تقولي return .. return لازم ترجعي
هذا بس إيش ساعدك؟ هذا بس ساعدك أنه لجأ الكلمة بس
لكن لسه مش عارف هل هي الكلمة keyword؟ هل هي الكلمة
identifier؟ مش عارفين كيف كنا بدنا نعرف أن احنا
قبل هيك مش كان أحد الـ solution أن أنا أعمل set up
للـ symbol table وأحط فيه في الأول كل الـ keywords
وارتاح منهم وبعدين أسير أدور على الكلمة اللي
لجيتها إن موجودة برجعها زي ما هي مش هي اللي كنا
نقول وإن مش موجودة بضيفه برجعها فهذا الكلام ما
اتغير فهذا أول solution .. هذا أول حل أن الكلمة هذه
بقدر أتعرف على تفاصيلها من خلال هذا الـ symbol
table اللي أنا عامله من أول وحاجز فيه كل الـ
keywords طبعا الآن هو جسم الشغل هنا على شكل
functions مش أكتر على أساس إن هاي بس وظيفتها إيش
يدور في الـ symbol table لجها رجعها خلصنا ما لجهاش
عشان رجعة null بقول بس تدعمين الـ install ID إيش
بتسوي الـ install ID؟ بتروح بتحطها جوا و بترجعها
نفس الـ install ID فأنت مخيرة بديك تعملي function
واحدة لك كل الـ task تعمليه ثلاث functions two
functions هذا أشي برجع لك هذا أشي برمجي لكن لازم
تعملي الـ task المطلوبة طيب الآن بس في إشي مهم جابنا
ما أخليك تسألي لو رجعنا للـ definition تبع الـ then
مش فيه then قبل شوية شوفتها؟ كيف أعمل لها الـ state
diagram تبعها للـ then؟ هتقوليلي الـ state diagram
تبعها ببساطة زي هاي صح؟ مظبوط؟
إلها start إذا أجت الـ T وراها الـ H وراها الـ E وراها
الـ N وراها الـ none letter خلاص عبارة عن keyword
اسمها then يعني واضح إنه أنا كمان في عندي حل ثاني
أنه جدر ما أحجز ولا keyword جوا الـ symbol table و
أعمل لكل keyword step diagram step diagram step
diagram هذا حل ثاني بس هو ليش ما حطش الأرقام لأن هو
فرض حلو على الحل الأولاني أن أنا حجزته في الـ
symbol table وخلصنا لكن هذا solution آخر لحل مشكلة
الـ reserved words مش يقولوا أن احنا في مشكلة أن
مرات الكلمة احنا مش عارفينها ID ولا Keyword
فالجواب قال في عندي طريقتين للحل الطريقة الأولى هي
طريقتنا السابقة أن أعمل symbol table وأريح دماغي
وأحط كل الـ keywords فيها وخلصنا وبصير كل كلمة
بلاجيها بدور في الـ symbol table موجودة برجعها مش
موجودة بضيفه وبرجعها هذا كان طريقة حل الحل الآخر
أو الطريقة الأخرى قال لك خلاص لأ بعمل لكل keyword
state diagram للـ F بعملها state diagram للـ V
بعملها state diagram للـ L بعملها state diagram ل
الـ I D بعملها state diagram وفي الحالة هذه أنا مش
ملزم أعمل initialization للـ symbol table ولا ملزم
أحط فيه أي keyword ليش؟ لأن هذه لحالها لما يدفعو T
H E L ولا إيش إيش بقوله returnToken اسمه ذن
return token اسمه اف فخلاص بيكون ال state diagram
جاهز لكل ال tokens بما فيهم ال keywords فهذا حل
آخر مقترح واضحية لكن هو هنا في الشرح استبعد الحل
هذا وضل شغال على الحل الأولاني عشانك ما حطله مش
أرقام وكمل في باقية ال tokens اللي في المثال طبعا
طيب إيش ضل علينا token ما خلصناهاش اللي هي ال
numberيعني احنا عملنا ال reload أول شيء، مظبوط؟
وبعد ال reload بيعملنا start جديد لمن؟ للـ ID و ال
F و الـ Z و الـ L سيعتبر أن خلاص جالك هدول اعتبرين
هم محجوزين ما فيش داعي أعمللهم state diagram لكن لو
بده اعمل state diagram مش صعب للـ F كيف لسه ال
diagram تبعها start I F none letter or digit مثلا
هي لجت الـ F ال then ال else كل ال keywords بنفس
الطريقة تمام الآن مين ضل لما نفسه .. ضلت ال number
صح ل .. كيف ال number نعملها تعالوا شوفوا شكلها في
الأول إذا نسيت من المحاضرة السابقة هاي ال number
للتذكير لازم يجي أرقام ثم قد يأتي fraction وقد لا
يأتي إذا اجى fraction لازم يجي الـ dot وراها أرقام
وانتبهي لازم إجباري ييجي بعد الـ dot أرقام هيكفي
تعريف ال number هنا يعني ممنوع أكتب خمسة وعشرين
dot وأسكت طالما أن كتب dot بيقول لي في ال language
بتاعة ال number اللي أنا شغّلتها لازم يجي إيش على
أقل خانة على أقل رقم كذلك الحال للـ exponent إذا
كتبت الـ E لازم يتكتب وراها رقم عشان يصير ال number
صحيح طب إيش بيصير لو واحد كتب هيك في الملف 25 dot
وسكت لا لا لا بيعتبر ما لجهاش token هذه كلمة 21 و
25 dot بيعتبرها مش number خلاص إذا كان تعريف تاني
بياخده ولا ID بيعتبرها مش موجودة ما فيش token زي هيك
شوفتي كيف؟ أنت بيبقى القصة هاي غلط ليش ياخد هذه
جزء مع هاي هذه جزء مع هاي النقطة هل مسموح في
البرمجة نقطة بين لحالك تكن لأفبتبترقى تعمل ال
balancing فالنقطة لحال مش مسموحة وبالتالي ال 25
نقطة ككلمة مش معرفة عنده ك number ليش؟ لأنه
بيجبرني في ال language لازم يكون بعد الـ dot إيش
خانة أو رقم عارفة لو في ال language بيسمح بالـ dot
بدون رقم بتصير صح خلاص لازم أعمل الاشي صح لها يعني
بيصير .. بقول هنا digits أو epsilon لو بسمح لي بعد
الـ dot يكون فراغ بعدّل في ال regular expression أنّه
بقوله مش بالضرورة يجي رقم ممكن يجي فراغ هيك صارت
مسموحة في ال language كمان مرة يا بنات ال regular
definition مش على كيفه هو بشتغل بوصه في ال number
زي ما هو في ال language إيش مسموح وإيش مش مسموح
شفت في ال ID مسموح underscore روحنا عدّلنا في ال
regular definition وحطينا ال underscore في
المجموعة بتاعة ال letters لو مش مسموح بحطهاش الآن
احنا ال number تبعنا هان لاحظي من ال definition
أنّه إيش بقول لك الـ dot لما تحلّ لازم يجي وراها digit
plus عارفة لو كاتب هنا digit نجمة مسموح أنّه يصير
بعد الـ dot فراغ طب هو ليش حط plus مش نجمة لأنه
ممنوع في ال language اللي احنا اشتغلناها يكون بعد
الـ dot إلا رقم فجال خلاص يبقى لازم digit plus
فانتبهي issue ال language نفس الكلام بيقول لك بعد ال
E مش مسموح تظهر لحالها وإلا بيبطل ال token اللي
أنا عارفة إجباري يكون فيه digit عشانك برضه ما تلاقيش
عمل digit plus فأنت في النهاية القصة مش اختيارية
على كيفي القصة اختيارية على حسب ال language اللي
عندك اللي أنت قاعدة تشتغليها إذا هذا مسموح لازم
أعمل regular definition يسمع إذا مش مسموح لازم
أعمل regular definition لا يسمع فأنا بس من باب
التذكير بحكيلك أنّه هنا في ال language اللي احنا
شرحناها أنّه ممنوع ييجي بعد الـ dot إلا رقم لازم
عشان يصير الرقم صحيح وإذا ما حطّت E لازم يجي وراها
رقم خدي نفس الكلام اللي قلته تطلع كيف عمل الزاد وال
ناقص ليش عمل الزاد والناقص مع epsilon بعد الـ a
لأنه تسمح ال language أنّه لا تكتب زاد ولا ناقص
فروح ضفت epsilon عارفة لو ال language لا تسمح إلا
يظهر زاد أو ناقص بعد الـ a مش هحط هيك هخلي زاد أو
ناقص شوفتي يعني أنا دائما بتابع إيش ال language
بتقول كيف وصف ال token في هذا ال language الـ real
difference أنت ما بتفهمش الـ real difference أنت بتحط
أيّه أوصف فيها ال token فلازم تفهم ال token إيش
المسموح فيه وإيش المش مسموح فيه عشان تقدر تصفه
بشكل سليم واضحت؟ طيب إذا وضح ال number هنا إيش
المسموح وإيش المش مسموح في مثلنا السابق إذا في
dot لازم يكون وراها digit وإذا في E لازم يكون
وراها digit طبعا؟ طيب تعالوا نشوف كيف بدنا نعمل ال
number إيش رأيك الشطرين هيقولوا طبعا خليني أشوفها
على المثال مباشرة مش مشكلة عشان أوفر وجهة طلعي معايا
هي بتبين صعبة لكن تبعي معايا بشويش تبعي معايا
بشويش الآن احنا هنبدأ من وين يا بنات؟ من ال start
الجديدة اللي بعد 11 اللي كانت في ال ID ال start 12
الآن إيش بقوله لازم ييجي digit عشان اروح ل 13 إذا
اجت digit وين راح ألت معناها بدأ ماسك في token من
نوع number طيب يعني أنا كاتب افتراضًا رقم خمسة
وعشرين في ال buffer هاي وماشي في ال forward لاجأ
لاتنين راح لوين لـ 13 لاجأ خمسة وين بيلف جد ما
تكتبي أرقام بيلف وين مظبوط افرضي اجي بعد هي كـ L
شايفة لا هي dot ولا هي ايه إيش بيسوي other خلاص
بيقول لي هذه الـ L ممكن بيضايق أو بلاش L عشان ما
تزعليش اعتبريها يساوي يا سيبتي فهيقول خلاص هنا
واضح أن في token كان من النوع number واليساوي
عشان ما تضيعش لازم يكون فيه retract شايفة؟ فلو اجى
بعد الـ 25 أي character مش dot ولا E خلاص بيعرف
حاله لاجي عايش الـ 25 هذه باختصار مظبوط؟ وهذا بتكون
رقم integer طيب لكن افرضي اجى dot إيش بيقول لي روح ل
14 بس بيقول لي لازم بعد الـ dot يجي إيش رقم ليش؟
عشان يوصل ل 15 عارفة لو اجي بعدك يساوي؟ بيطلع
بيقول لك لجيت رقم طبعًا بيدي يرجع عنه صح ولا لأ طيب
سؤالي إليك راجعيني للـ dot كمان مرة راجعيني للـ
dot كمان مرة يعني وين وصلنا 14 افرضي اجي يساوي
مش انطلع على مكان في الحالة ده إيش بتسوي error
بتقولي error ما فيش token من نوع number هنا بس طبعًا
مش هتفتي تقولي error لكل ال system ليش؟ لأنه يمكن
يكون الـ 25 dot هذا token تاني معرف في مكان تاني صح
ولا لأ عشان هيك الصح إيش تسوي أن بعد ما نجرب
الشجرة تبعتنا أو ال transition diagram تبعتنا إذا
ما زبطش بدي اجرب مين ال definition التاني والثالث
مش فيه أنتِ؟ خمسة ستة definitions لخمسة ستة tokens
إذا جربت الخمسة أو ستة definitions هدول أو ال
state diagrams هدول ولا واحدة اتعرفت عليه خلاص هذا
error في النهاية لكن ما بستعجلش من أول مرة يمكن هذا
يكون token تاني فهمتي كيف الفكرة؟ أنا كمان مرة كل
state diagram معرف token افترض في عندي خمسة state
diagrams مختلفين يعني أنا معرف خمسة tokens مختلفين
تمام؟ روحت مشيت في ال state الأولى لجيت error
وما قدرتِش تكملّيه معناه التقن اللي أنتِ شغالة عليه مش
من هذا النوع صح؟ معناه ارجعي جربي التانية مش من
هذا النوع ارجعي جربي الثالثة والرابعة الجربتيهم
كلهم وما طلعش معاكي ولا acceptance خلاص error مش
موجود عندي هذا التقن واضحة كيف الفكرة؟ طبعًا متى
بقول error يا بنات؟ إذا أنا في دائرة 14 إذا جاري
ال digit ما قلتِش error else إيش تقولي؟ fail ما قدرتِش
أكمل زي حالتي هذه 25 dot يساوي مثلا الاتنين وصلتني
هنا والخمسة لفت هنا والـ dot وصلتني هنا طب
اليساوي ما فيش مكان شوفتي كده فبيصير خلاص بقول fail
مش قادر أكمل هنا ما فيش عندي token من هذا النوع شوفت
كيف؟ فبطلع، ما بكملش، ما بكملش في هذه الشجرة لكن لو أنا
كاتب صح ال number وكاتب بدل الخمسة zero وده اليو
ساوي zero وين هيروح؟ على 15، الآن من 15
حطّيت يساوي بقول لي في other، خلاص أنت راجيتك الكامل
فبروح إيش بعمله return طبعًا بعمل retract وبَرجعّه
أنّي لجيت number خلاص طيب افرضي الآن ما مديش أقول
Lagana يساوي خلاص Lagana dot 2E معناه لسه بيكمل
فإيش بقولي؟ بقولي هاي الـ E بوصلها 16 صح؟ طب افترضي
كاتبة من الأول خمسة و عشرين E يعني كان من هنا شايفة
هاي كمان E يعني جالي الـ E 16 حصلها يا إما من الـ
constant مباشر يا إما بعد الـ dot فصلت لإيه؟ الآن
لازم بعد الـ E إجباري يكون فيه digit، صح؟ عشانك إيش
قال ليه؟ قال لي إذا من الـ E .. طبعا عفوا بعد الـ E
بيجيش أنها زائد أو ناقص الرقم أو بيجي الرقم على
طول، صح؟ فإيش بيقول لي؟ بيقول لي إذا أجي الزائد أو
الناقص ورا الرقم، هي .. هي لو أجي الرقم على طول طيب
افترضي ما جهاش لا زائد ولا ناقص ولا أي رقم جيت كتبت
الـ E اللي هي غلط لحالها تساوي هيتطلع في 16 مش زائد
ولا ناقص مش digit مافيش مكان يروح له بيكملش بيقول
fail بيقول أنا مش قادر أكمل هذا اللي أنت كاتبه مش
معرف عندي كتكِل روح شوفه في دكانة تانية روح شوف
مكان تاني يمكن يكون حد يعرفه ما حدش معرفه خلاص
ما بيكون غلط شوفتي كيف؟ ليش طب هو هنا ما تكملش فيه؟
لأن هذا بالنسبة له مش تكن هو بيعرفه لأنه هنا
بيجبرنا لازم يكون قولنا بعد الـ E number هيك الـ
language صح ولا لأ؟ علشان هيك لو أنا حطيت أي رقم
بعد الـ E بيصير بوصلها صح؟ الآن خلاص طول ما بيجي
أرقام لف لف لف أي حاجة بعد هيك ما جتش أرقام يساوي
ضرب جسمه وين بيفوت على other طبعا لازم يكون فيه
نجمة بس ممكن عشان مش مكمل شايفة لازم يكون فيه نجمة
ليش النجمة؟ علشان يرجع فخلاص هي باختصار هذه دورة
أو هذا الـ set diagram اللي بيكشف لي الرقم ويديني
بالك هي مش صعبة كتير مش صعبة كتير أنت تذكر الكلام
اللي قلناه المرة اللي فاتت أن أي رقم هو عبارة عن
أرقام integers ثم قد يأتي dot و أرقام و قد لا يأتي
عشان إيه ممكن يروح مباشر أو يمشي في طريق الـ dot و
أرقام أخر إيش؟ عشان ممكن يكون فيه E و لها format
عشانك لو جيت تتفحص شوية هتلاحظ أن الـ state diagram
هنا مش صعب يا بنات طلعي هذا الجزء الأولاني لغاية
هنا بعرف مين ال integer لحاله وهذا الجزء الثاني
لغاية هنا بيضاف عليها الـ fraction و قد يأتي الـ
fraction و قد لا يأتي و آخر جزء بيعرف مين الـ
exponent لو فيه exponential شوفتي كيف؟ فكلهم مع بعض
فبديك تنتبه تعملي لهم دائرة واحدة طبعا لو رجعتي للـ
version القديمة تبع الكتاب من زمان ما كانش يعملهم
عشان كانت صعبة ما كانش يعملهم كلهم في الـ set واحدة
مش هتتذكر مثالنا المرة اللي فاتت فعملنا N1 و N2 و
N3 و N4 و بعدين جمعناهم فلو كنتِ عاملة N1 و عملتي
لها set لحالها و N2 عملتي لها set لحالها و N3 عملتي
لها set لحالها و N4 عملتي لها set لحالها برضه بمشي
لإن زي ما نجاش في الأول كانت بال إيه؟ هيجرب الثاني
ما كانش بالثاني هيلاقي الثالث فواحدة من الأربع
هتكون صح إذا كانت صح فبرضه الحل اللي هدّاك اللي في
الـ version القديمة برضه مظبوط بس هو ما جاش يعملهم
أربع .. تلاتة أربع منفصلين و أخد و أجد و أعيد و
أزيد و أعيد و أزيد مشبوكهم مع بعض بقالية إن أنا
فاهم لازم يجي أرقام بعدين يأتي dot أرقام أو لا
يأتي بعدين يأتي إيه أو لا يأتي مع الـ structure
تبعها فحطل كلهم على بعض وانتبع كيف حل الإشكالية
شايفة؟ هنا في الأول integers صح؟ لو أجي E مباشر،
هاي شايفة أين راح؟ على دوّار الـ E لو أجي dot
وأرقام، خلاص ماشي بالـ dot و الأرقام شوفتي كيف؟ يعني
هاي عساس أن أنا أستثني الـ dot أروح مباشرة لأنه
وارد يجيني 25E فقلت خلاص أنا جاي لي 25 و E روحي دغري
على شغل الـ E والله إن أنا جاي لي 25 و dot أرقامه E
خلاص امشي الـ dot و أرقامه الـ E طب خلصت منها ما جاش
E خلصت اطلعي خلصت منها لا أجدت ولا E اطلعي كملتي
للآخر للـ E خلاص خلصنا يعني بيطلعك من تلت مطارح زي
ما أنت شايفها مطرح بيطلعك بالـ constant integer و
مطرح بيطلعك بالـ fraction و مطرح بيطلعك لو الرقم
فيه E هاي باختصار طيب قبل ما .. خليكي تسألي .. الآن
أنا سؤالي معلش هخليكي تسأل مرة واحدة كله سؤالي
إليك لو أنا مثلا كاتب سبعة عشر
E اتنين مثلا
بديش إيه؟ خلّيني أقول E أو E dot E dot؟ اتنين
E dot اتنين؟ إيش تتوقعي؟ بتوقع إنه جاب المفروض
جوا على الوصف تبعي ما فيش E و dot صح؟ المفروض
دائرتي هذه تطلعني، ما تعمل لي acceptance لو أنا
شغال صح؟ و بالفعل تعالي تتبعي فيها أنت بعد ما
وصلتي لـ E هنا؟ هتكون وصلتي لـ 16 صح؟ إيش بلاقي
dot؟ طب ما في زايد ناقص ولا في other إن يطلع الـ
acceptance ولا في digit إيش حيصير في الحالة هاي؟
fail طيب هل حيقول لي error؟ اه إيش حيصير؟ E وإذا
ما فيش definitions أخريات بدي يروح يدخل فيهم لكن إذا
كان هذا آخر definition بوصله خلاص يقول error هاي
باختصار الآن الـ conclusion لكل اللي أنا قلته إنه
لكل token في عندي regular definition و لكل regular
definition في عندي state diagram في مثالي الأخير
هذا كان في عندي الستة tokens الـ if والـ else والـ then
والـ ID والـ number والـ reload عشانك الأصل كان يكون
عندي كم state diagram ستة المفروض اللي هي واحدة
للـ Relop و عملناها وواحدة للـ ID و عملناها وواحدة للـ
number و عملناها و الأصل فيه تلاتة تانية للـ F و D و L
لكن هو استبعدهم بحكم إنه في symbol table مخزن في
الـ reserved words بس باختصار عشان نكون واضحين الآن
كيف عملية البرمجة؟ عملية البرمجة simple خالص بتمسكي
من الأساس دويرة دويرة و بتبرمجيها بـ if if else
بقول إذا أنا في state zero و أجي الـ input أو أجي
forward أصغر بروح على state one else if أكبر بروح
على مية else if يساوي بروح على خمسين else بقول له
fail ليش بقول له fail؟ عشان يروح يدور في start تانية
بالترتيب فبدور في الـ start تانية و هكذا لغاية ما
يخلصوا واضحة الأمور؟ فبرمجة الـ state سهلة جدا ما فيش
فيها إشي و قلنا ميزة بين الدورتين اللي مع بعض و
الدورتين اللي فيهم نجمة الدورتين اللي مع بعض
معناها أنت وصلت لـ token موجود خلاص ارجعه الدورتين
اللي معها نجمة معناها انتبه إن أنت ماشي character
زيادة لازم ينفحص فلازم ترجع عنه و بعدين اترجع الـ
token هاي باختصار كل اللي قلناه الآن أي سؤال في
القصة هذه بنات انتبهوا لشغل مهم إن أنا في عندي
تلاتة state diagram منفصلين منفصلين كيف بعمل الـ
execution بجرب في الأولى إن صار في acceptance كان
بها ما فيش acceptance بجرب في الثانية إن صار في
acceptance هين عرفته ما صارش بجرب في الثالثة في
acceptance تمام خلصنا ما صارش خلاص ما ضلش أجرب error
هذا الـ token مش موجود عندي مش متعرف باختصار النقطة
الثالثة تنتبهي لها دوائر الـ acceptance high إيش
بدّه أسوي عندها؟ قالت لك على حسب الـ token اللي أنت
لأجئتي له إيش يعني دائرة acceptance؟ يعني أنت لأجئتي
token فبتسألي نفسك سؤال هذا الـ token لازم أعمله
action معيّن إذا لازم أعمله action معيّن لازم أبرمج
هذا الـ action يعني بمعنى لجيت كلمة هل في action
لكلمة؟ أه في action للكلمة، شو هو هو الـ action؟ رؤى
الـ symbol table موجودة، مش موجودة، خزينها، رجع، صح
ولا لأ، يبقى هذا لازم كله أبرمجه في النهاية طب لقيت
reload greater than ما بديش أعمل action خلاص رجع
رتير reload greater than لقيت number رجع number
شوفتي كيف؟ فعلى حسب طبيعة الـ token اللي أنت لقيتيه
على حسب طبيعة الـ acceptance اللي أنت فيها بتقرر
إيش تعمل إيش تعملي من مهام مطلوبة لهذا الـ token
واضحة طيب في أي سؤال break لسه ما خلصتش النقطة عشان
أديكوا الـ break يضايق فيه نقطة تلاقي دقيقتين و احنا
أديكوا break مرة واحدة
أيوه عادي احنا مش عاملين هنا حساباته المفروض أول
ما وصلي الـ acceptance مش كان شايف الـ digits اللي
رايحين معاه الموجودين مش هو عارف الـ begin و عارف الـ
end صار له؟ مش مخزن كـ string ممكن يعمل code to
convert to integer number أو يعمل الـ code اللي
احنا عاملينه اضرب V تساوي Zero امشي و اشتغل وكده
يعني في النهاية هذا بس كل اللي بيسويه إنه وصلك لـ
acceptance للـ token خلاص أنت عرفت إنه في number هل
في مهام بدك تسويها؟ اه في بدي أحسب قيمة الـ value
ابتدي تكتبي كودك اه الـ أول character حوليه لـ
integer و بعدين إجمالي إذا ما كنا نعمل وضربي في
عشرة و ضيفي بعد ما تخلصي بتقولي return واضحيت؟ يعني
هذا فقط الـ diagram بمشيل الدوائر لغاية ما وصل الـ
acceptance لكن إيش بدي أسوي؟ بدي أبرمج بعد هيك بديش
اسويش خلاص retireيعني هذا بس وظيفته أنه يكشف لي
يمشي في ال buffer وكل ما يلاقي token يزمر يقول لك
لجيت لك token هاين اتفضل عادتك تسوي سوي بريحني عادي
لجيت لك ID اتفضل ايش تعمل سوي لجيت لك number ايش تعمل
سوي شوفتي كيف؟ وطبعا هذا وين هبرمج يا بنات هذا
هبرمجه في دواعي ال acceptance فقط ما تلخبطوش الدنيا
الآن لو أنا ببرمج في 13 ايش بدي في حسبة الرقم؟ ايش
بدي في حسبة ال ID؟ خلاص 13 F digit lift نقطة 14 E
16 other 20 خلصت من 13 الآن وأنت بتبرمجي في 20
بخلف الوضع أنا العشرين هذه acceptance هذه معناها
لجهة token من نوع number وتحديدا من نوع انتجار
الآن ايش بدك تسوي سوي عاد؟ اه بدي أحسب قيمة ال
value تبعتي ال number خلاص بسير أحول الرقم اللي
شوفته في ال buffer بحوله ل value وبعمل ال token و
برجعه كامل شوفتي كيف؟ زي هيك في ال acceptance يعني
العمليات الزيادة اللي بتفكر فيها دائما في دوار ال
acceptance بتكون اما الدوار اللي في النص هذا
ما بدهاش كتير يعني طيب الآن بس خلنا عشان أنا اختم
المكان هذا عشان ما ارجع لهاش بدي هم بس دقيقتين اقول
اللي بدي إياه الآن اش بقول لك بقول لك تذكري أنه عندي
ال state diagram كله منفصل صح؟ في مثلي في عندي
ثلاثة state diagram بالثلاث بدايات مختلفة واحدة
بدايتها 0 والثانية بدايتها 9 والثالثة بدايتها 12
جالك الآن كيف بدنا نعمل ال execution كيف بدنا نعمل
ال running لل code جالك في عندك تلت طرق الطريقة
الأولى اللي كلنا اتكلمنا فيها أني أجرب الأولى فيها
errorيعني سيكوانشال بنشتغل بنجرب الثانية فيها
error بنجرب الثالثة فيها error خلاص بنقول له طلع هنا
أن وصلنا ل acceptance خلاص وصلنا ل acceptance يعني
السياسة ايش بيقول صح هم منفصلين لكن اشتغلي عليهم
sequentially بالدور واحدة واحدة طبعا اكيد الموضوع
هذا فيه بطء عشان ايه بيجي اقتراح اتنين هو في تلت
طرق طريقة اتنين طريقة اتنين ايش بتقول بتقول اشتغل
parallel يعني اشتغل على هاي وفي نفس التوقيت اشتغل
على هاي واشتغل على الثالثة يعني بمجرد ما أنا
اجاني حرف مثلا I من 0 بدور على I ومن 9 بدور على I
ومن 12 بدور على I الثلاثة بيشتغلوا.. الثلاثة
بيشتغلوا مع بعض أو الأربعة أو الخمسة أو الستة كلهم
بيشتغلوا برا للمع بعض وبيضلوا يمشوا بس هنا قال
بدنا نكون حذرين شوية ليش حذرين؟ جال ممكن أنا اوصل ل
acceptance في الأولى تمام لكن مش معناها انك توقفي
وتقولي return لازم تخلي الثانية تكمل شغلها لأنه
ممكن توصل ل acceptance بعد شوية ممكن الأخيرة توصل
ل acceptance بعد.. كمان في المستقبل فبدك تنتبهي مش
أول acceptance تستعجلي عليها وتطلعي وادّاكي مثال
كويس ايش المثال الكويس جال جال افترض أنت عاملة
state diagram للأصغر high acceptance وعاملة كنت
parallel state diagram ثاني للأصغر أو يساوي وكنت
كاتبة فعليا أصغر أو يساوي طبعا الاتنين شغالين
parallel اعتبر هذه state diagram وهذه state
diagram منفصلين واتنين شغالين فجالك لما لقيت
الأصغر هذا اشتغل acceptance لكن هذا لسه مش
acceptance مع أن الصح أنه هي ايش مش أصغر أصغر
يساوي فجالك ممنوع توقف صح لجتي acceptance هان
ممنوع توقف خلي يكمل اللي وراها فلما بيكمل اللي
وراها وبيشوف اللي يساوي هذا واقف بيصير فيه ايش
acceptance ثاني فجالك بيصير تاخدي بعد هيك ال
longest path يعني ال acceptance الأطول هو اللي
بتاخديه هذا الأصح فكرتهم بيقول لك صح أنت بتشتغلي
parallel كلهم بيشتغلوا بمنعزل عن الآخرين كل واحد
بيشتغل لحاله لكن بدك تتنبهي انه مش أول acceptance
تلاقيه هوب اللي أنت تجي وتقولي لجيت أصغر وسلام
غلط فبدك تراي كودك أنه لأ بدي يفحص الجميع وحتى لو
هذا وقف ولقى خلي الكل يكمل والله أن هدولة كملوا
للآخر وما لاقوش بناخد الأصغر فهمتي كيف؟ لو ما لاقوش
لكن في حدا منهم لجى token قدام خلاص بدي آخده فبس
قال لك هايلة تبهيله قال لك صح سريعة وكويسة ال
parallel لكن بيصير فيها مرات خربطة أنه بيصير أكثر
من acceptance موجود ومش تلاقي واحد تواجه كله بدي
يكمل وبعد ما يخلص كل ال acceptances اللي عندك مين
هتاخدي؟ ال longest طيب طب هذه طريقة اتنين ايش
طريقة ثلاثة تعالى نشوف طريقة ثلاثة اللي هي آخر
طريقة طريقة 13 بيقول ليش ما اعملهم وهذا الطريقة
المنطقية أكثر ليش ما اعملهم كلهم في رسمة واحدة كيف
يعني؟ يعني جال مثلا زي هيك مثلا جال ليش أبدأ هذه
شفاهة 9 ليش اعمل start جديدة ما خلص من ال zero أقول
إذا اجى letter روح لعشرة وكملي فال start هذه صارت
مش بس لهذه ولهذه والأخيرة تاعة ال digit قال مثلا
لو اجى digit اروحي على مثلا اشتغلي يعني شبكهم كلهم
في start واحدة يعني ليش يعملهم منفصلين؟ يعني الفكرة
الثالثة ايش بتقول بيقول كل state diagram هدول
المنفصلين شبكيهم مع بعض في نفس الفداية خلاص بسيب
من الأول أنت ايش بتعرف حالك اين تروح وتمشي بس
برضه قال لي أن تبهي للأسف برضه في مشاكل ممكن تصير
هنا شو هي المشاكل؟ ممكن يكون أنا معرف ال F مثلا يا
بنات مش معرف ال F قبل هيك I Fعلى فرضية أن أنا بدأ
اعمل كل ال keywords ومعرف مثلا then الاخر المهم
معرف شغلات ومعرف مثلا ال ID قال لك افترضي اجت ال I و
أنا في دقيقة ال zero اجى ال forward I ونروح قال لك
هنا لازم تجرب الحال تاني يمشي في التانين يمشي هنا
فتحت ال F ويمشي في تحت ال letter لان صار مش عامل
كانين ال I ايش لجت بعد ال I لجت F هذا ماشي هنا
وهذا مش الى وين letter or digit مش هي كانت هيكة مش
هي ال acceptance letter or digit هذا مكمل وهذا
مكمل هذا acceptance وهذا acceptance صح ولا ده
الآن قال لي افرضي خلاص وقفنا اجى space بعد ال F اجى
اي حاجة صرتي أنت وين واقفة في اتنين acceptance هنا
وهنا صح؟ قال لك مين ناخد طب ما هذه ال idea عملت
acceptance لأنها letter followed by letter or
digitوال F عملت acceptance ل I جي I وراها F يعني
بعد اتنين character هنا في acceptance وهنا في
acceptance مين ناخد؟ من الأصح ناخد لل F الأصح صح
قال اعطي ال F رقم أصغر من هذا يعني حطي أولوية أكثر
يعني لو هذا رقم مثلا عشرين هذا يكون رقم ايش بعد
يعني قال لما يكون اتنين acceptance بياخد اللي في
الأول اللي أنت عملتها في الأول عشان ذلك أنا بعمل ال
F في الأول وبعدين بعمل ال ID عشان لما يتساووا
هيعمل priority لمين؟ للأول طيب هذا لو كانوا
متساويين صح؟ طيب تعال افترض أن المكتوب مهمش خليكوا
اليوم تكيفوا خالص اليوم بتعيدوا التسجيل براحتكم
بتعيدوا براحتكم بشواش وبالبطيق طيب لو كاتب IFT لو
كاتب IFT هيروح طبعا هيعد في ال I وهيعد في ال F و
هيوقف صح؟ وهنا هيكمل ولما تيجي ال T I وF وT
بيضل في ال acceptance صح؟ يعني بعد ما بيكتب IFT
هنا acceptance وهنا acceptance مين ياخد؟ ليش طب
ما ياخدش الأولى؟ لأنه بدي ياخده ال longest الآن هذه
بعد قداش acceptance بعد كام character؟ بعد ثلاثة
شخشاف I وF وT وحصل على ال acceptance وهذه بعد كام
acceptance بعد كام character؟ بعد اثنين قال إذا
لجيتي acceptance أطول من الثاني خدي الأطول دائما
هذه بديتكي قانونين اريحك من المشاكل قال لك في حال
في acceptance أطول خد الأطول في حال للعدد زي بعضه
في اتنين acceptance أو أكثر خد مين الأولوي الأولهك
بنحل مشاكلنا، إذا طريقة رقم ثلاثة عبارة عن ايش؟
أنه شبكيهم كلهم مع بعض بقى لما تشبكيهم كلهم مع بعض
قال لك هيكون وارد إنه يصير فيه أكثر من acceptance
وأنت ماشية زي قصة البرن اللي قبل شوية طب كيف بنحل
الإشكالية هاي؟ قال بتحليها بقانونين القانون الأول
إذا تساوو ال longest path بدنا ناخد من المرتب أول
عشانك دائما لازم ترتب ال F وال then وال else هذا
كله أول إذا في واحد أطول من الثاني ناخد الأطول و
هيك أنا بطلع من المأزق ال ID وال F أو الأصغر و
الأصغر يساوي لإن دائما الأكبر هو اللي بيكون أصحى
أنا بس بده أوضح النقطة كمان مرة اللي بدها تظل في
البداية تظل اللي بدها تنتهي تنتهي تمام تمام الآن
كمان مرة أنا الآن عندي دايرة zero احنا بنفرض في
الحالة الثالثة أن كل ال state diagram موجودين في
رسمة واحدة، مظبوط؟ يعني وارد جدا، يكون ال zero إذا
اجاني أكبر يروح على ايش؟ على مكان، إذا اجاني أصغر
يروح على مكانات، إذا اجاني يساوي يروح يتفرع على
دوار، مش هيك وارد؟ وإذا أجاني مثلا digit يروح مثلا
على دوائر، مظبوط؟ وإذا أجاني .. هذي بدي أركز
عليها، إذا أجاني letter بدي يروح قولنا على دائرة
بعدين إذا أجاني letter or digit بده يلف مش هيك؟
بده يجيني الأول letter بعدين كل ما بيجيني letter
or digit بده يلف عشان يعرف ال IDووارد لو بدي كلمة
الـ F أقول لازم يجيني I ولازم يجيني F عشان أعمل
acceptance للـ F ليش طبعا هذا وارد لأن كلهم شبكتهم
في بعض مش زي الأول كلهم مفصلين وكانت الـ F جاهزة و
بخلص منها وبروح بشوف الـ I دي كانت أسهل لما كانوا
لحالهم بالـ sequential الآن لأ كلهم مع بعض عشان هيك
إيش بسوي افترض الكلام المكتوب I F هاي اللي اللي
بده يجيلي فانا الآن بقرأ I وبادي من وين؟ من Zero
و وين هيروح؟ حتقوليلي هيروح على مكانين هيروح هنا
بحكم أن اللي هدا letter هيروح هنا و حتقوليلي هيروح
برضه التنفيذ هنا لأن الـ I بينا مرتين كـ letter فبروح
الدائرة هاي ومبينة كـ I وبتروح الدائرة هاي صح؟
طيب صار واصل هان بعد الـ I الآن في ترضي أجه F صار
وين واصل؟ صار واصل على الـ acceptance اللي هان اللي
هي هذه بتقولي لجيت F وصار واقف على الـ acceptance
اللي هان اللي هو بقول لجيت ID الآن في ترضي ماجهاش
إشي بعد هيك الـ answer إنه واقفين في two acceptance
واحد بقولي F وواحد بيقول ID طب ده شوف من الأطول
هذا وصلته بعد two characters وهذا صار acceptance
بعد two characters طب شوف الحالة ده سوي قال خدي
اللي أنت من رتباه أول عشانك لازم في ترقيمك للدوائر
تعطي هذا أرقام أصغر من الأرقام اللي هال عشان الـ
priority تكون للـ F لأن أصح أن تكون F هذا لو كان
نفس الـ path اللي أنا افترضه لأ ماكناش كاتبين F كنا
كاتبين FTكلمة طبعا هذا نفس الفكرة عند أول I وصل
هان وهذا وصل هان عند الـ F هذا وصل هان وهذا وصل
هان عند الـ T هذا ثبت هذا لف زيادة لف على الـ
acceptance الـ R خلصت الكلمة صار في acceptance هان
بعد تلت حروف وصار في acceptance هات بعد حرفين مين
ناخد الـ longest؟ مين هو الـ longest؟ يبقى هينفذ الـ
return للـ ID فبس هاي القانونين بقولك دائما بناخد
الـ longest في حال تساوى بتاخد أنت مرتبة أقل وبهيك
أنا بكون حلت إشكاليتي إني جمعتهم مع بعض في مكان
واحد that's it تمام؟ ممتازين