بسم الله الرحمن الرحيم اليوم إن شاء الله بدنا
نستكمل الدارس الخاص بال Lexical Analyzer يمكن
المحاضرة اللي فاتت شفنا البداية البداية كانت سهلة
جدا اللي هي عملية التخلص من ال spaces و ال new
lines و ال tabsبس اللهم لاجينا ان عند الـ new line
كان يحط counter ويحاول يعد كل ما يلاقي new line
يزيد ال counter هذا بواحد ليش؟ عشان لما في
المستقبل نلاقي غلط يكون عارف مكان الغلط هذا وين
موجود زي ما بيصير في عملية الكشف للأخطاء في ال
compilation تمام؟ قولنا هذه ال loop هيدخل فيها طول
ما بيلاقي space بيبقى يمشي في ال loop أو ال new
line أو ال tabs لغاية متى؟ لغاية ما يطلعب
character مش space ولا line ولا new line عشان يقدر
يكشفوا شو هو طبعا في ال .. برضه في المناسبة أقولنا
أنه ممكن ال code هذا الموجود يتعدل على أساس أنه
كمان أشيل ال comments لأن المفروض أن ال lexical
analyzer مش بس بريحنا من ال spaces و ال new lines
و ال tabs و الأمور هذهحتى لو فيه comments ماله
برضه بيشيلها الخلاصة أنه بيحاول ال lexical يلاقي
ال token ويقول اتفضل هي نلاجة ال token طبعا الأن
أول ما بمسك character معناه هو لا space ولا line
ولا new line يعني بداية ال token بيكون لاجئه بيطلع
من ال loop هذه بتاعة ال spaces و ال line to line
اللي كتبناها المرة اللي فاتتالآن الشطارة أنه بده
يحاول يعرف هذا ال letter أو هذا ال character عفوا
هو بداية أي token هل هو number؟ هل هو identifier
أو keyword؟ هل هو قائم بذاته؟ احنا طبعا المرة اللي
فاتت فرضنا فرضية لازم نظرنا متذاكرينها و احنا
بنعمل code اليوم أن ال tokens اللي عندي هم يا إما
number يا إما keyword أو identifierأو كل token
قائم بذاته هي اللي احنا فرضناها هيك هنشتغل في ال
code تبعنا تمام هتيجي تقولي طب الأصغر و الأكبر ..
الأصغر أو يساوي أكبر أو يساوي هقولك لازم تعملي
تعديل معين في ال code لأن احنا ما فرضناه أزاي احنا
فرضناه أننا بنطلع ال number أو بنطلع ال keyword و
ال identifier و الباقي بنعتبره قائم بذاته أي اشي
تاني بدي كيام انا لازم اتعدلي على ال code الموجود
تمام المرة اللي فاتت خلصنا برضه من codeال number
لجينا الموضوع simple خالص أول ما بيلاقي digit
بيفوت جوا إيش بيسوي بحاول يمشي عاد كل ما بيلاقي
digit معناه هو جاعة بيكبر في الرقم تبعه كل ما
بيلاقي digit معناه بيكبر في الرقم تبعه فبيصير هنا
يعمل عملية حسبة لهذا ال value بتاعة هذا الرقم
والحسبة لجيناها سهلة كل مرة بضرب ال V بعشرة عشان
يزيد الوزن لأن هذا انتقل من الأحد إلى العشرات مثلا
و بيصير يجمع عليه القيمة الجديدة و بيظل في العملية
هذه يلف لغاية ما ييجي حاجة مش digit خلاص الآن بعرف
أنه في لجأ token اسمه number فعلى طول بروحش برجّه
بقول يا جماعة لجأت انا token اسمه number و ال
value تبعته مخزنة في V باختصاروهذا اللي اتكلمنا
فيه المرة اللي فاتت الان طلع من هنا في ملاحظة مهمة
ال peak وين واقف لما طلعنا من هذه ال function واقف
على أول character بعد ال numberيعني لو استدعينا
احنا ال lexical مرة تانية هيكمل تكميل من ال token
اللي ورا ال number ويفحصه طبعا هيعيد من أول إذا
فراغ مش فراغ إذا character المهم هيشتغل من جديد بس
بيكون واقف أكيد وين ال beak بعد أيوة أول character
بعد ال token اللي لجأ عشان يكمل تكميل من عنده الآن
طب بدنا نفرض أنه كان ال beak من الأساس من حد ما
طلع من ال spaces و ال new lines و ال tabs طلع
بقيمة مش digitمعناها مش هيفوت مش هيفوت هنا ليه؟
لأن ال بيك hold a digit عشان يفوت هو مش digit يبقى
مش هيعدي هنا بظهر طب وين بده يعدي؟ أكيد بده يعدي
على دائرة تانية أو block تاني يفحص شو هذا ال
character عشان نبدأ نشوف شو هذا ال token احنا الأن
بنفرضش أنه ممكن يكون identifier مثلا فلو فرضنا أنه
مثلا ال character البيك الحالي هو letterماذا تتوقع
ان نفعله؟ هذا معناه ان هذا مشروع token من نوع كلمة
سواء ممكن تكون ID او تكون keyword فالمفروض ان يكون
في code الآن خاص بمين بال ID او بال keyword
باختصار عساس بال letter يدخل ويفحص تمام؟ طيب الآن
بس في الأول قبل ان نروح نشوف ال code في معلومات
عامة لازم نعرفها كيف احنا بدنا نميز ال keyword عن
الـ identifier طبعا لما نجي نكتب مثلا كلمة I F F F
هذه مش هتبرها keyword هذه هتبرها identifier
والحروف المكونة لها I F F Fلكن لو كتبت I small مع
F small لحالهم هذه مش هيعتبرها identifier هذه
هيعتبرها keyword طيب السؤال كيف بده يميز أن الكلمة
اللي لجاها هي keyword ولا هي identifier عشان يميز
إيش رأيكوا؟ إيش بإيش؟ عندكم اقتراحات؟ يعني
بنخزن في جدوة ال keywords نفس ما قلت هنافي ال
symbol table تمام يعني كويس الاقتراح اللي اقترحته
سليم انا ال symbol table تبعي اللي بعمله اللي بخزن
فيه ال identifiers اول ما ببدأ البرنامج تبعي بروح
بحط فيه كل ال keywords في الأول خلاص و بقول مثلا
ال while هذي keyword while ال if هذي keyword ifالـ
false هي keyword false مثلا الـ do هي keyword do
الأخرى اللي بحط في الأول خالص كل الكلمات عن ال
keywords و أن هذه ال keywords ليش أنا بعمل هذه
العملية؟ لأن احنا بنقول أو قولنا زمان أن أول ما
بيلاقي كلمة بيروح على ال symbol table بيدور عليها
إن لجاها بيروح بيرجع المعلومة اللي عليهافتخيل إيه
أنا معرفها while ومعرف دو ومعرف إشي ولاجيه أنا
كلمة while أكيد هيلاجيها وين؟ هيلاجيها في ال
symbol table وروح يرجعليها ك keyword ليش؟ لأن أنا
مخزينها إيش؟في الـ symbol table كkeyword الآن لو
لجاها مش موجودة إيش هيفهم إنه هذه مش keyword هذه
أصبحت identifier فبروح بيخزنها على أساس إنها
identifier هي باختصار يعني الحل simple وسهل إنه
ألجأ لل symbol table و أعمله initialization طبعا
هيك أنا بميزهم الأثناء بعض طبعا في طرق أخرى ممكن
تمر معانا في الشبات المتقدمة لكن خلّيني أقول هذه
الطريقةعملية كتير و efficient كتير و مافيش فيها
مشكلة و سهلة جدا تمام طيب الآن بس في شغلة مهمة انه
انا ايش باستفيد كمان من ال symbol table وهذا
هتكلمنا فيه قبل هيك لكن هي و أنا بعرضه كمان مرة
بقول انا ال symbol table بعملي single
representation زي ما قلنا لل object كله يعني انا
عند ال object مش في معلومات كتيرة IDمش عارف مين
مين مين مش فيه معلومات كتير أنا لما بروح بحط كل
المعلومات في symbol table و بس برجع عنه reference
واحد key واحد أنا بعمل single representation له
فهذا بريحني في نقل المعلومة باستمرار أنه أنا بعمله
تمثيل أحادي لكل الكلام الموجودمش بس كمان فائدة
فائدة جديدة اليوم اتعلمناها اللي هي ان الـ
reserved words اللي هي ال keywords بقدر احجزها من
البداية جوا هذا ال symbol table و خلاص ك keywords
و بارتاح منها يعني عمللي ال symbol table حلول مهمة
إضافة إلى الكلام اللي كنا نقوله قبل اللي ال
history تبع ال identifier بين مابينش كم مرة شفته
ماشوفتش يعني لكن احنا النقاط المهمة انه بيصير في
single representationلهذا ال object تمام و بيصير
أنا ماعندي مشكلة في موضوع الكلمات المحجوزة أو ال
keywords لأن ببساطة ببدأ البرنامج أو ببدأ العملية
تبعتي و هم موجودين في ال table ك initialization و
خلاص كل كلمة بتطلع معايا إذا مش موجودة في ال table
شو معناها؟ ان هذه identifier فبخزنها ك identifier
و بكملإذا لاجيتها من الأول ما بدأت في الـ Table ما
هي أنا مخزينها الـ while keyword و نوعها keyword
فخلاص برجعها بنوعها أنا مالي إيش ما يكون مسجل
قدامها برجعها بشكل كامل وبهيك برتاح من المشكلة طيب
تعالوا الآن نشوف التفاصيل أكتر كيف ممكن نعمل هذا
ال code عشان أقدر أعمل هذا ال code بدي أذكرك بحاجة
اسمها hash table إيش ال hash table يا بنات؟ أه إيش
ال hash table؟خدتوا برمجنتو اه ايش ال hash table؟
طيب
اوضح كمان، بدنا اوضح، إجابة أوضح كمان حاجة إلها
key of value حاجة إلها إيش؟ key of value طيب، وإيش
كمان؟ طيب، قالو انتوا يعني إجاباتك كلها بتصب في
الإتجاه الصحيح خلّيني أقول ببساطة ال hash table
اخش باختصارالـ hash table خلّيني أقول عبارة عن
جزئتين رئيسيتين الجزء الأول بنسميه key تمام أنا أي
object بده أخزنه جوا لازم أنا أقدر أوصله من خلال
key على فرض أن ال key هو الحروف المكوّنة لهذا ال
object مثلا حروفهفلمّا أجي أقول XXX هذا الـ key و
بحط كل تفاصيل ال object هنا طبعا قد يكون من ضمن
التفاصيل تبعته الحروف المكونة له مافيش تعارض يعني
ماعندي مشكلة يكون الحروف المكونة له هي ال key و في
نفس التوقيت هي معلومة مقترنة جوا في هذا ال object
ماعندي مشكلة المهم أنه لازم يكون في أنا عندي key
إيش العبرة من ال key هذا أنه وجدت ما بدي أنا أدور
جوه ال table على هذا ال object كل اللي بسويه
بستخدم function جاهزة اسمها get و بحطله مين ال key
فبتريحني هذا ال function على طول بتروح تدور في ال
symbol table هذا ان ان ان انا مخزن جوه ال XX في اي
مكان في هذا ال symbol table هذا ال function ايش
بتسوي بترجعلي ال object كله مش هنا فيه انا مخزن
objectفي هذا المكان انت بس في ال function get بس
بتحط حاجة واحدة ايش ال key اللي بيوصلك للمكان اللي
بيديك منه ال object زي ال primary key في ال
database شفتي كيف فالان انا لما بقوله XXX بروح
بفتش جواالـ Symbol Table هل هذه الـ key تبعها XX
موجودة؟ أه موجودة فبروح بمسك كل هذا ال object و
برجعليه من ال function get طب افترض انا قلتله get
مثلا قلتله X تساوي get YYY مثلا مش هيلاقي YYY
هيقوللي مش موجود هيرجعلي null مافيش شيء شوفتي
فعمليت اني اعمل retrieve للمعلومة من جواته سهلة
جدا و جاهزة بس انا لجته خلاص في ال hash table هذاو
ايضا عملية وضع البيانات فيه سهلة جدا من خلال
function اسمها bot لكن في ال bot هنا انا بدي احطه
arguments ال argument الأول ال keyالـ argument
التاني ال object كله فلما أنا أقول له جملة bot yyy
و أدّيله أنا object هيروح جوا ال symbol table إيش
يعمل؟ هيعمل record لمين؟ ل yyy و كل المعلومة هاي
أو كل ال object هدا وين بيخزنه؟ هنا فعندك
functionين رئيسياتBot إذا بدك تخزني إشي بس هنا بدك
تنتبه إنه لازم two arguments لأن لازم أنا أحدد مين
هو ال key تبع هذا ال object و بيخزن ال object على
جباله أو ال value على جباله ال function التانية
الرئيسية get و اللي هي بدها منك بس one parameter
اللي هو فقط إيش ال key عشان هو يروح يجيبلك مين
يروح يجيبلك ال object بشكل كامل هذه باختصار عشانك
بنقول دايما ال hashtag بالماله سهل خالص سواء في
وضع المعلومة أو في أن أسحب المعلومة وكمان مرة يا
بناتما تستغربيش لو لاقينا الـ yyy اللي هي key مقطع
من ال object نفسه ليش أنا بقول هذا الكلام؟ لأن ال
identifier هذا object مش جواته الaksim المكونة له
صح ولا لا؟ فانا ماعندي مشكلة أمسك الaksim تبع ال
identifier هذا واعتبره كمان شووأعتبره key فأكون
أنا ماسك هنا ال key و انا حاطه كمان مرة ضمن ال
object مافي اي تعارض فال object شيء المعلومات شيء
و ال key اللي بيوصلني لهذا ال object شيء اخر و
احنا هنا في ال symbol table هنتعامل ان ال key اللي
يوصلني للكلمة عشان اخزنها او اسحبها هي الحروف
المكونة لهذه الكلمة يعني لو بدى ادور انا مثلا على
كلمة while ايش بقوله ال key تبعها whileشوفتي كيف؟
زي هيك بدي أدور على كلمة position اللي هي معرفة ID
ومحطوطة جوا بقوله get و بكتب كلمة position ليش؟
انه يروح جوا ال table وين ما يلاجيها يرجعليها
معلوماتها كلها طب ما لاجهاش، خلاص، بقولي null، ما
لاجيت هاش واضحة كيف؟ طيب، الآن إيش تتوقعي بدنا
نسوي لو كان ال بيك واقف على letter أنا بتوقع بدنا
نعمل التاليوقولولي انتوا صح ولا غلط ال beak واقف
على letter صح؟ معناه هذا بداية كلمة سواء كانت ID
ولا سواء كانت QR الان اش هسوي انا هقوله امشي للي
وراطب اللي وراه letter أو digit معناه عند ال
identifier أو الكلمة مسموح تكون حرف وراها حرف أو
رقم صح ولا لافنش هقول لاجيت اللي وراه رقم أو
letter هقوله كمل هذا جزء من الكلمة تبعتي رقم أو
letter كمل كمل كمل لأمتى هتظن أكمل؟ لما ألاقي
character لا هو letter ولا هو digit هوقف و أقول
هذه كلها على بعض الكلمة تبعتي اللي بديهاأول خطوة
ستفعلها هي تدوري على كلمتك character after
character بعد كلمتك بعد كلمتك بعد كلمتك بعد كلمتك
بعد كلمتك بعد كلمتك بعد كلمتك بعد كلمتك بعد كلمتك
بعد كلمتك
بقوله return للإستدعاني للـ parser خلاص بقوله
اتفضل لجيت هذه طبعا هذا ال object إيش بيكون جواته
إذا كان هو ID والحرف المكونة إله لأنه موجود من قبل
أنا مخزن و كنت أو كان مخزن في ال initialization أو
حتى إذا كان keyword while أنا ماتعرفش حالي بقوله
لجيت لك هاي ال while بكل تفاصيلها فأنا لأ هقوله
keyword ولا هقوله identifier أنا هرجع ال object
بما حملبكل تفاصيله والله إذا كان هو keyword ما هو
رجع ك keyword إذا كان هو ID هو رجع ك ID تمام هذا
لو كان موجود يعني هو موجود مسبقطب افرضيه ما
لاجيتوش يعني أنا عملت ال function get لهذه الكلمة
اللي جيتها ما لاجيتوش موجود هنا هتعمل خطوطين زيادة
خطوة زيادة الخطوة الأولى بدي أقوله بدي أخزن هذا ال
object في ال symbol table هذا أو في ال hash table
فهبعت key اللي هي حروف الكلمة هاي و هبعت ال object
كله و يتخزن و بعد ما يتخزن ايش هعمل؟ هعمل عملية ال
return للمكان اللي انا خزنت فيهشوفتي كيف؟ يعني هنا
في خطوة زيادة في حال أنا ما لاجيتهش بخزنه و بحط
معلومته ك identifier انتبهي لأن في الـJabber اللي
أنا بدي فيه مخزنين كإيش ك keyword هذا لأنه جديد و
ماكنش في ال initialization موجود معناه بالنسبالي
identifier فروح بخزنه ك identifier و بحطه ديوهار
ال symbol table و بروح بقوله return هاي باختصار
اللي هنسوي تعالوا نشوف ال code كيف مكتوب و هناخده
اليوم ان شاء الله بال Java كمان شوية أخر محاضرة
الانش بقولك بس خلنا نخلص الفكرة و بعدين بنسمع
الأسئلة بيك holds a letter أه إيش بده يصير؟ قالك
أول حاجة بدك تعمليها collect letters or digits
into a buffer بيك يعني كل ال letters و ال digit
اللي وراها خديهم و حطيهم في bufferيعني هناك تعمل
زي for loop أه letter or digit حطه في ال buffer
letter or digit حطه في ال buffer letter or digit
حطه في ال buffer يعني لغاية ما يبطل letter or
digit الآن هذا ال buffer إيش بدنا نعمل فيه يا بنات
انت إيش يعني buffer يعني جاعدوا ال characters فيه
انفرجين عن بعض أنا بدي أجلبهم ككلمة ك string ففي
function جاهزة في الجاها حاوليها ل string زي ما
هنشوف تحول ل stringطب إيش أفرجات؟ قبل شوية ماكانوش
كلمة كانوا حروف مقطعين موجودين في buffer أنا لازم
عشان أدور عليه في ال hashtag اللي موجود أو مش
موجود لازم أحاوله ل string لازم أشوفه ككلمة عشان
هيك مانستغرب لو قلنا ال S هي عبارة عن ال string
المكونة من B من الحروف المقطعة هدول يعني ال S الأن
لم لمتهم في كلمة طبعا بالجابة هنلاقيه function
جاهزة to string بعدين هشوفها كمان شويةالمهم أن
أصبحت الـ S إيش تمثل؟ الكلمة اللي أنا لجيتها الان
إيش هنعمل؟ بدنا ندور عليها عشان هيك إيش قلتله؟
قلتله استخدم ال words طبعا ال hashtag ال words
يعني ال symbol اللي هنسميها words اللي مخزن
الكلمات dot get و إيش حطت من الجثين؟ الكلمة اللي
أنا شوفتها قبل شوية لأنه يمكن أنا شوفت whileفلو
شفت Y ما هي keyword صح هيروح يرجّه ليه لقاها لإن
مخزّنها ك initialization أنا keyword مثلا فبغض
النظر أنا الكلمة اللي شفتها بقوله اتفضل دور عليها
وإذا لقيتها رجعليها الآن وين رجعها ليه؟ في W الان
W واحدة من تنتين يا null يا object إذا null إيش
يعني؟ يعني ما لقاهاشطب إذا مش null معناها لجأ
object و رجعه فإذا كنت كاتب أنا while هيكون رجعلي
keyword في هذا المكان إذا كنت أنا لأ كعمل
identifier و مخزنه هيرجعليا ك identifier لأنه لجأ
فأنا مايعنيش أشي اللي لجأ خلاص لجأ برجعليا ك
object إيش المطلوب مني أسوي أقوله يالا يا object
كلك على بعضك مع السلامة return للإستدعاني خلاص هاي
ال object كامل فعشان هيك إيش بيقولإذا الـ W مش
null خلاص return W يعني لمن رجع الـ W؟ للبرسر،
للإستدعاء خلاص، الآن الـ W إيش فيها؟ فيها الـ
token كامل إذا كانت while، حيكون while و keyword
إذا كانت identifier أنا مخزنه، حيرجلوا إيها
identifier و هاي الـ Xين تبعته، المهم الـ object
هذا كله حيرجع هذا لو أنا إيش، لجيته في ال tableطب
السؤال مالاجيتوش معناه مش هيفوت هنا مش هيطلع من ال
code هيكمل إيش بقوله عاد؟ إيش المفروض أقوله؟ الآن
هقوله خزنه بس هقوله خزنه ك ID ورجعه أه طب خلاص ال
keyword بلعبش فيه هو الآن كل كلمة بلاجيها طالما مش
keyword مش موجودة بتخزنها الآن ك identifier عشانكش
بقوله خلاص enter the key طلع شوف كيف خزنها بعدالـ
key اللي هو الحروف المكونة اللي هي S وخزّن ال
object كامل لأن ال object حتى الآن ما نتعامل معه
أنه من نوع identifier وهي حروف المكونة له فهو بعت
مين كمان مع ال object كامل ماحدش يقول لي ليش بعت
ال S مرتينالـ S في أول مرة كـ Key فقط عشان يوصّلني
لل location لكن شوف فعليا اللي اتخزن ال object
كامل بكل تفاصيله بال Lexeme تبعه بال type ايش ما
يكون فيه معلومات كلها موجودة فيه object لأنه لما
انا هيرجعهيرجّه لل object كامل بكل تفاصيله بال
Lexeme فمابديش أفصلهم عن بعض أنا بس بدي key فلا
مانع إنه يكون ال key أصلا معلومته موجودة هنا لا
مانع مافي مشكلة هذا key له طريقة استخدام وهنا له
طريقة استخدام هنا طريقة استخدامه كجزء من هذا ال
token للناس اللي بدهم إياه الحروف المكوّنة له هنا
طريقة استخدامه فقط للوصول إلى المعلومة بس إنها
موجودة أو مش موجودة فهذا زي primary key بس مش أكتر
إنه يوصلي تمام طيبالان .. تمام
الان ايش ساويت بعد ما انا حطيت في ال symbol table
او في ال hash table ال value ايش ده اقوله؟ return
ال token مين هو؟أنا برجع الـ token الآن اللي هو
الـ token مكوّن من إيش؟ من جزء إتين إنه identifier
وهي الـ Xيمت تبعته تفضل ها يوم عندك هي أني رجعتله
إيش؟ ال token تبعه باختصار واضحة ال code، هنا ال
code مش صعب جدا، مافيش فيه إشي فيه الآن أي سؤال
كيف اشتغلنا هنا؟ طبعا هشوف هذا الكلام كمان شوية
بالتفصيل ك Java بس في الأول لنفهم ال pseudocode
تبعه
IASA طيب الآن احنا لما كنا بنقول بدنا نبعت لل
بارثر ال object و ال object من نوع identifier انت
ايش هتبعت لل بارثر؟ هتبعت لل بارثر معلومتين صح؟
هتقولولي يا بارثر هي IDوالحروف المكوّنة فهذا
الحروف المكوّنة جزء من هذا ال object فكله على بعضه
object يبدو ينبعت بالكامل او يجي بالكامل الان انا
هذا ال object عشان اخز نهان بدي key يوصلني اليه او
يجيبليه فاحنا اخترناالحروف المكونة اللي هي اسم
اختارتها ك key فما .. فبديش حد يفكر عشان اختارتها
ك key انه ممكن ألغيها اقول بديش إياها لأ هذا شيء و
هذا شيء هذه جزء من object و اختارتها ك key طيب أي
سؤال واضح الأمور نكمل طيب الآن احنا السؤال متى
هيطلع من هذا ال functionفي حال انه لاجأ token من
نوع او ID او Keyword حسب مش أنا مخزن صح ولا لأ طب
السؤال لما يطلع من هنا ال beak وين بيكون واقف؟
عالأول character بعد هذه الكلمة، ليش؟ لأنه مش هو
ضال يمشي letter or digit letter or digit لما لاجى
حاجة لا letter ولا digit قال stop فأخد كل الكلمة
تبعته، لكن البيكسر واقف وين؟ على بداية الجديد، على
character جديد فمتى ببحث هذا ال character؟ في
اللفة التانية، لما حد يستدعي ال lexical كمان مرة
بيبدأ من مطرح ما وقف، سواء كان واقف على فراغ ولا
واقف على character، إذا واقف على فراغ ما بيصير في
code يمشي عنهفهيبدأ من جديد بس المهم الفكرة أنه
بيكون البيكوين ماشي خطوة زيادة عن ال token تبعه و
جاهز للفحص من مطر عموزه في المرة القادمة ماننساش
المعلومة يعني طيب الآن طيب .. اه .. البيتر الموجود
اللي اللي اتت فتشهد اكتر من البيتر اللي اتت
لحظة شوية اصبر معايا اصبر معايا الان لو انا كاتب
F99 هذا بالنسبالك identifier ولا digits؟
identifier فهو لما لقى ال F فات
مظبوط؟ الآن طول ما بشوف digits خلاص عارف أن هذا مش
number هذا جزء مقطع من ال identifier فعشان خلاص
هيعلق في الأرقام ويعلق في ال letters خلاص هذا جزء
من ال identifier لما ييجي حاجة لا هي number ولا هي
.. لا هي عفوا لا هي digit ولا هي letter بيعرف أن
هذا ال identifier كمل الآن خلاص في ال level HD ده
ببدأ من جديد شوفتي كيف؟ فخلاص بمشي طب لو كان بعدي
بتسعةمافيش letter ببدأ بتسعة عشانك عارف حاله بده
number فإفرضي له يساوي بعدين خلاص بوقف بعتبرهاش
التسعة وليه ساوي في number فبعتبر هذا كرهكتر جديد
وكذا شوفتي كيف تمام
طبعا يا بنات هم برضه في اللغات الجديدة مش اعتباطا
لما بيجي بشوتوا بعض الشروط في ال languages الجديدة
عشان يسهل ال code و يصير efficient أكتر يعني ليش
هو قالك مايبداش ال letter ال identifier مايبداش
مثلا برقم؟عشان مايصيرش خربطة أصير أنا أعمل فحص
زيادة هل هذا زي ما قالت رقم ولا مقطع من من من
identifier فبقولك ممكن يصير إشكالية عشانك بيحاولوا
يبعدوا عن الحاجات اللي ممكن تشتت وتعمل إيش بطء أو
عدم قدرة يكون ال code سريع مش بس هيك تعالي تطلعي
مثلا لما يقولك ما تستخدميشإن ال keyword تكون نفسها
identifier ممنوع تستخدم ال F تكون .. في language
بتسمح أن ال F تكون identifier و ال F تكون keyword
لكن languages جديدة بتسمحش ليش؟ لأن لو سمح معناها
بيصير في process كتير كل ما يلاقي identifier طب ما
يمكن يكون هذا keyword فكيف بدنا نعرف؟ هذا هنتكلم
على تفصيل شغالة في محاضرات قادمة بس الفكرة يعني
بتلاحظ إنه دائما الأشياء اللي مالهاش داعي بيصير في
languages جديدة يقولك ممنوع تعملهازي أيه؟ يعني
ممنوع تسمي ال keyword ب identifier وحناخد أمثل
نوضح الصعوبة هذه في حينه لما ندخل ال chapter
الجديد ان شاء الله لاحقا واضح كيف؟ طيب على كل حوال
نرجع نخلنا في مثلنا المهم الآن أنه كمان مرة طول ما
في spaces ال four اللي فوق الأولانية بتلفبنطلع
منها و احنا ال character حاجة غير ال space أو ال
new line أو ال tab قلنا هنفحص في الأول هذا ال
character digit ولا مش digit إذا ماكانش digit مش
هيفوت فوق صح؟ هيفوت هنا إذا كان letter طب إذا كمان
مش letter برضه مش هيفوت هنا بده يكمل الآن ال code
إيش تتوقعي اللي بنسويه؟أيش ال assumption تبعنا؟
بدنا نعتبره ايش؟ بدنا نعتبره token قائم بذاته
فبتقوله انت token اتفضل ارجع باختصار هي ال code
هيخلص الان يعني الان انا مش هوصل وينه؟ يعني انا
الان وين ال ..
تمام خلّي نرجعلها بس تذكير هرجعلها اتكلم فيها لان
بس اصبروا شوية الان ايش بده يسوي؟ يحط ال code كامل
بتاع ال scan بتاع ال lexicalإيش قال؟ قال أول ما
بنبدأ، بنبدأ بال code اللي شوفناه تقع ال four in
أو ال four اللي فوق فهذا إيش بيسوي ال four اللي
فوق طول ما spaces, new lines و تابز بتلاقي بيعملهم
skip مش هيسيب السطور هاي إلا هو ماسك في character
غير ال space و ال new line و التابز هيشوف هل هذا
بداية number ولا لأ إذا بداية number هيفوت وين؟ في
ال code هذا، طب هو مش بداية numberهل هو بداية
letter يعني هو letter يعني بداية word يعني بداية
identifier ولا keyword إذا آه هيفوت hand ويطلع ب
return لجد إشي طب إذا برضه لأ إيش قلنا هنفترض أن
هو token قائم بذاته فإيش قال؟ قال خلاص ال T هي
عبارة عن token اللي هو هذا ال character انسيلي هذه
مؤقتا، انسيليها شوية إيش في الآخر بيقول return؟T
يعني باختصار هذا الـ token هو token T اللي هو الـ
Peak و Return لمن؟ لل بارسل أنه اتفضل هذه ال token
الزاد أو الناقص أو الدرب أو القسمة الآن هنا في
ملاحظتين الملاحظة الأولى أنه هنا ماعملش حساب ال
tokens الأخرى اللي ممكن تكون من أكتر من حرف زي
الأكبر أو يساوي أو أصغر أو يساوي أو يساوي أو يساوي
لو احنا مطلوب مننا نعدل على هذا ال code عشان يعمل
يساوي يساوي هتصير تعدلي من جابل هذه المنطقة تصير
احنا إذا كان number تفوتنا في ال number إذا كان
letter فوتنا في ال letter تصير بعدك إذا كان أكبر
تفوتي في دائرة الأكبر إنه أجاوز وراها يساوي return
أكبر أو يساوي فبصير في تعديلات في ال code إذا بدك
تعمل حساباتك ال tokens الممكن تكون من أكتر من
characterلكن هنا ال assumption تبعنا في هذا ال
code show أنه خلاص إذا مش number مش كلمة هو token
قائم بذاته عشانكي تلاحظ إيه هو خلص و ختم على طول
ماعملش فحص لإن أنا بعلمك لو بتعدلي بتعدلي من هنا
في المناطق هذه حسب طبيعة السؤال الان انا مش هنعدل
الان خلاص و جال ال token تي تسوي new token يعني
خلاص عرف هذا ال character للحاله ك token و راح
اشعمل return و نهى القصة بس الاشي الغريب اللي أنا
مستغرب و اللي بدي منه إجابة من حضراتكمليش جال بيك
تساوي blank؟ اه ليش عمل .. يعني إيش وظيفة هذا
السطر؟ إيش أهمية هذا السطر؟
لأ
فراغ .. ليش يعني إيش بدي في السطر؟ مش بدي منه يعني
ليش وجع الراس يعني صح ولا غلط ولا بلزمش؟بلزم؟ ليش
بلزم؟ بلزمش خلاص بيقول بلزمش و بنمشي؟ ماعرفش أنا
بسألكم الآن أنتم الإجابة عندكم إيش رأيكم؟ هذا
السطر إله داعي ولا لأ؟ الآن هنا باختصار قالك خلاص
إذا كان ال token هو الزاد أو الناقص ورجع ال token
ويعطينا العافية ليش عمل البنك؟ كيف يعني؟ مش فاهم؟
واضحي ورجعي وكملي كيف؟ مش فاهم؟ طيب ..
طب كيف هنقول اللي بعده؟ أنا مانططتش عنه، اعتبرته
blank مش هو .. هو كان واقف على الزائد أنا ماقلتش
.. انا اعتبرته .. قلته طب اعتبر الزائد هذا بعد ما
رجعته الفرق كيف بيبقى رحل؟ طيب
.. اه ..
طب هو أخد و خلص هنا ليش أنا حطه في السطر؟ هو أخد و
خلص يعني
عشان يمشي .. عشان يمشي .. طيب كويس خليني أنا عشان
الناس اللي .. اللي نايمين شوية يصحصحوا اعتبروا أنا
ماحطتش هذا السطر، إيش بدي يصير؟ في اللفة الجديدة،
الآن مش هو كان واقف عند الزايدصح؟ رجع الزاد، لف من
اللفة الجديدة، واقف على الزاد، لف من اللفة
الجديدة، واقف على الزاد، فمش ماشي عشان يمشي خطوة
قدامي حالين، يا بقول ال peak يساوي peak plus one
وخلصنا، عشان يكون ماشي على اللي بعده في اللفة
الجديدة، يا بقوله نعتبره فراغ، ليش انا اعتبرته
فراغ؟ عشان لما لف اللفة الجديدة، ال four اللي فوق،
بتشوفوا فرق، هتمشي عنه automatic فبتمشي على اللي
ورافلمّا بحطه فراغ بضمن أن ال four اللي جديد ده
اللي في بداية ال lexical مشيت عنه مش أنا مجيب تمشي
على الفراغ فمشيت عنه ومشيت إلى اللي وراه فالفكرة
بس أنه بدنا نمشي ال بيه خطوة فإنتي حرة إن حطيتي
فراغ بيظبط ليش؟ لأن مين اللي هيمشي خطوة عنه؟ مش
أنا لما يبدأ ال lexical من جديد يشتغلفبمشي عن
الفرق فبضمن أنه ماشي خطوة عنه فبدي أبحثه تاني يا
إما أنا إيش بسوي بيك تسوى بيك plus one طب واحدة
هتقول طب ليش أنا ماعملتش هذا الكلام هان ولا هان؟
لأنه الاتنين هدول كانوا already ماشيلما قدر يدور
على ال number مش واقف عند أخر digit كان already
ماله ماشي عن ال number و واقف على أول character
بعد ال number مش هي اللي قلناها و لما تجينا فحصنا
الكلمة لقناها برضه ال peak وين واقف على أول
character بعد مين بعد الكلمة وبالتالي مافيش داعي
أمشيهم لكن لما يكون ال token هو قائم بذاته لحاله
طب مين بدي يمشي؟ لازم حد يمشي فيا إما بقول بشكل
واضح وصريح peak تسوى peak plus one وخلاصيا بقوله
اعتبرها .. خلاص انا خلاص عرفت انه token و هرجعه
اعتبره ان هذا كان فراغ عشان اللفة الجاية يمشي عنه
و يلجط في اللي ورا طبعا إذا اللي ورا كان فراغات
بيصير يكمل بيشيلهم لغاية ما يمسك character جديد و
يبدأ يشتغل يعني بيبدأ الفحص من اللي ورا بس هي كل
الفكرة واضحة؟ في حد يسألني هنا أي سؤال؟ الآن
الكلام اللي حكيناه ك pseudocode بنحاول أنه نعمله
كجابةتمام؟ بدنا نفكر كيف نعمله ك Java لكن زي ما
انتوا شايفين الاشي الأساسي خلص ليش؟ لأن أنا
باختصار بدي function scan هي function scan هي اللي
بتعمل عملية الكشف عن ال token و أني ألجيه و أني
أرجعه طالما الآن بتتكلم ك Java بتوقع مش صعب عليك
أنه تعملي class كبير تسميه lexical مثلا و تسير و
تحطي هذا أساسي جوا ال lexical زي ما عملنا قبل هيك
في ال parserأحنا كان الـ start symbol expression
كل هذه الـ function حطيناها في class بارثر فسهل
جدا أن تحطي هذا في هيكلية ال class مثلا لكسر أو
سميه lexical زي ما بدك سميه الآن برضه في شغل مهم
لما انا بدى اتكلم الآنعلى Java، بدي أتذكر دائما أن
لغة الـ Java هي object-oriented وبالتالي هي مكوّنة
من مجموعة من ال objects اللي بدي أحاول أتعامل
معهم، باختصار ولكل object لازم يكون فيه NDH class،
تمام، أساسي عشان أني أعمل منه instance و أبدأ
أشتغل طيب، الآن تعالوا نفكر شوية أنا مابتكلم الآن
Calexicalكم class بيلزمني أو كم object بتلاقي
موجود عندك هنا في ال code اللي كتبناه خليني نتكلم
مع بعض كم object تقريبا مرة عليكي اه يالا يا
مبرمجات الان احنا عملنا function اسمها scan صح؟
جواتها ممكن نكون احتجنا نتعامل مع objects ممكن انا
لسه مش عارف انا بسأل لكن بالتأكيد اذا في عندي
objects لازم اعمل لهم classesفى هندي objects هنا
ايش هما؟ ايوة ال tokens ولو اطلعت شوية هتلاقي فى
أنواع فى token قائم بذاته مافيش فى إشي غير بس ال
value تبعته نوعه وفى هتلاقي object زى ال number ال
number فى قيمتين النوع اللى هو نوع numberوالقيمة
هتلاقي في object تالت اللي هو ال word الكلمة اللي
فيها أنواع من نوع identifier او من نوع keyword
والاكسيم المكونة لها يبقى الواضح ان هنا في عندي
عبارة عن مجموعة من ال objects وبالتالي اكيد بيكون
في عبارة عن مجموعة من ال classes الان الحلو برضه
في ال object oriented او في الجافة تحديدا او في
C++ كمان ان في عندك مبادئ رئيسية ممكن تستفيدي منها
زي ال inheritanceوالأمور هذه دايما موجودة للتسهيل
مش للتصعيب إيش بنقصد بال inheritance؟ إنه والله
إذا في object بالظبط object ممكن يروح يورث object
تاني أقل منه ويزيد عليه معلومات يعني باختصار ممكن
يكون ال object ألف فيه معلومة A و ال object فيه A
و فيه B و C فبروح بيورثالـ object الأولاني وبيضيف
على معلومته معلومات أخرى وبيستفيد هيك من أيش من
المعلومات اللي كانت في الف في الشدا يروح يكررها
فإذا أنا في عندي نظام inheritance ممكن أستفيد منه
ليش لأ ليش أقعد كل مرة أكررفي الـ values و اكرر في
ال functions و انا جادر اشي common يكون موجود و
اورثه و اكمل عليه فدائما ال inheritance هي سياسة
كويسة إذا بنقدر نستفيد منها نستفيد ليش لأ؟ الان لو
جينا نتطلع هنا على ال objects التلاتة اللي نتكلم
فيهم هل بتلاحظ في بيناتهم common things أو في
بيناتهم وراثة او اشي اتكلمنا عن تلاتة اتكلمنا عن
ال token class tokenجواته بس النوع اتكلمنا عن
class number جواته النوع وال value اتكلمنا عن
class word جواته النوع والكسيم ايش من الكلام اللي
انا قلته واضح ان النوع موجود في التلاتة طب مين بدي
يورث مين؟ ايوة
في الأول بدي اكون عندي ال token القائم بذاته اللي
فيه بس نوعفهذا بدي أسميه مثلا class token الآن ال
number مش هو فيه برضه النوع اللي كان موجود هناك بس
ضاف عليه value فالمفروض أنه أعمل class number
بيورث ال token الأساسي فخلاص فصار already طالما
ورثه صار النوع داخل موجود فيه بس هيضيف عليه مين ال
value اللي هي 256 و 256 مثلا طيب ال identify أو
الكلمة عفوا ال word هتقوللي هيورث أيضا ال tokenصرت
أنا ماخد منه النوع هضيف عليها الـ Lexeme الحروف
المكوّنة لو في المستقبل أجينا object جديد فيه نوع
وفيه Lexeme وفيه type وفيه scope وفيه مش عارف ايش
ممكن يورث نفسه ال word ويكمل عليه فدائما هيك مبدأ
الوراثة سهل جدا انه خلاص اشي موجود باضيفه بكمل
عليه طبعا تعالوا نشوف هذا الكلام كيف بنسويه احنافي
موضوعنا قالك في عندي تلاتة classes رئيسيات في عندي
class token في عندي number في عندي word بالنسبة ل
class token الأساسي ايش بنركن فيه value واحدة شو
هي ال value النوع يعني لما انا اقول زائد النوع
ناقص النوع اللي هي نوعها ناقص الضرب نوعها ضرب بس
السؤال ليش عرف نوعها انتجارفي مشكلة انه يعرف ان هو
انتجار مع انه character هو في الآخر ال token
بالظبط مش هتكون عندي مشكلة انا في الآخر قلتله بدي
token زائد هو بدي خزن قيمة انتجار ايش هياخد ال
ASCII code بتاعة الزائد طب واحدة هتقولي طب انا بدي
اطبع الزائد كزائد بديش يطبع ليها ك ASCII بقوله
casting carخلاص اطبع ازايد اطبع على حاله كارت tag
يعني باطبعها كزايد فعملية مافيش فيها اي تعارض ولا
اي تناقض فعلى طول ايش سماها integer value tag اللي
هي نوع طيب الآن ال number بمجرد ما عمل وراثة لل
token صار جواته ..طيب بناقت كمان مرة احنا قلنا انا
لما بدي اعرف tokenقائم بذاته لازم ال value تبعته
تكون معروفة عشان اميزه انا في عندى كتير tokens
قائمة بذاتها زائد ناقص ضرب قسمة مش عارف مين فاصلة
الاخره كيف بدى اعرف ان هذا token قائم بذاته لازم
يكون فيه value جوا هذا ال class تمسك هذا ال token
تعملت هذا النوع طبعا واحدة ممكن تقولي طب انا لو
عملتها car في حدا اللي عندى صح ولا غلط بقولك مش
غلط لكن كمان شوية هتيجيكي أنواع أخرى زي ال number
و زي ال ID و زي ال keyword و من ناحية برمجية هيكون
أسهل و أسرع و أقوى تكون انتجرلكن الآن لو انت
بتعمليها car مؤقتا لهذا ال token بيمشي الحال لكن
احنا قاعدين نتطلع لقدام مش بس لهذا ال token أنا
بتطلع لل tokens الأخرى الموجودة و الأنواع الأخرى
فعشان يكون code efficient قال لك الأفضل يكون هذا
انتجر وهنا مافي تضارب مع ال character أساسا لأنه
حيصير أنا صح بكتب قاعد ك character هضلني في شغلي
بدي زائد بدي ناقص ال token ضارب لكن internally هو
بياخد بس قيمة ال ask ال integer و بشتغل عليها و
خلاصيعني أنا مش هتضرر، أنا هضلني أستخدم زائد وناقص
وضرب وقسمة وكل إشي لكن هو الـ Internal هيحوله
وياخد بقالها إيش قيمة الـI والـR وخلاصنا فأنا
مستفيد وهو مستفيد أنا مغيرتش في كتابتي وفي شغلي
وهو ضال efficient وعمل حساباته لـ tokens اللي
جاية، هي باختصار يعني القصة فما تجلجي من الموضوع
إنه خلها انتجار تمام؟ المهم إنه لازم يكون في
variable يخزنقيمة الـ token الان احط هنا T وماحطش
هنا T هذا اللي بيقرره لحظة ال initialization لل
token انا لما اجي اعمل هيك يا بنات مثلا افهمك حاجة
اقول T1 تساوي a new token بالله
شو استفدنا؟ شو T1؟ شو T1؟ token شوهو؟ شوهو؟طب ليش
عملت creation مازال فاضي؟ ليش أعمل الحركة هذه؟ إذا
أنت مجبرة طالما بدك تعمل creation ل class اسمه
token ل object من نوع token لازم تعطيه قيمة
ابتدائية يكون هو فيها صح ولا لا؟ عشان ذلك أنا مش
بدي أقول مثلا ال token بدي إيه زائد فطالما أنت
حطيتي parameter هنا في ال constructor لازم تعبري
عنه بالتيهان غصب صارت يا فراغ و فرادلكن في حالة
فراغ و فراغ، ماذا سأضع الـ Token؟ هل رأيت كيف؟
لأنني لم أقل له إن الزائد هي التي هي التاج وهو هذا
الـ Token تبعي، هل رأيت؟ هذه من ناحية برمجية طيب،
واحدة تقول لي أنا لا أريد أن أعمل هكذا، أريد أن
أترك فراغ والله إذا كنت أفرض فرضية بيني وبينك
وأننا نتفج عليها، أجي أقولك طول ما واحد يعمل لي
New Token فراغ، يجب أن نعتبره by default زائدby
default بصير ايش اقوله؟ خلاص بصير اقوله ال tag
بتساوي و بحطله رقم الزائد هيك خلاص لأنه بيصير كل
ما يعمل initialization لحاجة ما قررهاش انا ايش
حاططها له بس ايش المنطق يعني كل token اعتبره زائد
فانا بقوله لأ خلاص انت بدكش token أساسا ماتعملش
recreation بدك token زائد خلاص الزائد انا
بخزنلكيها في ال tag تبعي بدك token ناقص الناقص انا
بخزنلكيها في ال tag تبعي فهي باختصار القصةعشان هيك
انا حبيت في الـ creation ان اضع براميتر عشان اضعه
جوا ال tag تبعي بقي باختصار واضحة تمام طيب الان
هذا token ايش المستقل
بذاته القائم بذاته تعالوا نشوف
أو قبل هذه .. ماعرفش خلّي اللي بدّيش تطلع عليها دي
الأن أنا بس ده أسأل السؤال في الأول لو كان الـ
lexical لجأ token من نوع number يعني لجأ رقم و بدي
أقول للـ parser لجأ token من نوع number صح؟ الأن
إيش بدي أقوله؟ بدي أقول له return num
تمام؟ بدو ييجي ال بارثر كيف بدو يفهم number؟ يعني
كيف بدأ أقوله أنه لجيت number؟ كيف أبعتله إياها؟
أبعتله إياها ككلمة string N-U-M و أفهم ال بارثر
أنه لما تشوف أنت ال N-U-M يعني number و لا كيف ..
إيش رأيكوا؟ إيش الحل؟ كيف أعمل .. يعني لما تعمل
إنت return number يا بنات هيك؟ لما تعمل return
number؟ هذه مش مقبولة، شو number؟صح ولا لأ إلا إذا
انت قلتيله string من نوع نمب وعرفتيها مش هيك ولا
لأ الآن أنا سؤالي كيف أفهم ال bar صار أنه لاجئتك
من نوع نمب لو كتبت ال term نمب غلط إيش .. إيش ..
كيف بدنا نفهمه؟
ماشي بدنا نعمل object نمب ماشي عملنا object نمب
أنا سؤالي طب كيف بدنا نفهمه أنه نوعه نمب اعتبره
نوعه؟ كيف انتجه؟ إيش عمل؟ أه
type كيف ابعت ال type تبعه الان انا تبري لجيت
number بده افهم اللي ورايا دك انه لجيت number ايش
ابعتله ابعتله كلمة string n-u-m و اقوله انت اذا هي
ال string اما ال string compare اذا n-u-m معناها
number و اذا هيك لأ مش number ولا في حل تاني افضل
و احسن
ماشي، مين كمان أوضح؟ أنا فهمت اللي قالته كويس، بس
مين أوضح؟ آه يا مبرمجات المستقبل، ما شاء الله
عليكم، رابع وخمسة، شطرين في البرمجانة كتير طيب،
الآن أنا في عندي أكتر من خيارخيارات منها مش
efficient وخيارات منها efficient باختصار لو أنا
جيت أتكلم باسلوب أنه ابعتليها ك stringإنه بعتلك
حروف N U M و هناك N U M مش إنه بيصيرش بيصير لكن
بيتها process و قارن ال N U M مع ال N U M اللي
عندك عشان تقول هي بعت كلمة N U M و بداش تشغل
فبيتها شغل لكن في ناس شاطرين إيش بيقولوا زي ما
قالت هي قبل شوية قالت إنه ليش ما أنا أعطي كلمة num
من خلال ال enumerating ال enum هذه أعطي كلمة num
code خمسمية مثلا ك integer valueوأسير بعد اليوم
أنا أكتب له return number و لا أبعتله number هو
internally بتعمل كأرقام الخمسمية اللي أنا ثبتها
على number ماخدتوش حاجة فيه زي هيك جابنا هيك؟ زي
ال define هاي؟ ها دي ماخدتوش حاجة زي هيك؟ خدتوا
هجة زي هيك ولا لأ؟أه ولا لا يا مبرمجات هاذي شو
معناها أنه بعد اليوم كلمة NUM هي نفسها كأنه رقم
256 فكانها constant مظلوطة ولا لأ فبصير بعد اليوم
لما أقوله return NUM أنا بقصد return number بس هو
هيحولها internally لرقم ويفهمها ويشتغل عليها زي
بالظبط ال character لما بيروح بعوضه بال ASCII code
مش هو في الأخر جلبه لرقم عشان يفهم وصار يشتغل
كانتجار فأنا في الحالة هاي .. في الحالة هاي بقدر
جد ما بدي أعمل enough define زي هيك مثلا بدي كلمة
ال ID بدي كلمة ال true بدي كلمة ال while كل واحد
ممكن أحطله إيش رقم و بعدين أسيل أتعامل أنا كأسماء
لكن البرنامج بتعامل كإيش كأرقام و احنا أنا راضي هو
راضي و الموضوع efficient باختصارطبعا في الجابة كيف
بيسويها الحركة هذه بشكل أفضل من اللي أنا كاتبه
وهذا زي الـ C بالـ C++ بالجابة هيك بعملهابال Java
بتختصر بيعمل class مثلا اسمه tag و بيحط فيه
definition جوا إيش بيجي بيقول؟ بيقول النم هيها ال
ID هيها ال true هيها ال false هيها عارف هذا شو
معناته؟ معناته إنه أصبح قدرة لدي أقوله return true
إذا بدي true بال capital طبعا لإن هو internal
هيفهمها كرقم 258 ويتعامل مع 258 ك true هو متعامل
معها كأرقام اللي متعامل معهاككلمات وانا راضي هو
راضي في النهاية طبعا بتوقع انه انا مش بس على جد
القائمة هاي بتوقع كل الكلمات المحجوزة كما انا
عملها يعني ال while اديها رقم ال F اديها رقم ال D
اديها رقم مش انا كنت لما انا لاجي token من نوع
while اروح اقول ال parser لجيت whileكيف نقول لـ
gate Y؟ لازم نديها إيش؟ رقم ل gate F لديها رقم ل
gate D لديها رقم فأي كلمة أنت بدك تستخدميها داخل
ال return أو داخل ال parameters أو ال functions زي
ما بدك لازم تعملي لها شو؟ رقم عشان يصير سهل الشخص
يشتغل و ال code سهل يشتغل طيب السؤال التاني ماعرفش
لازم أخد الخمس دقائق كاملات الضينات السؤال التاني
ليش بدأمن أرقام عالية في الأول هل في مشكلة لو عملت
تلت مية تلت مية واحد تلت مية اتنين في مشاكل؟ لأ مش
مشاكل طب هل في مشكلة لو عملت من خمسين واحد وخمسين
اتنين وخمسين؟ ليش؟وهيصير تداخل مع الـ ASCII code
احنا الـ ASCII code مثلا خلّيني اتبر ال range
تبعنا من 0 ل 255 وبالتالي بحط أرقامي من بعد هذا
الكلام ليش؟ لأن افترضي انا ما اتبعتش هذا الجثة
وروح اتحطيت ال number 50 طب ما يمكن ازادي ال ASCII
code تبعه 50 فلما نقول 50 مش هيعرفني بنقصد زائد
ولا نقصد number فعشان مايصيرش تداخل مانحطش اسمين
لنفس الرقمبنروح نبدأ من بعد ال ask code من بعد ال
255 شوفتي كيف عشان ما يصيرش تداخل باختصار طيب
تعالوا الآن نشوف بس كيف نعمل ال code تبع ال Lexar
تبع
ال number لحظة إيش قال ال number ال number extends
token يعني ورث ال token يعني صار خلاص already جوا
ال number حاجة اسمة tag
على طول طبعا إذا أضيف عليها شو الـ tag ال value
قيمة الرقم الآن إيش هنا حاط parameter يعني و كأنه
بفهم منه إن ال number هيك بعمله creation كي بعمله
creation ال number مثلا
number one
يساوي new مثلاو بحطله مثلا خمسين مثلا ايش معنى هذا
اللي انا سويته تعالي تطلعي بس معاه شوية هذا
هيستدعي ال constructor، مظبوط؟الـ V هتكون ايش؟
خمسين طبعا ال value خدت قيمة مين؟ ال V طبعا شو
النوع هذا اللي انا بعدته؟ نوع ايش؟ رقم مش هذا
number عشان ايش قال؟ قال super ايش يعني super؟
يعني حط اللي بين الجثين هنا وين؟ في ال tag تبعتي،
تبعت ال number ليش كتب tag.number؟ عشان مايكتبش
أرقام؟مش قولنا تقوى اتفاقنا انه نعطي لكل رقم كل
اسم رقم مش تقوى حط نم جوا ال tag فانت خلاص سيرى
tag.num automatic هو ايش هيحط جوا لما بيشتغل الرقم
بتاع النم اللي يظن 256لكن انا مش بكتب ليش طبعا
اعمل tag dot لان حاطيتهم كلهم جوا class اسمه tag
ماخلتهمش برا عارف لو انا ماعملتش class اسمه tag
وعملت ايه زي تحت define num define define define
خلاص ماعملش لا tag بس برجعله num بس لان حاطيتهم
جوا class اسمه tag عملتله tag .. ماعرفش دقيقتين بس
tag dot num ماشي الحال طيب الان تعالوا لاخر نقطة
هنا اللي هي ايش
الـ Word أو الـ Word ال Word إيش استدعى؟ أو مين
أخد؟ مين ورث؟ ال token يعني صار فيه ال tag معروف
تمام؟ و هيضيف عليه الحروف المكوّنة الأن كيف بعمل
ال creation لل word؟ بعملها زي هيك word مثلا word
one تساوي new word إيش ببعتله؟مثلا إذا نوعه while
tag.y لو بكون معرف الـ while tag.f tag.true tag
.false وهنا إيش بحط الحروف المكونة سواء لل ID أو
لل while أو لل F أو للكلمة اللي عندي طيب اللي هان
إيش بيصير بياخد ال two parameters هدول اللي هي ال
tag النوع و meanوالحروف المكوناة ايش بيسوي عاد
super T ايش يعني super T يعني هذه ال T النوع اللي
هو tag.id و لا tag.war و لا tag.while ماله بيروح
بيكتبهم في ال tag اللي فوق و ال Axiom هذي ايش
بيسوي فيها بيخزن فيها مين ال S سؤال الأخير الآن
عشان نخلص الآن ليش هنافي الـ constructor حط 2
parameter بينما في الـ constructor هنا حط
parameter 1 ليه ما حط ال 2 زي ذاك؟ ليه ما جاله ال
.. ليش ما جاله ال tag.nom 50 زي ما اشتغل هنا
ليش؟ ايوة بالظبط هنا كلهم number فال tag في الشفيه
مجال الخربطة فبدل كل مرة اكتب tag.num 50، tag.num
30، tag.num 20، جالك رتاح من كلمة tag.num بس انت
اكتبر ال value اللي بتختلف وانا automatic جوابعمل
tag.num بينما هنا مش كلهم tag.id ممكن يكون tag
.while، tag.true، tag.false، أنا مش عارف، فبقدرش
هذا automatic يحط حاجة من عنده عشان أكثر والاتنين
لازم يعدوا في لحظة ال creation شو الكلمة وشو نوعها
فهناك لأنه أكتر من خيار اضطررنا نعمل اتنين
parameters، هاي باختصار كل القصةواضحيت؟ طيب اليوم
ان شاء الله هنوقف هنا مع أنه عند الطلاب أنا خلصت
ال code كامل تاع الجابة المرة الجابت عشان نطول فيه
تكونوا دارسيني لحد هنا كويس عشان خمس دقائق نخلص
code الجابة و ندخل في ال section لجديد