بسم الله الرحمن الرحيم اليوم إن شاء الله بدنا
نستكمل في الـ section ثلاثة خمسة اللي هو بيتكلم عن الـ
tool وقبل ما أنا أروح على الـ tool بدي أذكرك كمان
مرة إن احنا أخذنا regular definition ليش؟ عشان نوصف
الـ token الآن الـ tool .. إيش نسوي في الـ tool؟
بدنا باختصار نكتب فيه regular definitions نعرف
فيها الـ tokens وهو لحاله يصير يطلع لي code بيتعرف
على الـ token اللي في الملف و بيقول لي هايهم، هاي الـ
token فلانة و هاي الـ token فلانة بس عشان أقدر
أتعامل مع هذا الـ tool بدي أفهم كيف شكله إيش
المقاطع اللي فيه إيش الأجزاء اللي فيه كيف بنكتب
إيش بنكتب عشان نعرف طبعا هذا الـ tool اللي هنتكلم
عنه tool خاص بالـ C يعني معناته أنه فيه tool للـ
Java فيه tool للـ C++ فيه tools كتيرة لغات مختلفة
احنا هذا المثال اللي موجود هنا الـ tool الخاص بالـ C
اللي هو Lex طبعا بيجي بعرفك إيش اللي هيصير أنا
بكتب في الـ editor تبع الـ Lex إيش بكتب؟ بتوقع في
الغالب هكتب regular definitions و أكيد هكتب بعض الـ
functions اللي بالـ C بس هشوف هذا الكلام بالتفصيل
كمان شوية بعد ما أنا أكتب التعريفات و أخلص خلاص
لحاله الـ compiler تبع الـ Lex بيروح بيحول لي لـ code C
و الـ code ما أنت عارفة إله compiler بيحوله لـ
execute file و بيتنفذ و بيطلع لي الـ tokens احنا
قبل هيك ديري بالك عملنا برنامج بالـ Java كتبناه
احنا الآن مين اللي هيكتب البرنامج و يجهزه الـ tool
يعني أنا بس جوا الـ tool هعمل شوية definition هعمل
شوية functions بالـ C و خلاص و هو لحاله هيطلع code
الـ C كامل اللي بيتعرف على مين؟ اللي على الـ token
و بيسوي الـ action المطلوب عند هذا الـ token طيب
خلونا الآن ندخل شوية بتفاصيل الـ editor هذا إيش
جواته؟ إيش بكتب جواته؟ وين بالظبط بكتب؟ تعالوا
نطلع نشوف الآن أول ما بنبدأ بيقول لي هذه الصفحة اللي
بنفتحها عبارة عن ثلاثة أجزاء الجزء مخصص لحاجة اسمها
الـ declarations والـ declarations هنا عبارة عن ايه؟
عبارة عن أي declaration أنا بديها بالـ C تتحول
مباشرة للغة الـ C يعني مسموح لك تكتب سطور C مثلا
تعريفات بالـ C هذه التعريفات في التحويل هياخدها زي
ما هي مش هم بيحولوا لـ C فهياخدها copy paste زي ما هي
مش هيلعب فيها و يوديها وين على الملف اللي بيصير C
في الآخر اللي هو الـ declarations تمام طبعا نفس
الفكرة لو جابها لو أي language تانية الآن أنا مش
مهم عندك كتير اللي بيكتب بالـ C أنا بهمني اللي بعده
إيش اللي بعده بيكتب الـ declarations اللي هي تعريفات
الـ token يعني أنت بعد الـ declarations الخاصة بالـ C
اللي بدك إياها بدك تكتبي تعريفات الـ token كيف أكتب
تعريفات الـ token اللي هو regular definition كيف
أعمل ID؟ إيش تعريفه؟ كيف أعمل number؟ إيش تعريفه؟
المعادلة تكون أنا أخدها باختصار، تمام؟ طيب بعد ما
بنخلص الـ declarations إيش بيجي في النص؟ بيجي
الـ actions أو الـ rules كيف يعني؟ يعني مثلا أنا
عرفت له الـ ID خلاص يعني هو دور و لاقي ID الآن بسألني
سؤال في الجزء الثاني لما يجي لك الـ ID هذا إيش
اعمل؟ إيش اسوي؟ فأنت حرة عادي بدك تقولي له رجع ID
برجع ID بدك تقولي له لأ روح على الـ symbol table
اعمل 1,2,3,4 أنت حرة الآن أنت هنا في خانة action
إيش المطلوب تسوي لما تلاقي الـ ID طبعا ما ننسى
معلومات القديمة أنا لما بلاقي ID إيش كنت اسوي؟ مش
بدور في الـ symbol table إذا موجود ولا مش موجود
إذا مش موجود حطيه وإذا موجود رجعيه pointer مش كنت
بتعملي كلام زي هيك فأنت لازم في الـ action تقولي إنه
بدنا نعمل هيك طب كيف بده يقول إنه بده يعمل هيك؟
بيقول بالـ language اللي بده يحول إلها يعني أنا قاعد
شغال language C بتوقع أكتب اسم function بالـ C
و اعمل له تعريف الـ function كمان شوية هنشوف و أنا
هعرفه الـ function طب ايه فرضي أنا ما بديش اعمل أي
action خلاص بس مجرد return للقيمة خلاص مش داعي
تكتبي الـ function C ولا داعي تستدعي الـ function ولا
ما يهمنا خلاص return ID فهذا برجع لك أنت هو بديكي
الـ option أنت عارفة الـ token عرفتي بعدين بديكي
option ثاني لما يجي لك هذا الـ token في الملف بتحبي
تعمل شيء معين خاص به فأنت حرة عادي و هنشوف التفاصيل
هذه كمان شوية المهم إن النص الثاني عبارة عن إيش عبارة
عن إن الـ actions لما بلاقي أنا هات الـ tokens طبعا
ديري بالك أحيانا أنا ما بحتاج اعمل أي شيء يعني مثلا
لما يجي F condition لما يجي الـ F ما بدي اعمله ولا
شيء بس بدي اعمل return F صح ولا لأ فخلاص بقوله
return F وخلصنا واضحة كيف؟ طيب إيش الجزء الثالث
بيتكلم الجزء الثالث بيتكلم بيقول لك أي function أنت
بتكتبيها بالـ C Automatically بياخدها copy paste زي ما
هي و بيودي لك إياها على الملف الأخير بتاع الـ C مش هو
احنا قلنا الـ tool هيروح يحول كل شيء لـ C فهياخد منك
حاجات أنت كانت بقى بالـ C جاهزة زي إيش الحاجات اللي
بالـ C جاهزة؟ التعريفات اللي فوق بتاعة الـ C هياخدها
على الـ C وأي function تحت أنت كتبتيها بديكيها زي ما
هي بتتاخد و بيحول لحاله و بيطلع الأكواد الخاصة
بالـ التعرف على الـ token كامل بيحول بعدين هنشوف بس أنا
قاعدة بديكي الآن إيش مكونات الـ tool إيش بدك توفيه
الـ tool طب تعالي أديكي مثال عشان الرؤية تتضح و
المثال يتضح أكثر جالك تعالي ندفع ده المثال
ثواني بس خلنا نخلص المثال وبعدين هجيبك عليك كل
الأسئلة بس ثواني صغيرة تمام أول ما بدأ شايفه طبعا
هذا اللي اللي يا بنات وينه اللي هو شايفه الشارتين
هدول هذا أي مقطع اللي بتكلم فيه المقطع الأول صح
قال لك المقطع الأول ممكن يكون فيه حاجات خاصة بالـ C
زي إيش مثلا زي لما أبدأ أقول له return ID مش الـ ID
لازم أعطيها tag و أعطيها اسم التفاجر اللي أنا
جاب لك عشان أسهل العملية فممكن تعملي بالـ C define
مثلا لإنه less than هي عبارة عن 270 مثلا يعني
الفكرة إنه لما بدك تعملي return if ولا return then
طب إيش بيبدأوا يفهموا إيش الـ if و إيش الـ then في
البرنامج فلازم اعملهم tag الكلام كله نحكي زمان
عشان أقول لك أي declarations أو أي definitions أنت
بدك تحطيها بالـ C في الأول مسموح ليش لأن Automatically
هذه هتتاخد على برنامج الـ C زي ما هي مش هيلعب فيها
فبتحطي دائما التعريفات للكلمات اللي بديك إياها
يعني أنا ما أقول له return F طب شو F؟ مش لازم أنا
أديله code إلها زي ما اتفاجئنا أو tag إلها زي ما
عملنا بالـ Java أو بالـ C أو بالآخرين؟ صراحة لأ فأنت
مضطر تكتبي سطر أو سطرين C أو Java في الأول فهدول
السطر أو السطرين بنقولهم زي ما هم وين على الـ code
النهائي تاع الـ C اللي بده يطلعه طيب بعد هذا شفي قال لك
هنا بتحطي شو؟ طلع إيش محطوط؟ تعريفات الـ tokens
يعني أنا بدي أعرف الـ ID هاي حط الـ letter حط الـ
digit حط الـ ID هاي طلع بدي أعرف الـ number هذه
الـ number هذه كل التعريفات اللي احنا أخذناها يعني
تلاحظ في الجزء هذا إيش بتسوي بتعرفي الـ tokens اللي
بدك إياهم اللي بدك البرنامج يتعرف عليهم فهنا عرف
ID وعرف number طبعا عرف الـ white space إيش الـ
white space؟ الـ tabs و الـ new lines و الـ spaces
فعرفهم كلهم طيب إذا الجزء هذا اتفقنا عبارة عن إيش؟
تعريفات لأن وين هينتقل هذول لجزء الثاني ليش ننتقل
لجزء الثاني؟ عشان يقول لي لما يجي لك الـ ID إيش
اعمل أنا بدي اقول له إيش يعمل لأمن نشوف كيف تعالوا
نبدأ تحت الجزء الثاني يبقى أنا زي ما شايفين عارف
إيش أنا لما بحط القوسين هدول إيش بقصد؟ بقصد إن
تعريف الـ white space يطلع بتلاقي فوق فالـ ID
بتلاقي بيحطوا إيش؟ بين القوسين ليش؟ لأنه عرفوا وين؟
فوق فبيقولي خد تعريفه من فوق لكن تعالي تطلعي على الـ
F مش معرفة فوق قال لي مسموح إذا تعريفه سهل تكتبي
و تعرفه على طول عندك يعني خلاص قول هو IF ورا F يعني
هذا إيش معناه يا بنات تكتبي IF بدون قوسين يعني
بقول له طول إنه إذا اجى IF سوي كذا يعني إذا اجى
الـ keyword F سوي كذا أو إذا اجى الـ keyword then
سوي كذا يعني مسموح إذا كان تعريف الـ F سهل أو لأي
تعريف token سهل أكتبه مباشرة إذا كان عبارة عن حروف
طب واحدة بتقول أنا ما بديش أعمله هيك بدي أروح أعرفه
فوق و أنزل تحت أعمله F بقوسين صح يعني زي ما
عرفنا الـ ID و نزلنا كتبنا الـ ID بقوسين إنه
تعريفه فوق بقدر أعمل نفس الكلام لـ F أن اعمل تعريف
الـ F فوق و ارجع اعمله بقوسين أقول هاي تعريفه فوق
بس بقول لك ليش نعمل حركة هاي طالما الـ F هي خلاص الـ I
وراها F على طول فعشان هيك بتلاحظ إن بعضهم عرفوا
مباشر هنا وبعضهم عرفوا اللي بده شغل كثير في النص
الفجاني الخلاصة إن احنا كتبنا الـ definitions لكل
الـ tokens اللي عندي الـ ID والـ number والـ reload
اللي اشتغلنا عليهم قبل هيك طب واحدة ممكن تسأل سؤال
طب شو قصة الـ quotation هدول يعني ليش ما حطها لحال؟
ليش ما حط الأصغر يساوي لحال بدون الـ quotation هدول؟
ليش عمل هيك؟ لأنه في الـ language هاي في الـ tool هاي
الأصغر إلها معنى والأصغر يساوي إلها معنى operator
موجودة في الـ tool فعشان نميز إنه أنا بقصدش الـ tool
اللي عندك بقصدش الـ operator اللي عندك أنا بقصد
المكتوبة هذه بميزها بالـ quotation زي قصة الطباعة
Cout في الجافا ما بدي أطبع الـ quotation بحط جنبها
لإيش أنا أقول مش الـ .. مش الـ operator تبعتنا هذه،
هذه لأ لأ الطباعة وهذه نفس الفكرة الـ operators هدول
الأصغر والأكبر والأكبر يساوي والأصغر يساوي موجودين من ضمن
الـ language في الـ metadata تحت الـ language فعشان
أنا لما أقول هنا لأ بقصدش إنه قصة operator بدي
أصغر ولا أكبر، لأ بدي كـ character بروح بسوي بحط له
بس هدول تمييز، فلو هدول مش موجودين بحط لهمش مش
بميزهمش خلاص بكتبهم مباشرة المهم الخلاصة إيش اللي
صار عندي في الجزء الثاني صار عندي إنه أنا قاعد
بقول إنه لما يجيني هذا الـ token إيش الـ action اللي
أسوي طبعا بين قوسين بحط الـ action وهيه طالعة كيف
التعريف فوق بقول لك
شايفة؟ بيقول لك في الجزء الثاني بتحط بين قوسين ع
جباله الـ action اللي أنت بدك إياه لما يلاجيك هذا
الـ token يعني أنا بدي يلاجيني الـ ID يلاقي دور في الـ
buffer ويلاقي هنا إيش هتحط بين قوسين؟ إيش يعمل
لما يلاجيه؟ إذا بدك يعمل إيش بتسجلي، بدك إيش يعمل
إيش؟ بقى ولا شيء شوفتي كده؟ يعني هذا option عندك
تستخدميه إذا بدك عشان هيك لما هو تحت اشتغل شايفها
إيش عمل؟ حاجة يحط الـ action قال لك بالنسبة لأول
واحدة الـ white space مافيش action بده أسوي عشان
كله يروح له skip لما نلاقي if إيش الـ action بدك
تسوي أنتِ؟ return F صح طيب كيف بده يفهم إن الـ I والـ
الـ F اللي بتقصد فيها ممنوع نعمل في الـ C مثلا
return F هيك مش صح ساعات أنتِ هتضطري تعملي الـ define
إن الـ F رقم 300 ساعتين أنتِ هتضطري تطلعي فوق في جزء
تاع الـ declaration تكتبي code C سطر C يعمل define
للـ F وأنا مطمئن ليش؟ لأن لما بيحول للـ C أوتوماتيك
هياخدها على كود C فأصبح بقدر أستخدم return if لا
مالك if شوفتي كيف باختصار عارفة لو بده أعمل action
ثاني يعني ممكن واحدة تقولي أنا جاية على بالي لما
يلاقي الكلمة هذي بدي مش بس يرجع if بدي أعمل كذا وكذا
وكذا وكذا مثلا ساعة تاشر بقول لك بقول لك خلاص قولي بدي
function F1 مثلا وتعالي في الجزء الأخير عارفة F1
ما هو حينه يقول copy paste على كودك الأخير فلما
بيلاقي في الـ action إنه بدك أفضل بيروح بيجيبه و
بنفذه هذا لو بدك يعني مسموح فهو رايحك أعطاك مجال
تكتبي بلغة الـ C جد ما بدك functionات تحت وهينجلها
زي ما هي الـ copy paste والله أنا مش محتاج بكتبه هذا
على حسب أنتِ كيف تستخدمي الـ tool على حسب إيش الـ task
المطلوبة طبعا احنا في return F بدناهاش شيء احنا بس
return F وخلاص عشاني أنا مش حاكيتها قبلها ولا أي
حاجة لأنه لما بيلاقي F مش بقول له return F وخلاصنا
للاستدعاء اللي لاقي الـ token F وخلاصنا ففيش
داعي تعمل أي شيء هنا بس بقول لك لو بدك متاح okay طيب
الآن لما بيلاقي then return كلمة then عشان كلمة then
تصير معرفة لازم في الـ declaration فوق أقول له define
إيش هي الـ then طبعا أكيد لو شغال Java مش C كنا
هنعمل نفس الحركة اللي عملناها تحت الـ tag class tag
وعرفت فيه الحروف زي ما اتعلمنا قبل هيك لو كنت
شغال لأنه هياخدها الـ copy paste زي ما هي على
البرنامج اللي هيطلع تحت الـ Java okay بس عشان
تكونوا فاهمين طيب تعالي واقفي هنا شوية لما بيلاقي
ID طبعا لما بتلاقي ID هنا لأ مطلوب أعمل شغل مش أنا
كده إيش الشغل اللي بدي أعمله مش بدي أروح أدور عليه
في الـ symbol table وإذا ما لجيتهوش في الـ symbol
table بدي أحطه وأرجع قيمة عليه وإذا لجيته بدي
أرجعه يعني أنا ناوي أعمل شوية شغلات فإيش بيقول لي؟
بيقول لي باختصار أنت بدك تستدعي function install ..
sorry وينها؟ install ID إيش وظيفة الـ function هاي؟
هتروح تدور إن لجيته رجعته مالجيتوش هتضيفه طبعا وين
الـ code الـ install ID بتكتبه بكتبه تحت لإن هو
هياخذه زي ما هو طيب اختصار طب واحدة هتسألني تقولي
إيش هدول الـ parameters الحلو في الـ tool بيوفر عنده
شوية parameters بيحط عليها معلومات مهمة لهذا الـ
token وأنتِ حرة إذا بتستخدميها ولا لأ يعني على سبيل
المثال الـ tool دورت لاقت الـ ID مش أنا بهمني كمبرمج
أعرف شو الـ extremes المكونات له يعني أعرف وين
بدايته إيش الـ size تبعه عشان لو بدي آخذه أخزنه ولا
أعمل أي عملية عليه صار ده عشان هيك هو لحاله أنا
حطيت له بس تعريفه الـ ID letter followed by letter
or digit صح ولا لأ هو automatic أول ما هيلاقيه
هيروح يحط لي في internal parameter خاصة فيه يقول
هاي ني لاقيت الحروف كذا وكذا وكذا وإذا بدك الطول
تاع الكلمة كذا وكذا وكذا أنتِ حرة فبيسيب لي المجال إن
أنا محتاج أعرف الحروف بلاقيها مخزنة عنده وين في
variable مخصص لـ string لو بدي أعرف مثلا قداش طوله
برضه مخصص عندي في string فخلاص بريحني يعني هو
automatic مش بس بتعرف على تعريف اللي أنا كتبته و
بسجلي ملاحظات على اللي لاقيته بدك الملاحظات تستفيد
منها اتفضلي بدكش بلاش زي فكرة لما أنا عرفت له جاب لي
شوية number الآن هو ضال ماشي ماشي ماشي ماشي لاقي
number صح؟ لازم يخزن لي قيمته في variable يقول لي
هاي قيمته لو بدك إياها موجودة هنا هاي حروفه لو بدك
إياها هي موجودة هنا وخلاص أنا حر بعد هيك إن أنا بدي
أعمل حساب بدي أسوي شيء بعمل function بستفيد من الـ
parameters هذه ما بيلزمونيش بيلزمونيش لكن هو إيش
بيسوي بيزودني فيهم لأنه tool automatic هذا خلاص
فما نستغرب لما بلاقي YYLVAL هذا بكون اسمه هيك جوا
عنده يعني من الأول لما بفتح أنا الـ manual تبع الـ
language أو تبع الـ tool بيقول لي إيش الـ parameters
اللي عنده وبيقول لي والله في عندي parameter بيخزن
كذا وفي عندي parameter بيخزن طول وفي عندي
parameter بيخزن الكلمة وفي عندي كذا وبيديني
أسماءهم وخلاص ويعطيني العافية محتاجهم بأستخدمهم
مش محتاجهم بلاش أما هو لازم يدي لي إياهم باختصار واضحة
الـ parameters اللي عنده طيب الآن
لما بيلاقي أصغر إيش نسوي؟ إيش الـ action دي
تعملّيه؟ return؟ reload مش هو reload؟ مش هو معرف
reload؟ طيب لازم أحط له parameter صح؟ لازم الـ
parameter تبعه أدّله value فلازم أقول له less than
عشان كل مرة إيش سويت؟ جيت للـ parameter اللي عنده
المخصص له حطيته قيمته less than وقولّت له خلاص
رجع reload فلما بيرجع reload خلاص لو بده يعرف
الناس شو هذا الـ reload بتطلع وين؟ في الـ parameter
المخصص أو الـ variable المخصص هذا less than طبعا
عشان كلمة lt تصير مفهومة لازم فوق في الـ
declaration أعمل define للـ lt أو في الـ tag أعمل
define للـ lt باختصار طيب وخلاص نفس الفكرة أصغر
يساوي يساوي لا يساوي أكبر هذا طبعا عمله لمين؟ للي
اشتغلناها المرة اللي فاتت مش أخذنا الـ number والـ
ID والـ relop فوراني الـ tool كيف بكتبهم طيب إيش
آخر جزء بتتوقع إيه؟ آخر جزء بس بتحط فيه الـ
functionات اللي بدك إياها يعني أنتِ طلبتي في الـ
action تعملي function اسمه install ID بتيجي تحت
تشتغلي طبعا إيش بتتوقع هيكون كاتب في install ID؟ دور
في الـ symbol table إن لجيته برجع له مالجيتوش خزنه
ورجعه في function اسمه install number وهنا برضه
فرض إن الـ number رح نحطه في symbol table في المثال
هذا لكن طول شغلنا في الكتاب هفترض إنه بدوش .. بدوش
شيء بس خلاص return number والقيمة تبعته لكن هنا
فرض إنه تحطي في symbol table فالموضوع يا بنات سهل
خالص ما فيش فيه إيش الـ tool الـ tool زي ما أنتِ شايفة
الـ definitions إيش المطلوب اللي أعمله لما ألاقي كل
واحد فيهم ويعطيني العافية لكن هذا ممكن يجرني
لتعريفات للـ functions باختصار كيف عاد هو هيحول
بالنسبة لجزء ال declaration اللي فوق الخاص بالـ C و
بالنسبة لل functionality اللي تحت اللي خاصة بالـ C
copy & paste زي ما هما اللي في النص هم اللي هيلعبوا
فيهم على كيف يحولهم و كيف هنسويهم هذا هنتكلم فيه
لاحقًا في محاضرتنا كمان شوية كيف هيحولهم لكن أنا هـ
أستخدم ال tool ببساطة هيك بستخدم ال tool و بس
واضحة بس الآن في ملاحظة صغيرة
لو كاتبين احنا كلمة IF تمام؟
للأسف هذا هيعمل أنه لجأ ال token اسمه F لأن I و F
مكتوبين وهذا حسب تعريفه هيقول لجأ ID السؤال الآن
أن ينفذ ال action هذا، والله ينفذ ال action هذا لأنه
لجأ ال F هاي هي ID letter fourth by letter or
digit وهي F فلجأ تعريفين انطبق على IF مش ال IF هي
هذا التعريف، والـ IF هي letter followed by letter or
digit مش هي تعريفنا قبل شوية اللي بعرفينه فهو لما شاف
ال I letter or digit وراها F letter or digit صح
ولا لأ؟ ففي اثنين جالوا لجينا ال token هذا جال لجيه ال
token ك ID و هذا جال لجيه ال token ك F لما كانت
كلمة F في الحالة هذه، من اللي لازم يتنفذ اللي فوق
ولا اللي تحته؟ أي مبدأ لأن نفس الطول على ال
priority إذا كنت كاتب في ال tool مثلًا يا بنات
سينفذ ال action الأول عارف لو كنت كاتب هذاهان في ال
tool كان لن ينفذ ال action بتاع ال F كان لن ينفذ
ال action بتاع ال ID عشان أقولك انتبهي عند كتابة
في ال tool لازم تضع ال priority الأعلى في الأول
عندك F قبل ال ID عندك then قبل ال ID عشان هيك
ارتبهم مش ترتيب اعتباطي أنه جال بخلص من كل هدول
قبل ال ID عشان لما يتساوى أميز ال F لو أنت عاد كنت
... لما بتساوى و كنت مايزي ال ID ساعتها بس ايش
هتسوي لو برنامجك هيك هتجلب ال ID فوق هذا حسب أنت
ايش بدك لكن أنا في ال language معروفة ال IF هي F
مش ID عشان أنا كتبت ال F قبل ال ID طب واحدة هتقول
طب F رضي أجيب IFT هذا سيذمر أنه لجأ F وهذا ال ID
سيذمر أنه لجأ IFT في الحالة هذه، من الأطول ال IFT
إذا مش هياخد اللي فوق إذا لما بيكون فيه longest
بياخده عشان هيك الطول مهم لكن في حالة التساوي
بياخد اللي قبله، ونفس الكلام ينطبق يا بنات على
الأصغر و الأصغر يساوي هو لما لجأ أصغر لو أنا كاتب
أصغر ويساوي
هذا جال لجيت أصغر و هذا لجيت أصغر و يساوي، هياخد
الأطول اللي هو مين؟ أصغر و يساوي طب لو أنا كاتب
أصغر و ساكتت؟ هياخد هي، على طول، لأن هي اللي حتى
عملها بس recognition شفت كيف؟ هي القصة باختصار،
فبس خد بالك من الملاحظات هذه، أكتر من هيك ما فيش
مشاكل في الطول، الطول سهلة هذه كل قصة الطول باختصار
وطبعًا كل طول لكل language بتختلف من language ل
language بدك تشوف ايش تفاصيلها أو ايش كيف اكتمل يعني
هنا ال structure زي ما أنت شايفها جاسم جزء جزء جزء
باختصار تمام؟ في أي سؤال لحد هنا في الطول هاي؟ في
حد مش واضح عشان اللي سويناه أو اللي قولناه؟ تكمل؟
طيب الآن بس في ملاحظة أخرى عشان نختم الدرس هنا
بعض ال languages زي ال Fortran بتسمح أنه يكون
الكلمة keyword و identifier أو اسم array و keyword
صح ولا لأ؟ فكيف كنا نميز إذا بتذكر أيه؟ كنا نميز
أنه بضطر أمشي كثير لقدام صح؟ عشان أقدر أعرف يعني
مثلًا أديكي مثال نشتغل عليه يعني
مثلًا هذا المثال ها فلنشتغل عليه ايش بيقول لك؟ بيقول لك
ال F هنا عبارة عن اسم array تمام؟ بينما ال F هنا
عبارة عن ايش؟ ال F condition ال keyword الآن كيف
بدك تعرف إيه أن هذه ال F هي ال... ال keyword ولا
لأ؟ أجالك سهلة جدا ما ال F في ال language هذه
مقترنة ب then فجالك لما بلاجي F بامشي امشي امشي
امشي امشي امشي امشي لما يخلصوا الأقواس أشوف ايش
بعد القوس اللي جيت حرف T معناه هذه خلاص هذه ال F
condition ما جيتش غيره بتكونش ال F condition الآن
طب السؤال كيف أعمل التعريف يعني أنا قبل شوية ال F
كانت سهلة تعريف ال F IF يعطيني العافية طب هذه لأ
هذه الجثة أنه بيقعد يمشي ويمشي ويمشي بعد ال F عشان
لسه يعرف أن هذه F ولا مش F قال ال tool بتعطيك
operator تساعدك كيف؟ قال ال tool
بتعطيك الإشارة هذه، هذه شو معناها الإشارة؟ معناها
إذا تحقق كل ما يليه ال token تبعك هو بس اللي
جابلها يعني الآن الفاصل هذا إيش معناه؟ إنه عشان
هذا يكون token ال IF لازم يجي كل اللي وراه، إن أجى
كل اللي وراه خلاص ال token تبع مين؟ هو IF و
Automatic لازم يرجع ال X ين بيجي لوين؟ على كل اللي
مشيهم صح ولا لأ؟ يعني F ده ال authenticate بقى F
وعاملة أشياء وأجواس ومافيش T وصار ماشي .. ماشي ..
ماشي .. ماشي .. ماشي .. ماشي واكتشف في الآخر يا
ستة أنها T مثلا أنها F لازم ال extreme begin واني
واني واني واني واني واني واني واني واني واني واني
واني
مش هيمشي كثير طب بعد ما ماشي meet character لجأ
كل اللي بيقول انها F ايش يعمل؟ بيقول رجعت لك F طب
من ون كمل فحص؟ بيرجع لل F ثاني فبس فهذه ال
operator بتشتغل Automatic أنه لما بتحط الإشارة هيك
معناها إنه هذا بيكون token إذا أجى كل اللي بعدي لكن
لازم يرجع عنهم بعد هيك فبس هي كل القصة طب تعالى
تشوف كيف عرف ال F قال لك ال F عبارة عن ايش عشان تيجي
ال F؟ بديجي قوس طبعا ليش حط ال slash عشان يحكي عن
القوس ك character لأن هذا برضه في ال tool و بعدين
هذه إشارة معناها characters ال dot نجمة character
زي في ال DOS و زي في ال unix و مش عارف أين ال dot
نجمة يعني characters يعني كله skip skip skip امشي
عنه و بعدين بيقول لازم ألاقي ايش تذكيرة قص هذا عشان
نعرف إنها F ولا مش F وبعد تذكيرة القص إيش لازم
ألاقي letter إذا صار هذا كله اتحقق معناه إيش احنا
لجينا F يعني هذه الشروط اللي لازم تيجي عشان هذا
يكون إيش token F شفت كيف؟ فإيش اللي حاول ... ال
slash معناها إنه هذه F لحالها إذا أجى كل هدول، هذه
... هذه ... هذه ... هذا لأ إن ال cost ما هو المستخدم
بدي أميزه إن لأ، بقصد ال cost character زي ما كنا
نقول ال metadata بدي أميزها فبس هي القصة يعني ...
هنا ما فيش ... يعني ما فيش ايش صعب هنا كل اللي بدي
أقوله إنه يا جماعة إن ال F هي slash هذه معناها إن
كل اللي بدي بس هذا للفحص هيك اللي بدي أقوله يعني
الآن لو بدي أرجع على ال code يفوق بدي أفهمك الآن
لو بدي أرجع على ال F اللي كتبتها شايفة أنا F وخلصت
طب افرضي بدي ال F بتاعة ال Fortran بقول له ماشي شرط
شحطة و بحط كل التفاصيل اللي لازم تيجي عشان اعتبر
بس هي هذا ال F مش يروح يرجع كل التفاصيل مش ياخد كل
اللي مشيه و يرجع و يقول هي ال token مش هيك فهذه بس
هي ال operator هو مديك إياها option أنه هذه معناها
لما تحطيها الشرطة بعد الحرفين أنه باعتبر لك هدول
الحرفين Token إذا تحقق كل التالي و برجع لك Automatic
عنهم عشان تكملّي فحص من جديد هذه باختصار ال
operator مش لازماني زي ال sim يا بلى يا بلى منها
بس ممكن تسأل في بعض ال languages بس okay اللي بدأت
تسأل تتفضل أنا ماشي على طول اللي بدأت تسأل بعيد اه
في سؤال؟ ما فيش أسئلة خلصنا أنتم حرين أنا هأجي وقتي
أسأل زي ما بدي براحتكم أنتم كنتي
بدك تسأل ولا بطلتي هنا؟ هنا بدك تسأل ولا خلاص؟
تمام؟ طيب ما فيش
أسئلة اه؟ أنتم حرين براحتكم طيب
كيف حالكم؟ تمام؟ خليني الآن في الدرس الجديد تلاتة
ستة finite automata بس
قبل بدي أذكرك بشغلتين رئيسيات احنا ايش تعلمنا حتى
الآن في ال section السابقة؟ شغلتين شو هما ال
regular definition اللي بيوصف ال token و ليش
اتعلمته؟ علشان اكتب فيه tool صح؟ مش هي ال tool
ما طلبش مني حاجة ثانية غير بس اكتب لل definition و
اعطيك العافية بس في درس أنا برضه اتعلمته المحاضرة
السابقة مش عارف ليش اتعلمته اللي هو state diagram
يعني ليش احنا خدنا ال state diagram احنا ... إذا
بذاكر ... احنا بذاكرك حولنا اللي هو ال regular
definition ل state diagram ليش؟ أيوة لأن ال state
diagram أسهل في عملية ال simulation أسهل في عملية
البرمجة باختصار طيب تتوقعي الـ tool اللي اشتغلتها
قبل شوية اللي حطيت الـ definition وين هتكون مرحلة
الـ state diagram فيها؟ وين بتبين؟ والله بيحولش
تتوقع الـ state diagram؟ إيش توقعاتك؟ الـ tool مش
أنا كتبت الـ tool هل هيحول اللي تتوقع إلى state
diagram ولا ماعليه علاقة ولا أحد لأ لازم يحول إيش
رأيك المنطق بيقول إن الـ tool لازم يحول لـ state
diagram ولا ليش أخذته؟ مش احنا قلنا بشكل human الـ
definition بتحول لـ state diagram لأن برمجته بتصير
سهلة. طب أنا كتبت في الـ tool بس definition وخلصت
إيش تتوقع هتسوي الـ tool في لحظة ما بتتحول أكيد
هيحول كل الـ definitions اللي أنا عملتهم لـ state
diagram ليش؟ عشان يعملوا simulation بالـ C ويخلصوا
ويتعرفوا على الـ tokens مش هيقوله لأ أو إلا ليش
أنا تعلمت الـ state diagram لأن هذه خطوة هتتنعمل
الـ tool لحاله بيعملها internally systematic بيجلب
كل الـ definitions إذا أنا كتبته جواته سواء في النص
التاني أو في الأول كلهم بيجلبهم لشو؟ لـ state,
diagram وبعدين بيعمل إيش؟ simulation وبيعرف
حالته إذا جت token أو لا جتش token فهي باختصار بس
طبعا أنا تعلمت هذا الكلام كله كـ human لسه ما أخذتش
بشكل systematic عشان هيك السكاشن تلاتة ستة وتلاتة
سبعة وتلاتة تمانية واللي جايات هدول بيوريكي كيف
العملية بتصير systematic كيف الـ
tool هذه بتحول كل اللي عندها لـ finite automata و
هذه الـ finite automata اللي أنا طلعتها كيف بنعملها
simulation بشكل automatic عشان تقول لي هذا token
ولا مش token هاي اللي بناخده في الـ succession اللي
جاية تمام؟ طيب الـ finite automata عبارة عن إيش؟ هي
باختصار عبارة عن الدوائر يعني زي الـ transition
diagram دوائر ومن كل دائرة في عليها edges وين
أروح عند A وين أروح عند B وين أروح عند C تمام؟
وبتوقع أول دائرة فيهم تكون هي الـ start state
وبتوقع يكون فيه دوائر acceptance على أساس يقول لي
هذه في الـ language ولا مش في الـ language ودوائر الـ
acceptance كيف نميزها؟ بدائرتين مع بعض ومانساش
أنه ممكن يكون أكثر من داورتين في بعض يعني أكثر من
acceptance state في الحالات إيش بنسوي؟ بناخد الـ
longest path وفي حال التساوي بناخد اللي رقمه أقل
أو الـ priority تبعه اللي ذكر قبل الثانية ماننساش
المعلومات هذه. طيب الآن بالنسبة للـ finite automata
في نوعين في نوع بنسميه non-deterministic finite
automata اللي هو الـ NFA ونوع تاني بنسميه
deterministic في نهاية التماتة اللي هو DFA إيش
الفرق بيناتهم بالنسبة يا بنات للـ NFA ممكن ألاجي من
الـ 0 عند الـ A بتروح لـ 5 وألاجي عند الـ A كمان مرة
بتروح لـ 7 وعند الـ A كمان مرة بتروح لـ 9 يعني جالك
الـ NFA وارد جدا يكون نفس الـ label طالع أكثر من مرة
وهذا طبعا بحيّر في الـ process يعني افترض إن أنا
واجب في دائرة Zero والـ input A وين بدي أروح؟
المشكلة إنك عندك أكثر من خيار عندك خمسة وعندك سبعة
وعندك تسعة وبدك تعمل الـ test أكثر من مرة صح ولا
لأ وتخيلي كمان خمسة طالعة من بيه وعند بيه وعند
بيه وكل دائرة طالعة مرتين تلاتة عند نفس الاسم
بتوقع هتكون أصعب من لو كانت مباشرة اسم واحد صح ولا
لأ عشان كده بنسميها الـ non-deterministic يعني أنا
مش عارف من هذه الدائرة وين بدي أروح بالظبط بدي أ
process زيادة فهذا أحد الشروط اللي موجودة اللي
بتعرفني إن هذه أنا في إن تكرار الـ label اللي طالع
من الـ edge اللي طالع من الدائرة تكرار اسمه. طب في
حاجة ثانية في اللي أنا فيه؟ اه إنه ممكن للأسف
الشديد أطلع من دائرة 0 أروح دائرة 10 عند حاجة
اسمها epsilon وعند epsilon كمان أروح عند 15 يعني
أروح من 0 لـ 15 بدون inputs هيك معناه epsilon أروح
من 0 لـ 10 بدون inputs يعني فجأة أكون واقف في Zero
ألاقي حالة وقفت في 15 عشان أجرب بدون أي character
فهذا بصعب الأمور أكثر إن أنت مسموح من Zero تعيد
شغلك من 15 بدون شيء. مسموح من Zero تعيد شغلك مثلا
من عشرة لأنه كاتبك يسمح الانتقال عند الـ epsilon
شفت كيف؟ فهذه شغلتين بعرفوك إن اللي عندك أنا في
أيه ولا مش أنا في أيه؟ إذا لجيتي تكرار الـ edges الـ
labels أو إذا لجيتي الـ epsilon عادة DFA التي اسمها
Deterministic لا تسمح لا بإبسلون ولا بتسمح بتكرار
الـ labels اللي طالع من الدائرة يعني بالعربي لو أنا في
Zero ولجيت A رايحة على خمسة مستحيل ألاجي الـ A
كمان مرة خلاص مايكون إشي تاني بي مستحيل ألاجي
إبسلون موجودة طالعين على مكان عشان هيك إيش سموها
Deterministic يعني سهلة إن بص لها أعرف النتاج و
أروح وين بدي أروح تتوقعي من رسمتين الاثنين اللي
أنا رسمتهم مين efficient؟ مين أسرع؟ أكيد الـ DFA
لأن الـ DFA مافيش فيها خيلة أنا في دقيقة لزيرة، أجي
أيه أروح على كذا، أجي كذا أروح على كذا، أجي كذا أروح
على كذا، مافيش فيها خيلة واضحة الأمور فيها، معروفة
الأمور فيها، deterministic أما الـ NFA هي اللي إيش؟
اللي بتتعبوين أروح؟ طب إذا جات A؟ طب إذا جات
Epsilon؟ طب ما فيها خيارات؟ يعني بدأ شغل كثير
فواضح إنه الـ DFA أكثر efficiency من الـ .. من الـ
NFA الـ DFA تمام؟ طيب السؤال المهم طب ليش أنا أتعلم
الـ NFA ماكان خلاص وديتنا ع الـ DFA وخلصنا؟ يعني ليش
أنا أروح للـ NFA؟
كيف يعني؟ كويس بيتجاوب بس بدنا .. كويس بس جاوب
أوضح هي كويس كلامك بس كيف؟ كلامك
صح بس يمكن مش واضح للبنات إيه؟ ماشي بس السؤال ليش
أنا أتعلم الـ NFA ما خلاص ماروح لدي أف إيه
وخلاص أو أعلمكوا دي أف إيه وليش أتعبكوا في الـ NFA
في إيه وإحنا شايفين الـ DFA أحسن صح ولا لأ؟
ليش؟ إيش؟ أجابكم عشان نختصر الوقت زي ما قالت هي لأن
الحصول على الـ NFA من الـ regular أسهل بكثير مش احنا
اتفقنا إن بدنا نروح من الـ regular نحول لـ state
قالت فيه طرق systematic سهلة تطلعني الـ NFA لكن صعب
لو بدي أروح الـ DFA وتتذكر أيام ما شغلنا في الشباتر
الأولى وقلنا في الـ compiler بيحاول للوهلة الأولى
يكتب الـ code صح وبعد ما يكتبه صح بيعملوا
optimization وبيظبطوا بيكون تفكيره إني بس أكتبه
صح هذا نفس الفكرة إنه أنا في regular definition
موجود عندي تحويله إلى NFA systematic وسهل و1 زائد
1 يساوي 2 لكن إنه أروح لدي NFA بتعب مش سهل. فجاله
طالما إن تحويله لـ NFA سهل وAutomatic وعلى بناء
على الـ algorithm اللي ممكن ناخده صرت أنا مش برأعي
الـ NFA بس واحدة هتجاوبني طب والـ DFA عادل حلو في
الموضوع إن كل NFA في لها أيضا طريقة Systematic
تتحول لـ DFA هي كالصورة تملتيعني كل القصة اللي
هتصير إن الـ Regular Definition بتحول
Automatically إلى NFA اللي هو سهل الحصول عليه و
بعدين هستخدم خوارزميات أخرى هتعلمها تتحول من NFA
لـ DFA وبعدين هعمل simulation للـ DFA ويعطينا
العافية هي كل جثتنا هي كل جثتنا اللي هتصير في الـ
tool أنا قعدت في الـ tool يعطيني العافية كتبت
definition الـ tool لحاله مش هيكمل يحول NFA يحول
DFA يعمل simulation ويديني الجواب هذا الـ token
موجود ولا مش موجود شوفتي كيف؟ طبعا كيف العملية هتتم
بشكل systematic هنتكلم فيه طبعا احنا بس الآن
قاعدين نحط الخطوط العريضة إيش الـ NFA إيش الـ DFA
إيش سبب وجود الـ NFA ليش الـ DFA مهم فهذه الخطوط
العامة بدنا نعرفها لكن لحدت الآن في غموض كيف أنا
أحول مباشر هذا هنشوفه كيف أحول من الـ NFA إلى دي
أف أيه هذا هنشوفه طيب خلينا الآن برضه نتكلم شوية
نوضح أكثر الـ NFA أيه تمام تعالوا نشوف إيش مرتبط
نمشي في الأمثلة تحت الكتاب طبعا .. طبعا يا بنات زي
ما تشوفين هذا الكلام كله ذكرته جال الـ NFA أيه
عبارة عن Asian non deterministic جال عبارة عن
مجموعة من الـ states واحدة منهم بتكون طبعا الـ
start تمام ومش بس هيك الـ NFA كل state عشان تطلع للـ
state اللي وراها لازم inputs أنت كنت تنتقل من دا
إلى دا عبر input فلازم يكون للـ language هذه في
inputs يعني مثلا لما نتكلم عن لغة الجابة أنت لما
تقعد تبرمجي بالجافا مسموح لك تستخدم الـ small
letters والـ capital letters ومش عارف الـ
underscore والأرقام يعني في characters مسموح
تستخدمهم هدول كلهم اسمه inputs لكن في المقابل في
شخصيات أخرى ممنوع تستخدميهم بلزموي زي الدولار
ليش تحطيلي دولار في الملف؟ غلط! ففي دائما مجموعة من
الـ input اللي أنتِ مسموح تستخدميهم وفي input مش
مسموح تستخدميهم لكل مكان بدك إياه لكل دوائر بدك
إياها صح ولا لأ؟ طبعا الآن أنا لما أجي أقولك طيب
افترضي أنا عندي دوائر الـ input اللي ممكن أشوفه
بالكتير A,B,C وسألتك شو الـ input للدوائر هذه
هتقولي بس يا A يا B يا C لأن أنا هيك فارض أن الـ
language تبعت مافيش فيه غير A,B,C لكن لو أعمل دوائر
للغة الـ Java و أرى طالع من دائرة لدائرة محتمل أن
تشوفي small letter محتمل أن تشوفي capital letter
محتمل أن تشوفي الأرقام محتمل أن تشوفي الفاصلة
الفاصلة المنقوطة كل الحاجات اللي ممكن تستخدميها
جوا وارد يكون input عشان تنتقلي من دائرة لدائرة
الحاجات اللي ممنوعة تستخدميها جوا ما بتلاقيهاش على
الـ input شمت إيش يعني الـ input ما نقصدها يعني كيف
أنا أنتقل من دائرة لأخرى لازم يكون في input اللي
ينقلني أجى حاجة غير هذا الـ input error شوفتي كيف؟
فالـ NFA بقولك .. بقولك أي NFA إلها states وإلها
inputs عشان ننتقل بين الدوائر وإضافة للـ inputs
إلها epsilon لأنه مسموح جناف الـ NFA ننتقل من دي
على الأخر عبر الـ epsilon ومسموح الـ input يتكرر اللي
تنتبهي في الـ NFA مش جونا ممكن الـ input يتكرر
بنفس الدائرة ما تنسيش المعلومات فيها إيه وبعدين
إيش بقولك a state is not اللي هي mean الـ start
symbol لازم يكون فيه دائرة بداية ولازم يكون فيه
دوائر نهاية acceptance اللي هم دورتين في بعض بس هي
باختصار بقولك اللي طبعا شايفها إيش قالك a set of
states يعني قال لي أن الـ acceptance مش الـ state
واحدة ممكن يكون أكتر من دائرة acceptance
ماشي بس أنا هتبطل عن الـ star خلاص هي اللي اللي
بيكفينا الـ 2010 acceptance في بعض لإنه هنعرف
نتعامل معاها بطريقة تانية تمام طيب we can
represent طيب خلاص هذا تمام تعالوا ناخد أمثلة طبعا
بنات هنا إيش
تتوقعي الـ NFA طبعا this graph is very much similar
to Lansing's diagram except يعني الـ NFA هو شبه الـ
DFA بالاستثناء إيش؟ شغلتين أيوة 100% خلاص أيوة
ذكرهم هنا كويس جال إنه ممكن نفس الـ label نفس الاسم
يطلع من نفس الدويرة أكتر من مرة وإن الـ epsilon
ممكن يكون موجود على الـ edges هيك لو طلعت وجدت هدول
موجودين هتسميها على طول أنتِ إيش NFA ما جدتش هذا
متحقق هتصير إيش DFA طيب تعالوا ناخد أمثلة الآن قبل
ما أشوف المثال لحظة نلحظ كل regular definition له
NFA هذه معلومة أخدها كل regular definition له NFA
يعني كل token له NFA لأن كل token أنا بوصفه ب
definition و الـ definition بجلبه لـ NFA إذا أنا صار
عندي القدرة الآن أحصل على NFA تحكي لي الكلمة هذه
اللي أجت هي token أو لابحيث لو أنا .. ليش؟ لأنه
إيش فكرتنا؟ بنمشي على الـ input الأول وبنمشي على
الدوال وندلنا ماشيين مع بعض خلصنا الـ string هاي
اللي بدا أفحصها إذا وصلت دورتين في بعض إيش بقول
هذه؟ هذه token ماوصلتش ولا دورتين في بعض وخلصت
الكلمة بقول هذه مش token لإن أنا مش في الـ language
إذا واضح إن الـ NFA تصف الـ language اللي بتتعمل بال
regular definition مالكوا؟ إيش فيه؟ مالكوا؟ إيش
مالكوا هذا؟ في إيش؟ طيب بنكمل دقيقة
واحدة دقيقة واحدة و break طيب بس هذا المثال و
بعدين دقيقتين طيب .. طيب بس هم هذا المثال شوفي هاي
.. شوفي هاي .. هاد عبارة عن إيش؟ إيش الـ language
اللي بتطلع؟ كل اللي هاد مستوى المثال كل الكلمات
المكونة من a و b تنتهي ب a b b صح؟ طيب سؤالي طبعا
هذه الرسمة هي n of a لهيه هذه الرسمة n of a لهيه
إيش يعني؟ يعني أنتِ مش هتوصلي تلاتة إلا إذا كانت
الكلمة في الـ language لو الكلمة مش في الـ language
مابتوصليش تلاتة باختصار طب ناخد مثال لو واحد كاتب
a a a وسألنا سؤال هل هاي في الـ language ولا مش في
الـ language؟ إيش مطلوب منك تسوي؟ بدك تستكشفي هل
ممكن أوصل من خلال هذه الكلمة؟ ممكن أمشي بطريقة ما
أني أوصل لتلاتة؟ إذا لقيت path يوصلني لتلاتة يبقى
هذه الكلمة في الـ language إذا لقيت ولا path يوصلني
لتلاتة مش في الـ language طبعا الناس الشاطرين الناس
النايمين في الأول ناسين بيصيروا يقولوا إيه؟ إيه؟
إيه؟ بيه؟ بيه؟ وبعدين بقول مش في الـ language
بقولوا غلط مافيش طريق تاني لو أنتِ مشيتها بتلاقيها و
أين الطريق التاني يعني؟ أنه أول a بده يلف وين هنا
أول a وتاني A ألف هنا بينما تالت A أروح هنا أروح
هنا بعدين بيه أروح هنا في الحالة هذه أنا وصلت
لتلاتة من خلال path معين أنا دورت عليه إذا هذه في
الـ language طبعا لحظة أنه هنا في شوية صعوبة وين
أنه لازم أدور trail and error أني بقدر أوصل ولا
بقدرش أوصل لأن للأسف الشديد عند أول إيه أنا محتار
يعني في كتير بنات عند أول إيه محتارين ألف هيك ولا
امشي هيك لأن في خيارين فالمطلوب منك تجربي الحالين
تجربي لو أخدتيها هيك بتوصلي ولا بتوصليش طب لو رحت
هيك بتوصلي ولا بتوصليش هتضطري تعمل أكتر من تجربة تشوف
حالك هادي بتوصلك لتلاتة ولا لأ إذا لجيتي بتوصلك
لتلاتة إذا هادي في الـ language إيش يعني هذه يا بنات
في الـ language؟ يعني هذه token لأن أنتِ أساسا حاطة
تعريفات الـ tokens يعني هذا مش تعريف token لكن أنتِ
في الأساس عاملة definition لـ tokens فإذا وصلت ل
acceptance فهذا الـ token اللي أنتِ لجيتيه ساعتها
هتروحي تنفذي الـ action اللي جبالها لهذا الـ token طيب
افترضي كاتبين a a a b للصبح دوري مش هتوصل لـ 3 إذا
على طول هتقولي هذا مالهمش في الـ language لأنه
مافيش الـ path شفتي كيف؟ يعني الخلاصة أن هذه عبارة
عن NFA بتوصف الـ language كلها فهذه وهذه equivalent
لكن هذه على شكل معادلة وهذه على شكل finite
automata NFA الآن كيف هذه طلعت من هذه مش موضوعي هذا
هناخده بعدين بشكل سيستماتيك هنتعلمه كيف هذه بتطلع
هذه لكن اليوم هو لسه قاعد بشرح إيش الـ NFA كيف الـ
NFA توصف الـ language أو توصفش الـ language ودخلت
دقيقة واحدة break طيب الآن زي ما في حاجة اسمها
finite automata أو transition diagram في حاجة
اسمها الـ transition tables وهي equivalent للـ
diagram وصف بطريقة table كيف يعني؟ يعني مثلا كم
state أنتِ عندك هنا؟ صفر واحد اثنين ثلاثة أربعة
states صح؟ فراح عمل في الـ table إيش تحت؟ قالك هي
عنديسفر واحد اثنين ثلاثة لأن نروح للدقرة الأولى
سفر عند a و أين بتروحي وعند b و أين بتروحي وعند
ابسلون و أين بتروحي روح تطلعي فيها هاي أول واحدة عند
zero بتروحي على a أو بي عند zero عند a بتروحي على
zero أو واحد وعند b بتروحي على zero وعند ابسلون
بتروحيش على مكان مافيش epsilon عشان هيك بتلاحظي أنه
كتبها زيك الـ zero عند a بتروحي على zero أو واحد و
عند b بتروحي على zero وعند epsilon مافيش epsilon
طب تعالي لدائرة واحد طلع اطلع إيه فوق شوفيها بس
بتروحي على اثنين عند b لكن عند a بتروحيش على مكان و
عند epsilon بتروحيش على مكان عشان هيك اطلع كيف
وصفها باختصار قال in B بتروحي اثنين ومافيش مافيش
وخلاص فبيروح إيش بيعملها على شكل table مش أكتر يعني
ليش؟ لأن ممكن الكمبيوتر يستخدم هذه الطريقة أكتر بدل
ما يعمل nodes و edges و labels ومش عارف إيش خلاص
يعمل table ويشتغل عليه أنه أنا في A وأجي Zero و
أين أروح أنا مش كل قصتنا كانت if else في الـ .. في
الـ set دي كانت في برمجتها فهو بيقدر يعرف وين أروح
و وين ما بروحش من وين من الـ state table فهذا شكل آخر
على شكل table غير الرسم والاتنين واحد في النهاية
equivalent لبعض تمام؟ طيب الآن إيش بقصد acceptance
of input strings by automata الكلام اللي أنا شرحته
قبل شوية في المثالين هدول هيه هنا بتتكلم فيه أن
أنتِ كيف تعرفي أن هذه الـ string في الـ language ولا
مش في الـ language قالك سهل جدا ابدأي من أول دائرة
وشوفي هذا الـ path بيوصلك لتلاتة ولا ما بيوصلك إذا
بيوصلك لتلاتة دي معناها إيش؟ في الـ language إذا ما
بيوصلك لتلاتة معناها إيش؟ مش في الـ language فبس في
نفس المثال أنا شرحته قبل شوية شرحه قالك مثلا a a b
b في لها اثنين path الـ path الأول أنه يضلك في
state zero a b .. الحل اللي في الأول اللي بيوصل
نيش لكن في حل تاني بيوصلني فأنتِ مين هتعتمدي الحل
اللي وصلك فبس بيقولك إن خدي بالك ممكن تعملي
process أكثر من مرة و تدوري على الـ path أكثر من
مرة لغاية ما تكتشفي إنه بوصل أو لا فوداكي هنا و
هأريك مثالين إن مثال بوصلش و مثال بوصل يعني الكلام
اللي أنا شرحته موجود في المثال هذا اللي أنا قلته
قبل الـ break تمام؟ طيب هذا برضه مثال آخر بيقولك
هاي a a نجمة or b b نجمة إيش الـ أنا في آلة تبعتها؟
طبعا هذا إيش الـ language؟ one or more a's أو بي or
more b's طب وين الـ أنا في آلة تبعتها؟ هيا إيش رأيك
في الـ أنا في آلة تبعتها؟ هيا إنه لو أنا كتبت a تمام؟
بيروح مباشرة على وين؟ ليش؟ لأن هذا الـ epsilon
مالهاش دعوة صح ولا؟ بيروح على acceptance اللي هي
اتنين الـ أنا جت كمان أيه؟ هياخد الأطول صار في
acceptance ثاني، كمان أيه؟ ففي الآخر مين هياخد آخر
acceptance لأنه أطول واحد فالخلاصة إن أنت لن تصل
اتنين ولا تصل أربعة إلا في الـ language ا ا ا ا ا ا
ا ا ا ا ا ا ا ا ا ا ا ا ا ا ا ا ا ا ا ا ا ا ا ا ا
ا ا ا ا ا ا ا ا ا ا ا ا ا ا ا ا ا ا ا ا ا اصح ولا
لأ؟ طيب فهذه في النهاية أنا في آلة accepting الـ
language A plus or P plus هاي باختصار فبس المطلوب
منك إن تشوفي لأي string عندك هل في path يوصّلني الـ
acceptance ولا لأ إذا لجيتي في path يوصّلني معناها
على طول هذه في الـ language طب سؤالي للناس الشاطرين
افترض أنا ما كتبتش ولا إشي epsilon هل بتوصّلني ليش؟
لأن الـ Epsilon أساساً مش موجودة عارف لو هذه ما
كانت موجودة هنعمل هيك لأ لازم أعمل هيك إنه عند الـ
Epsilon acceptance لكن بعملهاش للـ B لأن الـ B لازم
يكون إيش؟ B واحدة فدائما انتبهي لكل regular
definition أنا فيه خاصة فيها تتغير بتغير اللي أنا
فيه المهم الخلاصة إن اللي لازم اللي أنا فيه اللي
أعمله في الآخر تعملي بس acceptance للحاجات اللي في
الـ language وما تعمليش acceptance للحاجات اللي برا
الـ language ليش أنا بقول هذا الكلام اليوم لأن هذه
هتصير الـ token وبالتالي أنا هحط تعريفات token مش
هيك و هطلع أنا في آلة للـ token مش هيك وبالتالي أي
كلمة أو مجموعة من الـ characters بجربهم في أنا في
آلة هاي والله إن هدول الـ characters وصلوا لـ
acceptance معناه دول لـ token ولا كيف وصلوا ماوصلوش
لـ acceptance معناه دول مش token مش هيك ولا لأ بس
طبعا بشرط لازم أكون حاطب كل أنا في آلة تعريفات
لمين؟ لـ tokens هو أنا لأ بس بدي علمك الفكرة فبجرب لـ
a, b, a or b, a, b نجمة أيه نجمة زيك المهم خلاصته
كل regular definition له NFA متطابق معاه يقول لي
هل يقبل الكلمة هذه في هذه الـ language أو لا يقبلها
باختصار تمام؟ طيب إيش
رأيك في السطر هذا؟ اجري فوق إيش كاتب؟ a de
-deterministic finite automata لأنه بدأت بيقولي
شرحتيها عن الـ DFA و أنا شرحته already is a special
case of what؟ of an fa where؟ إيش تتوقع هيكتب تحت؟
مافي إبسلون ومافي تكرار 100% يعني دي fa هي an fa
بدون التكرار والإبسلون طلعي هاي إيش كاتب؟ إي
agree؟ كاتب إيش؟ there are no moves on input
epsilon مافي.. مانتقلش مع الـ epsilon يعني مافيش
label epsilon مش بسيك for each state S and input
symbol A there is exactly one edge بطلع من S لكن
بلاجيش يطلع مرتين مرة واحدة maximum عند الـ A
الواحدة فهيك بيصير DFA طيب كيف
نعمل يا بنات الـ simulation تبع الـ DFA تعالوا نطرح
كيف نعمل الـ simulation تبع الـ DFA و القصة simple
خالص جالك إيش الـ input؟ هيكون عندك دوائر الـ DFA و
هيكون عندك الـ input اللي بدك تفحصيه في الـ language
ولا لأ امشيك simulation أنا عشان أعمل simulation و
أقول هذا token ولا مش token ولا هذا في الـ language
ولا مش في الـ language إيش بالزمن؟ طرفين الطرف
الأول اللي هي الدوائر أو الـ finite automata أو الـ
DFA التي تمثل الـ language أو تمثل الـ token، مش
هيك؟ والطرف الثاني الكلمة أو الـ inputs المراد
فحصهم اللي بنتي مثلا بإشارة إن خلاص بنتي ب end of
file أو end of character أو أي حاجة اللي أنا بده
أفحصه كيف تفحصيه؟ إيش هتسوي عشان تفحصيه؟ هتقوليلي
هبدأ في الـ start symbol في الـ start state و هبدأ
في أول character موجود في الـ buffer و منه هعرف وين
الدوائر اللي هروح و همشي الـ character اللي وراه و
منه هعرف وين هروح و أمشي في الدوائر و أمشي في الـ
character خلصت الـ string هشوف حالي و أنا وقفت في
الدوائر إن وقفت على دائرتين مع بعض head في الـ
language ماوقفتيش حتى تقول الـ term مع بعض head مش
في الـ language يعني القصة simple خالص تحت الـ
simulation ومافيش هانة زي الـ NFA لخبطة إن ألاقي
الـ a مرتين و أصير اتحارب .. و أصير مش عارف هانة الـ
DFA سهلة زي الـ code .. شوفتوا الـ code المجنر المرة
اللي فاتت زي الـ DFA الـ if else أنا في state 0 و
اجا a روح على state 5 أنا في state 5 اجا b روح على
state 9 كان سهل فهيو تعالى نشوف كيف مكتوب إيش
بيقولك الـ input عبارة عن string x المراد فحصها و
إيش كمان؟ و الـ DFA الدوائر اللي هتقوللي في الـ
language ولا مش في الـ language هذا الـ input إيش الـ
output تتوقعي yes or no هل هذه الكلمة في الـ
language ولا مش في الـ language طب كيف بيقول yes
ولا no إذا وقع في دورتين في الآخر yes ماوقعش في
دورتين no الآن طب إيش الـ method كيف بدأ نشتغل
هايها الـ method تعالى شوفيها هايها هايها الـ method
تعالى اتطلعيه أول ما بيفدأ بناته دو لو سمحته أول
ما بيفدأ
إيش بيقولك؟ بيقولك هتبدأ .. من وين هتبدأ؟ من أي ..
من أي state؟ الـ S الأصلية الـ start صح؟ و هتمسكي
إيش؟ character من اللي وين؟ من الـ buffer اللي بدك
تدور فيه token ولا مش token أو الكلمة اللي بدك
تعملها، مظبوط؟ الآن إيش هتعملي؟ صار عندك C الـ
character أو الـ input ودورت البداية الآن إيش
هتعملي؟ طب هنضل اللي في إيش هنقول؟ إيش الـ move
معناها يا بنات؟ يعني من الـ S هذه لما بيجي الـ C هذه
وين الـ دائرة اللي هروح عليها؟ هروح دائرة خمسة مثلا
إيش الـ S هذه هتصير؟ دائرة خمسة تتوقع الـ function
move إيش جواتها؟ if else أنا في الـ state هاي و أجى A روح
على 9 أجى B روح على 10 أجى D روح على 11 مش هيك if
else في الآخر يعني الـ S الجديدة تبعتك إيش هتكون
على حسب هذا الـ input و على حسب الدورة اللي أنا
فيها فإذا مثلا الدورة اللي أنا فيها عند الـ A بتروح
على 90 إيش ده تصير الـ S دي 90 و بدي أكمل من عندها
كده كم من عندها بدي أمشي الـ input اللي ورا فإيش
بقوله هتلي الـ character اللي ورا و عيد شوف الـ S
وين بدها تروح قول طب لما يبقى هتضلنا عيد لما تظل
ماشي لما توصلي لنهاية الكلمة خلاص خلصت الكلمة كلها
مشيت عليها كل الـ character اللي شفتهم خلصتي إيش
هتسوي هتفحص الـ state الأخيرة اللي وجفت عندها هل هي
من دوائر الـ acceptance يعني هل هي دورتين في بعض أه
دورتين في بعض خلاص yes هذه في الـ language مش من
دواء الـ acceptance بطلع يعني الـ simulation بتاع الـ
DFA سهل جدا و مرة واحدة بيخلص بدوش زي الـ أنا FA
مرة اطلع فوق مرة اروح تحت مرة عيد مرة يجرب و
يخيلني مرة بقبصي و مرة بتكرار الـ A و تكرار الـ
inputs مافيش هذا الكلام موجود فجلد DFA simple خالص
خلاص خد الدائرة البداية و خد الـ character وشوف وين
هتروحي وامشي الـ character اللي ورا وين هتروحي الـ
character اللي وين هتروحي خلصت شوفي حالك وين وقفتي
وقفت في acceptance خلصنا yes بقى وقفت في
acceptance no باختصار واضحة الـ simulation تبعتها؟
طيب الآن بس بدي أكد على المعلومة هذه من
خلال الرسم هذه يا بنات الرسم هذه تتوقعي أيه؟ اجري
تحت شايفة
هاي؟ إيش الـ language؟ A or B نجمة يعني كل الكلمات
اللي زي مثلا aabb أو aabbb مش زي هيك اللي توفح
صناعهم هذه قبل شوية أخدناها على أيه يا بنات NFA مش
أول ما بدينا المثال تبعنا أخدنا NFA للـ language
اللي تحت طب سؤالي لإلكوا هذه NFA ولا DFA متأكدة
NFA ليش؟ مافيش إبسلون ومافيش من دائرة بطلع A أكثر
من مرة السفينة إذا بتطلع لإيه من الدوائر الثانية
مافيش مشكلة لكن من نفس الدائرة بيطلعش نفس الاسم
مرتين إذا هذه DFA بس بشكل آخر طبعا كيف جابها مش
موضوعي الآن كيف حول أنا في الـ DFA مش موضوعي الآن
هناخده كمان شوية الآن الفكرة أن هاي DFA طب هل هذه
أريح من الـ NFA ولا مش أريح تعالي نجرب كيف بدك
تعرفي هذي في الـ language ولا لأ هنا الحلو مش هتقعد
تتحذري زي في الـ NFA خلاص هتمشي بالترتيب عندك أول
A وانت في الـ zero ايش بيقولك روحي مافيش مجلة
اللخبطة الآن وراها جايش A وين هتروحي على واحد اجا
كمان A وين هتروحي على واحد شايفة ماتلخبطش مافيش
إشي بعدين روحي وين على B وين هيروح بعدين اجت الـ B
الأخير وين هيروح؟ acceptance ولا مش acceptance؟
شايفة؟ ماقعدش أتوه وماقعدش أجرب إشي زي قبل شوية
وشوف كام path و وين الـ path كنا نتعرف اللي أنا فيه
طب تعالي جرب اللي تحت AAB أول A وين بيروح؟ هنا
بعدين الـ A التانية؟ هنا بعدين الـ B وين بيروح؟ هنا
خلصت في acceptance إذا واضح أن الـ simulation تاع
الـ DFA أريح خلاص مرة واحدة بمشي فيه لا بأتعاب ولا
غيره اللي أنا فكرا لأ في أكتر من A و أكتر من Y و
كان متعب و دوري و مش اللي بدنا فيه يبقى أحنا دائما
طموحنا نوصل لمين للـ DFA إذا الآن الصورة بقدر أقول
هيك التضحيات هيك اللي طبعا خلصت الـ section بس
احنا ماخلصناش أكيد يعني عشان أطمنكوا يعني
أه طيب مهمش لازم ناخد مثال و نجرب عنده المثال بده
خمس دقائق لازم ناخده بنات هدوء لو سمحتوا اللي
بتنام اتنام هي مسجلة اللي بتحضر براحتها طيب طيب
الآن الآن احنا أسسنا أنفسنا ليش ليش لشغلتين أحيانا
بس ضال علي غمض في شغلتين و أخلص ايش الشغلة الأولى؟
هاي الشغلة الأولى from ايش regular لوين لـ automata
فالمفروض الخطوة الأولى أحول من وين من الـ
definition لـ DFA الخطوة اتنين لـ DFA أنا أشهدكم في
الخمس دقائق من أنا في DFA و أوقف و المرة الجاية
نعمل الأولى كمان عشان نخلص كل قصة تعالوا الآن
نشوف كيف بدنا نعمل من أنا NFA وانا DFA وهنا
راجعة ان انا بدأت شوية تركيز عشان تعرفي .. قالك
لازم تعرفي التعريفات التلاتة هدول ماذا يقصد بـ ε-closure S وماذا يقصد بـ ε-closure T وماذا يقصد بالـ
move عشان نفهم معناهم هدول قالك هاي معناها اجريها
انت يعني أنا في دائرة zero و رايح على A عن دائرة
خمسين و رايح على A عن دائرة عشرين و رايح على A
عن دائرة تلاتين الآن السؤال بيقولك من هذه الدويرة
عند A وين بتوصل A ايش الجواب خمسين و عشرين يعني
بالعربي من الدويرة المستهدفة عند الـ epsilon وين
الدوائر اللي بوصلها سجليها بتكون ان انت طلعتي
ε-closure للدويرة طبعا مع نفسها وهنا تنسيش
sorry بتضيفي كمان نفسها لأن هي نفسها أنا واقف فيها
بدون حاجة فما تخلطيش أول حاجة بتقولي نفسها و
بتضيفي عليهم مين طب افترضي ولا واحدة بتروح على
ε خلاص نفسه يعطيني العافية إذا وضحت ايش الـ
ε-closure لدائرة طيب اللي وراها يا بنات
ε-closure لمجموعة مش لدائرة يعني بيقولك ايه
فرضي بدي للدائرة Zero و للدائرة اتنين بدي الـ
ε-closure ايش الحل قالك جيبي بتاعت الـ Zero
طبعا Zero مع الأخرين وضيفي عليهم اللي هي 2 و تشوف 2
طبعا وين بتروح على الـ ε يعني لما يكون عنده
أكتر من دائرة جالك بتعمل اللي عملتيه للدائرة
الواحدة و بتلميهم كلهم في مجموعة يعني لو بدي
ε-closure لـ 0,1,2 بامسك الـ 0 وين بتروح عند
ε؟ 0 ومين ومين ومين بسجلهم و عند 1 ε
وين بيروح؟ بسجلهم مع الواحد و عند 2 وين بيروح؟
بسجلهم كلهم بلمهم في مجموعة هذه بسميها ε-
closure للمجموعة هذه is the closure للـ state الآن
اخر واحدة دلت الـ move ايش الـ move T ايوة هذه الـ
move يا بنات للمجموعة يعني بفترضي كنا بدنا نقول الـ
T عبارة عن ايش؟ صفر و واحد و هاي دورة صفر عند الـ A
رايحة على عشرين و عند الـ A رايحة على خمسة و عشرين
و بعدين نقول رايحة عند الـ B مثلا على واحد و الـ
واحد عند الـ A رايحة على تلاتة الآن الـ move عند الـ
A بتمسكيهم بالدور زي ما عملناه أول دورة Zero وين
بتروح الـ Zero عند الـ A؟ عند عشرين و خمسة و عشرين
ممنوعة تحط نفسك مثل الـ ε إلا إذا راجعت على
نفسك هتضيف مين معاهم؟ تلاتة لماذا؟ لأنك تمسكت الـ
Zero شفت وين برو عند الـ A، سجلتيه هتمسكي مين
وراه؟ الواحد وبرو عند الـ A وسجليهم، خلاص، باختصار
يعني نفس قصة الـ ε بس اللهم أصيب تتطلع على
الانبوت الفعلي وهنا بختلف عن الـ ε أنه
باعتبرش نفسه موجود إلا إذا كان بلف فعليًا على نفسه
الـ ε أنا already بدون إشي بكون موجود واضحة
كيف الـ Move بتاعة المجموعة التلات معلومات هدول
بعلموك كيف تحولي من NFA لـ DFA والآن دي أخد المثال
واختم فيه
هي السؤال بقولك حوالي هاي .. هذي شايفينها بناءت
بتاعتش هذي؟ هذي اللي خدناها قبل شوية بس خدناها
مبسطة هذي unfolding ولا دي unfolding على اللوح؟
لأنه فيها ε خلاص طالما فيها ε حتى بدون
ما تكمل بحث طالما فيها ε ايش صارت؟ راجعة الآن
عشان اختم فيه المثال كيف بدنا نحول هذا الـ NFA اه
لـ DFA قالك بدك تبدأ أول خطوة بدك تحسبيها
ε-closure لمين لنقطة البداية اللي هي مين Zero
ايش تساوي يلا يا بنات ايش تساوي بدك تشوفي من Zero
وين بيروح على ε هتقولي ليه Zero تنسيش نفسه
بنسوك تبصي الغلط واحد واحد استنى و اتنين لانه حق مش
ε واصلني بدون ايش على اتنين يعني بدون حاجة
ممكن نوصل على اتنين و ايش كمان و اربعة و سبعة في
غيرها؟ لأ مظبوط مش هيك قال لي هاي اللي طلعت معايا
هي أول state رسمية في الـ DFA واسمها A هاي أول
دويرة في الـ DFA واسمها ايش إذا بدك Zero واحد اتنين
أربع سبعة طيب الآن كيف أكمل؟ إذا انت عرفتي كيف
تعرفي أول دائرة؟ قالك ε-closure البداية
المجموعة اللي طلعت هذه اللي بنسميها دائرة الأولى A
الارش دي بتعمل ايه لسه صبر معايا الآن كام input
موجود في شغل الكهنة ممكن احتمالات هتقولي يا A يا B
سيبني من الـ ε الـ DFA مافيش فيها ε
هتقولي A B مرات بيكون في A و مرات بيكون في
B عارف لو فيه C كنت هتقولي A او B او C طب A
فادتك معلومة A و B؟ الآن تحاول تفكري هاد الـ A عند
A وين هتروح و عند B وين هتروح و عارف لو فيه C بيجي
تجربي فالحين أشوف كيف بدي أحسب هذا لسه مش عارف و
بعدين هتعمل ايه؟ هاي عند A وين هتروح و عند B وين
هتروح و هاي عند A وين هتروح و عند B وين هتروح و كل
دويرة جديدة هتعملها عند A عند B عند A عند B لما
تتسكل على حالها و تبطل تزيد طبعا الواحدة الأولى
بتتوقع ان عمركيش هتخلص A ان كل واحدة تظل تتفرق
صح؟ لأ لحسن الحظ بتخلص بسرعة اربع خمس دورات اللي هي
بتجيب ضبضبط حالها و خلص بسرعة زي ما هشوف في هذا
المثال الآن كيف احسب الدويرة هاي؟ كيف احسب الدويرة
هاي؟ جالي انتبه ε-closure لـ move T التي من الـ
T التي من الـ A احسبيها
تعرفين أين سنذهب سأخبرك كيف نحسبها و ستحسبين
ε لـ move A و B سنحسبها تنتهي عيب لو كان
هناك C و D input كان جربتهم كلهم ماعرفش غير A B
كيف نحسب يلا يا بنات move AA يلا شطرين طبعا
ε ايش الـ move AA هتمسكي هاي وين عند A وهاي
وين عند A وهاي وين عند A وهاي وين عند A وهاي
وين عند A وهاي وين عند A وتسجلي يالا الـ zero
عند A وين؟ مفيش مفيش مباشر الـ واحد عند A؟ مفيش
التانية عند A؟ تسجلي تلاتة الاربع عند A؟ مفيش
السبعة عند A؟ تمانية الآن ايش الـ ε-closure
لتلاتة و تمانية؟ يلا يلا ابدي في تلاتة هتقوليلي
تلاتة في الأول نفسها بعدين وين تلاتة هتقوليلي ستة
و سبعة واحد و اتنين واربع طلع فيها كويس واحد واتنين
واربع وستة وسبعة هذه لمن؟ لتلاتة بس تلاتة تروح على
ستة وسبعة وواحد واتنين واربع لسه ما خلصناهاش مش
بدينا الـ تمانية بضيف تمانية بس خلصناها هذه
المجموعة موجودة قبل؟ لو موجودة قبل خلاص بسميهاش
اسم جديد باخدها اللي كانت قبل بس الآن أنا جديدهاش
هسميها اسمها B فحقول هذه عند A بتروح على B اللي هي
بكتبهم الآن هنعيد A لـ B كيف تنحسب؟ كيف تنحسب؟
هتقولي نفس الكلب .. ايش ال .. طب هنحسب الـ closure
لمين؟ لـ move A مع B اللي هو مين A؟ Zero and Zero
one بتروح عند B مافيش واحد عند B مافيش اثنين عند B
مافيش ثلاثة؟ أربعة عند B؟ خمسة و سبعة عند B؟ إيش E
closure لخمسة؟ Epsilon closure لخمسة؟ خمسة و ستة و
سبعة؟ و واحد و اثنين و أربعة، مظبوط؟ هل هذه موجودة
فوق؟ إذا هذه مجموعة جديدة إيش هتسميها أنتِ؟ C إذا
هتقولي الـ A لو جابوها هتروح على C مظبوط و هتعيدي
حضرتك لـ B، إيش هتعيدي لـ B؟ إيش هتجيبيها؟ كيف
هتجيبيها؟ إيش هتقولي؟ مش هكمل، بس إيش هتقولي؟
Epsilon move لـ B عند A و تحليها إن طلعت مجموعة من
الموجودين، خلاص بتسيبيها، بترجع عليها إن طلعت
مجموعة جديدة، بتسميها D و بتكملي فهي الحالة تعاد
السؤال، هيخلصته، هـ يطلع معاكي A و B و C و D و E
و الـ A راحت على B و C الجدد لكن هتلاقي الـ B لو
حسبتيها طب خليني أحسب بس الـ B هذه خليني أحسب الـ B
عند A حسبيلي هذه بس يا بنات الـ B عند الـ A حسبوليها
كيف نحسبها أبسلون لمين؟ وين الـ B؟ هاي الـ B الـ 1 و
2 .. الـ 1 عند الـ .. عند الـ A و أين بروح؟ الثلاثة
مافيش أين بروح؟ عند الـ A
الواحد عند الـ A إيه؟ الاثنين عند الـ A إيه؟
الثلاثة الأربعة عند الـ A إيه؟ الستة عند الـ A إيه؟
السبعة عند الـ A إيه؟ الثمانية عند الـ A إيه؟ مش هذي
توا عملناها مش هي بتطلع بيه ماذا تفعل؟ يعني هاي
بديك تلف .. وينها؟ يعني الـ B بتلف على نفسها عند الـ
A فهي اللي عملت فرسم هي طلعت؟ المهم بتكمل بنفس
الصورة يا بنات يعني القصة مابتبدأش إشي خلاص هي عند
الـ A و بتعملي لأ ماتضبط معاكي و تسكري كل مرة بس
هتحسي بـ closure للموف closure للموف closure لما
تخلص معاكي طب مين دوائر الـ acceptance في الآخر؟
كيف نعرفهم؟
رقم إيش الـ acceptance عندك؟ عشرة أي حاجة فيها رقم
عشرة عملتيها دورتين في بعض ففي الآخر مش أنتِ عندك
دوائر تعالي نتجدوا مين هتتوقعي الوحيدة اللي فيها
عشرة إذا الـ E اللي هي دورتين عارف لو عشرة هان بعلم
ديكة طب لو في دورتين تسعة و عشرة هعلم هاي وعلم هاي
شوفتي كيف اللي فيها تسعة أو فيها عشرة مش شرط
الاثنتين أي واحدة فيهم إذا رسمتنا النهائية هي هي
رسمتنا يا بنات النهائية هي عند الـ A و راحت عند الـ
B و راحت و بعدين نشتغل فالخلاص هيك حولناها من إيش؟
من NFA لـ DFA أي سؤال لما تخلص معاكي، كيف تخلص
معاكي؟ يعني خلاص الـ A تصير ترجعك، ما تعملش حالات
جديدة أنا إيش بكمل؟ مش الـ A طلعت B و C، اشتغلت الـ
B طلعت D، اشتغلت الـ D طلعت الـ E، اشتغلت الـ ..
هتبطلي تطلعي زيادة، هتصيري تلاقي الأرقام، تتكرر و
تصيري ترجعي عشانك أنا أطالب منك المرة الجاية تجيني
يوم الثلاثاء أول خمس دقايق أحلي المثال هذا كامل أه
بدي تجيني أحلي المثال هذا كامل لأنه هنعتمد عليه
المرة الجاية مش صعب يا بنات
بأول مرة بجيب الـ epsilon كله وين ما يوصلني يوصلني
إن شاء الله لو بعد ثلاثة epsilon بمشي وراهم أول
مرة بعدين خلاص بصير اشتغل موف عادي إيه السؤال يا
بنات سهل دي ربّعلكوا هذا بسأل عنه دائماً في
الامتحانات سهل يعطيكم العافية