بسم الله الرحمن الرحيم خلونا اليوم إن شاء الله
نستكمل في chapter ثلاثة الدرس اللي أخدناه يمكن
احنا في آخر محاضرة بدأنا ناخد حاجة اسمها pattern
اللي هي عبارة عن وصف الـtoken تمام لكن لسه ما شوفناش
وصف الـtoken بشكل رياضي بشكل math بشكل معادلة اللي
هو هذا اليوم إن شاء الله بدنا نشوفه طبعا احنا بس
استكفنا المرة اللي فاتت إنه شو يعني pattern ليش
موجود الـpattern واليوم إن شاء الله هنستكمل و
نشوف كيف بالظبط بتنعمل على شكل رياضي و كيف بقدر أي
token موجود عندي أوصفه بهذا الشكل الرياضي طبعا
احنا في البداية بنسمي هذا الشكل الرياضي regular
expression أو regular definition وشوية شوية هنشوف
شو هو لكن بالتأكيد قبل ما أروح لهذا الـregular
expression في عندي بعض المصطلحات لازم أفهم معناها
في الأول بدنا ناخدهم بالترتيب وندخل إن شاء الله
على الـregular expression بشكل بسيط إن شاء الله
طيب أول حاجة في حاجة اسمها prefix لأي كلمة لأي
string في حاجة اسمها prefix إيش يعني prefix
باختصار لو أنا عندي كلمات مثلا banana
الـbanana نفسها الكلمة كاملة هي prefix لنفسها يعني
أنا ممكن أقول الـbanana هذه كلها هي prefix أو لو أنا
شلت حرف الـa الكلمة اللي ضلت هذه banana هذه prefix
لكلمة banana لو شلت كمان حرفين bana هذه prefix لو
شلت تلت حروف prefix لما أشيلهم كلهم بتصير إبسلون صح
إيه prefix فجال القصة سهلة خالص إن أشيل من الآخر
zero or more characters تمام هيك بيطلع لي الـprefix
بتاعة هذه الكلمة باختصار ما بنعش نعقد طبعا ليش هي
prefix لأنه خلاص هي السابقة للكلمة مظبوطة ولا لأ
يعني لما بشيل هيك هذه الـbanana هي السابقة ل
banana الـban هي سابقة banana شوفتي كيف prefix إلها
وبالتالي قال لي prefix ببساطة removing zero or more
symbols from the end of S طبعا ما ننساش إن الكلمة
كاملة بدون ما أشيل شيء هي prefix لنفسها ولو شلت
كل أو صارت epsilon هي prefix لنفسها هذا باختصار الـ
prefix الآن في حاجة عكس الـprefix اللي هي الـ
suffix إني بدي أشيل zero or more symbols from the
beginning من البداية يعني لو أنا شلت الـb الباقي
هذه أنا هي suffix للكلمة لو شلت الـb و الـa
نانا هي الـprefix ولو شلتها كلها عفوا suffix تمام
ولو ما شلتهاش كلها بالمرة لو ما شلتش شيء هي suffix
لنفسها هي suffix لنفسها إذا ما ننساش ولحظة بين الـ
suffix و الـprefix بيكون في common إنه تكون الكلمة
نفسها هي بتكون نفسك prefix وهي نفسها بتكون suffix
و الـepsilon كذلك مرة هي نفسها بتكون prefix ومرة
بتكون suffix هاي باختصار الأمور مش معقدة سهلة جدا
طيب الـsubstring هي باختصار إنه أي مقطع بدك إياه
تاخديه من الكلمة هي substring يعني لو أخدت الكلمة
كاملة هي substring لو أخدت ban هي substring لو
أخدت أنا substring نانا .. نانا .. أي مقطع يعجبك في
الكلمة بتاخديه بغض النظر عن طوله هو substring يضاف
إلها الكلمة كاملة ويضاف إلها الـepsilon هي باختصار
الـsubstring تمام؟ طيب الآن فينا حاجة اسمها proper
prefix و proper suffix و proper substring إيش الـ
proper prefix قال لي هو نفس الـprefix بس بدون
الكلمة الكاملة وبدون الـepsilon يعني لو أنا شيلت
من مجموعة الـprefix شيلت الكلمة الكاملة وشيلت الـ
epsilon إيش بتصير هذه proper prefix نفس القصة للـ
proper suffix لو شيلت من المجموعة الكلمة الكاملة
وشيلت الـepsilon الباقي اللي بيضلوا هذول هم الـ
proper suffix ونفس القصة للـsubstring proper
substring يعني كل المقاطع اللي ممكن تاخديها من
الكلمة باستثناء الكلمة ككل أو الـepsilon هي
باختصار الـproper طيب آخر شيء في سؤال واضح sub
-string بتكون لازم تتابع لحظة طبعا لازم تكون ورا
مع بعض sub-string أنا أخدت مقطعة تمام؟ طيب بعدين
في آخر حاجة عندي اللي هي الـsub-sequence الـsub
-sequence إيش بيقول لي؟ بيقول لي أنت قادر تشيل زي
ما بدك تلغي أحرف والكلمة اللي بتظل بتاخديها بنفس
الترتيب بمعنى أنا لو شلت الـnهاي وشلت الـa
الأخيرة الـB,A,A,N هذه sequence طيب لو شيلت الـN و
الـN الـB,A,A,A sequence لو شيلت مثلا الـB مع الـA
ومع الـA الـN,N,A sequence يعني لازم الترتيب يكون
موجود نفسه لكن مش شرط يكون ورا بعض الحروف يعني
ممكن تشيلي جد ما بدك منهم الباقي اللي بيظل هذا
بنسميه sequence لكن هل يُعقل أن يجي N بيه
sequence؟ لأ، عمروش بيجي الـB الـN قبل الـB فإذا
أنت ماشي بنفس الترتيب إلغي مين ما بدك وخلي مين ما
بدك اللي بيظل معك هذا هو الـsequence طبعا جد ما
بدك بتعملي sequence هنا في الكلمة هي باختصار الـ
sequence تمام بدي مجرد مصطلحات لازم يكون إيش احنا
عارفينها لأنها هتمر معانا في الكتاب ممكن يقول
prefix كل شوية للـstring يقول suffix للـstring
يكون يفهمها إيش بنقصده طيب الآن تعالوا للأشي المهم
الـoperations on languages الآن في عمليات احنا
بنعملها على الـlanguage وبتطلع لي مجموعات أو sets
من الـstrings لكن في الأول لازم أعرف شلون هو
العمليات هذه اللي بتنعمل زي إيش وهذه مرة وعالية
أخدناها كثير قبل هيك في المدارس وفي الجامعة تعالى
نشوف العمليات الرئيسية الموجودة أول عملية مرت
علينا قبل هيك الـunion الإتحاد لو أنا عندي مثلا
المجموعة L هي عبارة عن a b c مثلا وعندي المجموعة M
هي 1 2 3 مثلا لما نيجي نقول الاتحاد M
هتقولي لي سهلة هتقولي الـA و الـB و الـC و الـ
1 و الـ2 و الـ3 والترتيب هنا مش مهم
يعني أقول الاتحاد M والله M اتحاد L في النهاية بدك
تحط كل الـL عناصرها في مجموعة وتحط في نفس
المجموعة كل عناصر الـM فهذا الاتحاد ما فيش فيه
مشاكل سهل جدا وأخدناه وأزيجنا منه طيب هذه بس
عملية رئيسية هتضل تمر معايا العملية الثانية
الرئيسية اللي بتكلم عنها اللي هي الـconcatenation
إيش الـconcatenation اللي ممكن تتبريها زي عملية
الضرب أو إنه بنلزج الحروف مع بعضها نشوف كيف الآن
على فرض إن الـL زي ما قلت قبل شوية هي عبارة عن AB
مثلا ونبنى نعتبر إن في عندي أنا مثلا الـD هي 1
2 الآن إيش بتتوقعي المجموعة L في D هتقولي لي L
في D A1 A2 B1 B2 هي كل عناصر L في D شوفتي كيف هذه
concatenation لكن طب لو عكسنا D في L بختلف بتصير إيش؟
1 A 1 B 2 A 2 B طب قداش عدد عناصر L
في D 2 في 2 عدد عناصر هذه في عدد عناصر هذه
صح ولا لأ؟ والعكس صح D في أي عناصر هذه في أي
عناصر هذه طيب إيش الـL تربيع تساوي؟ الـL تربيع
تساوي يا بنات L في L يعني شو بتطلع؟ A B B A B B
باختصار صح؟ وبقدر أنا أقول إن الـL تربيع بيه
كل الكلمات المكونة من حرفين من A وB اللي ممكن تخطر
على بالكمش هيك؟ يعني وصف ثاني غير الوصف اللي أنا
كتبته هان يعني أنت ممكن تقوليلي هي عبارة عن a a أو
a b أو b a أو b b صح؟ مش هيك ممكن تقوليلي لكن لو
أنا وصفتك وقلت لك كل الكلمات اللي ممكن تخطر على
بالك من حرفين يا a يا b مش هي نفس الوصف اللي هان؟
باختصار طيب إيش رأيك لو عملنا الـتكعيب يعني الـL في
الـL في الـL يعني ضربت هذه كمان مرة في الـL هتقولي لي كل
الكلمات اللي من تلت أحرف اللي هم من A أو B ممكن
أنا أعملهم ب ب ب أ أ أ أ ب أ زي ما بدك كل الكلمات
اللي ممكن تخطر على بالك من تلت أحرف صح ولا ده؟ طيب
الـfour
كل الكلمات اللي من أربع أحرف اللي مكونة من A أو B
طيب لو أنا ضفت على C وقلت لك بدي L4 هتقولي لي كل
الكلمات اللي من أربع أحرف اللي من .. من أربع حروف
عفوا اللي هم ممكن يكونوا A أو B أو C أي كلمة تيجي
على بالك من أربع حروف مكوناتها A أو B أو C بتكون
جوا المجموعة هذه ماشي الحال طيب الآن تعالوا
إذا إذا وضحت موضوع الـconcatenation كيف بيشتغل
ووضح موضوع الـunion كيف بيشتغل سهل أو لا؟ طيب
إيش رأيك في الـclosure؟ هاي هاي شكلها
النجمة يالا تطلعي وقولي لي إيش معناها؟ الـ
closure إيش معناها؟
أنا كلامي واضح لما نجي نقول لك النجمة اصوفيلي الـ
language اللي بتطلع شو هي؟ إيش يعني الـنجمة؟
يعني الـL وبعدها إيش؟ هي أنا عندي a,b,c الـL بدي
الـنجمة إيش
ال language اللي بتطلع من ال نجمة؟ كل
الكلمات
يعني كل الكلمات المكونة المتكونة من ABC طيب كويس
تعالي نضغط على Epsilon طيب تعالي نشوف تعالي نشوف
القصة سهلة خالص الآن هي بتقول النجمة عبارة عن إيش
النجمة اتطلعي هنا النجمة هي عبارة عن L0 اتحاد L1
اجرهامش الـ I بتبدأ بالـ Zero و بتمشي لـ Infinity و
حاطة الـ I هنا يعني باختصار هذه معناها الـ L closure
هذه الـ L نجمة معناها L0 اتحاد L1 اتحاد L2 اتحاد L3
اتحاد .. بضلي ماشي لغاية وين؟ infinity يعني بالعربي
أنت بتجيبي هاي و هاي و هاي و هاي و هاي و هاي و هاي
و هاي و هاي و هاي و هاي و هاي و هاي و هاي و
هاي و هاي و هاي و هاي و هاي و هاي و هاي و
هاي و هاي و هاي و هاي و هاي و هاي و هاي إيش الـ L1؟
الـ A لحالة الـ B لحالة الـ C لحالة إيش الـ L2؟ كل
الكلمات اللي من خانتين من A وB وC إيش الـ L3؟ كل
الكلمات اللي من تلات خناهات من A,B,C إيش الـ L4؟ كل
الكلمات اللي من أربع خناهات طب أنت هتظهر لماشي لـ
L5 و L6 و L7 لغاية L Infinity إذن الخلاصة إن الـ L
closure هي كل الكلمات اللي ممكن تخطر على بالك
وتتشكل من الـ A,B,C باختصار شوفتي كيف؟ بما فيها طبعا
الـ epsilon الـ epsilon موجودة طيب إيش رأيكم في الـ L
plus؟ يعني لو كان كاتب هذه الـ L plus بدون epsilon
أيوة بدون epsilon بتصير بدون هاي يعني ألف ألف يعني
ألف إتحاد ألف تربيع .. يعني باختصار شيل الـ epsilon
من المجموعة بتصير الـ L plus طبعا هو متى بيحط الـ L plus
لما بيكون على الأقل بيشوف letter أو character أو
أكثر لكن طول ما الـ L نجمة وارد جدا ما يكونش الكلمة
موجودة و يكون فراغ إذا هو بدوش فراغ يشوفه على
الإطلاق بيحطش الـ نجمة و يحط الـ L plus بعدين في ملاحظة
صغيرة إيش رأيكم في هذه؟ لو عملنا زي كده يا بنات الـ L في
الـ L نجمة مش هي الـ plus لأن الـ epsilon اللي كانت هنا
بنضرب فيها اللاطل فبتروح يعني لما أنا أقول a في
epsilon إيه؟ إيه في فراغ؟ إيه؟ مش هيقولها لأ إذا
ها هي equivalent للي تحت يعني لو أنا جبت الـ L نجمة
و ضربتها في الـ L هي نفس الـ L plus صح هذا ده طيب إيش
رأيكم لو عملت هيك يا بنات لو قلنا الـ تربيع في الـ D إيش
ال language اللي بتطلع من هاي؟ و هاي الـ L و هاي الـ
D الـ كلمات اللي بتتكون من حرف A تروفها A أو B أو A1
شوفي أنا باختصار وصفكم بده يكون دقيق أنا ممكن أقول
هذه عبارة عن إيش كل الكلمات اللي من تلت خانات بحيث
إنه أول خانتين أحرف ABC و آخر إشي digit اللي هم الـ
digit اللي هم يا واحد يا اتنين في الحالة تبعتي
شفتي كيف؟ فبأي طريقة أوصفي لكن وصفك بيكون كامل
و دقيق الآن طب لو أعمل زي هيك الـ .. دي .. الـ .. دي
.. إيش الـ language اللي هتطلع؟ من أربع خنات ..
هتقوليلي أيوة كل الكلمات اللي من أربع خنات على
أساس أن يكون letter بعدها digit بعدها letter بعدها
digit شفتي كيف؟ باختصار تكتبي للقصة هاي طيب لو
قلنا الـ .. تلاتة دي اتنين كل الكلمات اللي بيبدأوا
طبعا من خمس خنات بيبدأوا برقمين يا واحد يا اتنين
و بيخلصوا بتلات أحرف حسب الـ combination موجود ABC
شفتي كيف؟ إذا إيش احنا بنلاحظ؟ بنلاحظ إنه من
العمليات التلاتة هدول الأساسيات أو الأربعة هدول
صار يطلع عندي language صار يطلع عندي وصف شوفتي كيف؟
يعني لما أنا أجي أقولك دي اتنين التكعيب هذا وصف لي
language فيها strings و إيش أنا حددتها؟ كل الكلمات
من خمس أحرف أو من خمس خنات و بديهم يبدوا بيش
بـ أرقام خمس خنتين و يخلصوا بإيش بـ Plotters اللي هم
أنا محددهم اللي هم مين ABC فشوفتي أنت كيف الآن كل
عملية بتطلع language اللي حلو في الموضوع إن الـ
tokens تبعتنا هنقدر نوصفهم بس من خلال عمليات هدول
الـ combination من هدول يعني أنا مش هحتاج عمليات
كتير أنا كل بس اللي بدي أعرفه الـ union أو الـ or
الاتحاد الـ concatenation و الـ closure سواء
positive أو clean closure هاي بس اللي بنلزمونيه
هدول العمليات هم اللي هيصيروا يكوّنوا المعادلة
اللي بنسميها regular expression و هدول هم اللي
هيقدروا يعملوا الـ definition للـ token اللي أنا
بديه و هذه هشوفه تباعا شوية شوية في محاضرتي اليوم
إن شاء الله بس هيك بديت تلاحظي إنه بدت تطلع وصف من
خلال الـ operators اللي قاعد أنا أستخدمهم طيب
تعالوا نشوف الأمور بشكل أفضل تعالوا ناخد مثال كويس
إيش بيقولك المثال بيقولك اعتبري الـ letters اعتبري
الـ L اعتبري الـ L هي المجموعة إيش حطته هو إيش حطت الـ
L؟ كل الحروف اللي بالإنقليزي الـ small و الـ capital
من A to Z مش هيك، هي فرضت، جالها ترضي الـ letter L
هي A أو B أو C أو D أو Z أو A لغاية ما عاملهم كلهم
و تفرضي يجالك الـ D طبعا هيها بس مش كاتب أنا كامل
عشان بدي أبين هذا في التسجيل الـ D جالكي تفرضيها
إيش؟ صفر، واحد، اتنين، تلات، غير التسعة، خلاص؟
الآن تعالي بدأ يسألك، هاي المثال الأول، بيقولك إيش
المجموعة اللي هتطلع من الاتحاد D؟ هتقوليلي مجموعة
واحدة فيها كل الـ small و الـ capital letters و
يضاف عليها كل الـ digits اللي عندك من صفر لتسعة،
هاي الاتحاد دي، باختصار طب كام عنصر فيها؟ هتقوليلي
26 زي 26 زي 10 لأن الـ capital 26 و الـ small 26، 52
و عندك من صفر لتسعة عشر يعني 62، هاي باختصار، إذا
الـ L اتحاد D هتطلع لي كل الحروف الـ small و الـ
capital و الأرقام مع بعض في مجموعة واحدة هذا لو
بدنا نقل التحدي طب تعالي نشوف المثال اللي وراه إيش
بيقولك بيقولك طب شو الـ L في D إيش رأيك إيش الـ L في D
بتطلع إيش الـ L في D
أوّصفي ليها بدك تدلّ زي هيك تعمليه واصف أنه يغطي كل
المجموعة من خانتين الأول letter و تاني digit من
خانتين الأول letter و تاني digit من خنتين الأول
letter و تاني digit من خنتين الأول
letter و تاني لأنّه A0A1A2 لغاية A9 B0
وحط جالبيهم كلهم فبتاخد 52×10 يعني 520 طيب هذا لو
عملنا الـ L في D طب مبارك لو عملنا D في L
من الخنتين لكن تبدأ بـ digit ثم تنتهي بـ letter
شوفتي كيف فهذه طلعت language هذه الـ concatenation
طلعت language فأنا قاعد الآن بوصف الـ language عشان
هيك هتصيري تشوفي بعديك أسئلة كتير لو بدنا نوصف الـ
language الفلانية إيش الـ regular expression اللي
بيوصفها أو الـ regular expression اللي موجود إيش الـ
language اللي بيطلعها شوية شوية هنشوف أسئلة زي هيك
طيب تعالي نكمل إيش الـ L four كل الكلمات اللي ممكن
تخطر على بالي من أربع خنات أي كلمة تيجي على بالك
طبعا كل الحروف داخلة الـ capital و الـ small لأنّه حط
الـ L مش زي ABC قبل شوية حط كل الحروف الـ capital و
الـ small الـ L فلما يقول لي L for يعني ألف ألف ألف
L يعني كل الكلمات اللي ممكن تخطر على بالي من أربع
خنات أو من أربع أحرف زي ما بدك small و capital طيب
تعالي شوية ركزي في هذه هذه أكتر من operation مع
بعض هي طلع هذه عملت تلاتة مع بعض أوليش عمل اتحاد
و عمل closure وضرب في L تعالوا نشوف إشي يطلع معانا
لما نعمل اتحاد كل الحروف الـ capital أرقام صار في
مجموعة الـ closure كل الكلمات اللي ممكن تخطر على
بالي من الأرقام و من الحروف بما فيها الـ Epsilon
و لمّا ضرب في الأول L يعني لازم تبدأ بـ L ثم letter
or digits و لحظة هذا بدأ تعريف الـ ID يعوصله إيش الـ
ID؟ الـ ID كل الكلمات اللي ممكن تخطر على بالي تبدأ
بـ letter followed by letter or digit صح ولا لأ
فالآن هاي صارت ID تعريف الـ ID ليش؟ لأنّه لما جال
الاتحاد دي إيش عمل؟ حط كل الحروف والأرقام في
مجموعة، مش هيك؟ و لمّا عمل لهذه closure يعني جالت
كل الكلمات اللي ممكن تكوينها من هذه الحروف
والأرقام، صح؟ ولما ضرب الـ L في الأول راحت الـ
epsilon طبعًا لأنه ضربت في الـ L فصارت معناه كل
الكلمات اللي تبدأ بـ letter followed by letter order
شفتي كيف؟ بس من هاي من عملياتها دو وهذا فعلاً تعريف
الـ ID واحدة هتقولي طب في الـ C الـ ID تعريفها بيبدأ
بـ underscore صح؟ كيف نعدل؟ هتروح تضيفي على الـ
letter underscore فبيصير ليش؟ مسموح تبدأ بـ
underscore وبعدين يبين جد ما يبين underscore بس
كل حتسوي تروح مجموعة الـ letter عشان تضيفي على
الحروف underscore لو بدك تعمليها للـ C أو للـ Java
okay طيب إيش رأيك بالـ D plus؟ ماذا يظهر دي plus؟ كل
الأرقام التجارية ممكن يخطروا على بالك المكان من
0 لـ 9 صح؟ 125 .. 625 .. 30 .. 300 .. 1600 .. اللي
بيخطروا على بالك جد ما بدك خانات عارف لو أنا اعتبرت
الـ D من 1 لـ 9 وقلت له بدي D زائد بيصير الـ 109 غلط
مش في الـ language ليه؟ لأنه أصلاً مافيش zero في
المجموعة كيف طلعت الـ 109؟ فبتصير الـ 109 برا لكن
لأنه فارض هو كل الأرقام بالصفر معناها خلاص كل
الأرقام اللي كنت تخطر علي بالك بالصفر وبالواحد و
الاتنين لغاية التسعة هذه هي الـ D plus طبعًا هل
الإبسيلون الموجودة؟ الإبسيلون مش موجودة لأنه هنا معناه
بفرضي لازم أشوف على الأقل خانة عارفة لو أعملها
نجمة؟ بنفس الأرقام التجارية بالإضافة للـ epsilon، هاي
باختصار طيب، الآن بعد ما عرفتم أنتم العمليات
الرئيسية بدأ يدخل على مفهوم إيش الـ regular
expression الحلو في هذا الدرس والسهل في هذا الدرس
أن احنا مش هنطلع عن العمليات الثلاث هدول اللي هم
الـ union والـ concatenation والـ closure مش هنطلع
عنهم يعني أي regular هتكتبيه خليط من هدول الـ
closure مع الـ concatenation مع الـ union وبالتالي
سهل السيطرة عليه الموضوع هذا مش صعب كثير تمام طيب
تعال نشوف إيش بقصد هنا بالـ regular هاي بدا يكتبلك
المثال اللي اتكلمنا عنه توه اللي هو إيش قال لو
بدنا نعمل للـ ID تبع الـ C أو الـ Java قال الكل اللي
هيصير أنه طبعًا لاحظي الـ union استبدلناها بإشارة الـ
or هيك شكلها في الـ regular الـ union هي عبارة عن
إيش؟ الـ or هذه ما هي نفس المعنى تمام؟ الآن إيش
بقصد letter underscore؟ هذه اسم جديد يعني مش كانت
قبل شوية كنا نكتب هيك يا بنات letter تساوي كل
الحروف مظبوط الأهم تضيف الـ underscore فسمها غير
الاسم عشان يميزها عن اسم السبب فسمها letter
underscore بس يعني عشان يقول لك أن هذه المجموعة أنا
ضفت لها الـ underscore بس هي كل الفكرة فهذا اسمي
جديد فجالك الآن هيك الـ ID بتعرف بتاع الـ C ليش؟
لأن letter هذه underscore كاسم اللي فيها الحروف
capital و small و underscore عملنا لها or أو union
مع من؟ مع الأرقام وعملنا للاتنين كلهم closure إيش
بيطلع هنا؟ كل الكلمات المكونة من أحرف و underscore
وأرقام ولما راح ضرب في الأول بالـ letter معناها
إيش؟ لكن تبدأ بـ letter أو تبدأ كمان بـ underscore
لأنه مسموح بالـ C وبالـ Java يبدأ بالـ underscore
عادة لو مش مسموح يبدأ بالـ underscore وفقط الـ
underscore يبين في النص بحطوه في مجموعة الـ letter
بحطوه في مجموعة الـ digit خلاص إنه هذا خليت في النص
مثلًا شوفتي كيف؟ لكن لأنه مسموح نبدأ بيه فصار يعامل
معاملة الـ letter فراح حطه في مجموعة الـ letter وقال
لك خلاص لازم أدره في الأول letter طيب ده سألك
السؤال هيك افتراضي يعني لو هذه أنا قلتها في الآخر
إيش بيصير؟ بيصيرش تعريف الـ ID بيصير كل الكلمات
اللي تنتهي بـ letter لكن ممكن تبدأ بـ digits ممكن
تبدأ بـ underscore ممكن تبدأ بحروف لكن خلاص صار
المقياس أنها تنتهي بـ letter مش هيك تعريف الـ ID
احنا في الـ ID لأ لازم تبدأ بـ letter عشان هيك احنا
حاطيناها في الأول فماشي فتكونوا بتبقوا للقصة هذه بدا
في الكلمة نفسها كثير في الـ .. أكثر من underscore و
ربعين؟ آه ممنوع في الـ .. في الـ .. في الـ .. في
الجامعة تكتب underscore زي ما بدك؟ لأ مش ممنوع
يبقى مسموح شوفتي كيف؟ خلاص، صارت ضمن الـ language لأن
هذا بدو يوصف الـ identifier المهم الحلو في الموضوع،
هاي النقطة اللي أنا بوصلها أن أنت الآن وضعتي تعريف
للـ ID من خلال إيش؟ من خلال معادلات رياضية نسميها
regular expression بتتضمن إيش؟ بتتضمن يا or، يا
concatenation، يا closure، بس الحلو الآن في
الموضوع أن كل الـ tokens بقدر أوصفهم وهذا هشوفه
كمان شوية كأمثلة بس أمضي وأصبح لك الفكرة تمام؟
لحدها ما في مشاكل؟ طيب خلينا الآن بس نشوف ..
بنا ندروني لو سمحتوا خلينا نشوف الآن بعض القوانين
الخاصة بالـ regular expressions نحاول بس نستوعبها
أشياء لنشوف طبعًا إيش بقول لك؟ أول قانون هنا إيش
بقول لك؟ طبعًا على فرض إن الـ R هو عبارة عن regular
expression R تمام؟ طبعًا ممكن يكون كل المعادلة اللي
كتبناها قبل شوية الـ or digit closure هذا مش اسمه
regular expression هذا ممكن كله على بعض يكون إيش؟
R فالـ R تمثل regular expression طبعًا هذا برضه إله
إيش؟ language مش هذا إله language تمام على فرض أن
الـ S هو عبارة عن regular expression آخر مثلًا يكون
الـ S مثلًا الـ for مثلًا هذا regular expression وهذا
regular expression الآن بيقول لك إيه؟ بيقول لي طبعًا
لما أعمل بناتهم or صار في عندي regular expression
ثاني جديد مكوّن من regular expression الأول مع
الثاني مش رابطهم بـ or يعني وكأنه جبت هذا regular
expression الأولاني وجبت الثاني ورابطهم بـ or
فكأنه صار سؤال جديد صار regular expression أكبر و
بالتالي هيكون له language مالها ثانية جديدة صح
ولا؟ عادش بيقول القانون بيقول لو أنت عارف الـ
language بتاعتي الأول وكنت عارف الـ language بتاعتي
الثاني خلاص اعمل اتحاد للـ languages في بعض بيطلع
نفس الجواب اللي كنت أنت حاططلعيه بعد الاتحاد يعني
ما فيش داعي ارجع أفكر في السؤال من جديد إذا أنا
عارف هذا regular شو language وهذا regular شو
language والمطلوب regular جديد or الاتنين خلاص
الجواب هيكون هو language هاي و language هايبينهم
or شوفتي كيف؟ يعني ما فيش داعي تعيدي التفكير من
جديد إذا كنت عارف الـ language الأول وعارف الـ
language الثاني بس روح إيش سوي فيهم اعملينهم or
هذا بس بشرط تكون رابط الـ regular تبعتهم بـ or طب
ماذا لو رابطهم مع بعض الـ regularين هذول الـ
concatenation يعني مسكت الأولاني وضربته في الثاني
نفس الفكرة لو أنت عارف الـ language الأول الـ
language الثاني ضربهم في بعض بدي أدرك يان وقانون
طب لو هدول مش عندي خلاص بشتغل عادي بعمل regular
جديد وبفكر فيه إيش الـ language اللي بتطلع لكن لو
عندي عارف language هاي وعارف language هاي وكل
قصتنا أن regular الجديد هذا ضرب هذا قال لك نفس
الجواب هيطلع لو مسكت الـ language الأول والـ
language الثاني وضربتين في بعض واضحة؟ طيب طب لو
أخدنا له closure يعني أنا عندي مثلًا الـ four وأخدت له
closure إيش النتيجة؟ قال الـ language دا هاي
خديله closure باختصار شفتي كيف؟ طيب لو عندي مثلًا
الـ four وحطيتها بين جثين اتغيرت الـ language؟
الشيء؟ عشان هيك إيش بقول إيه؟ بقول أن حط الجثين
ما اتغيرت الـ language دلت نفس ما هي بس في هاي
الأربع قوانين اللي بديك تاخدي بالك منها إنه لو عملت
oring هي نفس الجواب لو عملت oring للـ languages إذا
عملت concatenation هي نفس الجواب لو عملت
concatenation للـ languages إذا عملت closure هي
نفسها لو عملت closure للـ language حطيتي أجواس مش
هتفرق هي نفس الـ language هي باختصار بس بيدوّخلك
هذه القوانين واضح؟ طبعًا لو الـ language مش عندي في
الأساس خلاص بشتغل عادي بعمل regular expression
كبير بفكر فيه إيش الـ language اللي هتطلع الآن تعال
نشوف في شغلة ثانية مهمة في القوانين مبدأ الأولويات
مين له أولوية أكثر الآن أنت عشان تقدر تحفظيها
بسهولة تخيلي الـ or كأنه جمع وتخيلي الـ concatenation
كأنه ضرب وتخيلي الـ closure كأنه إشارة الرقم minus
أو زائد مين أعلى أولوية لإشارة الرقم؟ يعني الـ
closure مين أقل منه أولوية؟ الضرب الـ concatenation
مين الأقل خالص أولوية؟ الـ or أو الجمع لكن مين
الأعلى من الثلاث هدول؟ الأقواس، ما تنسيش الأقواس
highest priority خلاص لن ننسى طيب الآن بناء على هذا
الكلام لو كتبنا حاجة هو زي هيك زي هذه A or B نجمة
C مين هيتنفذ في الأول هل ال A و ال B هيخلصوا و
closure وبعدين يضربوا في ال C و لا مين هيعمل في
الأول؟ closure ال B في الأول هيضربها في ال C في
التاني و بعدين هيضيف عليها ال A شوفتي كيف؟ طيب لو
أنا حاطط أقواس زي هيك يا بنات أيوة A مع B في الأول
بعدين closure بعدين في ال C فبتكتب الأقواس أعلى
أولوية بدون الأقواس الأولوية الأعلى لل closure طيب
سؤالي لكم طبعا هنا الأقواس يا بنات مالهاش لازمة
ليش؟ لأن هو بده في الأول closure وبعدين بده
concatenation وبعدين بده or فجالك فاش ده على
الأقواس لأن الأولوية بتظبط المطلوب هذه بس ملاحظة
صغيرة طب سؤالي لك شو ال language اللي هتطلع من هيك
إيش ال language اللي بده تطلع من هذا ال regular
expression؟ language B، language C، language C بدي
إجابة تكون تغطي الكل، كويس، إجابة صحيحة، إيش ال
language؟ إيش
يعني closure تبع B؟ يعني zero or more B's followed
by one C ويضاف على المجموعة A يعني أنا لو بدي
أجاوبها بقول أن كل الكلمات اللي بيجي فيها zero or
more bees followed by C تمام ويضاف على المجموعة A
أنت خرفت في طريقة الوصف أصفه باللغة اللي بدك إياها
المهم لازم وصفك يكون كامل شامل ما تنسيش الشيء طبعا
ليش ال A ضيفتها على ال B لأن هذه or مش هذه or يعني
ال A هذا إنصر موجود في المجموعة زائد ال B نجمة C
مش هيك؟ إيش ال B نجمة C؟ يا zero B وراها C يعني C
لحال أو بي واحدة وراها C أو بي ثاني وراها C فاحنا
لماشي اختصرنا قولنا Zero or more bees followed by
C زائد ال A هيك أنا بكون وصفة كل اللي في المجموعة
الـ A مش هتفرق .. هذه set .. ال set يا بنات مش مهم
الترتيب في المجموعة صح؟ لما أنا كنت أقول it's a
letter or digit مش هيفرق و أنا أحط ال letter و ال
digit جوا المجموعة، لكن لازم يكونوا جوا المجموعة
فأنا مش هتفرق معايا ال A في النص، في الأول، في
الآخر، هذا مش continuation المهم أنا بدي أوصف كل ال
strings اللي بيطلعوا في المجموعة كيف وصفتهم بقول
كل الكلمات اللي ممكن تيجي على بالي zero B or more
followed by C ويضاف على المجموعة هذه ال A شوفتي
كيف أنت حرة كيف توصفيها تعالي تشوفي كيف وصف هو you
know the set of string a single A عشان يخلص من هاي
or شايفة أنه هيضاف عليها zero
or more bees followed by one C شفتي كيف كله صح طب
لو واحدة اجت توصفهاش تقول ال A لحال أو ال C لحال أو
one or more bees followed by C برضه صح لإن أنا
قلت one or more bees followed by C يعني بيه C بيه
بيه C صح؟ بس ما نسيتش أضيف ال C لحال و ال A لحال بس
أنا مش هعمل زي هيك بقول zero or more is .. zero or
more b is followed by c خلص كل الشق هذا و أضيف
عليه ال A المهم الخلاصة دائما في الأسئلة دي يا
بنات لما يقولك إيش ال language بتطلع لازم كلامك
اللي تشرحيه يغطي كل ال strings اللي جوا لو نسيتي
حاجة غلط تبقي تنتبهي على القصة هذه يعني لو زمان
توقفنا في المثال هذه واحدة أجد قالت المجموعة A أو
one or more Bs followed by C و سكتت بقولها غلط
لأنك نسيتي الـ C لحال لأنه إيش يعني one or more بيه
بيه C بيه بيه C لكن نسيت أنه ممكن يكون Epsilon
Epsilon في C C لحال فهي لو ضافت على كلامها و C
بسكت بقول خلاص غطت كل المجموعة فأنت مخيرة كيف توصف
هذه أكثر من صيغة صحيحة لنفس السؤال شفت كيف؟ طيب
الآن برضه هذا مثال ثاني لتأكيد على موضوع ال
regular expression و تأكيد على القوانين اللي قبل
شوية بقولك لو بدنا هذا regular expression A or B و
هذا A or B إيش النتيجة تبع هذا كله؟ هتقوليلي
المجموعة A A, A B, B A, B B مش هاي بتطلع A, B وهذه
نفسها A, B اضرب المجموعين في بعض صح ولا لا؟
فهتقوليلي A A, A B, B A, B B صح ولا لا؟ ولو أنت
عندك ال language تبع التهادي شو ال language تبع
التهادي؟ A, B صح؟ شو ال language تبع التهادي؟ A, B
لو ضربت ال languages في بعض نفس الشيء مش فيه
توقعناه قبل شوية أخذناه أنه لو ضربت ال language
تبع الأول في ال language تبع الثاني بيطلع نفس
الجواب مظبوط أنا لأ طيب خلّيني
نشوف A نجمة إيش معناها؟ zero or more A يعني يا ولا
A ابسلون يا اتنين ثانية تلاتة طيب A plus لازم على
أقل A واحدة فأكثر طيب إيش ال A or B نجمة؟ كل
الكلمات اللي ممكن تخطر على بالي من A و B بغض النظر
على طولها شيك؟ أول حاجة طبعا أول حاجة مظبوط ..
مظبوط طيب و هي هو بديكي تطلع إيه هنا بيعطيكي مثال
عليها شايفها؟ بديكي .. قبل ما يشرحها بيعطيكي مثال
بيقولك epsilon أو A أو AB بديكي تشكليها و بعدين
بقولك خلاص كلام اللي يوصف كل ال language واضح؟ طيب
السؤال اللي برا إيش رأيك في هاي؟ خدنا زيها قبل
شوية A أو zero or more is followed by B خلاص ما قلت
A أو zero or more is followed by B فاير شفت؟ آه مش
هت .. مش هت .. لأ ليش ممكن تجي B لحالك هذه تبريها
zero epsilon في B بيف ممكن تقولي A أو B أو one or
more A's followed by B أو تقولي A أو zero or more
A's followed by B كله صح تمام فهيو تعال شوف شو
كاتب كيف يصفها that is the string A عشان يخلص
منها and طبعا إيش all string consisting of zero or
more is and ending in B طبعا المفروض ما يقولش end
المفروض يقول or لإن A أو ما يقولش end الصح يقول or
ماشي الحال لإن يا A أو zero or more is followed
by B ماشي الحال طيب
بمشي، المهم أنه في المجموعة لازم يكون في إيه، هي
اللي بيقولوا إيه ثم zero or more is for the binary
زي ما بدي أجيبها طيب تعالوا نشوف بعض القوانين
المهمة أيضا on your expression بنات و دول لو
سمحتم أول شيء بيقول لي ال or هو Commutative
يعني لما أنا أقول R or S هي نفسها S or R لأن أنت
بتحط كل عناصر R وكل عناصر S في نفس المجموعة مش هي
ال union فمش هيفرق فيها الترتيب وبالتالي R or S هو
نفسه S or R فهي Commutative طيب هل هي Associative
يعني لو بدي أعمل R or S or T بيفرق معايا أخلص R مع
S بعدين T و لا S مع T بعدين R و لا R مع T بعدين ..
مش هيفرق أنا في النهاية بدي أحط R و S و T في نفس
المجموعة، صح؟ فمش هتفرق أني بخلصت R و S و بعدين
إيش أضافت T أو خلصت S و T و بعدين أضافت R، مش
هتفرق و بالتالي ال union أو ال or هو برضه
Associative، تمام؟ طيب تعالوا نجرب ال
concatenation أول شيء ال concatenation Commutative
ولا لأ؟ يعني هل R في S هو نفسه S في R؟ لأ، في
الضرب بتفرق، لما أقول letter في digit، غير digit
في letter، وبالتالي هي مش Commutative طيب نيجي لل
Associative لما نقول مثلا R بدي أضربها في S و بدي
أضربها في T هل بيفرق أن أضرب R في S و أخلص و بعدين
أضيف عليهم T عن أن أضرب S في T و بعدين أضيف فيهم R
من الأول؟ طبعا بيفرقش طول ما في نفس الترتيب
بيفرقش أخلص مين في الأول يعني لو أنا عندي R S T W
بيفرقش معايا مين أخلص، خلصت T مع W، خلصت R مع S،
بعدين ضربتهم في بعض أو خلصت S مع T، بعدين دخلت
عليهم R، بعدين دخلت من الآخر ال W، مش هتفرق، هنوصل
لنفس النتيجة لكن زي ما قلنا هي مش Commutative، هي
Associative، عشانك لازم نفس الترتيب يظل، أن ال R
وراها ال S وراها ال T وراها ال W، ما نفعش نضرب
بالعكس فعشانك هو ما كتب عشان أنا إن أ Commutative
هو كتب أن أنا أ Associative إن مافي مشكلة طول ما
نفس الترتيب أخلص مين ما أخلص بظبط في الآخر نفس
الجواب طيب كمان معلومة مهمة Distributive زي تخيلي
R ضرب وهذه زائد بتوزع الزائد الضرب فهي نفسها يا
بنات R في S أو R في T فلو أنت جبت ال language بتاع
التهادي وجبت ال language تبع التهادي و بعدين جبت
ال language الكلية هي نفسها لو أخدت ال language
تاعة دول التنتين و ضربتيها في R نفس الفكرة فال R
في S or T هي R في S أو R في T نفس الفكرة بالعكس S
or T بدي أضربهم من ورا في R هي S في R أو T في R
شوفتي كيف؟ و لاحظي هنا دائما الترتيب بيحافظ عليه
لإن أنا مش Commutative بيظل الترتيب موجود لكنها
Distributed في مشكلة هنا طيب بعدين لو ضربنا في
epsilon مش هيتغير epsilon في R هي R في epsilon هي
R لحالها يعني A في epsilon هي A خمسة في epsilon هي
خمسة مش هتفرق طيب الـ R closure بتفرج معايا لو حطيت
معاها epsilon في المجموعة و أخدت الـ closure؟ لأ لأن
أصلا الـ R closure انطلع الـ epsilon طب إيش يعني
أضيفيها epsilon و أخدليك الـ closure؟ ما هي موجودة هيك
هيك موجودة فما فيش داعي يعني فبقولك هذه هي نفسها طب
هل هذه
هي نفسها إيه؟ طبعا غلط لأن هنا ضاف الـ epsilon لأن
ما فيش فيها epsilon هل هيفرق معايا أن أجيب الـ
closure مرتين عن مرة واحدة بيختلف يعني الـ R closure
closure غير الـ R closure ليه نفسها دي كانت للملة
النهاية فمش هتفرق فالـ R closure الـ R closure closure
الـ R3 closure كله زي بعضه هو في الآخر واحد لأنه
كان ماشي القانون للملة النهاية وضحتها أن في مشاكل
طيب، الآن تعالوا لها النقطة إيش مكتوب يا بنات؟
Regular Definition إيش تتوقع أنه يسوي الآن؟ الآن
بدي يوصف الـ token بشكل رسمي وواضح هو كل اللي قبل
هذا إيش كان يعرفك؟ إيش كان يعلمك؟ الصياغات الرياضية
الـ regular expression والـ operators والـ languages
اللي بتطلع لكن لحد الآن ما عملش ولا تعريف كامل ل
token مظبوط أو لا؟ بدي يبدأ من الآن يعرفك يوريكي
كيف نعمل التعريف فجالك عشان نعمل التعريف بيكون
بياخد هذا الصيغة هذا الشكل أنه باجي بقول مثلا الـ L
عبارة عن مثلا بعرفها AB شايفها هذه الصيغة شايفها
السهم إيش معناها؟ أن الـ L هي ها باجي أقول مثلا الـ
D مثلا 01 إذن مثلا بدي أعرف token من نوع أنه حرفين
باجي بقوله خلاص إذا الـ token اللي بديه T1 اللي أنا
بدور عليه الـ D مثلا token one مثلا هنقش الـ token
اللي أنا وصفته كل الكلمات اللي من حرفين تبدأ بـ A
أو B وتنتهي بـ 0 أو 1 لأنه ما حطتش كل المجموعة صح؟
مظبوط ولا لا؟ أو إذا بدك هي باختصار A0 A1 نفس اللي
أنا شرحته B0 B1 فهذا على بعضه كله إيش بنسميه يا
بنات definition أنه أنا استخدمت صيغة regular
expression وعملت definition لمين؟ للـ token فبتوقع
أي token بعد اليوم بدي أشوفه هشوفه على شكل
definition اللي هو الآن هناخد أمثلة نشوف كيف نصف
الـ ID كيف نوصف الـ number، كيف نوصف شوية شغلات،
شوفتي هذا الآن، هاي اللي أنا بدور عليه الـ
definition اللي ممكن الـ computer يفهمه لأن لازم
نعمل عملية systematic بعد هيك قولنا، تمام؟ طيب جبل
ما أروح أشوف الأمثلة اللي هناك، لو سألتك اعملي لي
definition للـ keyword if keyword
if سهم EGI concatenation مع FI وراها F
concatenation خلاص هيك أنا إيش عرفني؟ أن تعريف الـ KF
هي عبارة عن إيه؟ I وراها F مش هذه الـ concatenation
لو سألتك شو الـ language اللي هنا؟ شو الـ language
اللي بتطلع؟ أنا قلت ما فيش فيه إيه IF هاي الـ
language هاي الـ string اللي طلعت معايا اللي هي
تعريف مثلا keyword F لو ده عرفنا keyword them keyword
then لازم يجي T يجي H يجي E يجي N شوفتي كيف؟ ليش؟
لأن أنا لو سألتك ها أنا ها دي شو الـ language اللي
بتطلع؟ هأقول ما فيش language بتطلع غير then اللي هي
وصف لمين؟ للـ token then شوفتي كيف؟ طيب تعال نشوف
لو بدنا نوصف الـ ID اللي في لغة الـ C أو في الجامعة
تعال نشوف كيف نوصفها هي محلولة وسهلة
ركزوا يا بنات الله يعين نخلص نتأخرين كتير شوفوا
إيه الشامل الآن بدّه يحط هو وصف من الـ ID فأول ما
بدأ عرف letter قال الـ letter هي عبارة عن a or b or
z or b لكل الحروف or underscore عرف الأول الـ
letter بعدين إيش راح أعرف؟ الـ digits بعدين قال ..
قال إذا الـ ID اللي أنا بدور عليها هي الـ letter هذه
or الـ digit كل الـ closure أضربيها في الـ letter
underscore فلو جيت سألتك الآن شو الـ language اللي
بتطلع من هنا هتقولي لي كل الكلمات اللي بتبدأ بالـ
letter followed أو underscore followed by letter
أو digit or underscore اللي هو فعليا عرف مين الـ
ID في الـ C أو في الجامعة شوفتي كيف؟ الآن هدول
التلاتة مع بعض definition للـ token ID انتبهي مش
بالضرورة دائما يطلع سطور كتير للـ token هاي وهاي
شافها هنا ما طلعش غير سطر هنا ما طلعش غير سطر على
حسب طبعا نوع الـ token اللي عندك ممكن يطلع سطر واحد
ويعرفه وممكن تضطري لمجموعة من القصد اللي عبالك
تعرفي هذا الـ token طب هل يجوز أني ما أكتبش هدول
الاتنين واكتفي بهذا؟ طبعا لأ لأن إيش الـ letter اللي
أنت كاتبه؟ إيش هذه اللغة اللي طلبها؟ فلازم تكون
معرفة لي إيش الـ letter لازم تكون معرفة لي إيش الـ
digit صح ولا لأ؟ عشان هي كإجباري لازم أعمل التلات
سطور هدول إيش الـ letter؟ إيش الـ digit؟ إيش الـ ID؟
لأن الـ ID بتكون من اتنين هدول أما هنا لحظة خلاص
ما بديش إشي سطر واحد definition واحد خلصنا الـ F سطر
واحد خلصنا الـ then شوفتي كيف؟ فهي الحلو في الموضوع
أنه أنا أي token يجي على بالي سهل وصفه بالـ regular
expression والـ regular expression الحلو في الموضوع
ما فيش فيه غير تلت عمليات رئيسية أو combinations
منهم or concatenation و closure قال لك هدول بتجمع
بطريقة ما علشان أنا أطلع إيش الـ token هنا ما
استخدمتش إلا concatenation هنا استخدمت
concatenation و closure على حسب طبيعة الرقم ماشي
الحال طيب في أي سؤال قبل ما ناخد المثال اللي وراه
واضحة الأمور في حد مش فاهم إيش بنسوي؟
واضحة؟ طيب تعال نشوف المثال اللي وراه المثال اللي
وراه الصحيح يبدو ببين للوهلة الأولى أنه صعب شوية
لكن تعال نركز فيه ونشوف كيف نشتغله طبعا إيش بيقول
في المثال هذا؟ بدنا نعمل تعريف لـ token number بنعمل
تعريف للـ token number وطبعا لازم يوصف للـ number في
الأول علشان أعمله التعريف هذا الـ token أنت مسميه
number مش هو بس integer وخلاص بدنا نشوف طبعا هنا في
أكثر من صيغة وأكثر من شكل إيش بيقول لك الـ number في
الـ language هاي ممكن يكون 125 integer عادي هيك شكله
أو ممكن يكون 125.13
وممكن يكون 125.13 exponent الـ exponent مسموح مرات
في بعض الـ languages تحطيه كـ exponent وتحطي وراه
زائد أو ناقص أو ولا زائد ولا ناقص مرات بسمح لي زائد
أو ناقص و وراه إيش أرقام مثلا 15 هذا شايفاه كله هذا
number في بعض الـ languages مسموح أن نحط الـ
exponent هذه عبارة عن exponent الأس ممكن يكون يا
بنات زي هيك 1 2 5 بدون الكسر خلاص أجي
أقولهم 3 أي زائد أو ناقص أو ولا زائد ولا ناقص
15 فالآن عرفني كام صيغة مختلفة للأرقام يمكن
4 صيغة مختلفين أنه integer لحاله أو كسر لحاله أو
integer مع الـ E أو integer مع الكسر مع الـ E قال لي
الآن هيك شكل الرقم في الـ language الفلانية إيش
المطلوب الآن؟ المطلوب تعمل regular definition
بيوصف هذه الـ language طيب عشان نقدر نحل الأسئلة من
هذا النوع بسهولة طبعا أنت الوهلة الأولى تشعر أن
الموضوع صعب صح؟ والله شايفينه سهل كلكم بيبين أنه
صعب أنا هخليكي تحلي بسهولة الأسئلة من هذا النوع
الآن أنت جسمي الـ problem تبعتك زي ما بنقول دائما لـ
sub problems كيف؟ ركزي معايا إيش المانع أني بس أوصف
هاي لحال وأسميها N1 وأوصف هاي لحال وأسميها ..
قولولي صح ولا غلط أنا مفكر فيه .. وأوصف هاي لحال
وأوصف هي لحال وأنا بأقول الـ number هو in واحد or
in اتنين or in تلاتة or in أربعة إيش رأيكم في الحل
هذا في الأول انسوني حل الكتاب الكتاب شاطر وبحل
يعني أطوار احنا خلنا عجبنا الحل نوصل وهنوصل نفس
الحل تعال الكتاب طيب إذا واضح أن الطريقة هذه اللي
أنا كتبتها على الوصف سهلة جدا ليش؟ لأنه بس أعمل
الوصف لهذه، أعمل الوصف لهذه، مش هيك؟ وبعد ما أخلص
الوصفات الأربعة، مش هاي language وهاي language و
هاي language، كيف أحطهم كلهم في نفس الـ language؟
أبقر، نظيفة ولا لأ؟ طيب تعالوا نحصر تفكيرنا الآن
فقط في الأولى، هتقولي لي خلاص أول شي بعرف الـ digit،
مش هيك؟ اللي هم الأرقام، وأجي أقوله أنو هو D
plus مش هيك أنا كل الأرقام اللي ممكن تيجي على بالي
من نوع integer بكون وصفتها وخلصت في انوان صح ولا
لأ فهي نرتاح اتناش من أول شكل طب في الشكل الثاني
هتقوليلي بيجي أرقام بيجي dot concatenation وبيجي
أرقام هي خلصت الثانية مش هيك؟ مش بيجي أرقام
concatenation dot concatenation أرقام فخلصنا من
اتنين بسهولة طيب تعالوا لعين تلاتة اللي هي بيجي
أرقام بيجي dot بيجي أرقام مش هيك؟ بيجي الـ E
concatenation بعدين إيش بيجي؟ في غلط نعمل زائد أو
ناقص أو إبسلون عشان الـ E يجي وراها زائد أو الـ E
يجي وراها ناقص أو الـ E ما يجي ورا إشي مش هيك أنا
بكون وصلت لهنا إيش بيجي ورا هون أرقام مش هيك أنا
وصفت التلاتة أنه بيجيني أرقام بيجيني dot بيجيني
أرقام بيجيني الـ E ورا الـ E يا زايد يا ناقص يا ولا
إشي وراها أرقام آخر حالة اللي هي بدون كسرة بتقولي سهل
جدا بيجي أرقام بيجي الـ E ورا الـ E زائد أو ناقص أو
إبسلون عارفة لو كان في الـ language إجباري تظهر
الإشارة زائد أو ناقص بحطوش الـ إبسلون لكن لأنه
مسموح أنه يكون ولا إشي بحط الـ إبسلون ورا إشي يجي الـ D
plus خلاص و الـ D الأخيرة؟ السؤال خلصت و الحل صح
مافيش فيه إشي يعني دائما أنت زي ما قلت بصراحة القصة
إذا شفت حاجة جديدة زيك أول مرة و أكثر من حالة و
أكثر من case سهلة امسك الـ case الأولى لحالها و
التانية لحالها و التالتة لحالها و اجمعهم فوقها طبعا
الكتاب عمل فنيات زيادة كيف؟ شايفة هدول؟ عشان أوضح لك
كيف الكتاب بيشتغل اعتبري بس مافيش غير النوعين هدول
بس عشان أوضح لك الصورة مش أنت كنت هتقولي الـ num هو
الـ D plus or الـ D plus نقطة D plus خد الـ D plus
عام المشترك مش بتصير epsilon او dot شوفتي كيف؟
فممكن الكتاب تلاقي إيش صار من كلهم لما بيحطهم طب
خد هذه عامة مشترك، طب خد dot عامة مشترك، فممكن
توصلي بطريقتك لحل الكتاب، لكن أنا مش طالب هذا
الكلام، أنا بتحلي لك كيف حل الكتاب بشكل مباشر برضه
سهل حله الثاني، بس في الأول أن أنت في أسوأ
الاحتمالات بتحلي، مافيش إشي، مش مشكلة، شوفتي كيف؟
طيب تعالي نشوف نفهم حل الكتاب، كيف حل، كيف عمل،
تعالي نشوف الآن عشان تفهمي حل الكتاب بدي أمسح الحد و
أعيد الحل بس في الأول في حد مش فاهم أنا إيش سوينا؟
في حد عنده أي استفسار؟ عشان همسح وضحت؟ تمام؟
تمام؟ طيب خلينا الآن أوريكي كيف نحل الكتاب أركزوا
الكتاب إيش بيقول؟ وكلامه صح إيش بيقول؟ بيقول الـ
number لحظة معاي لازم يجي في الأول أرقام، صح؟ لازم
يجي أرقام، مش هيك؟ لكن، هل إجبار يجي نقطة أرقام؟
ولا .. ولا لا؟ فممكن يجي optional fraction، صح؟
إيش الـ optional fraction؟ يا dot، D plus، يا
epsilon، وممكن كنت تحطيها هنا، يعني تيجي تقولي،
إذا بدك D plus يجي وراها D dot plus او امسكه بس هو
الكتاب رايح لعصو حطها وين في optional وعوض عن
optional شوفتي كيف فليش انا بيقول optional لأنه قد
يأتي أكثر أو لأ طب إيش رأيك في الـ E برضه optional
exponent لإن هي هذا بيقول Exponent، صح؟ فممكن يأتي
أو ما يأتيش الـ Exponent كيف شكله الـ Optional
Exponent؟ كيف شكله؟ هتقولي لي زأجة الـ E زائد ناقص
إبسلون D plus أو كل هذا إبسلون، يا بيجي هذا كله،
يا بيجيش صح ولا لأ؟ وممكن كنت تعودي عنها مباشرة
فتعالي نشوف الحل كيفه، simple وسهل قال أولا الـ
digital لازم يعرفها بعدين قالت digits اللي هي هذه
بالنسبة لنا أنه لازم يكون فيه خانة لأنه لازم يكون
فيه رقم عشان أقول هذا number ما ينفعش يكون فرق عشان
هيك إيش راح راسه قال digit في digit plus أو إذا
بنتك اكتبيها في digit نجمة أو اكتبيها D plus
وخلصنا الآن إيش الـ optional fraction قال لك يا بيجي
dot أرقام يا ما بيجيش epsilon طب إيش الـ Optional
Exponent؟ يا تيجي الـ E وراها زائد أو ناقص أو ولا
إشي وراها digits يا هذا كله بيجي .. زي ما هذا كان
كله يجي .. يا إبسلون إذا الـ number الأخيرة عبارة
عن إيش؟ تعالي نشوفها آخر
إيش الـ number خنصة يا ربي مش خنصة آخر إشي إيش قال لك؟
قال لك أول إشي في الـ number في الآخر لازم يجي أرقام،
بظبط؟ بعد الأرقام إيش ممكن يجي؟ يا بيجي dot digits
يا خلاص it's epsilon مش أنت المفروض أنك تحطي هذا و
تضربي هذا فيهم فبيجي بعد الـ digits dot digits أو
هذه تنضرب في الـ epsilon فبتصفي هذه بدون هذه الآن
خلصنا من الـ optional هذه الآن مين بيجي وراها هون
اللي هو يا بيجي كامل الـ E وراه زائد أو نقص أو فراغ
وراه digits يا بيجي كامل يا بيجي ورا إبسلون بحيث
باختصار وبهيك أنا أعمل التعريف الـ number للـ
language اللي عندي هاي باختصار ببساطة واضحة؟ طبعا
هالطريقة هالطريقة أكتب زي هيك لو بدي خلاص أنا بدي
أعملها plus أريح دماغي و أجي أقوله بدي digit plus
و بديش أكتب هذه و بديش أكتب هذه كمان و أجي أقوله
dot digit plus أو epsilon و أجي وراها أقوله بدي الـ E
زائد ناقص epsilon digit plus هذا كله أو هذا كله أو
هذا كله أو epsilon هل غلط أكتبها مباشرة زي هيك؟ مش
غلط خلاص بقوله الـ digit يا بيجي epsilon يا بيجي
هذا، اعتبر يجي إبسلون، خلاص بيصير الـ digit على
طول لحاله، اعتبر يجي الـ dot و الـ digit plus، صار
هذا الكسر، الآن وراهم مين هيجي؟ يا إبسلون خلص
الرقم، يا بيجي كل هذا، شوفتي كيف؟ وفيش داعي أعمل
هذه و هذه، يعني أنا قادر أحسن الكتابة تبع الـ code
تبعي المهم لو سألتك الآن، شو الـ language اللي
بتطلع من هنا؟ لو سألتك، شو الـ language اللي بتطلع
من هنا؟ هتقولي لي كل الأرقام اللي بالصورة هاي الـ
integer أو الـ dot أرقام أو الـ exponent ولا هزاد أو
ناقص أو ولا حاجة أو أرقام يعني هذا اللي أنا أوصف
كامل لهذا طيب الآن عشان بس أنا أختم المحاضرة اللي
بس بدي عيد كتابة هذا الـ code بطرق اختصارات بدي
أعلمك إياها وفيه تلات شغلات للاختصارات هاي بدي أتعلمهم
و أعيد كتابته و أختم دقيقتين طلعوا معايا أول حاجة
إيش بقول لك أخذناهم أول معلومة بقول لك الـ
R في الـ R نجمة أو الـ R نجمة في الـ R هي نفسها الـ R
plus يعني هعيد كتابة اللي قبل شوية اللي أنا كتبته
بدل يحط digits في digit نجمة إيش حيصير يشير لهم؟
أنا حولتها بس الآن المثال هيحولها خلاص هذا أول
ملاحظة الملاحظة الثانية بقول لك بيقول لك في علامة
استفهام، هذا إيش معناها؟ أنه لما كنت أكتب زائد أو
ناقص أو إبسلون، هذا كيف هنصير نكتبها من أنه طالع؟
هنصير نقول زائد أو ناقص استفهام، معناه يا بيجي
هدول يا بيجوش مثلا لما كنا نكتب dot digit زائد
أو إبسلون، كيف هنصير نعملها؟ dot digit زائد استفهام
بس يعني الاستفهام أنه يا هذه اللي بتيجي يا الـ
epsilon فهي هذه ثانية عشان هنظبط الـ code اللي مكتوب
فيه آخر معلومة اللي بين الـ bracket زي هيك قال هد
إيش معناها A or B or C و هدول إيش معناها A لـ Z A or
B or C or Z عارفة لو شيلت الـ matrix هدول إيش بتصير
معناها A أو Z خلاص هي المعلومة اللي بيقولها فالآن
إيش بقول لك تعالي شوف كيف كتب المثالين اللي درسناهم
شايفة اللي قبل شوية الـ ID شوف كيف قعدت كتابته
شايفة
قال لك a لـ z بعدين تطلع يلزق فيها الـ a لأن هذا ار
معناها لأن صارت أن هذا bracket وبعدين كمل لـ z
بعدين إيش لزق فيها الـ underscore فهذه الصيغة ثانية
للكتابة قبل شوية الـ digit كيف كتبها؟ من zero
لتسعة، zero or one or two عشان بسرعة نختصر تعالوا
نشوف المثال الثاني اللي كتبناه بتاع الـ number الـ
digit zero لتسعة شايف الـ digits إيش عملها؟ digit
plus مافيش داعي يكتب النجمة في digit آخر حاجة
شايفة كتب digits وبعدين قال dot digits استفهام
يعني يا بيجي هذا يا بيجيش بعدين راح كتب هذا كله
اللي هو الـ E زائد ناقص epsilon digits كله يا
بيجي يا بيجيش والزائد و ناقص اللي جوا يا بيجي يا
بيجيش شوفتي كيف؟ بس قعد كتابة التعريف باستخدام
الاختصارات اللي اتكلم عنها بس مش أكثر مش إجباري
بالنسبة لي اللي في امتحان مش إجباري لو أخذتي فيهم
ما أخذتيش فيهم يعني لو كتبتي بالصورة اللي قبل شوية
it's okay بس هذه أريح لك و أسهل واضحة يا بنات؟ في
أي سؤال الآن؟ يعطيكم العافية هيك خلصنا محاضرتنا
اليوم إن شاء الله المرة الجاية إن شاء الله بنكمل