بسم الله الرحمن الرحيم اليوم ان شاء الله بدنا نكمل
جزئية صغيرة ضايلة في ال section الأخير اللي
اتكلمنا فيه المحاضرة السابقة ونبدأ في chapter
تلاتة احنا يمكن المرة اللي فاتت طلبنا منكم في
نهاية المحاضرة تعملوا parsing باستخدام هذا ال
translatorلل sentence هي طبعا ال sentence هي هي
sentence موجودة في ال language المفروض طالما
موجودة في ال language أقدر أجيلها شجرة أو عملية
parsing في ال grammar اللي فوق المفروض النتيجة
اللي تطلع من إذا أنا شغال صح اللي ينطبع في الملاف
اللي هو التحويل هي هذه المفروض يطلع المفروض أنكم
عملتوا هذا الكلام لكن أنا هنا بس بدي أنوه لنقطة
صغيرة و أسيب المثال هذاالنقطة اللي بدي أنوهلها أنه
لازم كل ال actions اللي موجودة تتنفذ لازم كلها
تتنفذمش بس تبعون الطباعة يعني ماتفكرش أنه أنا بس
بنفذ الطباعة و خلاص و الحاجة اللي مش طباعة بنفذهاش
هذا غلط أنا لازم أنفذ كل action موجود إن كان طباعة
بدي أطبع إن كان creation ل object بدي أعمل إن كان
في constructor بدي أتم استدعاه و بدي أستدعيه و
أشوف إيش بيقول و أنفذ إن كان bot بدي أعمل bot إن
كان get بدي أعمل get فبتكن تنتمي لهذه القصة يعني
على سبيل المثاللما فتحنا هنا الـ ghost هنا شايفة
الجملة هاي؟ ايش بيقوللي؟ top تساوي a new
environment هذا شو معناها؟ انه بدنا نعمل creation
لل object environment بظبط ولا لأ؟ الان هذا شو
بيسوي؟ مش هذا بيستدعي constructor اللي أخدناه
المرة اللي فاتت لل environment؟الـ constructor إيش
كان فيه جواته تتذكري؟ كان يقولك اعملي hashtable
مظبوط و خلي ال top تبعه فيه الو up فيه الو top
طبعا في حالتي أول واحد ال top تبعه إيش بيكون؟
بيكون null شوفت انت كده؟ الآن لو أجى فتحة cost
تانيةهتعمل الـ creation كمان مرة ل environment
وبالتالي هتستغل ال constructor كمان مرة وهتعمل ال
table كمان مرة ويصير يقشر من ال بيرن تبعهاللي
فوقيه اللي مخزن في ال save فأنا already مع أنها مش
طباعة العملية لكن لازم أجي أكتب في صفحتى اللى أنا
قاعد بعمل فيها ال parsing ان برسم ال table و برسم
ال table طب وين طلع رسمة ال table ما هي طلعت من
هنا من استدعاء ال constructor تع هذا ال object
الان تعالى خدى مثال تانى لما يجي يقولك مثلا top
dot botمين المقصود في ال top طبعا هنا اللي اخر
symbol table موجود اللي انا لما يقول لي dot bot
يعني يروح ويحط في هذا symbol table ال Xوالقيمة
تبعتها اللي هي ال type فعلى طول لازم أجي هنا إيش
أسوي في ال top أجي أقول له هاي في عندي X أو Y أو
Position حسب الكلمة الموجودة اللي لجيتها في عملية
ال parsing و بسجل جنبها إيش ال S اللي في نوع ال
type شوفت انت كيف هذا مثال طيب ممكن ألاقي مش top
dot bot ممكن ألاقي action زي هيكtop.get هذه ايش ده
تستدعي هذه بتروح تدور في ال symbol table الحالي إن
لجت القيمة بيروح بيرجع ليها و بخزن ليها في S إن ما
لجهاش هيدورها ويدورها لغاية ما يلجيها بيرجعها ما
لجهاش بيرجعها null علشان هيك لما جيت انا اطبع S
.type ايش طبع؟ طبع اللي لجها فهذا كله متكامل مع
بعضه ال print مش لحاللما طبعت ال print S.type طب
من وين بدى اجيب ال S.type؟ مش انا دورت عليها جابلي
شوية في ال symbol table و كنت حاططها و جابها و
طبعت النوع تبعها فبس هي النقطة اللي بدي انا اؤكد
عليها ان موضوعنا مش بس موضوع طباعة و خلاص اي
action لازم يتنفذ ان كان هو طباعة بطبعإن كان
creation لـ object بدي أعمل إن كان أعمل symbol
table بدي أسوي إن كان أحط في ال symbol بدي أسوي إن
كان هتم ال symbol table بدي أسوي فلازم لما أقول لك
اعمل بارسينج أشوف في صفحتك شغلتين أشوف ال tree و
أشوف ال print اللي بيصير و أشوف هذا ال action اللي
قاعد بيصير إنه أعمل symbol table و أحط فيه و أشيل
فيه فلازم أتأكد من هذا الكلام عشان هيك معظم اللي
أنا شفتهم حاليا السؤال ال homework ماكانوش حاطين
ال symbol table وهذا غلطكيف عرفتي بدي أطبع X؟ كيف
عرفتي بدي أطبع انتجار؟ كيف عرفتي بدي أطبع Y؟ كيف
عرفتي بدي أطبع عبوليان؟ كيف عرفتي؟ وانت مش عاملة
ال symbol table فكان الأصل انه في action قبلهم انه
اعمل ال symbol table حط جوته كذا جيب منه كذا عشان
العملية تكون سليمة فضروري جدا تحاولوا تعملوا عملية
parsing كمان مرة بشكل سليم ماشي الحال الان خلاص
انا هكتفي بهذا القدر هنا و أدخل على ال chapter
الجديد chapter 3 ان شاء اللهطبعا اتنين تمانية انا
ماشرحتش في chapter في المستقبل عن ال intermediate
موجود ان شاء الله ان وصلناها ان اخدناها ماوصلنهاش
خلاص مش مشكلة الآن نفوت على chapter تلاتة طيب
ايش رأيكم في عنوان chapter تلاتة ايش بيقول
lexical analysis صح ولا لأ؟ طب هذه مشكلة، طب احنا
ايش كنا نشتغل في ال chapter اللي فات؟ ما احنا
خلصنا ال lexical، بعض الناس هيك هيقولوا مش احنا
خدنا ال lexical وعملنا البرنامج واتعرفنا على ال
tokens ومية لمية وعرفنا انك تتواصل مع ال bursar
وحكينا جصص كتيرة في ال lexical، ايش ضايله؟
جايبليه، عملليه chapter، ايش دا ضايل ده تشرح فيه؟
ايش رأيكم؟ليش يعني عاملوا الآن بشكل chapter؟ طيب،
بقى حلناها، قولنا بنقرأ من ال user، بيصير يقرأ من
الملف المكتوب، مش حلناها .. ما احنا
فصلنا، مش قولنا بيروح، بدخل، بفوت، كل ما يلاقي ID،
بيقولي لاجي ال token ID، كل ما يلاقي number، كل ما
يلاقي character، بيقولي يعني تقريبا كل إش إحنا
عاملينه، هيك يخيل يعني إن إحنا عاملينهإيش رأيكم؟
إيش كده من جوه؟ و أحنا عملنا .. أنت مش عملتي و
خلصتي ال lexical مش شرحناها من جوه كيف بيشتغل؟
scan عملنا scan، أه إيش؟
كيف
يعني function جاهزة؟ مش واضح، بس يعني أههذه مثلا
مثال صغير يعني في tool ممكن نتعرف عليها، صح؟ طيب،
يعمل chapter عشان ال tool؟ كويس، هذا كويس، هذا ايش
جديد ال tool؟ يعمل chapter عشان ال tool؟ طيب،
خلّينا نفصل شوية، طبعا احنا بالفعل أخدنا ال
lexical analyzer لكن في أمور كتير ما فصلناش فيها،
بنتكلم عنها خلال هذا ال chapter على سبيل المثال،
على سبيل المثالأحنا قلنا إنه ممنوع يكون ال keyword
يكون variable مش هيك في الشروط طبعتنا لكن ماعرفناش
ليش هذا الكلام ممنوع اليوم نحاول ناخد أمثلة و نشوف
ليش هذا ممنوع قلنا ممنوع مثلا في الجابة لما بتكتب
identifier تحطي فراغات في الكلمة الواحدة يعني انا
بدي اكتب position اكتب P فراغ O فراغ S ممنوع بس
ماشوفناش مافهمناش ليش هذا الكلام ممنوعشغلة تالتة
احنا في الشبتر السابق كنا نتكلم ك human كإنسان كيف
أنا بدي أعمل عملية ال lexical فروحت إيش أسوي روحت
أمشي في الملف و أقطع و أشتغل لكن في الشبتر هذا
تحديد نتكلم ك computer كيف بدي أعمل عملية ال
lexical كيف العملية بدها تصير systematicيعني كيف
بده يفكر عشان يقطع الكلمات وكيف يعمل الاشي
automatic لحاله ويعمل عملية ال lexical بدون مشاكل
شغلة رابعة احنا لما اتكلمنا في الشبطر السابق عن ال
tokens فرضنا بس ان عندي ID فرضنا بس ان عندي number
فرضنا بس ان كل character قائم بذاته لكن مافرضناش
اصغر او يساوي اكبر او يساوي طب في حال وجود tokens
من هذا النوعكيف بده أعمل البرنامج كيف automatic
بده يتم نقطة خامسة موضوع ال tool ال tool هي اللي
بتتكلم فيها إيش قصتها كيف بتاني أعمل كيف أنا أحط
وصف ال token جوا ال tool عشان أرتاح ويصير يعمللي
تجسيم للملف بناء على الوصف تبعي يعني طلع ال tokens
بناء على الوصف تبعي ففي الكثير من الأشياء في هذا
ال chapter لازم نعرفهابعدين في شغل ساتس مثلا ممكن
نتكلم فيها الآن الان القراعة من ملف بطيئة جداطب
كيف أسرع العملية؟ كيف أقرأ مثلا مش من الملاف أو
يعني إيش الأفكار أو إيش ال ideas الموجودة؟ فالواضح
أنه هيكون أكيد في كتير من الأمور اللي احنا ما
اتكلمناش فيها في السابق سنستزيد يعني خليني أقول ال
chapter هذا زيادة للمعلومات السابقة وتركيز أكثر
على ناحية ال systematic أنه ككمبيوتر كيف بيعرف كيف
بيسوي وكيف بيشتغل وخليني أبدأ بمثال بسيط أكتبه
if then then then equal else else else equal then
كيف سؤال هذا؟ هنا حد جادر يشرحلي طبعا مسموح في
language من ال languages أنا نسي اسمها الآن مسموح
انه يكون ال keywordوال variable زي بعض يعني مسموح
ال F أعملها variable ومسموح ال F تكون هي أصلا
keyword ومن هذه ال language اللي بتسمع بهذا الكلام
كتبنا هذه على اللوح الآن بتقدر تفسري ليها المكتوب
على اللوح، إيش معناها؟ أه غيرك، في حد تاني بدي
فسر؟ أه فسري أول حاجة اتدنت هي طبعا .. وين؟ هذه F؟
أه
يعني انت بدأتي صح بس بدأتي تتوهي في الآخر، توهتي
شوية أنا متأكد لو ركزت تاني هتعديها صح، حد غيرها
وين الهندسة؟ ما شاء الله عليكم ورش مهندسات، ايش
الدعوة؟ ولا واحدة تجاوب؟طب جاوب إيش؟ كامليها صح
الطلاب الخمستاش وحد منهم جاوب صح يلا من الستين بنت
هنا واحدة بدي تجاوب صح أه إيش رأيك؟ ال S الأول
اللي هي ال I بصفية ال .. ال .. ال .. ال .. ال ..
ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال
.. ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال ..
ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال
.. ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال ..
ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال
.. ال .. ال
.. ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال ..
ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال
.. ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال ..
أه يالا كاملة عاد كاملة ال ID اسمها إيش وش الذنب
الأخيرة IID ممتاز يعني هي في النهاية كويس يعني
اشتغلوا صح و حللونا إياها بس هنا إيش بتلاحظي
بتلاحظ أنها استصعبتي أنت و أنت human استصعبتي و
أنت تعرفي فيها بس أنا خلّيني أحللكي إياها طبعا هذه
ال F الأولانية هي keyword تمام الذنب هايزي Boolean
variable Boolean يعني if true او if false ال then
اللي قال keyword يعني if true then نفذ الكلام
الموجود الكلام الموجود شو variable اسمه then
هيساوي قيمة ال variable اسمه elseيعني X تساوي Y
يعني if true then X تساوي Y بس اختار كلمة ال X هنا
then واختار كلمة ال Y else طيب else هذه إيش؟
keyword يعني إذا ما تحققش الشرط إذا ماكنتش true أو
ماكنتش false else اعكس ال variables يعني ما تخليش
then تساوي قيمة ال else يعني ما تخليش ال X تساوي
قيمة ال Y خلي قيمة ال Y تساوي قيمة ال Xفصارت السو
ساو ذل فهدول التلاتة هما keywords بينما الباقين
هما variables لكن لاحظيان انت كيومان استصعبتي وانت
قاعدة بتحلي ليه هذي F والله هذي then وصيرتي تتطلعي
لجوا قدام وتتطلعي لورا وصيرتي تحس بشو نوع هذي ومش
نوع هذي صح ولا لأ حتى تقدر يتجاوبيها طب مابالك ال
computer كيف بديه يسوي مابالك ال system كيف بديه
يسوي بالتأكيد ال system مش منه مش هيعرف هيعرف لكن
هيطلب الموضوع من ال process زيادة صح ولا لأ علشان
يقعد يقارن طب هذي ال Fvariable والله keyword فبدو
يمشي لقدام لما بلاجي then هذي اه يبقى هذي بقصد
فيها variable .. keyword طب then هذي يعني ال
computer او ال system في الآخر مش منه مش هيعرف
هيعرف لكن لازم يعمل ايش process ازيادة عشان هيك
بتلاحظ ال languages الجديدة اللي زي الجابع ايش
بتسوي بتقولك ممنوع نستخدم نفس ال variable يكون
keyword ليش؟ عشان اريح بالي من ال process الفاضي
اعملها بعدين مش بس هذه ال .. مش بس هذه ال .. ال ..
ال .. الشيء او ال .. عشان هيكهما عادة بيحاولوا
دايما انه في ال languages الجديدة يريحوا المبرمجين
صح ولا لأ؟ الان هل هذا يعتبر نوع من التقييد؟ يعني
هو قيدني ممنوع تستخدم ال variable كيوارد؟ لأ
بنعتبره مش من التقييد، بنعتبره إشارة سليمة وصحيحة،
ليش؟ افترضي ال code اللي انت كتبتيهأجى حد بدى
يعمله maintenance حد بدى يعمله تطوير حد بدى يعمله
تعديل انت نفسك يجيتي بعد فترة بدك تعدليه هتستعبى
وانت بتجري في كودك إذا انت مستخدمها ال keyword مرة
ومستخدمها اسم variable مرة انت هتتعبى وانت مش عارف
في حالك طب هد أنا حاسبها keyword ولا عاملة
variable فنفسك انت هتتعبى فهم ضربوا ع الصورين بحجر
هنا أجال إشي قالوا أول حاجة بيصير ال process بتاع
ال system أسرع تاني حاجة بيصير ال code تبعي ماله
تمام؟ طيب تاني حاجة بيصير إيش أنه موضوع قراءة ال
code بيصير ماله أسهل فعشانك هذه إيجابيات طب واحد
بيقول أنا حر أنا بدي أكتب كلمة شبيهة بمين بال
keyword مضطر هيك برنامجي بده بيقولوله مافيش عندك
مشكلة أكتبه بالحروف ال capital يعني مثلا بدي أكتب
كلمة F خلاص أكتب I capital F small I capital F
capitalأنا بدي ال I small و بدي ال F small حط
underscore في الأول شوفتي كده يعني دا كي خيارات
أنه ما تعكس عليها كده أما عادة لكي كتصير تقول بدي
I و F بدون underscore صح ولا لأ فالفكرة كمان مرة
أنه هو بده يسمحلك تكتب بأريحية زي ما بدك تختار
الأسماء اللي بدك إياها و في نفس الوجه تيضمن أن ال
process ماله يكون سريعطيب خلونا نكمل الآن يبقى
واضحة الجزئية اللي عندنا أن الأفضل مايكونش ال
keyword هو نفسه ال variable ال variable ليش؟ عشان
أقدر ال process تبعتي تصير ما لها أفضل و أحسن
وكمان حتى في إعادة قراءة ال code يكون الأمور أسهل
و أبسط طيب تعالوا الآن نبدأ شوية تفاصيل نتكلم فيها
بس في الأول طبعا بدناش ننسى الشغل العام أن ال
lexical بيقرأsource وبيطلع ال token البارثر ايش
بيعمل كل ما بده token ايش بيبعت لل lexical بيقوله
هاتلي token فبروح برد عليه ال lexical وبيقوله
اتفضل هاي ال token طبعا ال barcer قلناها قبل هيك
كل ما بيوصله ال token ماببدأيش يعمل عملية letary
بناء على ال code اللي احنا عارفينه بتاع ال parsing
اللي هو if look ahead مش عارف كده بدنا نختار ال
production كده و الكلام اللي خدناه قبل هيك طيب
كتير و طبعا ما ننساش ان كلهم بيتعاملوا مع ال
symbol table طيب خلونا نبدأ نكمل طبعا يا بنات لما
نكمل الأشياءاللي أخدناها قبل هيك همشي عنها الأشياء
الجديدة هي بس اللي هركز عليها طبعا ال chapter هنا
بيتعامل أنه ممكن في ناس ما تبدأش من chapter 2 أنه
ناس ممكن تبدأ من chapter 3 عشان هيك في حاجات سهلة
كمان بذكرها تاني لكن احنا هنمشي عنها بسرعة مش هنضل
نقفين عندها طيب تعالوا لهذا العنوان وهو عنوان مهم
وممكن أسأل عنه بشكل نظري لأنه بارز وواضح إيش بيقول
بيقول lexical analysis versus parsing وهنا بيسأل
سؤال مهم ليش احنا جسمناtwo phases ليش عملنا ال
lexical ك phase و عملنا ال parser ك phase يعني ليش
ما عملناهم برنامج واحد ليش ما عملناهم في package
واحدة انتوا ملاحظين جسمناهم صح ولا لأ بتواصل هما
مع بعض لكن مجسمين طب ايش المانع ماكننا نعملهم
برنامج واحد وخلصناه يعني نفس البرنامج بيعمل على
طول قراءة و بيعمل على طول parsing مرة واحدة إيش
رأيكم؟ هل إيجابي موضوع نجسمناهم و لا سلبي؟ و إذا
إيجابي إيش الإيجابيات؟ إيش رأيكم؟
يعني في ناس بتقول أسهل يعني واضح أنه إيجابي و هذا
معروف دايما إذا عندي problem و جسمتها ل sub
problems بيصير حالها أسهل و ممكن تكون more
efficient و ال performance أعلى إذا هذه ملاحظة أنه
بالفعل عملية التقسيم بتخلي فيه simplicity طيب إيش
فيه كمان غير ال simplicity؟
ماشي ما هو ال maintenance ماشي ما هو طالما ال code
صار سهل ال maintenance هيصير برضه أسهل اه غير ال
maintenance ال performance ال efficiency أكيد
هتتحسن تصير أفضل ليش هتتحسن لأن ال lexical فيه له
موديل خاص فيه هناخده بعدين اسمه regular expression
تمام فهذا موديل خاص فيه بيخلي عملية ال lexical
efficient ال parsing نفسه مش كان له فيه موديل اسمه
ال grammar مش انا جبت مفهوم ال grammar واستخدمته
لعملية ال parser طب ايش اللي نجحني ان استخدم ال
grammar مع ال parser لأنه كان منفصلعشان هي بالفعل
ال efficiency و ال performance هيزيد ليش؟ لأن كل
واحد فيهم صار الآن قادر أعمل بطريقة ما لها سريعة و
efficient من خلال ال models السابقة موجودين فزي ما
قلنا ل grammar أجى مناسب لل parsing في حاجة
هناخدها بعدين اللي هي regular expression مناسب لل
lexical فهي شغل تاني اللي هو ال performance بزيد
أيوة ال portability أو ال reuse إيش يعني ال reuse؟
الآن لو يجينا نطلع على معظم ال languages هنلاقي أن
ال tokens فيهم كلهم تقريبا زي بعض مش كلهم هيكون في
token ID مش كلهم هيكون في token number مش كلهم
هيكون في token operator مش كلهم هيكون في token
comparison مثلا مش هيكلوا لأ ال character ممكن
تكون token صح ولا لأ اتخيلي أنه أنا مش عامل ال
lexical لحالهخلطه بالـ syntax بتاع ال language مش
هقدر استخدم هذا ال lexical ل languages أخرى خلاص
حيضل الجابة على طول لكن اتخيل انا فصلته و قلت هذا
ال lexical بنفع لل Java طب ما هو نفسه ممكن ينفع لل
basic ما هو نفسه ممكن ينفع لل Pascal ليش؟ لأن
اختلافات اللي بينهم مالهم مش كبيرة من ناحية tokens
لكن ممكن تكون كبيرة من ناحية syntax فهذا أعطى مجال
لإيش؟ لل portability يعني أعيد استخدامه في أماكن
تانيةواضحة كيف الأمور عشانك هو باختصار قال الأسباب
الرئيسية للفصل بيناتهم باختصار simplicity of
design compiler efficiency اتكلمنا عنهاو compiler
portability اتكلمنا عنها التالتة الأخيرة هاي
باختصار الأسباب طبعا هذا ممكن أسألك سؤال final
أقولك قوليلي إيش الفوائد من الفصل ال lexical عن
الهدا؟ هذا مش سؤال مخبأ خلاص بتجاوبيني تلت كلمات
simplicity و if chance is improved مثلا أو ال
performance زي ما بدك و portability أو ال reuse
خلاص باختصار يعني مابتناش تعقيدات الأمور simple
خالص تمام لحد هان؟ طيبالان تعالوا نشوف tokens,
patterns and lexemes طبعا احنا عارفين ال tokens،
كلنا عارفين ال tokens صح ولا؟ ال token هو عبارة عن
إيش؟ واحدة واحدة لمفهوم قد يكون لها attribute وقد
لا يكون ويمكن يكون لها أكتر من attribute، لظبط؟ ال
lexemes برضه معروفين، أي token له lexeme، له حرف
مكوّنةالو، مظبوط ولا لا؟ طيب، شو ال pattern؟ هذا
ال pattern وصف جديد، ماكنتش أخده في ال chapter
السابق، شو هو ال pattern؟ مين يقولي شو ال pattern؟
أنماط، طيب، أه، بدي .. بدي .. إيش علاقته هنا؟ أه
أنماط، طيب، غير أنماط، أه
طيب أنا بدي أقولك شو هو ال button انسيلي شوية الآن
لما أجي أقولك افتحي الملف لاجينا كلمة position
تمام انت بالنسبة ليك هذه ال position هي token من
نوع إيش؟من نوع ID ماشي identifier مش هيك انت
هتقولي هتقولي ال position identifier طب انت ليش
اعتبرتيه identifier باختصار لأن فيك تعريف في دماغك
جوا ان ال letter followed by letter or digit هذا
هو identifier عشان هيك كان في تعريف باطن في دماغك
خلاكي تقولي ان هذاidentifier طب لو لجيتي رجل 256
هتقولي number طب انت كيف عرفت انه number؟ في تعريف
باطن في دماغك ان الأرقام هذه تعريفها number صح ولا
لأ هذا الوصف اللي موجود جوا دماغك هو ال better هو
النمط هو ال description هو الوصف اللي خلاك تقرري
ان هذا هو التكل الفلاني طيبليش هو اليوم مذكور؟
لأنه الآن بدنا نطلع الوصف من الدماغ لأنه بكرا بدنا
نتكلم عن اشي Systematic Computer Computer بده يفهم
لما بدي أقول له الكمبيوتر هذا ID كيف بدي أفهم أنه
ID؟ مش لازم أقوله الوصف بتاع ال ID؟ صح ولا لأ عشان
هيك هنتعلم نعمل الوصف الآن على شكل رياضي على شكل
معادلة رياضية اللي هي بنسميها Regular Expressions
اللي هنشوف تفاصيلها المرة الجايةفهمتوا إيش اللي
هنسويه الآن؟ بدنا كل token موجود عندى أعطيله صيغة
رياضية الهدف منها نوصف ال token لسه أنا مش عارف شو
الصيغة الرياضية المرة الجاية هنتعرف عليها طب إيش
أهمية وجود صيغة رياضية أوصف فيها ال token؟ عشان
أفهم ال system إن والله ال ID هيك شكله والله ال
number هيك شكله فلازم أقوله لازم أتخطب معاه فهتخطب
معاه بشكل رياضيشوفتي كيف؟ عشان الموضوع يصير
systematic وديري بالك هذا الشكل الرياضي هيسعفني
بشكل كبير في ال tool عارفاش ال tool باختصار بتاعة
ال lexical؟ بدي أفتح ال tool أقول له في عندي ID
هيوصفه بالشكل الرياضي في عندي number هيوصفه بالشكل
الرياضي في عندي كذا هيوصفه هيوصفه هيوصفه خلاص
يعطيني العافية ال tool بعد ذلك بتصير لحالة تطلع
البرنامجاللي بيصير يقطع الملاف بناء على الوصف اللي
انا اعطيته فانا شفت كيف اعطيته الوصف على شكل رياضي
فعشان يبدأ يوصلك لهذا المكان بيقولك في حاجة اسمها
pattern اللي هي الوصف فاحنا اليوم نتكلم ك pattern
من وجه نظرنا احنا ك human الوصفلكن محاضرتنا الجاية
هنصير نتكلم ك pattern من ناحية رياضية كيف معادلة
توصف ال ID كيف معادلة توصف ال number كيف معادلة
توصف ال operator أو ال comparison و الاخرين واضحة
ليش ال pattern بدأ يطلع معايا و هذا ال pattern
نعتبره أساس لل systematic أن ال system يصير فاهم
لحاله و يشتغل لازم أنا أديله معلومة الآن بطل هو
human طيب تعالوا نفصل أكتر و نشوف تفاصيلهذا مثال
بيجي بقولك ال I F لو انت شفتي مكتوب في الملف I F
ايش هتقول انت؟ هتقولي token اسمه F طب ليش قررتي
انه token؟ ايش الوصف اللي كان في دماغك؟ انه ييجي I
وراها F فيه الوصف؟ طلع الوصف؟ لما تشوفي I وراها F
معناه صار عندك token اسمه F والكسيم Fطيب else ليش
اعتبرتيها أنتي keyword token لأن في وصف عندك أنه
لازم تيجي E وراها L وراها S وراها E وعندما تشوفي
هذا أجا هتقولي إذا هذا token شايفة؟ فال
description هذا أساسي و لازم يكون موجود عشان نتعرف
على ال tokensطيب comparison و هانا لحظي شوية قبل
ما اتكلم عن ال comparison خلينا نقدم مثال تاني
احنا قلنا الزائد هو token قائم بذاته صح؟ يعني لو
انت كنت هتشوف في الملف زائد هتقول هي token و خلصنا
طب افترض انا عملت assumption ايش قلتلك؟ قلتلك بدنا
نفترض انه الزائد و الماقص و الضرب و القسمة token
اسمه operatorفانت بعد اليوم كل ما هتشوف زائد مش
هتقوللي زائد هتقوللي operator طب شوفت ناقص
operator ليش لأن انا اعمل description الآن لل
token اللي اسمه operator ان يكون كذا أو كذا أو كذا
أو كذا فهي نفس الفكرة في ال comparison بيقوللي انا
مش هقول عن حاجة انها comparison الا اذا كانتهذه أو
هذه أو هذه أو هذه أو هذه أو هذه الأكبر أو الأصغر
أو الأكبر أو الأصغر أو الأصغر أو الأصغر أو الأصغر
أو الأصغر أو الأصغر أو الأصغر أو الأصغر أو الأصغر
أو الأصغر
و بالجافا letter or underscore followed by letter
or digit لأنه مسموح ال underscore نبدأ فيها صح ولا
لأ فبناء على الوصف بتصير انت تقول ان هذا ID ID ID
هدول samples ال exims حروف مكونة لهذا ال IDطب ال
number طبعا مش شرط احنا بس اتعاملنا مع ال constant
numbers لكن افترض ال 25 انه نص ما هو number افترض
ال 25 exponent تلاتة ما هو number فاش بيقوللي ال
number هو unnumeric طبعا احنا فرضينه بس على أساس
integer لكن لأ هو ممكن يكون ايش اي اش كثر float
بسط ع مقام الاخر كله numbers فلازم يكون فيه وصف و
description لل numberliteral هذا token شو وصفه؟
قال لي وصفه أنه ييجي double quotation هاي ويجي
double quotation ويجي بيناتهم كلمات هذه كلها على
بعض اسمها literal يعني وقت ما نشوفه سنقول هذا
token اسمه literal شفتي هاي و اعرف ال literalوهي
باختصار بس برضه حتى التعريف لليوم لسه مدخلش
الموضوع الرياضيات فهو لسه قاعد اهلك للموضوع قاعد
لسه بتكلم برم ان هو الله وصف ال ID هيك لكن إلا ما
نحاول مستقبلا نجلب هذا الكلام لمعادلة هذا الكلام
لمعادلة اللي هو موضوعنا المرة الجايةواضح ايش ال
better و ليش موجود و ايش أهميته و كيف هنصير بعدين
كنا نعمل ال better عشانك المعادلات تمام لحد هان
طبعا
هنا مجرد samples بيقولك في أي language ال tokens
بيكونوا تقريبا ضمن الخمس فئات هدولطبعا لو جيت تطلع
في الفئات هيقولك يا إما keywords يا إما
identifiers يا إما numbers يا إما operators يا إما
كل token قائم بذاته يعني تطلع في الخمسة دول اجريهم
هتلاقي معظم بالفعل أي language كل ال tokens تبعاته
بيكون وينفي المكان هذا في الفئات دول الرئيسيات
تمام عشان هيك احنا قولنا ال portability مهم ان ال
lexical يكون ماله لحاله عشان اقدر استخدمه هان و
هان و هان و هان بيصير اعمل تعديلات طفيفة من
language ل language لكن لو لزجته و خلطته في ال لو
لو خلطته في ال parsing بيصير مش قادر استخدمه حاله
تمام طيبهذا برضه اتكلمنا عنه كتير ال attributes of
tokens قلنا قبل هيك انه ما تفكريش ان ال token
دايما ال attribute تبعه value لأ ممكن يكون value
ممكن يكون type ممكن يكون string ممكن يكون scope
ممكن يكون codeيكون do while if condition ممكن يكون
code ممكن يكون ال creation ل objects ممكن يكون
استدعاء ل functions top dot get top dot put شفتي
كيف؟ هذا كله يحتمل أن يكون له attributes وممكن
مايكلهوش ولا attributes فبس فبدي أفهمك معلومة أنه
ما تختزليش في دماغك أن ال attribute يعني قيمة
valueيعني زي خمسة مش هيك كل شيء قد يكون attribute
طبعا هذا يعتمد على نوع ال token وإيش ال attributes
تبعاته وإيش المعلومات تبعاته اللي بديها فهذا كله
بنعتبره attributes لكن زي ما احنا عارفين لو أي
token له عشرين attributes بيكفين single
representation من خلال symbol table أني أحطه في
symbol table كامل وأشر عليه وسيبعت المؤشر عليه أو
ال key تبعه عشان ماضلش أ gerger كل المعلومات معاه
طبعا
الان تعالى نشوف مشكلة تانية احنا اتكلمنا توقع على
المشكلة هذه ان لو keyword و variable زي بعض بيعمل
خيلة بيعمل خيلة في ال execution في ال process
بيعمل خيلة في قراءة ال code صح ولا لأ؟ طب تعالى
نشوف مشكلة تانية تسمح بيها بعض اللغات زي ال
Fortran ال Fortran تسمح انه نكتب فرغات في الكلمة
ال Fortranتسمح انه نقطة فراغات في الكلمة بس قبل ما
اقولك .. بدي اقولك ال do كيف بتشتغل ك keyword في
ال Fortran ال do هيك بتشتغل بيقول do هدي keyword
بعدين كام مرة بدنا نلف بنحدد عدد المرات اللي بدنا
نلف فيهم لإن الـ do بدها تصير تلف، خمسة بعدين ال
variable I هيبدأ بقيمة جداش لجداش فهذه معناها أن
ال I هتبدأ بواحد ثم خمسة ثم عشرة ثم خمستين ثم
عشرين، مهم تصير إيش؟ ال F خمس مرات و ال I تنتقل من
واحد لخمسة وعشرين هيك معناها هذه ال do أن يا I خد
القيم هذه، لف خمس مرات
طيب الآن واحد المهم خمس مرات وديلف فهذه ال keyword
طيب اتطلع هنا هذه كلمة اسمها do 5i تساوي 1.25 بس
حط فرغات فيها الكلمة يعني هي فوق عبارة عن كلمة
اسمها do 5i تساوي 1.25الان مشكلة ان ال lexical كيف
بده يعرف انه لما شاف ال do هاي هل هي ال do بتاعة
ال keyword اللي جايها رقم و جايها variable و جايها
يساوي و جايها رقم و فاصلة ولا هل هي جزء من
variable إذا مستحيل يعرف إلا إذا ماشي لقدام و
هيمشي كتير تعالي تطلع شويةهيلاجى فراغ لسه مش
هيفتفدوا هيلاجى رجم خمسة لسه هيقول واحدة من تنتين
يا الخمسة هذه جزء من ال identifier يا الخمسة هذه
لكي عدة مرات اللفات اللي هتصير فمش هيستعجل ويحكم
هيلاجى فراغ بعدين هيلاجى I هيرجع تانى يقول يا إما
ال I هذه جزء من الكلمة يا إما هذه ال I ال variable
اللي بدنا نديله القيمة خمس مرات فاللي برضه مش
هيقدر يقرربعدين هيلاقي فراغ هيلاقي يساوي برضه مش
عارف هل هذه ال variable يساوي شغلة و الله هي ال do
I خمسة I تساوي فلحد تلانه مش جادر لغاية هان يميز
ان هذه ال do إيش كانت فهيضل ماشيبيلاقي واحد طب يا
ربي هذا الواحد الرقم اللى بدي ابدأ من عنده عشان
نبدأ ال loop تبعتنا ولا هذا القيمة اللى بدها
تتساوى في ال variable اللى قبل شوية اول ما يلاقي
النقطة stop معناه ان منها كان رقم الآن معناه اللى
يساوي هذه جابلها variable معناه هذه الآن دو خمسة I
variableلكن إن لجأ فاصلة مش نقطة فاصلة الفاصلة هذه
بتكونش في ال variable معناها هذه هتطلع ال do اللي
جابلي شوية مالة keyword شفتي كيف؟ و في الآخر هيعرف
طبعا بس زي ما انت شايفه انه لازم يمشي إيش؟ كتير
لقدام طب تخيلي أنا مانعه يكتب فراغ كان من أول ما
شاف do هنا جالي keyword شفتي كيف؟كمان مرة لما
منعوا تكتب الفراغ جوا الكلمة استفادوا برضه عصافير
بحجر زي هذه انه خلاص على طول بدوش process كتيرة
لقى if انتهى هذه ال keyword لسه انا بقعد اشوف فراغ
و مش فراغ و جزء من كلمة مش كلمة خلاص ارتاح لأنه مش
مسموح في ال language نكتب الفراغ الشيء التاني
المنطق بيقول ال code عشان ان كتب صح اذا انت ناوي
تكتب كلمة يعني انا كانت ناوي اكتب كلمة position
مثلا اروح اكتب بي انتر انتر انتر انتر ost فراخ
فراخ فراخ فراخ او انتر انتر انتر ان عشان اكتب كلمة
بيصير مشكلة في قراءة ال codeيعني هتروح تضيعي حالك
انت يعني لو انت جيتي بعد ما خلصتي رجعتي تكتبيه
هتتوهي فيه فقال لك هذه حركة أصلا مالاش لزوم هذه
بالعكس بتخرب مش بتعمر هذه بتخلي الواحد مش فاهم مش
عارف يقرا code انت قاعدك تكتب كلمة تروح تكتبليها
فرغات و interlines و tabs لأ انت يا المبرمج صرت
مستفيد وروحت عملت إعاقة في عملية ال process بتاع
ال compilationationعشانك بتلاقي ال languages
الجديدة، إيش بتسوي؟ يقولك لأ و ليش بدي فيها الحركة
هاي؟ بدناش يكتب space جوا الكلمة طيب إيش ضرب؟ إيش
استفاد؟ سهل قراءة ال code و سهل ال process أنا
بقولش إنه ال compiler مش هيعرف لو بنسمح، هيعرف لكن
بده process كتير أو مقارنات كتير عشان يعرفطب ليش
انا أخلي يتوح في .. في إشي أنا في غنى عنه؟ عشان
ككل السلبيات اللي بتكون موجودة في ال languages
القديمة بتلاقي ال Java أو ال C++ ماله بطل يسمح
فيها يعني ممنوع تكتب فرق في الكلمة ممنوع تستخدم ال
keyword نفس ال variable و هكذا أشياء أخرى واضحة
هنا هذا المثال تمام؟ طيبالان طبعا هذا مثال يا بنات
مافيش فيه إشي بدي أمشي عنه بسرعة هنا بيعتبر كأنك
لسه أنت مش عارفة شو token و قاعد بقولك لو الملف
مكتوب فيه جوا هيك و شغلنا ال lexical إيش هيطلع
ماحنا عارفينهيطلع هذه ID والمؤشر اللي عليها ال
attribute هيطلع assignment هيطلع ID والمؤشر اللي
عليها ويكون حاطة في ال symbol table وهيطلع ضرب
لانها مستقلة اذا انا حاططها ضمن مجموعة بيقول ال
operator اللي هي attribute اذا انا حاططها لحالها
خلاص بيقول لجيت mult لجيت ID لجيت exponent لجيت
number فهذا كله احنا المثال مزيجنا منه يعني
بالنسبة لنا صار اه سهل جدا مافيش فيه اشيطيب هذا
برضه سؤال نظري مهم Lexical Errors طبعا احنا عارفين
ان كل phaseبتكتشف أخطاء خصوصا عملية ال parsing
بكتشف أو ال parser بكتشف ال syntax بشكل كبير صح
ولا لأ فهنش بيقولي بيقولي حتى ال lexical صح شغله
بسيط ومحدود لكن حتى ال lexical نفسه بيكتشف بعض
الأخطاء البسيطة شو هي الأخطاء البسيطة اللي ممكن
يكتشفها ال lexical هيا سردلياهم واحد اتنين تلاتة
أربعة سهلين
جال ممكن الـ lexical يعرف أن أحنا حاطين حرف زيادة
character زيادة ممكن يعرف أن أحنا شايلين character
يعني المفروض يكون محتوط ممكن الـ lexical يعرف أن
أحنا مبدلين حرف مكان حرف يعني لو شيلنا هذا و
حاطينا هذا مكانه تظبط ممكن الـ lexical يعرف أن
الحرفين اللي جانب بعض المفروض ينعكسوا هذه أقصى
الشغلات اللي ممكن يكشفها الـ lexical لكن أشياء
كتيرة و خرابيط كتيرة بتبطل الـ lexical يقدر عليها
لازم مينالـ parsing هو اللي اكتشفها انه عمل
declaration ماعملش مش عارف ايش فيه كتير تفاصيل في
الـ parser لما نوصل ال chapter راح نتكلم فيها لكن
احنا اليوم بس بديني هذا ال lexical اللي شغله محدود
شوية اللي شغله بيقطع في ال .. في ال tokens هل بقدر
اكتشف أخطاء؟ أه بقدر اكتشف أخطاء و يديني فيها
رسالة بس أخطاء محدودةحرف زيادة حرف ناجس تبديل
حرفين حرف مكان حرف بس زي هيك فبس باختصار فلو
سألناكي إيش الأخطار اللي ممكن تكتشفها ال .. ال ..
ال lexical بتقول واحد اتنين تلات أربعة ويعطيك
العافية يعني زي .. زي هيك بسأل بسألش أسئلة السطور
مخبية لأ بسأل أسئلة واضحة إليها section أو
subsection أو اتكلمنا عنها بشكل واضح فبس فما
تجلجيش يعني من الأسئلة إذا في سؤال نظري طيب الآن
اخدوا break جيجا لان الان section مختلف تماما
اخدوا break جيجا يا لهوي اتخر
بالنسبة للموضوع اللي عملوه عشان يتكلموا عنه عشان
يتكلموا عنه عشان يتكلموا عنه عشان يتكلموا عنه
السلام عليكم
أولاً، يا عزيزي،
هي يا سيدي انا اتفقدت تقريبا في الـ
طيب خلونا بنات نبدأ الآن لو سمحتوا هدوء هدوء الآن
لو سمحتوا طيب بنات الآن بدنا ندخل في section تلاتة
اتنين اللي هو موضوع ال buffer طبعا ال buffer مامرش
عليا خالص في ال chapter السابق شو قصته؟ ليش موجود؟
بس أنا عشان أفهمك ليش موجود بدي أدرب مثال بسيط بدأ
افترض أنه قلنا أنه في إلي أنا عشرين كتابموجودين في
مبنى ال IT بتعرفوا مبنى ال IT؟ ورا المسجد تمام في
العشرين كتاب هناك وقولنا مثلا لفلانة بعينك الله
روح جيبيلي العشرين كتاب هدول هل المنطق انها هتروح
و تاخد كتاب و تيجي و تجيبه و ترجع عشرين مرة ولا
المنطق بيقول انها رايحة رايحة هتروح و تروح تلم قد
ما تقدر تشيل و تجيب و ترجع كمان مرة ايش الأصح في
الحالتين؟التانية مش معقول ده تروح عشرين مرة رايحة
جاية رايحة جاية خلاص إذا تقدر تجيل خمس كتب عشر كتب
سبعة كتب هتجيبهم و ترجع كمان مرة وهي نفس القصة في
قراءة ال characters إحنا قاعدين نتكلم كنا في ال
lexical من وين بيقرا ال characters؟ من الملف الملف
في مشكلة إن الملف هذا يعتبر من input output من
وحدات الإدخال والإخراج بيكون موجود مثلا عندي في ال
memoryمعروف انه لما بدي اعمله access و اجيب منه
معلومة هيكون الوقت مكلف بالنسبة ليه لأنه بطيء جدا
جدا جدا مقارنة بالسرعة اللي داخل ال processor او
مقارنة ال cache ال memory اللي جوا فانت متخيلة فكل
مرة بدي اجرح اجرح من ملاف مشكلة فلو انا بدي اجرح
character character مشكلة انت الملاف يمكن شوفي كام
الف characterوكل مرة بتروح للملف جاي من الملف رايح
للملف مش هذا بضيع وجهته؟ وانا في النهاية معنى
بالوقت عشان هيك ايش الفكرة تبعتنا انه طب ما زالك
رايح رايح على الملف ماتجراهاش character اجرأ الحصة
اللى بتقدر تجراها سطر سطرين ألف ألفين حسب
التكنولوجيا حسب ال commonsense اللى عندك جداش
بتقدر تجرأ اجرأ خدهمولمّا تدخل جوا ال processor
وين نحطهم، وين نرميهم في الشارع، بدنا نحطهم في
buffer اللي هو سريع ال access اللي أنا أتعامل معاه
بسرعة فبروح مخزنهم عندى جوا و بصير ايش؟ اجرى منهم
همهان بدل ما اضالة اني رايح جاية على الملفة طبعا
السرعة في غاية الأهمية لكمبيوتر بشكل عام يعني انت
لما بتشتري computerبهمك ال total يكون سريع صح ولا
لا؟ ايش الفايدة مثلا يروحوا يسرعولي ال processor
ويروحوا يعملولي operating system و لا compiler
بطيء اضعف؟ فالاخر دارلي ال computer بالنسبالي مش
هسر عليك بيه لصح سرعتلي شوية انت في ال processor
لكن روحت مطقتلي في ال software بتاع ال operating
system عشان هيك موضوع ان ال computer يكون سريع
اتكلمنا عنه أيام العمارة قلنا الكليعمل لنفس الهدف
ابتداء من ال application الكل بيحاول يعمل software
يكون ماله سريع و efficient اتخيلي حضرتك اجي
تعملتلي game ولا application تجيلي كتير طب ما انا
مش هقدر ا نزده على الجهاز تبعي ساعتها بقولك مابديش
ال application تبعك يا بروح بجيبلي جهاز و مين
بيروح يشتريجي جهاز مخصوص عشان gameلكن اتخيل انك
تستطيع ان تعمل نفس ال game بسرعة و بدون أن تتجيل و
تتحمل بسرعة و تتجيل انت المستفيد اللي عملت ال
application لأن كل شيء سيحصلياخد منك هذا ال game
فشوفتي وانت قاعد تتكلمي ك application كان السرعة
مهم وان ال code يكون efficient مهم صح له لا مش
بسيط لما ننزل لل level اللي أقل منه شوية اللي هو
ال operating system و ال compiler إذا ماكانش برضه
هذا بيحاول أن يزيد من سرعته ال compiler يصير أسرع
ال operating system يصير أسرع واش الفايدة افترضي
راي اعملي ويندوز انا كنت في ويندوز سبعة مثلا راي
اعملي ويندوز عشرة بطيء لا ولا لسه أضلني في ويندوز
سبعة السريع أحسنعشان ذلك و ليش كل مرة بتلاقي فيه
نسخات محدثة من الـ Windows لأنه كل مرة بيحاول
يستفيد من التكنولوجيا و يسرع عمله لأنه باستمرار
حتى الـ Operating System لازم يصير أسرع حتى
الكمبيوتر لازم يصير أسرع حتى الـ Level الأخير اللي
تحت اللي هو الـ Hardware و اللي اتكلمنا فيه في
التفاصيل أيام العمارة بيحاولوا يكون أسرع سواء من
تكنولوجيا الـ Pipelining أو الـ Parallelism أو أي
تكنولوجيا أخرى موجودة فشوفته فالكل يسعى ليش إلى
السرعةوهنا نفس القصة تبعتنا إحنا قاعدين نشتغل
compiler صح ولا لأ يبقى لازم ال compiler يكون أسرع
ما يمكن عشان هيك أنا لازم ماضيعش وجد على الفاضي في
الملف رايح جاي رايح جاي يبقى المنطقش بيقول إنه لأ
خد جد ما تقدر وحطهم عندك جوا في المكان السريع في
المكان التخزين السريع وصير اشتغل عليهم عاد دور ع
ال tokens عاد طيب سؤال إيش الأحسن أشتغل على buffer
واحدولا بفرين جانب بعض بحيث انه لما نقاش يخلص من
الأول اعب التاني فبنتاجل على التاني بيجي يخلص من
التاني يعب الأول مين الأسرع؟ اتنين لأنه لو التاني
مش موجود بيتستنى لما يرجعاشإيه عبي؟ طب لأ أنا أحط
اتنين جانب بعض أول ما وصل للنهاية بيبدأ يعبي
التاني بس بمشي في التاني أول وصل للنهاية بيصير
يعبي في الأول برضه هذه الفكرة إيش؟ علشان ما نضيعش
وقت علشان هيك هو أجى اليوم إيش يحكيلي يقوللي إن
إحنا بدنا نعمل pairs of buffer يعني buffer نصينعلى
أساس أنا أجرى من الملاف و أجيب معلوماتي يبقى الـ
lexical الجديد بتاعنا بعد التطوير هيبطل يتعامل مع
ال character اللي في الملاف هيصير يتعامل و يعتبر
معلوماته جاعة في ال buffer فبصير يمشي في ال buffer
و يدور على ال token طبعا كيف بده يلاقي ال token
لازم لمؤشرين هنامؤشر بنسميه بداية ال token يعني
افترض ك ID في بداية ال ID ومؤشر بتظل يمشي يعني
افترض لجهة حرف ألف ورا letter or digit letter or
digit هذا ال forward letter or digit letter or
digit لجهة digit خلاص برجع خطوة ال forward صار ال
token وينه من ال begin لل forward فهذا كله ايش
بنسميه ال token هيروح يرجعه وين ال begin هيروح بعد
هيك لبعد ال forward و ال forward كل مرة بيبدأ من
وينمن عند الـ begin يعني هنغير بعد ما نلاقي ال
token ال forward طبعا ال begin هيروح لبعد ال
forward و ال forward هيجي على نفس ال begin و يعيد
يدور طيب الآن ملاحظة صغيرة لما ال forward يوصل
لنهاية الجزء الأول بيصير إيش يعبي الجزء التاني طيب
لما ال forward يصل أو ال extreme begin يوصل لنهاية
الجزء التاني بيصير يعبي النص الأولاني باختصار طيب
الان بس بدنا في بعض المشاكل أو بعض الملاحظات اللي
بدنا ناخد بالنا منها زي ايش انت كل مرة .. كل مرة
هتروح تعملي مقارنة ايش المقارنة؟ هل .. يعني هتقولي
هل ال forward في نهاية النص الأول؟else if هل ال
forward في نهاية النص التاني else if هل ال forward
في نهاية الملف لأن كل واحدة لها معنى طبعا else
خلاص هيكمل شغلنا أنه يمشي وياخد ال token ليش هو كل
مرة دي يعمل الأربع فحص هدول لأنه إذا كان في نهاية
الملف بتقول خلصت إذا كان في نهاية النص الأول بتقول
عبي النص التاني إذا في نهاية النص التاني عبي إيش
النص الأول فبتلاحظ فيه مشكلة أنه في كل حركة بدك
تقارنه لأربع مرات فإذا طوله ال buffer ألف يعني
أربع آلاف مقارنة مش هذه مشكلة؟ طيب قال الكيب
نلحلها .. ركزي معاي .. قال الكيب نلحلها .. قال في
حاجة بنسميها ال Sentinels شهد ال Sentinels رمز
النهايةطبعا هذا الرمز تاع النهاية لازم يكون
character مش من ال characters المعروفين في ال
tokens يعني ممنوع اقول رمز النهاية حرف T ليش؟ لما
اكتب حرف T طباش يعرفني انه بقصد فيها من ال token
ولا ب .. ايوة فممنوع تستخدمي character من اللي
ممكن يكونه في ال language فبنستخدم character مش من
ال language عشان نكون عارفين أن هذا رمز النهاية
فهذا بنسميه Sentinel هنا أخد اسمه E ofend of file
او end of النصف فخليني اقول لو حطيت انا في نهاية
هذا ال end of file و حطيت في نهاية ال end of file
و حطيت ال end of file في نهاية ال token قاللي انت
استفادت من القصة هذه خليني اورجيكوا معايا sentinel
هيا شايفه ايش سوى ايش عملحط رمز نهاية رمز نهاية
رمز نهاية مع الخبر ان الحط هذه وفرت عليكتير في
المقارنات اقولك ليش لأن انت حضرتك هتصير ايش تسوي
تعمل مقارنة واحدة هل ال forward رمز نهاية ولا لا؟
لأ بشتغل forward هل ال forward رمز نهاية ولا لا؟
لأ بشتغل forward شوف تقنى مرة هل ال forward رمز
نهاية ولا لا؟ أه في الحالة عادية بتبصلي طب نهاية
ملف ولا نهاية جزء أول ولا نهاية جزء تاني فلاحظي
الحركة التانية أسرع بكتير صار في كل ألف مرة يقارن
مرة بالتفصيل يعني هيمشي ال 999 مثلابمقارنتين مرة
بزيد أول إيش كان يسوي في كل مرة يعمل أربع مقارنات
إذا فكرة ال Sentinel فكرة سهلة وبدهية لكن تأثيرها
ماله كبير شوفت إيش فكرة تقلق خلاص حط نهاية كل جزء
هذا ال character نهاية الجزء الأول E of file نهاية
الجزء التاني E of file نهاية الملف E of file سيري
في كل مرة بسقارن مقارنة واحدة هل هذا ال forward
نهايه ولا لأ خلاص اشتغلوصل لنهاية احدد النهاية
عشان تقرر ايش تعمل واضحة؟ يبقى هذه الإشكالية
الأولى حلناها المقارنات المتعددة وهي ال code عشان
تشوفيه باختصار هاي ال code الجديد ايش قالك؟ قالك
بس انا ال forward هقارن القيمة تبعته هل هي case in
the file؟ اذا لأ هيدخل وين؟ هيدخلفي شغله انه امشي
لتر اللي كنا بنقوله قبل شوية شايفها بس بكاسين مش
غيرهم طب اذا اه end of file ساعتها بس في الحالة
هذه اللي بتصير مرة كل جديش بيصير يدخلياش يفصل هل
هو نهاية جزء أول عشان أعمل reload للجزء التاني هل
هو نهاية جزء تاني عشان أعمل reload للجزء الأول هل
هو نهاية الملف عشان أوقف و أخلص و أطلعشوفتي كيف؟
واضحة كيف سوينا لحد هنا في ضايق بس تلت دقايق بدي
أخلص فيه اللي ضايق بس في أي سؤال هنا؟ طيب أخر نقطة
بدنا نحكيها و
ركزوا اللي أنا مهمة طبعا محاضرة اليوم مش داخلة في
الامتحان إيش بيقولي قداش ال size يعني
كام character هيقرأ تخيلي هيقرأفي الـ buffer أربع
تلاف و ستة وتسعين character وهذا كان الكتاب جامل
أكمن سنة يعني يمكن اليوم يقرأ أكتر كمانفي
التطويرات اللي بتصير لكن احنا خلّيني اخبرك ان حتى
الرقم الـ 4096 رقم مهول 4096 byte عارف ايش يعني؟
4096 character لأن ال byte هو character فتخيلي
يعني بيدخل على الملف بقرا 4096 character طبعا ممكن
يكون منهم حروف lines tabs الاخرهفبيجراهم طيب سؤالي
إليك إذا هذا طوله 4096 إحنا متعودين إن ال token
أجعز token أنا بكتبه position مش عارف إيش كله عشر
أو خمس عشر حرف صح سؤالي إليك هل ممكن يصير في مشكلة
في ال token يعني ال token يطير مني يعني يعني بمعنى
إنه افترضي بدأ ال token من هناوال forward المسكين
يمشي ويمشي ويمشي ويمشي ويمشي ويمشي ويمشي ويمشي
ويمشي ويمشي ويمشي ويمشي ويمشي ويمشي ويمشي ويمشي
ويمشي ويمشي ويمشي
ويمشي ويمشي ويمشي ويمشي ويمشي ويمشي ويمشي ويمشي
ويمشي ويمشي ويمشي
ومن 4996 character لأنه إذا كان أكبر معناه فيه نص
بيطلع عنه وبيتحمل في النص اللي كان فيه فبيديرموت
فبيروح منه أجزاء ال token فهل الحالة هاي أن ال
token Polo 4096 ممكن يكون موجود يعني ممكن نطلع برا
ال buffer يعني هذه المشكلة واردة إيش رأيكم؟ أه
عشان نختم هذا السؤال أه إيش رأيكم؟ وارد هذه
المشكلة
أنا ماحكيش لسه عن ال stack الموضوع اللي أنا بحكيه
الآن في ال token ماشي ال overflow لو طلعنا برا ال
stack الآن أنا ماحكيش عن ال stack أنا بحكي في
التحديد لل token أنا ليش جدبت ال buffer لل tokens
هل أنا ممكن يكون في عندي token أحتاج أني أمشي برا
ال buffer طيب أنا بدي أجاوب بدي أجاوب ممكن وارد
وبدي أديكي مثالين مثال
من ال languages القديمة ومثال من ال languages
الجديدة بالنسبة للقديمة أنا مسحتها اللي هي ال do
قبل شوية ماكانش حيفتي أنه ال do هذه ال keyword إلا
لما يمشي قدام مش كان فرضه يمشي قدام كتيرمن حسن
الحظ كان هيمشي بس عشرة letters عشرة character لما
يوصل لفاصلة و لا يوصل ل .. صح ولا لأ لكن افترضي
انه ماكانش هيقدر يقرر الا يمشي كتير فوارد جدا زي
ال if then قبل شوية اش يعرفوا ان ال if هذا الا
يشوف ال then و ال then مش عارف .. و يضل ماشي صح
ولا لأ فوارد جدا انه يطلع برا البفر خصوصا في ال
languages اللي بتسمح يكون ال keyword زيها مينزي
الـ Identifier لأنه مش هيقدر يقرر فمضطر إيش يمشي
كتير عشان يعرف الماشي الكتير ممكنش يسوي يضيع ال
token عشان كلا لحظة هذه إيجابية من الإيجابيات اللي
لما منع ال variable identifier يكونوا زي بعض مش بس
هين استفدنا هنا بطل يطلع برا البفر غير الإيجابيات
اللي اتكلمنا عنها قبل شوية غير إنه سهل ال code غير
إنه زاد ال process حتى بطل يطلع برا البفر بيصيرغير
إيجابيات أخرى ممكن نلاقيها في الدروس اللي قدام إذا
واضح أنه عدم استخدام ال keyword زي ال variable هذا
إيش إيجابي بشكل مطلق يعني أديكي مثال تاني ذاكر هو
هنا إيش بيقول طلعي معايا بيقول في language زي ال
BLI ال declare هي قد تكون اسم function وقد تكون
keyword تمام؟الان هو كيف بده يعرف للأسف ال keyword
له argument وال function له parameters فالمشكلة
لما بشوف كلمة declareما بيقدرش يعرف إلا يمشي في كل
البراميطار طب أنا ممكن أحط خمسين براميطار لل
function تبعتي وارد جدا هذا في أي language أن يكون
براميطار كتيرة لبرنامج application كبير فمية المية
هنا إيش هيصير؟ هيطلع برا ال buffer لأنه سمحت بال
duplication هذا طبعا لازم يكون في solution إيش ال
solution اللي كان مقترح أنه خلاص أنا أ declare مش
قادر أفتي فيها بروح ببعتها لل بارثر و ببعتله عنده
علامة أنه أنا مش قادر أعرف أنت يا بارثر قعد أعمل
ال parsing تبعك و قرريعني ممكن أحيانا يؤجل ال
lexical أنه يفتف المعلومة يقوله أنا مش قادر مش
واضح ليه لا هي keyword ولا واضح ليه إذا هي
variable و بطلع برا ال buffer فانت اتفضل كمل الشغل
شفتي كيف؟ يعني لازم يكون لكل case حلول لكن انت
ملاحظة أنه لما يكون ال keyword زي ال variable
المشاكل بتكتر طب احنا قولنا language زي Javaمنعت
هذا الكلام، إذن معظم الحالات هذه مش هنشوفها، صح؟
طب سؤالي هل ممكن يمر علينا في الجابة طريقة طلّينا
برا البفر؟ أه عشان نختم أ الليترالمش قلنا قبل شوية
في الجابة ان ال quotation و ال quotation و كل
الكلام اللي بينهم هذا token طب وارد جدا تكتبيلك
خمس عشر أسطر بديك تطبعيهم عن البرنامج البرنامج
بيعمل كذا سوي كذا سطر مش هيك فوارد جدا تعمل ال
literals و تاخد معاك few lines و يطلع برا البفار
قالك طب الجابة كيف تتصرف في هذا الحال قالك خلاص
الجابة شو بتسوي بتعتبر ال line كله مثلا sub token
فبيبعته sub token فبيبعته في آخر واحدة لما يخلص
بيعمل concatenation مش فيه في ال string في ال Java
concatenation انه هاي مع هاي مع هاي اعمل
concatenation بيصير ال token كامل يعني المقصد انهم
أخدوا بالهم ان الوارد تطلع برا ال buffer و عنده
لحالةيعني هذه سؤالنا هل ممكن ان انا اطلع برا؟ اه
ممكن بيصير لكن لازم يكون ايش؟ في solution احل لهذه
القصة طبعا هل ال buffer مهم وجوده؟ طبعا مهم جدا
جدا لانه هيوفر علي سرعات مهولة اتخيلي بدل ما اروح
4096 مرة على مكان بطيءمرة واحدة بجيب ال 4000
character عندي تخيل 4096 و بشتغل عليهم و قبل ما
أخلصه بيكون جايني 4096 غيرهم فبصي العملية مالها في
قمة السرعة لما أتعامل مع ال buffer واضحة عشانك
ضروري من الملف ما أتعاملش زي ما كنا نعمل في
chapter 2 نمشي على الملف لأ بأجرح و بحط في buffer
و بتعامل مع ال buffer هي أنا خلصت اللي عندي في أي
استفساريعطيكم الصحة والعافية موفق إن شاء الله