بسم الله الرحمن الرحيم اليوم يا بنات ان شاء الله
بدنا نستكمل ال pseudocode اللي أخدناه المرة اللي
فاتت و نحاول نعمله اليوم بال Java تمام؟ بس في
الأول قبل ما أروح على ال Java بدي أذاكرك إيش اللي
سويناه احنا كان عندنا translator بيحول من infix ل
postfix و قبل ما أعمله أي تعديلات كان هو عبارة عن
non-terminal اسمه expression و non-terminal اسمه
term مش هيك؟لجينا إن هذا ال non terminal تبع ال
exception في مشكلة ال left recursion في بداية
مكررة اللي هي نفس ال non terminal قبل السهم يبدأ
بنفسه بعد السهم وقلنا هذه تمثل مشكلة left
recursion بيصير في عندى infinite loop لازم أحلها
وقلنا عشان نحلها على القوانين اتغير شكل شوية ال
grammar فصار عندى حاجة اسمها exception ك non
terminal حاجة اسمها restمظبوط اللي هو ال R اللي
بنضيفها و حاجة اسمها term هذا ك grammar هذا ال
grammar الجديد اللي خلصناها المرة اللي فاتت الان
انا لما بدي اعمل بارثة كام function بتتوقع بالزمك
اكيد هتقوليلي و بدي function لل expression لل non
terminal و بدي function لل restوبدي function لل
term وبدي ال function المعروفة تبع ال match هذا
المفروض من المسلمان، مظبوط او لا؟ لكن بدي اذكرك ان
هذه ال risk احنا المرة اللي فاتت لجينا طريقة ان
نستغنى عنها ونسرق ال code تبعنا، اذا بتتذكري طبعا
احنا مش ملزمين ك compiler ان نعمل الحركات هذه لكن
احنا من ناحية برمجية كان الاصل بنعمل القصة هذهواضح
أنا هحاسبك في إمتحاناتي على ال compilation أكتر من
الموضوع البرمجة لكن مش غلط أن تكوني فاهمة هذه ال
skills طبعا هذه ال skills أدت إلى شغل المرة اللي
شفناها أنه بطل في عندي rest لأن سيبت عملها loop و
طالما بطل في عندي function اسمها rest شيلتها كلها
حاطيتها وين؟جوا فما تستغربيش الآن انه لو بدأ
الأربعة function في ال code اللي بنكتبه بس كتبنا
ال expression بطل نكتب ال rest لأن ال rest صارت
عبارة عن إيش code حاطيته جوا ال expression
وبالتالي بطل فيه rest عشان هيك هتلاحظي بس في عندي
function اسمها expression و function اسمها term و
function اسمها match هي اللي هنشوفه باختصار فماحدش
يقولي وين ال rest راحت ال rest راحت في عملية ال
optimization لل codingحولتها من tail recursion ل
loop و بعدين لا جيت فيش إليها أكتر من استدعاء غير
مرة واحدة فشلتها و نسختها في المكان اللي هي بتظهر
فيه فارتحت منها فظل عندي ال expression و ال tail و
ال match طيب الآن السؤال هذا ال code اللي بعد
التعديل كيف أنا بدي أعمله بال Java؟ طبعا احنا
عارفين أن ال Java باختصار هي لغة object oriented
طيبقلنا لغة البرمجة بتعتمد بتاعة الجاوة على ال
object oriented وبالتالي كلها بتلاقيها مبنية على
classes و بعدين تيجي في المين إيش بتسوي instance
من هذا ال class على شكل object و بتتشغله الآن أنا
جاعة بتكلم هنا ك بارثر فكيف تتوقع هذا ال code بدي
انحط كبرمجة و أين بدي أحطه؟ أكيد الشطرينش بيقولوا
أكيد لازمني أعمل class اسمه بارثرو جوا هذا ال
class أحط كل ال functions الخاصة ب main بهذا ال
parser و بجعل ال main .. لما بعمل عملية parsing
إيش بسوي في ال main؟ بعمل منه instance object و
بعدين بستدعي أي function عشان عملانة ال parsing ال
start symbol اللي هي في حالتي مثلا expression يبقى
أقصد أنه تحويله لموضوع جابة مش موضوع صعبأنا بس
الهيكلية بتاع الجابة الهيكلية زي class لكن كل ال
code زي ما هو هنا بتروح يقعد بده يقعد جوا هذا ال
class و جوا ال main أنا بفعله باختصار يعني طيب
دعاني أشوفها كيف كبرنامج جابةشايفين؟ بدأ برنامج
عادي جال أنا بهمني يكون في عندي class واسميه زي ما
بدك بس احنا بتسميه تسمية related للشغل تبعنا فانا
بعمل عملية parsing يعني بدي parser فرح سماه class
parser طبعا لحظة إيش عرف جوا variable ليش؟ أنا
بلزم .. بلزمله كهدفليش بالزمن؟ لأن عملية ال
parsing مستحيل تتم إلا لازم يكون في lookahead واقف
على الكلام اللي كتبه المبرمج مش أنا بصيحة أعملت
مقارنة بين الشيء المكتوب و بين اللي المفروض يكون
مكتوب أو ال syntax تبع ال language إذا لازم يكون
في عندي lookahead موجود عشان هيك هو قال لي خلاص
هذا ال lookahead هيو موجود اللي هو هيمثل ال token
الحالي الموجود اللي جايين المفروض من ال lexical
طيبإيش هاي عبارة عن إيش هذه الـ parcel بين جثين في
البرمجة؟ إيش معناها؟ constructor صح method لكن هي
constructor إيش يعني constructor؟ يعني هذه ال
function يتم استدعاها بشكل أوتوماتيكي أول ما تعمل
creation لل object من المين يعني بمجرد ما أنت تعمل
create لل object أوتوماتيكي ال constructor بتم
استدعاه إيش في جواته ينفذ؟ طبعا لحظي إيش كاتب هو
جوا؟الـ constructor هذا جاعت بحط قيمة للـ
lookahead ليش لازم يكون في عندي lookahead كبداية؟
لأنه بدون ال lookahead مش هيصير عملية parsing احنا
تنسيش عملية ال parsing بدها طرفين الطرف اللي هو ال
code اللي جاعة يتشجر و جاعة يعمللي ال syntax و
بوصفه و الطرف التاني اللي هو ال lookahead اللي هو
واقف على الكلام المكتوب من المبرمج اللي بتتحقق منه
بالطرفين مش موجودين مابقدرش انا اعمل عملي ال
parsing لازم هذا يكون موجود و لازم هذا يكون موجود
الان الأكواد او ال functions الخاصة بوصف ال
grammar لازم تكون موجودة تحت الان بيضال مين ناقص
معايا اللي هو lookahead هذا فعشان ايه انا سويت
شغلتين عرفت lookahead ك variable و اعطيته جوا ال
constructor قيمة ابتدائيةطبعا من وين هياخد القيمة
الابتدائية لحظى هنا من المبرمج من ال user اللي جاء
اتشغال هو الأصل في المستقبل من وين ناخد القيمة هيك
مش من ال user الأصل الأصل أنه في lexical analyzer
بدخل على الملاف بيروح بيقطعه ل token بيمسك ال
token بيبعتليه و lookahead بيجف عليه هيك الأصل لكن
لأنه احنا لسه ماأخدناش ال lexical analyzer فقلنا
مؤقتا بنحط قيمة lookahead من ال keyboardشوفتي كيف؟
يعني انت هيطلب منك أول ما تعمل creation لل object
هيطلعلك رسالة دخلي character مثلا ال character
اللي هتدخليه هيفترضه هو شو ال token اللي انبعت لكن
زي ما قلت أنا ال code الكامل تبعنا مابكونش بيقرأ
من ال user زي هيك بيقرأ من وين؟ من الملف بيجيبلي
ال tokens الليكسيكال بيجيبليه و هذا اللي هنعدله
بعدين في مشروعنا في نهاية chapter 2طيب هنتكلم عنه
بعدين الان تعالى اتطلعى قعد كل اللى موجود هنا يا
بناتي الان ايش هو نفسه ال pseudocode اللى قبل شوية
جابه و حطه هاي بدأ ب function اسمها expression
استدعى term و نسخ مين نسخ ال rest شايفه ما استدعاش
rest احنا قبل شوية كان بستدعى rest الان بطل استدعى
rest فراه عملها copy paste و ايش و نسخها زى ما هي
شايف كيف هي نسخبس لحظة إيش ملاحظة صغيرة، في ال
grammar كنا نكتب هنا print، print صح؟ مش print
that، الآن أنت بدك تطبيقها بالإجابة، كيف بدك تعمل
print؟ فالآن عندك حرية الخيار، بدك تطبعي على ملاف،
بتطبعي print على ملاف، بدك تطبعي في ال console،
بتطبعي في ال console، هذه الشيء بترجعلكيعني هذه
عمر تنظيمي المهم .. طب إيش هيطبع خلاص ال code لما
أنا استدعيه؟ هيطبع ال postfix انتبهي عشانك انت
بتلاحظ انت بيحط الزائد بعد عملية ال operation
بيقولك اطبعي زائد الرقم بعد الرقم اطبعي رقم فلو
احنا اتبعنا كل الطباعة اللي صارت هنجيب اطبعياش؟ ال
postfix عشانك انا اش بقول انت قاعد تنظم ال code و
تعمل عملت الطباعة وين؟ عملها في ..فبتشوفي بعد ما
يخلص التنفيذ انو ايش طبعلك لل infix في الملافظ ال
bossfix لو بدك طيب احنا لسه ماشغلناش ديري بالك
عملية ال parsing انا لسه جاعد بهيئ ال parser انه
هى ال functions اللى بتعمل عملية ال parsing عملية
ال parsing هتم من ال main كماشي و هشوف كيفبس
الفكرة تبعتي أن كل ال code اللي كان قبل شوية ب
pseudo code أجهزي ما هو قاعد في الجافة بدون مشاكل
بس جوا ال class قاعد، يعني مش هالقص الصعبة تمام؟
المهم بعد ما خلص من ال expression إيش تتوقع
حنلاقي؟ حنلاقي tear تعالي نشوف code ال tear، هاي
code ال tear تتذكر ال grammar تبع ال tear؟ال
grammar تبع ال term كان كام جملة كام production
كانوا .. كانوا عشرة مش كان zero واحد اتنين تلاتة
لغاية تسعة بدل ما انا بالظبط بدل ما انا اعمل if
lookahead تساوي zero if print zero match zero if
lookahead one match one بدل اعمل عشر مرات ايش سوى
تقال طلع ايش سوى انا جال باختصار هل ال lookahead
digit وهذه جاهزة وموجودة في الجابع هل ال look
ahead digit ليش؟ لأنه احنا قلنا ال syntax بتاع ال
language بتعامل مع ايش؟ digits يفصلهم زاد او ناقص
فلو كاتب حاجة غير ال digit المفروض مش في ال syntax
المفروض يكون غلط عشانك ايش بنقوله else يعني اذا مش
digit ايش بيكون النتيجة؟ error يعني افترضي انا اول
ما بديت حطيت حرف Hك initialization مثلا هيجرها ..
طب هاد ال H مش digit بطلع على طوليش بقولي error
خلاص شوفتي كيف؟ طيب افترض ان انا ضغط على تسعة
digit هيدخل جوا when ال if condition لأن بالفعل هي
digit ايش انا بدي اقوله عند جوا ال digits؟ ايش
رايك ايش دي اقوله؟لو قلتله match و print راحت
فقدامي خيارين يا بعمل temp و بخزن خيمة ال
digitized و بعدين بعمل match و بعدين بقوله print
يا إما قلنا المرة اللي فاتت أنه لو طبعنا جابل مش
هتفرق و أثبتناها المرة اللي فاتت وبالتالي ممكن
أقوله printبعدين match لأنها مش هتفرق عارفة لو
كانت بتفرق ممنوع اعمل حركة يعني كان لازم تمت
استخداميها لكن احنا شوفنا المرة اللي فاتت لو طبعت
قبل الرقم هيظل both tricks المرة اللي فاتت منها
عشانك تطلعي سوا قال اطبع في الأول و بعدين ايش اعمل
matching طيب سؤال صغير ليش بحطلي car قبل look
aheadلأنه .. ليش casting؟ لأنه طالع هو إيش معرف
فوق look ahead إيه معرفه انتجار، مظبوط؟ طب إيش
بيصير لما أكون أنا معرف ال X انتجار و أجي أعمل
زائد زيكي؟ طب هذا معرف انتجار، إيش بيصير؟ إيش
بتخزن في ال X؟ بنفع، ليش بنفعش؟ إيش بتخزن في ال X؟
بتخزن في ال X ال ASCII code بتاع الزائد الزائد إيه
مكان في ال ASCII code؟ مثلا مكانه 70بيروح بتخزن
جوا ال X قيمة سبعين تمام؟ و العكس صحيح لو أنا عامل
Int X تساوي خمسين و جيت قلتله اطبع Car X لو قلتله
اطبع Car X ايش هيطبع؟ مش هذا رقم خمسين؟ هيروح على
ال ASCII code عنده رقم خمسين؟ ايش ال character
هيطبعه؟ فعادي جدا يعني حتى لو انا ماعرفه انتجارو
قلتله يطبعليها ك character بالحالة هذه بروح ال
ASCII code يشوف شو ال character اللي اقبال هذا
المكان و بطبعه و العكس صحيح لو أنا معرفه character
و قلتله طبعليها كانتجر بطبعلي مكانه في ال ASCII
code هذه المعلومة لازم تكون عارفها في البرمجة مافي
مشاكل هو أنا معرف ال lookahead ايش معرف ال
lookahead؟ انتجروبالتالي لما نخزّن في علامة الزائد
ما تخزّنتش زائد تخزّن مكان الزائد ال ask code
تبعها طيب أنا لو قلتله اطبع ال lookahead وسكتت
هيطبع رقم ال ask اللي فيه الزائد طبعا لأ بدي أشوف
الزائد في الطباعة عشان ال post fix عشانكش قلتله
حولها هذا القيمة ل card ففي الحالة دي مش هيطبع في
البرمجة هيطبع الزائدمضحك؟ يعني مافي مشكل بين ال
car يكون انت أو car خلاص يا بتعامل مع ال ask code
يا بتعامل مع ال character it's up to you كيف انت
في البرنامج تطلبي تمام؟ عشان هيك هي طلعي إش قال
اطبعي عارف لو مش كاتب ال car هاي؟إيش كان هيطبع ال
ASCII تحت ال digital أو تحت ال character اللي يعني
لما أقوله أطبع car خلاص على طول بطبعه ك character
طيب الآن ال term من صفر لتسعة طيب شو المشكلة
فالمفترض أنه هنا مش هيطبع زائد أو أكثر لأ قصبر
يعني قصبر بسمعها شوية أنت لإننا نميز بين شغلتين
أنا مش بس عندي أرقام أنا عندي أرقام وعندي إشارة
زائد وعندي إشارة minus مظبوط ولا هذي اللي بتكون
فاهمها في الأول100% ال look ahead هذا في النهاية
فال look ahead لان ممكن ياخد digit وممكن ياخد
إشارة زائد أو ناقص الآن أنا طالما خلاص عرفته من
الأول انتجار خلاص لو وديته أنا رجم 9 مثلا هيسجلها
9 ك number لإن عامل إن هو انتجار لكن اذا فضلته
زائدهيروح ask a code هذا الزائد وان ما كانوا خمسين
بكتب جوا خمسين خلاص هيك .. هيك يصير ال lookahead
تخزن قيمها الآن في موضوع الطباع اشي تاني أنا قلتلك
انا كيف بتخزن الان هذا القيمة integer ال lookahead
انا قاعد اقوله اطبعها طالما ماعملتش casting الا
هيطبعها ك integer حتى لو زاد هيطبعلي خمسين مكانها
او تلاتين حسب مكانها لكن اذا حطيت انا لأي رقم
integer بيرجوسين كار اطبعليه ك character في الحالة
هذه مش انه هيقوللي غلطهيروح يشوف هذا الرقم 50 ولا
60 ال value اللي جوه ال look ahead إيش عاجبالها
character ويروح يطبعلي صوت ال character تبعها، هيك
بتشتغل البرمجةواضحة؟ فما في اي تعارض انه انا معرف
ال look ahead انتجر وقاعد بخزن فيه زائد او ناقص او
ضرب انا مش هلاحظ القصة هي لانه internally جوا في
ال look ahead هيحط قيم انتجر لكن لما انا بقول
اطبعها ك character البرج هيطبع ليها زائد وناقص ك
character فمافي عندي اي مشكلة تمام؟ فهي كل القصة
في الموضوع اللي هاد طيب على كل الحوار بعدك ايش
عندي؟ function مين؟
ال matchالـ match إيش بتسوي؟ بدها تتأكد إنه اللي
جاي اللي المفروض يكون مكتوب و يشوف المكتوب ال look
ahead بيساوي بعض ولا لأ إذا بيساويش بعض على طول
الطلعش قاللي إذا بيساويش بعضError صح؟ بيساويوا
بعض، إيش نسوي؟ مش بده يرجع للاستدعاء و ال look
ahead إيش بيصير فيه؟ مش ال look ahead يمشي خطوة؟
إيش عم بيمشي خطوة؟ مش بده يشوف ال token اللي وراه؟
طب أنا ماعنديش الآن ملف يجيبلي tokens فإيش قلتله؟
إجرها من ال user، بهمش، ماشيها من ال user شوفت كيف
الآن هنصير من وين ناخد كل مرة ال tokens؟ من ال
user لإنه ماعنديش function ال lexical اللي بتجيبلي
ال tokensفكل مرة ما بده token هتلاقيه بيقولك انت
دخليه لنايا فهتصير انت لما تعملي هذا ال code
تبرمجيه هتصير تشتغل شغلتين تصير قاعدة بتدخلي في ال
infix تسعة ناجس خمسة زائد اتنين هو قاعد بيفحص
الأرقام اللي بتدخليها و بكتب علي جبالها ال bossfix
مش انه ملف مكتوب و راح جاب منه التسعة و جاب منه
الناجس و جاب منه .. مش هي قاعد كل ما بده token
بيقولك تفضلي دوسيفانت تدوسي تسعة هيطلعلي كثيرة
هاتي كمان minus ال minus صح هاتي كمان خمسة الخمسة
صح هاتي كمان ضغط غلط بطلعلي syntax error طول ما
أنا قاعد بشتغل معاه بعطيه قيم صح هو قاعد بشتغل
parsing و إيش بطلع بطبع ال boss fixed الحاجة اللي
أنا دخلها طبعا هنا ملاحظة صغيرة أنه ممكن أنت لو
عملتي نفذت ال code هذا تلاقي أن ال in و ال right
في نفس المكانفي نفس ال console قاعدين بيشتغلوا
فممكن تتخربطي فانت عشان مايصيرش مشاكل ممكن تعدّي
على codec انه يقرأ ماشي في ال console ويطبع في
مكان تاني بعيد عشان ما تتخربطيشانت لو نفرتي هذا ال
code هيقولك هتلاقي رسالة، دخل خمسة، دخلت خمسة طب
ما طبعت يمكن خمسة شوية خمسة، هتلاقي خمسة و خمسة
جانب بعض، لأنه قاعد في نفس المكان، بجرى و في نفس
المكان بيكتب، فممكن ماتلاحظيش كيف حولت، فانت عشان
تشوفيها بشكل واضح، لو جيتي بس عدالتي على ال code،
موضوع الطبعة طبعته في books تاني، مش في نفس ال
books أو في ملف تاني، بكون أريح، بيبين بشكل أوضح
ال code واضحت؟ طيبالان لسه لحد الآن يا بنات انا
مافعلتش عملية ال parsing انا بس أسست ال code اللى
بيعمل ال parsing و كان عملتي تأسيس simple خالص كل
ال functions بتاعت ال pseudocode كلها حطيتها وين؟
جوا ال class لكن لسه ما استدعت ماعملت creation
ماسويت parsing تعالى نشوف كيف ال parsing بيتم كيف
انا بسويه كيف بيشتغل ال code هي ال Java طبعا هيها
تبدى ال function main عادي زى ما بتعمليهشايفة إيش
أول سطر؟ اعملت object سميته parse من نوع parser
عارفة بعد تنفيذ هذا السطر إيش بيصير؟ بيكون راح ال
constructor و ال constructor بيكون بده قيمة لل
lookahead فبيكون ساقلك ال keyboard دخليلي قيمة ال
lookahead لأنه بتنفيذ السطر هذا بيكون استدعى ال
constructor automatic و لو طلعت تشوف ال
constructor قاعد بيستنى منك lookahead لأنه فيه cin
فوق read هيا ده اللي نسيين
شايف ال constructor شو بيقولك؟ بيستنى منك إيش؟
بغطى على أساس يبدأ يلقط ال look ahead الأولاني
عشان يبدأ إيش يتغير عشان هيك انت بمجرد بتعمل
الجملة هذه في ال main خلاص بيكون بيستنى منك إيش؟
ال cursor عندك هنا دخلي characterعشان يبدأ كـ look
-ahead ابتدائي الان start and look-ahead موجود كيف
عمل عملت ال parsing؟ بدك تستدعي ال start symbol
اللي هو ال start function مش هيك؟ اللي هي مين في
حالتنا؟ expression عشان ايه ايش قالك؟ قالك هذا ال
parse ضد expression خلاص عارفة بس في هذه المنطقة
خلاص هيبدأ عملية parsing لان استدعى ال start
functionاللي هي start symbol اللي هي ال expression
هذا هيفوت يقرر ي look ahead مع ال .. مع أول حاجة
موجودة عنده في ال code لقاهم شبه بعض هيطلق مني في
ال keyboard ايش؟ هات كمان look ahead لقاهم غلط ايش
بيسوي؟ بيطلع فطول ما انت الان ماشي معاه في ال
keyboard تدخل قيم صح تسعة ناقص خمسة اتنين بيضل
قاعد ال bars هذا ايش ال expression اتنجل وين؟ في
ال pseudocode اللي كنا عاملينه قبلزي ما اتعلمنا زي
ما عملنا simulation لل four احنا مرة فأتعملنا
simulation لل four صح ولا لأ عشان شباب مت ال
parsing فنفس الفكرة بتقول خلاص ماشي مش هيوجف إلا
كاف يوجف أدخل إشي غلط بطلع بقول syntax error طول
ما أنا قاعد بدخل إشي صح بلاقي بطبع ال postfix صح
بدون مشاكل طبعا زي ما قلت ال code هذا code بس
ابتدائي ممكن تعدلي عليه و تظبطيه و تدخل يوغاف إذا
حاططيله كذا يوغاف إذا عملتيه يعني بتقدر تعدلي عليه
هو حاطط زي أساس بس انه جلب كل ال pseudocode السابق
خديه حطيه جوا ال class زي هيك و بعدين من تحت من ال
main اعمل صورة من هذا ال class استدعي ال function
الأساسية بتبدأ عملت ال parsingطبعا مش هقدر أستد ال
function أساسية إذا ال look-ahead إيش موجود عشان
ايه كان يعمل في ال constructor look-ahead و إدّى
تقيمة ابتدائية خلصناها طب في المستقبل كيف عملت ال
look-ahead هتكون مش هعمل عملية cn هنا و هنا في ال
match اللي جابلي شوية ولا هعمل في ال constructor
cn هصير أقوله استدعي ال function lexicalاللي بيجرى
من الملف فديك ال function lexical هتروح تفتح الملف
و تدور و تلاقي ال token و تقوله هاي ال token تفضل
هاي ال token خلاص ياطيني العافية فكل مرة بدك look
ahead هتصيري كل مرة تستدعي مين ال lexical اليوم
احنا استعاد معانا بإيش بال user بس هي اقتصار
الفكرة واضحة هيك انا خلصت هذا ال code مافيش اشي
لان بدنا ندرسه المهم فيه اسئلة تفضليفوق التاريخ
تفضلي فى ال S digit بيعمل match بتاعة إيه ال match
ده ال S digit؟ سواء يوينها ال S digit أه أول شي
بتبعد الرقم و بعدين بيعمله match فى ال S digit مار
إيش سؤالك؟ أه كيف يعني يعمله match مع مين؟ بتقول
المفروض يكون مكتوب مع .. الآن معلش شوية بس أصبر
عليك الآن أنا كاتب رقم مثلا تسعة خلاص؟لجاه هو
digit، مظبوط؟ ال grammar إيش كان يقوللي أسوي؟ ال
grammar ارجع لل production، إيش كان يقوللي؟ مش هذا
برمجة فعلية لل grammar الموجود لما كان يقوللي ال
term بطلع تسعة مش كنت أنا أعمل action أ print تسعة
انت كودك اللي بتعمليه مش ع كيفك بتعمليه انت كودك
اللي بتعمليه بتعمليه بتنفذ ل grammar لأن احنا
اكتشفنا مسبقا زمان اذا نفذنا ل grammar برمجناه
automatic هيطبعوا يشتروا صح احنا كنا زمان بنفكر
كيف نعمل ل grammar اللي بيحول صح فإذا برمجت هذا
اللي بيحول برنامجي خلاص هيشتر زي ما كان ال grammar
بيسوي مش هيك اتفاجنا؟طيب، الان انا عندي قمر ايش
بيقوللي؟ بيقوللي لما انا ال term اتطلع التسعة بدي
ايش أسوي؟ اطبع تسعة ليه شوفوا اطلب طباعها؟ عشان
اقدر اشوف ال boss fixed or infixed تمام؟ الان احنا
قولنا المرة اللي فاتت لو انا طبعت قبل ولا بعد
الرقم مش هتفرق معايا تمام؟ مية لمية الان جينا ال
as digitفانا طبعت قبل، الآن خلاص إيش هنطبعنا؟
خلصنا التسعة لقناها موجودة ومشينة، إيش نسوي بعد
هيك؟ مش المفروض إنه نشوف ال look ahead اللي وراه؟
إحنا بعد ما بنطبق، مش لازم أمشي أكمل ولا أطلع من
البرنامج، مش بدى أمشي أشوف ال look ahead اللي
وراه، مش بدى أقول هذا الفحث تم و هذا الرقم موجود
ومافيش مشاكل، الآن افطر، امشي يا look ahead، افحص
الناس المكتوبة ورامن وين الفحص هذا بيمشي؟ من ال
match فانا عشانك ببعتله خلاص التسعة اتأكد انه هي
نفس المكتوب نفس اللي بده ييجي اتأكد ال match ال
match ايش هيسوي؟ هيمشي خطوة فلازم اعمل ال match
باختصار مش بس عشان يتحقق وعشان يمشي ال look ahead
للي ورا انا قصدي انه match مثلا للتسعة زمان تقول
طب ممكن يكونماشي ما هو مخزن هنا ال look ahead ايه
في طفل ال look ahead خمسة؟ ايه معناه؟ ايش هيطبع
هنا؟ خمسة صح؟ الان ايش قلتله match؟ انا ايش
بعدتله؟ الخمسة فالان هيروح يقارن هناك ال match
الخمسة و يشوفها digit ولا مش digit، مظبوط ولا لا؟
هي ال match، طلعت ال match انت هي الدكتور اللي كتب
ال user مع مين قُلت قارنمهيها؟ مع مين؟ مع الـ
lookahead اللي حاليًا هيدخلها المبرمج؟ مع مين؟ ال
user، هتقرر مع هذا؟ هتقرر مع ال TV هذا؟ طب ما نقول
هذا الكلام، أه، إيش اللي مش واضح عندك؟ ال TV في
المهاتف الشمالي، هي مين؟اللي المفروض تكون مكتوبة،
صحيح مع ميزة القارن، بس أصبر، مع ال lookahead اللي
بيدخلها ال user الآن، مظبوط إذا ال user الآن افترض
ال user عشان أفهمك الصورة أنا قلتله match 5 صح؟
أجى ال user لقى أن ال lookahead اللي أنا دخلتها مش
5 زائد صار غلط المفروض يجيني digit الآنفلازم يكون
مكتوب digital عشان يمشي من هذا الفحص و يكمل إيه لو
أنا كنت كاتب زائد؟ إيه لو أنا كنت كاتب فتحة قوس؟
هيقوللي خلاص أنت مش كاتب زي ما هو مطلوب digital
أنت كاتب حاجة تانية كأنني كاتب تسعة زائد قوس أو
تسعة زائد زائد فمش هيكون صح إلا إذا هو كان كاتب
كمان digital طب كاتب digital digital إيش المفروض
ييجينا بعد هيك؟ إشارة مثلا فبقول خلاص اتجوزنا ارجع
كم قولك شوف إيش لازم ييجي بعد ال digital واضحة ولا
لسه؟إذا مش واضح هاي السؤالية مش مشكلة كيف
رقمت يعني؟ يعني أنا الرقم اللي هيجي المقروض يكون
مكتوب يكون عرفاه أقل من ال .. لأ ليش؟ انت تبهي انت
.. هان انت بقعدتله إيش؟ نفس الرقم اللي عندك،
مظبوط؟ ليش؟ لأن انت عندك الundigit افترض ان ال
look ahead كان خمسة مثلاالان ايش قولنا match تعالى
على match نفذى فى match ايش انا بقولله هل الخمسة
تكافئ ال T اللى عندي هان؟ ال T شو قيمة هال T هان؟
شو قيمة هال T؟ اللى هى الخمسة هادى، مظبوط؟ ايش
اللى .. عفوا اللى اللى قاهد؟ ايش هاد اللى قاهد؟
أساسيا هتكون خمسة فى مثالي لأنه كنت دخلها جبلهو
لما وصلنا هامش كانت لك أهد داخلة فهي دايما أول مرة
هتكون شبه بعض أول مرة لأن الهامدين بارك هي خانة مع
نفس الخانة بتكون فدايما تكون واحد انت المشكلة وين
بتبين معاك أكتر لو كانت الإشي له structure مقاومة
أكتر من واحدة يعني زي لما بقول أنا مثلا ال F لازم
يجي فرقة فتح ال ghost لازم يجي فرقة فتح ال serious
ففي عندي سيرة فال F الأولانية لازم تكون دايما زي
بعض مش أنت أصلا اخترت ال production بناء على ال F
ففي أول matchبيكونوا زي بعض لكن اللي بقعد هيك
بيصيروا يتغيروا أنا عندي في سؤالي هذا للأسف كلهم
إيش؟ من واحد فدايمًا هيطلع زي بعض لأن ال look
ahead اللي انقرأت هي نفس ال look ahead اللي انبعتت
في المثال هذا لأن أنا من digital فدايمًا هيطلعوا
نفس بعض فهمتي؟ لأنه بيكون انقرأت قبل طيب تمام
واضحة؟ طيب الحمد للهالان خلونا نتابع .. فى اي سؤال
على هذا ال code .. هذا البرنامج طيب خلونا الان
ندخل على الدرس المهم جدا .. هذا المفروض خلص بسرعة
المفروض ال code هذا ماخدناش فيه وقت لإن من القصر
احنا عارفين اللي بيسيده ال code المرة اللى فاتت و
المفروض اليوم على طول إيش بس حطناها في جابة و
خلصنا ماشرحناش فى إيش كتير لكن يالا لعله خير طيب
خلونا ندخل في الدرس المهم موضوع ال lexical
analysisمتذكرين ال lexical ايش يسوي؟ ايوة
بمسك الملف بيشتغل في الملف و بروح بطلعلي كل ال
tokens اللي موجودين وين في هذا الملف طيب تعالى
نشوف ايش المهام اللي بتقوم فيها ال lexicalطبعا
إحنا يا بنات إيش أنواع ال tokens اللي اتفقنا ممكن
نلاقيها في المرحلة هاي؟ شو هم ال tokens؟ كأنواع
هتقوليلي ممكن نلاقي number خليني نتفق على ال
tokens اللي نتعامل معهم ممكن نلاقي number إيش أنا
بقصد number؟ يعني أنا ممكن أكون كاتب في الملاف 556
و 21 ممكن أكون كاتب أرقام و بنفرض هنا الأرقام
constant مش فواصل مش real مش float خلاص الأرقام
اللي هتتعامل معها أرقام إنتجة إذا ال token المحتمل
الأولاني يكون عندي numberطب هل في token تاني؟ اه
ممكن ال token يكون identifier ايش بقصه ال
identifier؟ يعني يكون مثلا كلمة position كلمة rate
كلمة initial X Y whatever هذا برضه كل واحدة واحدة
اسمها identifier token وممكن ال token يكون كمان
keyword يعني زي ال F زي ال Y زي ال D زي زي زي هذه
كلها الكلمات ال break الاخرى كلها كلمات محجوزة
ممكن تكون tokenبعد هدول هنفترض أن أي character
قائم بذاته هو token خلاص يعني هي فرضيتنا الآن في
المرحلة هذه يعني الآن إذا هو مش number وإذا هو مش
keyword وإذا هو مش identifier خلاص هو ال character
هذا الموجود لحاله بحاله token زي إيش مثلا؟ زي زائد
زي ناقص زي ضرب زي قسمة زي فتة قوس زي تسكيرة قوس زي
فصلة مربوطة فصلة عادية الاخرينطب حد بيقدر يجيبلي
مثال يقولي لأ طب مافي token تانيات غير هدولة مش من
character واحد من أكتر في حد بيقدر يذكرلي حاجة
يقولي هي كذا تاو أنا فرضت assumption قولت إذا مش
مش ID مش keyword مش number خلاص token قائم بذاته
في حد ممكن يقولي لأ مافي حاجات غير هيك زي ايشأو
الأكبر أو يساوي أفرض
يساوي يساويافرضله يساوي اه اه شوفتي يعني احنا لأ
ممكن يكون في tokens مكوّنين غير اللي انا قلتهم من
خانتين لكن احنا اليوم في ال code في ال section هذا
بدوا يفترض هدول ازاي مش موجودين خلاص انه الأكبر
يساوي الأصغر كله character واحد لكن اكيد لو انا
بده اظبط ال code اللي هنكتبه عشان يعمل الحاجات هذه
بقدر اظبطهبس زى ما قلت في assumption بعدى في ال
section انه قال خلاص اعتبره ان ال tokens اللى عندى
ID, Keyword, Number و بعد هيك كل character قائم
بيداده لكن هاد فرضية مش حقيقية مئة بالمئة بدليل
يساوي يساوي أكبر يساوي صح ولا لأ؟ واضحى؟ مش
هنشتغل؟ فاهمين إيش بقول؟ أنا بأسس اللى بقوله مش
كمان شوية قولولى و hi و ديك طيبتعالوا نبدأ نشتغل
الـ lexical هيقوم الآن بمهمتين رئيسيتين المهمة
الأولى بده يريحني من ال spaces و ال new lines و ال
tabs و ال comments كل هذا بيشيله و يريحني منهم هذه
المهمة أساسية موجودة في ال lexical المهمة التانية
اللي احنا عارفينها أنه بده يتعرف على ال tokenاللي
هو الوحدة الواحدة وياخده وإذا إله attribute يحسبله
ياه ويبعت للناس اللي بعتوله اتفضل لجينا token كذا
وattribute وكذا مثلا واحنا أخدناهم كلهم المعدودين
يعني لو لجى number هيبعت يقول لجيت number وإيش
يبعت معاه قيمته 25 .. 15 .. 200 .. حسب القيمة اللي
لجيها صح؟ لو لجى ID هيقول لجيت ID وإيش قيمته؟يا
إما مكانه في الـ Symbol Table، الـ Pointer اللي
عليه، يا إما الـ Xيم المكونة إليه، الحروف المكونة
لهذا الـ ID نفس الفكرة، لو لجأ Keyword، حيكون
حروفه المكونة إليه I, F, Y, Do إلى آخرين طبعا
مالوش Attribute، لأن F هو نفسه F، لما يقول ل gate
F، ماخلص، مايدهش Attribute، ل gate Y، مايدهش
Attributeتمام؟ طيب لما يلاقي character قائم بذاته
token زي الزائد أو النقص أو الضرب أو القسمة مافيش
له attribute خلاص بقول له جيت زائد، لجيت نقص فهيك
هنتعامل احنا في هذا ال section لكن مانستغربش انه
لو لاجينا مثلا في مكان تاني انه عامل الزائد أو
النقص أو الضرب أو القسمة token اسمه operator في
الحالة هذه لازمش يضيف attribute عشان نعرف مين فيهم
لكن على حالتنا ان احنا اللي سهلة كل character قائم
بذاته token مايدوش attribute باختصار في الحالة
تبعينهاإذا وظيفة الـ lexical التانية بعد ما بيشيل
ال spaces و الأمور هذه كلها أنه يعرف شهو هو ال
token و يبعته للجهة اللي ورا مع ال attribute لو
كانه attribute باختصار واضحة؟ طيب تعالوا نشوف الآن
كيف ال lexical بيشيل ال spaces كيف بتخلص منها و
بريحني منها طبعا أكيد لازم نكون احنا فاتحين الملف
وأكيد لازم نكون نبدأ نقرا إيش؟ في ال characters مش
هيكرا عشان نقدر نعرف ف ال بيك هذا يا بنات اللي في
ال code ال بيك هذا وانه يكون واقف على أول
character على أول character يا في الملف يا أنا
ممكن أكون جيبت من الملف على بفر هذا هشوف القصة
بعدين المهم اعتبره الآن في الملف مؤقتا على أول
character في الملفالـ peak واقف، ماشي الحال، الآن
إيش بيسوي ال code؟ طبعا أنتوا مستغربين أن ال four
أنتوا متعودين تاخدوها ال four تلت أجزاء، مظبوط او
لا؟ أنتوا بتاخدوا ال four على أساس إشي فاصلة
منقوطة إشي، فاصلة منقوطة إشي، مش هيك؟ أنا بس ده
فهمك ال four الإش اللي بيكون في الجزء الأول هو
عبارة عن إيش؟ عبارة عن جملة لل initializationيعني
بيطبقها لمرة واحدة في ال for أول ما بفوت ال for
إيش فيها بيطبقها و عمري مش مابرجعلها إيش بعد اليوم
خلاص بيطبقها مرة واحدة اللي هنا ال condition يعني
أفوت في ال loop ولا مافوتش في ال loop على حسب ال
condition وبالتالي لو هذه مش موجودة معناها دايما
هيفوت في ال loopالجزء الأخير هذه يا بنات هذه
الجملة اللي هان تنفذ في آخر ال four في آخر ال four
قبل ما يرجع إيش مكتوب هان بنفذه يعني أعرف لو أنا
بدي أحوّل هذه إلى while إيش بسوي؟ هذه مثلا a,b,c
لو بدي أحوّلها إلى while باجي بكتب a قبل ال while
بعدين باجي بقوله while b و بعدين أخر إشي في الكود
c لو بدي أعمل ذلكشوفتي باختصار يعني هاي بتكون وان
موجودة في الآخر تنفّل و بعدين بيرجع يشوف ال B يدخل
ولا مايدخلش الآن نجي لل four اللي موجودة هنا لحظة
أول إشي سايبها فراغ بقى أنا مش عامل initialization
مابدوش يبدأ بحاجة معينةوال condition سيبه فرارة،
إيش يعني ال condition سيبه فرارة؟ يعني كل مرة
هيفوت في ال loop زي .. زي wildly true يعني مش هطلع
من ال loop إلا ب break أو ب error أو ب return
طالما هو مش حاططلي شرط يعني كل مرة هفوت جوا ال
loop مش هطلع إلا بالحالات اللي .. اللي بتطلعني
خالص اللي زي ال exceptions زي ال errors زي ال
return أمور هذه بس اللي بتطلعنيهذه الجملة هتنفذ ..
مش هفهاش في الأول هذه بعد ما بيخلص ال four كلها
بنفذها و بيرجع الفور طبعا؟ طيب الآن ال beak .. إيش
قلنا ال beak واقف على مين؟ على أول character في
الملف على أساس بيبدأ يتعرف عليك token صح ولا لأ
عدش بيقول لي .. بيقول لي إذا هذه ال beakتمام؟ طبعا
هو الان body بيك معينة لسه هذه ال beak هتتنفذ كمان
شوية و هيمشي علي وراها هو body بيك معينة إيش
بيقولي؟ بيقول إذا هذه ال beak مالها blank فراغ
space يعني أو tap إيش بيقولي؟ do nothing ماتعملش
شيء إيش يعني ماتعملش شيء؟ يعني لأ هيفوت في ال
else؟ ولا هيفوت في ال else؟و بعدين إيش هينفذ؟
هينفذ high و يرجع، مش ايه؟ لأنه high بتتنفذ في
الآخر، قولنا شو بيقوله عاد هنا؟ بيقوله الآن خلاص
ال peak high تمشي خطوة لأنه كانت space، مديش أعمل
إشي فمشي عالجنبها و رجع تاني، افترضي جنبها spaceمش
هيدخل في الالس و لا في الالس F هذه و هيمشي عنها و
يرجع .. و هيمشي عنها و يرجع .. و هيمشي عنها و يرجع
.. و هيمشي عنها و يرجع .. و هيمشي عنها و يرجع .. و
هيمشي عنها و يرجع .. و هيمشي عنها و يرجع .. و
هيمشي عنها و يرجع .. و هيمشي عنها و يرجع .. و هي
تمام؟ إيش بيسوي؟ المفروض مايسويش أشي كتير بتعنيش
بيقول إيش بيسوي بيقولك لو كانت ال peak is in U
line يعني slash N إيش بده أعمل؟ قال بس بدي أزود
عداد بواحد عداد السطر ليش بيزود عدادها بواحد؟ لأنه
إذا بتتذكروا في ال compiler لما مكشف خطأ بيحاول
يعطيكي رقم السطريقولك في السطر العاشر في السطر ال
11 في السطر الخمسين إذا ضروري ال lexical كل ما
يشوف أنه نزل على سطر يسجل معلومة أن أنا سلت في
السطر التاني أو سلت في التالت أو سلت في الرابع
شفتي كيف؟ فلو أنا مش عامل هذه الجملة و كاتبله هنا
blank or tab or new line do nothing ممكن يكون نزلت
عشر أسطر ومش هعرف أنا في أي سطر فهنا قالوا خلاص
عشان نعرف السطر اللي احنا فيه قالإذا الـB كان الـU
line، هذا الـLine اللي هو بيكون ابتداءً بـ0، إيش
بزوده؟ بواحد فلما لقينا line زوده بواحد، بعدين
إيش؟ مش هيفوت هنا، هيرجع وين؟ كمان مرة، فتخيل أنت
دايسة بعد عشرين فراغ، دايسة عشرةالـ new lines عشرة
انترز، إيش هيصير؟ في العشرين فراغ مش هيعملش شيء،
بعدين هيصير كل انتر بيلاقيه بيزوّل عداد، بس بيعملش
شيء، بيرجع، line، new line، بيرجع، new line، new
line، new line، new line، بيصير بس إيش؟ إيه عندهم،
مش أكتر، لكن هو في الآخر do nothing، هذا بس عداد
طيب السؤال متى بده يفوت على ال ال سهاي؟ هتقوليلي
هيفوت على ال ال سهاي بشرط مايكونش space ولا tab
ولا new line بيفوت يعني بالعربي لو ال beak لجط أي
character خلاص هيطلع من هذه اللوم ليش؟ ليش يعني
break؟ يعني افترض لجأ .. افترض لجأ لجأ أو لطرمش
هيفوت في ال F ولا في ال else تحت ال new line و
هيفوت في قدش بقوله انا بقوله اتفضل خلاص اطلع انت
من كل ال four يعني ملاحظتنا المهمة انه مش هيطلع من
هاي ال four الا اذا ال beak كان فعليا واقف على
حاجة ملموسة بداية token باختصار طول ما ال beak على
حاجة مش بداية token فراغات ال new lines tabs بمشي
عنهاأول ما يلقوا بداية مشروع token يعني أول ما
يلقوا character بتطلع من هذه اللوم طبعا إيش بتوقع
أشوف بعد هذه اللوم بتوقع أشوف فحص هذا ال character
لأي token هذا ال character ل number هذا ال
character ل digit هذا ال character ل ID أكيد هتسيب
فحصات هتشوفها كمان شوية لكن احنا الجزء الأول سهل
مافيش فيه إشي واضح كيف عمل skipللفرغات و ال spaces
و ال new lines طبعا هتلاقوا في أسئلة الكتاب في ال
exercises بيقولك افترضي بإننا نعمل skip مثلا لل
comment لأن هذا برضه من مهام ال lexical بس مش
هعملها في هذا ال code بالنسبالك مش هتكون صعبة ليش
لأنه انت هتقولي مش هو امسي ال character هتقولي إذا
هذا ال character ي slash هتجري ال character اللي
ورا إذا كمان ي slash هتقوليله خلاص ضلك امشي امشي
امشي لغاية ما تلاقي slash n جديدة عشان نبدأ نعيد
من الأول الشغلليش؟ لأنه احنا قلناإيش يعني comment
يا بنادر؟ الـ comment بطريقتين إذا أنت عاملة
slashtain كيف بشتغل؟ كله بيرتمها و بنزل على السطر
الجديد و ببدأ يفحص فانت قادر تكون تتكملي في code
هنا إيش تقولي أجت slasha أجت slasha خلاص طول ما
شوفناش slash in لأن slash in معناها new line طول
ما شوفتش ال slash in اعتبر كانوا space مافحصوش أول
ما شوف slash in خلاص بطلع من بتاعة ال comment و
برجع عشان نشوف إيش اللي مسكنها في السطر الجديدطبعا
بعض البنات يقولوا طب ممكن ال comment تكون slash
نجمة اللي هي بتاخدها نفس الفكرة إن لاجينا slash
لاجينا نجمة الآن إيش هصير أعمل skip كل character
ارمي ارمي ارمي ارمي لما ألاقي نجمة و بعد النجمة
لاجي slash بعيد خلاص أعمل كله skip فعمليا انت كيف
تقدر يتحل ال exercise مش صعب كتير إذا انت فهمت
اللي أنا قاعد بقوله كيف نكشفال .. ال tabs، كيف
نكشف ال new lines، كيف نكشف ال identifier، كيف
نكشف ال .. ال number، فإذا أنا متأكد أفهمتي اللي
أنا بدي أقوله كله على أهدولاك، هتعرف تدبري حالك في
موضوع إنه شيل ال comments وشيل ال .. ال .. اللي هي
سواء بالطريقتين، فاهمين إيش بقول و الله أنا بصبح
في وادي و أنت في وادي؟ طب الحمد لله لك العالمين، و
اللي ورا أسألكوا عشان أتأكد انكوا فاهمين؟ أنا حابب
أسألكوا لإن أنا ..مش مقتنع اللي يقول فاهم .. اه
.. عشان نشوف .. أهمنة الشراع الفاضي ..
تهاني اليازرآية هاني فاهماش نقول انا بدي بس موضوع
ال comment اللي اتكلمت فيه تقدر تقديه ليا او
تشرحيه للبنات ايش موضوع ال comment بالظبط فده احنا
حكينا بوضوعنا انه نفتقر و .. اللي بننصب الفكرة فو
احنا حكينا بهم ال space و بهم ال comments اللي
موجودة عندنا فهنا كتبنا ان ال code انه اذا لأ اللي
هو ال space مايعملش اي إشارة فاحنا حكينا كمانهذا
معمول و جاهز إن ال space بيشيلها احنا سؤالنا و مش
عامل حسابه في هذا ال code إنه لو في comment لكن في
exercises الموضوع هذا بيقول افرض فيه comment في
الحالة ده إيش ده سوي؟ كيف ده أشيل ال comment؟ افرض
ال comment و قمز ال slasher كيف ده أشيلهم؟ لو بدأ
عطور؟ يعني
كيف بدأ أبرمجها هنا؟ في المنطقة هذه؟ إيش بدأ أدور؟
عليش أدور؟إذا لقيت slashtain إيش بتسوي؟ بتقوله
خلاص اهمل كل ال characters لغاية ما توصل لل new
line الجديدة لو لقيت slash نجمة بتقوله اهمل كل ال
characters حتى ال new line يهملها لغاية ما يلاقي
نجمة و بعدين ارجع كمل كودك بس مية لمية خلاص أيه
النقطة اللي بيجب تكون واضحة عليكم على أممم خليني
الآن أرجع أكمل أحسنتي ممتاز ريحت اللي حواليك لإن
كنت حاجة أسألهمالمهم تعالوا نشوف .. نكمل .. البنات
ضلوا مصحصحين معايا لإني في أي لحظة ممكن زي هيك
أسأل، يضلوا مركزين معايا للآخر، أنا كلامي واضح،
اللي مش فاهمة إشي، اتوقفني، طالما أنا قلت مين
بيهنده سؤال وماحدش سأل، بفترض إنك فاهمة، ساعتين
الحاج أسأل على طولتبقى اللي مركزة معايا اللي يرضى
عليكي، تمام؟ طيب، الان تعالوا نكمل، اذا احنا كل
اللي سويناه لحد تلان فقط حاجة واحدة في ال lexical
انه شيلنا ال .. شيلنا ال spaces و ال tabs و ال new
lines و اتكلمنا لو كنا بدنا نشيل ال comments ايش
ممكن نسوي، طيبالان لما نجي هنا نخلص من هاي ال beak
وين واقفة بتقول لما طلعنا من ال four هذه ال beak
وين واقفة؟ هتقوليه ال beak واقفة ع بداية مشروع
token أنا لسه مش عارف مين هو هتقوليه ال beak لان
locked في character غير ال space و ال new line و
ال tabs غيرهمأنا لسه بدي أشوف هو شو هذا عشان أقدر
أعرف شو ال token اللي موجود تمام؟ بس قبل ما نروح
نشوف ال code في موضوع أنا في غاية الأهمية لازم
أكون مستوعباه اللي هو reading ahead أنا لا يكفيني
وجود ال beak لحاله لازم مرات أضطر أمشي لقدامي شوية
عشان أقدر أكشف ال token ليش؟ افترضي ال beak واقف
على رجم 5خلاص قفتي أقوله لجيت number و الله أمشي
خطوة أشوف مشوارها هتمشي خطوة تشوف مشوارها لجيت رقم
اتنين اه معناه لسه صارت اتنين و خمسين امشي خطوة
كمان لجيت تلاتة اه صارت خمسمية و تلاتة و عشرين فلا
إمتى بتضلني أمشي؟ المهم هضلني أمشي لغاية ما يبين
معايا حاجة مش numberيعني انا ممكن اكون كاتب 52
زائد 3 خلاص لاجيت حاجة مش number مش شرط space يا
بنات ممكن يكون انا كاتب 52 فراغ زائد مسموح اكتب 52
والزائد على طول بدون space مسموح اذا انا مابقول
لازم الاجي فراغ عشان اقول خلصنا انا بقول كالتالي
بقول بضل طول ما بلاجي digit ماشي اول مالاجي حاجة
non-digit بقول خلاص لاجيت ال tokenالخلاصة اللي بدي
أقولها إنه أحيانا مضطرين نمشي إيش لقدام عشان أكشف
ال token مش إنه من أول ال peak خلاص خلصنا طب سؤال
تاني افرض لجتي أصغر بتقدر تقولي خلاص لجيت token
لأنه يمكن يكون وراها يساوي بتصير أصغر أو يساوي
بعدين بتكملي أجه فراغ خلاص بتصير أصغر أو يساوي
فالمعلومة اللي بدي أوصلك إياها في هذا ال
subsectionإنه أحيانا نحتاج أن نمشي خطوة .. خطوة ..
خطوة عشان أقرر شو هو ال token مابقدرش في مكاني
أقول هو كذا حتى في ال identifier نفس الفكرة لما
لاجي كلمة P خلاص أقول لجيت identifier كلمة بي لأ
امشي خطوة يمكن لجيت O لما هذه صارت تكميلة لجيت S
لجيت T لجيت I لجيت .. طول ما بلاجي ال N letters
فهمتي كيف بدأت؟ انا اكمل لجأت فرق خلاص عرفت ان
انتهيت بس كنت ماشي HNT أكتر من مرة فهذه المعلومة
اللي بده اقولك إياها ان احنا أحيانا بنمشي لقدام
شوية على اساس نقدر نعرف نوع ال token ومابقدرش على
المطرح حتى لو ال beak واقف يقول من هو ال token هذه
معلومة مهمة تمام؟ طيب تعالوا الآن نشوف كيف بده
يتعرف ال lexical على ال tokens اللي من نوع number
وفرضنا ال number إيش يا بنات constant انتجار كيف
نتعرف عليه؟ أه كيف نتعرف عليه زي ما قلنا قبل شوية
طول ما أنا ال letter ال beak اللي طلع من ال spaces
و القصة هذه كان ماسك digit يعني أنا مشروع الآن
number مشروع token اسمه number لأنه ماسك digit
فالآن لازم أفوت و أفحص كل اللي وراه أول ما ألاقي
non digit بقول هاي رقمبس في ملاحظتين بتيجي تنتبهي
لها انا لما بكون هي بنات كاتب خمسة و البيك واقف
على خمسة هذا character تمام و وراها ماشي لاجى
اتنين للأسف بيجرى ك character فبيكون جارى
character خمسة و بيكون جارى character اتنين لازم
انا اعمل عملية معينة تطلعلي ال value اللي هي رقم
اتنين و خمسين انت هو قرأه character خمسة character
و قرأ اتنين characterلكن أنا لما بدى أحسب حسبته ك
attribute لازم ألاقي طريقة أن أقولله 52 أجمعهم في
بعض طبعا كيف أجمعهم في رقم؟ في الجابة في حاجات
جاهزة، الآن كمان شوية هوريكي كيف نعملها تعالى نشوف
القصة و بعدين نسمع الأسئلة دائما بيقرا characters
لأن هذا ال beak .. إيش الملف تبعك إنت؟ الكاتب
المبرمج كله charactersلكن يجب أن يفهم أن الخمسة
والاتنين هي number فيحولوا إلى number ويديني قيمته
ويقولوا get number ال B O I S T مثلا اه هذا
identifier فكله characters في النهاية اللي بتكتبيه
في الملف كله characters تعالوا نشوف القصة باختصار
أول
شيء يذكركبيذكرك إن لو أنا كاتب 31 زائد 38 زائد 59
بيذكرك إنه ال Lexical هياخد ال 31 يقول لجيت number
ويبعت مين معها قيمة هذا ال number اللي هو ال 31
بعدين هيقول لجت زائد شايفة؟ مابعتش مع الزائد أي
attribute لأنه افترضنا الان كل character قائم
بذاته غير ال ID و ال keyword و التالتة و ال number
قولنا token قائم بذاته فرضناهم و بالتالي الزائد
اعتبارها ايش؟ token قائم بذاته فمافيش له attribute
و لجة 28 قال لجت number 28 لجة زائد لجت زائد لجة
number 59 هيك ال lexical اللي جيشنا الان يعني ال
lexical مش بيبعت شغلتين النوعالـ Terminal ال
number و ال value طبعا لمين بيبعتهم هوللbarcel عاد
الbarcel مش بالضرورة يتعامل مع ال 31 الbarcel بهمه
مين ال number لكن طب هو ليش كمان جهز ال 31 لأنه في
ناس بعد شوية زي semantic بدهوا ال attributes فال
lexical بيخلص اللي عليه و بيريحني ال lexical بيقول
يا جماعة لقيت number و هاي قيمته انا يطيني العافية
ك lexical انتوا الان كاملوا شغلكوا اللي بدهوا ال
number هيو و اللي بدهوا ال attribute هيو خلصناففي
ناس هتتعامل مع ال number لحاله، في ناس هتتعامل مع
ال attribute لحاله، في ناس هتتعامل مع التنتين، حسب
ال stages اللي جاية، كل إشي؟ بنا ننتبهله للقصة
هذه، لكن هو ك lexical هيدوره، واضحة؟ طيب، الآن
تعالى نشوف كيف بيشتغل، لحظة بدأ ال code، و هذا ال
code وانه هيكون مكتوب يا بنات بعد ال four على طول،
مش في four طلعنا منها، قبل شوية، بيكون بعد ال four
على طول، لحظة إيش ال if condition بتقول، اجريلي
إياها، إيش بتقول if condition؟if beak holds a
digit إيش يعني if beak holds a digit يعني مش هفوت
جوهان إلا إذا كانت digital الخانة اللي لجطها ال
beak إلا إذا كانت مشروع number غيرك مش هفوت شفت
إيش معناها؟ لازم تكون إيش؟ digit طب افترضي كانت
letter يعني افترضي طلعنا من ال spaces و ال height
ب letter مش هيفوت في كل ال Fطب ليش مافاتش في كل ال
.. لأنه عارف إن هاد ال letter لا تشكل number
وبالتالي ليش أفوت أضايق واجت هنا؟ روح على المكان
اللي بيقولك لو letter شوفتي كيف؟ لكن لو كانت digit
في الأساس معناه هذا مشروع token اسمه number معناه
بدنا هنا نفوت عشان نفهم هاد ال number إيش قيمته
إيه جدش حدوده كل التفاصيل شوفتي كيف؟ الآن إحنا
بدنا نفرض إنه واقف ال look ahead على مين؟على خمسة
خلاص عفوا ال B واقف على مين على خمسة الان ايش
بقوله if B holds a digit اول ما بدأش بقولي V تساوي
Zero اصبروا عليها ال V شوية ده قيمة بتدايش بتساوي
Zero هنقوليش do while تعالى شوفي ايش اول سطر هنا
قال قال V اضربيها في عشرة Zero في عشرة Zero زاديش
بقولي كانهو قراها الآن الخمسة ك character بدّوا
قيمتها الآن كانتجر فإيش قال؟ قال الخمسة كانتجر
زائد zero إيش بتصير ال V؟ ال V بتصير خمسة طبعا يا
بنات كيف أنا ممكن أجيب قيمة الخمسة من character
أحولها لانتجر؟ عندك حلول كتيرة عندك الجامعة جاهزة
أتحولها مباشرة من character ل digit، أطول، ممكنأنا
حتى لو بديش بالجابة أنا معاك خبر لو أنا طرحت ال
character خمسة minus ال character zeroهيديني جاوب
خمسة، ليش؟ لأن هذا ال ASCII code تبعه إذا سبعين
مثلا، هذا إيش بيكون ASCII code تبعه؟ خمسة وسبعين،
يا العكس المهم، تمام؟ فبطرح وحدة خمسة وسبعين، فلما
أطرحهم من بعض، لأنهم ورا بعض في الجدول، فببحثوا عن
ال pure خمسة كانتجة، يعني قصة عملها مش هالقصة
الكبيرة، ومع ذلك الجابة مريحاكي، وبس بتقولي لي
حولها لقيمة وخلصناواضحة؟ فالمهم اللي لازم تتحول
لقيمة لأن هي إيش هي قراها كقرا بدوش هي character
بدوها قيمة فبقول حاوليها لقيمة أحيانا هقولك ليش
ضرب في عشرة أصبر شوية Zero زائد الخمسة إيش صارت؟
خمسة الآن إيش بقوله ال beak بدو يمشي لمين؟ وين ال
beak؟ بدو يمشي للي وراها افترض اللي وراها اتنين
مثلاالسؤال هيرجع اللوب ولا لا؟ طالما دجت ارجع، ليش
ضربت في عشرة؟ انها اتبترت خمسة، صارت خمسين، لأنها
طالما انزحت، بيصير عشرات، فعشانكش قال اضرب السابقة
في عشرة، فصارت خمسين واجمعيلها من؟ اتنين، صارت
اتنين وخمسين، الآن بيرجع بجرى مين؟ ال character
اللي وراه، افترضي كان واحدهيرجع يضرب 52×10 يصبح
520 وبضيف عليها الواحد وبتظل العملية تمشي متى مش
هيدخل لغاية ما ال بيك تيجي حاجة مش digits لأنه
بيقولك طول ما digit لفّه أجت حاجة مش digit بطلع
إيش بدنا نطلع نسوي؟الناس اللي استدعونى بيدا قول
لجهة لجهة token منه number وال value تبعته هيه في
V إذا بدك إيها اللى بيكون حسبها قبل شوية شوفت كيف
لجهة number وحلجه ال value بتاعته عارفة لو أنا
مابتهمنيش ال valueماحدش بده ال value كان بيعملش ال
loop هذه خلاص على طول بيلاقي ال number بيجمع ال
digits و بيقول return number و خلصنا لكن ليش عملت
ضرب عشر أو القصص هذه لأن برضه في ناس بدها ال value
فهو حسب كمان ال value و رجع الشغلتين لمين طبعا
ديروا بالك يا بنت بيرجع ال lexical للاستدعاء اللي
في حالتنا ال bursar يعني القصة كيف بتتم القصة كانت
تالي بيجي ال bursarبتصل على مين؟ على الـ lexical
هاتلي token فبنسيب مكان التنفيذ لنسيطعه function
من البرسل و بروح نفذ في code مين؟ في code ال
lexical ببدأ ال lexical فراغ ارميه .. فراغ ارميه
.. فراغ ارميه ال new lines كله بيخلص اه digit
بيفوت على تبعت ال digit بمشي .. بمشي .. بمشي لغاية
ما يوجد ال digit بالكامل و يعرف value تبعته و
بيقول يا جماعة خلاص انا بقول لبرسل اللي بعته بقول
اتفضل انا لجيتكnumber هيو و value هيو و bye bye
السلام عليكم و برجع ال lexical الان بنرجع لمن احنا
لل bursar بنكمل بدي كمان مرة token بعمل calling
كمان مرة بتمشي العملية زيك بستمرار الاتنين بيمشوا
مع بعض ال bursar بستدعي lexical ال lexical بعمل
مهمة برجع لل bursar بمشي ال bursar كوده برجع تاني
مرة شوفتي كيف باختصار طيب وضح هذا ال code كيف كيف
طلعنا ال numberفي أي سؤال عليه؟ ليش درف في عشرة؟
الان انا لما بتكون عندي خمسة لو خانها واحدة ايش
بتكون قيمتها؟ خمسة الان طالما بدنا نمشي خطوة على
اليمينلأنه في رقم تاني هذه بتبطل قيمتها خمسة بيصير
قيمتها خمسين عشانك بضربها في عشر السابق عشان تصير
خمسين و يضيف عليها اتنين ايه صارت؟ اتنين و خمسين
الحين ال V صارت اتنين و خمسين طب لاجينا في خانة
واحدة هذه بطرت اتنين و خمسين هذه صارت خمس مائة و
عشرين فبضرب كل ما بيلاقي اشي بضرب السابق في عشرة
زي أزاحة عشان الخمسة خلاص خمسة مشي خطوة مش هيلاقي
دي جيت بطلع بيرجع ال V اللي هي خمسةضرب السفر في
عشرة سفر في عشرة زائد خمسة شفتي كيف؟ طيب أنا بس
سؤال عشان أختم و لو إن ما خلصنا عشان الطلاب أخدنا
أكتر كمان أن الطلاب أخدنا ال ID و ال keyword وشغل
كتير أخدنا من الطلاب عشان كل شي بيصعب أكل الأحوال
أكل الأحوال الآن سؤال اللي بدأ أختم فيه هنا لما
بنطلع من هذه ال loop لما بنطلع من هذه ال if
condition و هذه ال loop ال peak when بتكون؟يا إما
على space يا إما على character داني أو token تاني
ال beak هتكون واقفة على حاجة بعد ال number ممكن
تكون space وممكن تكون letter وممكن تكون أي شيء
وبالتالي لو حد استدعى ال lexical كمان مرة هيكمل
انتبهي مش هو لاجى الان number يعني افترض ان انا
كاتب زيكى بنات افترض ان انا كاتب 52 زائد على طول
بدون فراغة ال beak مش موجف على زائد بيكون خلصت هذه
مظبوطة لا لأ فبروح بيرجع إيش لاجي هنا 52 لو حدا
بعد المرة هذه استدعى ال lexical كمان مرة ال
lexical بيكمل تكميل مش بعيد الملف من الأول مش
بيكون ماشي ال beak بيكمل تكميل إيش يعني بيكمل
تكميل يعني بنرجع من الأول لو كان واقف على فراغات
بمشي عنها زي ما اتعلمنا و neuron بمشي عنها لغاية
ما يلجط اشي و بدخل من الأساس هو واقف على letter مش
هيفوت في ال four تاعة الأساسية هذيك ايه روح اللي
بعدين؟ ايه روح اللي بعدين؟ شوفتي كده؟ بتكوني فاهمة
القصة يعني تكميل ما بعيدش كل حد بيساعد ال Lexical
بيطلعله و البيت بيبقى واقف عند نقطة بيرجعش بكمل
لغاية ما يخلص كل الملابطماشي يا بنات؟ طيب بنات
النقطة هذه كلها اللي شرحناها اليوم ضروري تعرفوه
كويس و مرة الجاية راح نعمل code Java مرة الجاية
هنكمل و نعمل code Java فضروري هذه الأمور تدرسوها
كويس ان شاء الله في أي سؤال يعطيكم العرفية