بسم الله الرحمن الرحيم احنا اليوم ان شاء الله
بنختم الشابتر اتنين ماضالش منه اشي و بنبدأ في
شابتر ثلاثة اللي هو بحكي عن ال lexical analysis
شابتر اتنين اللي هو كان موضوع simple syntax
directed translator من خلاله اتعرفنا على ايش اللي
بتتم في ال syntax analysis اعتماد على اولا ايش ال
syntax definition بعدين كعملية ال syntax directed
translationو بعد ذلك رأينا ما هو ال parsing و آخر
حاجة رأيناها في ال parsing كان designing a
predictive parser كان فيه اللي هو ال code اللي
شفنا انه لكل واحد من ال non-terminals اللي أنا
رايح هنا على الآخر الشابط أو تقريبا آخر slide أو
slide اللي جاب الأخيرة okay اللي هو كان في عامل
function لكل واحد من ال non-terminalsوالـ function
هذه بنيتها الأساسية عبارة عن case statement بتاخد
كافة الخيارات اللي هي كافة ال first تبعهم ال
production تبعهم هذا ال non terminal هذا ال non
terminal هو عدد ال productions كل production فيه
إلها ال first تبعها بيجي هو يتعامله case item في
ال case statement وهذا الكلام يتم بالتعامل مع يعني
بالاشتراك مع اللي هو ال matchالـ match function
الموجودة فيها إنها بتاخد literal و بتشوف هل هو
المطابق للإيه current input current token إذا
مطابق بتعمل إيش advance لـ token اللي بعد طبعا في
المثال هنا في functional statement non terminal و
في non terminal آخر اللي هو ال optional expression
اللي هو function صغيرة جدا لإن هو مالوش إلا
production واحدة كانت مظبوط اللي بتبدأ بال
expression token هذا وهي ال match بتعمل عملية ال
matching ما بين ال terminal اللي دخل عليها وما بين
lookahead اللي هو ال pointer اللي بشير على ال next
token في ال input إذا مطابقين فبتعمل advance وإلا
بيصير في syntax error وهذا شيء أكيد لأن إذا كان
أنا واصل داخل هنا و
وقف على letter E على letter F ودخلي أي شيء تاني
غير ال F يبقى فيه error إذا أنا بتوافق على ال
semicolon والجوز واللي على ال input أي شيء غير
الجوز يبقى error مظبوط؟ لأن ال case ذالك زي ما
شوفنا أبداً استدعاءات لإما ال match أو ل ال
function تبعد أحد ال non-terminalsعلى حسب صيغة
ترمية ال production كل واحد من هذه ال cases تمثل
production هذا
كان نهاية الكلام في ال chapter ثم ننظر إلى Lexical
Analyzer Generator اسمه Lex لنرى كيف يستخدمه ثم
ننظر إلى finite automata اللي هي الأساس اللي على
أساسهالـ Lex هذا أو الـ Lexical Analyzer Generator
بيعمل الـ Lexical Analyzers ماشي الفايلة الاطمانية
هذه برضه بتعتمد ع ال regular expression يعني احنا
في الأول بشوف ال regular expression كأساس لت
specify tokens بعدها هو ايضا كأساس ل generating
الاطمانية اللي هي بستند اليها ال generator في بناء
ال Lexical Analyzerخلّينا نخدها واحدة واحدة من
البداية بمعنى إيش الدور تبع ال Lexical Analyzer
بتراجع و بعدين يشوف ال .. المسألة كيف تدرج شوي شوي
طبعا الدور تبع Lexical Analyzer راح نعرفينه بدون
أشكالية اللي هو أنه تحويل ال main task of the
Lexical Analyzer is to read ال input characters من
ال source program يجرحهم في Lexemes و يطلعproduce
as output a sequence of hash tokens هذا الكلام
بدنا نبدأ دايما دايما فاكرين انه ال lexical
analyzer بيشوف character character يعني انت بتخيل
هذا بقى حجاب و ال characters بت morph كل character
بيشوفه هو لحاله و معاه pointer ممكن يشوف ال
character اللي بعده انما في الآخر هو بيشوفهم
characters character by characterكل ما يكتشف إنه
مجموع من ال characters أصبحوا يشكلوا حاجة بيعرفها
بيصدر ابها ايش؟ بيصدر ابها token بالظبط الآن هذه
الكلام بيشتغل هو أصلا كخادم
لل parcel يعني أنت ممكن تفكر في شغل ال lexical
analyzer على أساس إنه والله أخد ال source كله مرة
واحدة و طلع ابه ايش؟ tokensأو و هو الأصح انك تعتبر
ان هو ال parser بيطلب token كل ما ال parser بيطلب
token هذا بيروح بيشتغل بيحلل الجزء من ال input لما
حد بيتعرف على token بسلمه يعني على الطلب حسب الطلب
طبعاً الاتنين .. الاتنين مالهمش غيرنا عن ال .. ال
symbol table لأن كتير من التفاصيل أو البيانات تبعت
العناصر هذه ال tokens مخزنة في ال symbol table كل
شغل لغاية مقدمة لل syntax .. لل semantic analysis
اللي هو مقدمة لل translation فيه من بعد تمام؟ الآن
وظيفة ال lexical analyzer في حتة ذاتها ممكن تفكر
فيها على إنها task واحدة أو على إنها two tasks
منفصلات الأولى ليه scanningاللي هي deletion of
comments فجزد
أنا بمعنى انه بدل ما هو يقعد يطلع الكاركترس ويشوف
comments ويشوف white space لأ تخيل انه في pass او
phase جاب العملية ال lexical analysis تسبق ال
lexical analysis اللي هي تنظف له ال source اتشيل
ال comments تماما اتشيلهاو ال white space ما
تشيلوهش يعني إذا شيلتناها بلس جو ال characters
ببعضها بس تعملوا compaction يعني إيش compaction
يعني ال multiple white space characters إذا حاطت
خمسة فررات إحولهم لواحد إذا حاطت تبات كتير احولهم
لواحد ايوة ال compaction يعني يجلل
ال .. هنابعد ذلك بيجي شغل الـ lexical analysis
الحقيقي اللي هو ان التعرف على ال characters و ال
groups of characters عشان يطلع منها tokens الان
برضه كمان بيجب نجف شوية عند المصطلحات هذه اللي هو
كلمة token و كلمة lexeme و كلمة pattern ال token
احنا قبل ذلك اتخيلوا ان هو عبارة عن اشي زي data
structure اللي بتحتوي علىالمعلومات اللي بيسلمها
الـ lexical analyzer لل syntax analyzer لل parser
وإن معلومتين أساسيات أو حتى معلومة واحدة شو هو ال
token اللي تعرف عليه ال lexical analyzer و أي
attribute أخرى يعني هاي صندوق علبة فيها قطعتين two
data items تخيلوا ك record أو structure القطعة
الأولى اللي هي هذه المجموعة characters يعني هو شاف
ال Fالـ I لحالها ربما هو ما شاف فماكنش عارف هى
بداية ال F ولا بداية identifier ربما اسمه بيبدأ
بحرف ال I لما شاف ال F و لما بعدين شاف ان فيه
براها فراغ خلاص حكم ان هذا ال group of characters
اتنين عبارة عن ال keyword ال F فبيصدر فيها ال
token ال token اللى بيحمل ايش ال .. ال .. ال .. ال
.. ال symbol تبع ال F ال symbolكلمة F في حد ذاتها
هي رمز للـ F ممكن تبقى 01 او اي code معين ممكن
يكون فيه ترميز لل tokens برموز بارقام المهم اي
symbol يفهم ال browser ان انا شوفت F ال keyword F
ماعندك ايش فيه attribute ال F؟ مالهاش لكن لو شاف
identifier لو كان مثلا كلمة interest rate
هو سيعطي البرسور اكترار اكترار اكترار اكترار
اكترار اكترار اكترار اكترار اكترار اكترار اكترار
اكترار اكترار اكترار اكترالـ token name فهي اسم
الـ token ID اسم الـ token الـ token تخيله انه نوع
class type يوصف ينتمي اليه هذا ال character هذا ال
character ينتمي الي نوع ال keyword F هذا variable
name ينتمي الي نوع identifier تصنيفه تصنيف هذا ال
هذه المجموعة من ال characters تصنيفها انها
identifier تصنيفها لكيوارد F واضح؟ اي رقم مثلا
الرقم 15، الرقم 13 و 30 هذا عبارة عن رقم اي واحد
من هؤلاء تصنيفه انه number فال token هو عبارة عن
الواقع اللي بدي يسلمه ال lexical analyzer لل إيش
لل بارسر و بيحملزوج من المعلومات ان هو ال token
name و ال optional attribute optional يعني قد تكون
موجودة و قد لا تكون صح لأن اللاكسين جابني ال
pattern اللاكسين هو المجموعة الأحرف نفسها ال
string of characters هي بتشكل اللاكسين تبع هذا ال
token وهذا اللاكسين مبتدترسل في الـ token نفسه
وتكون موجود في الـ symbol table إذا هو identifier
خاصة إذا هو identifier سيكون لقسيمه تخزن في ال
symbol table شكل هذا ال identifier تخزن في ال
symbol table إذا ماهو ال pattern ال pattern هي
description ال pattern هي description وهذا هو محور
عمل الـ lexical analyzer أنه لازم انا اعطيله
description لكل واحد من الانواع من ال tokens ال
identifier كيف بيكون شكله اعطيله وصف بعدها طبعا ال
description تبعه مش بده يكون شفوي ولا يبقى
informal لازم استخدم وسيلة دقيقة جدا في صياغة ال
description تبع كل واحد من ال tokensفاحنا ده هطلع
على irregular expression كأداة لوصف النمط أو
الصيغة تبع ال tokens المختلفة زي ما كان فيه أن ال
syntax definition وصيلة لوصف ال grammar تبع ال
language الآن لازم يكون في عندي وسيلة لوصف
المفردات تبع ال language سواء كانت هيidentifiers و
لا keywords و لا operators و لا غيره الجدول
هذا فيه أمثلة بجمعة أمثلة الان ال F هذا ال token
ال else token ال comparison token ال ID token ال
number لأن كل واحد من هؤلاء له شكل أو عدة أشكال
ايش أشكال ال numberممكن يبدأ زي هيك او صفر او زي
ايه صح؟ هذه أشكال ال identifier ايش أشكاله؟ هذه
أمثلة عليه وهناك عدد لانهاء من الأمثلة على ال
identifier بينما هذا ال token ايش أشكاله؟ كيورت،
كيورت، كيورت، كيورت، كيورت، كيورت، كيورت، كيورت،
كيورت، كيورت، كيورت، كيورت، كيورت، كيورت، كيورت، ك
صورة واحدة بالظبط ال description الانفورمالية لما
بقول لك انا اوصف لي ال F هي عبارة عن اي characters
ال I مطبوعة بال character F هاي وصفي token هنا ال
else ال character E مطبوعة بال ال مطبوعة بال else
مطبوعة بال E لكن ايش وصف ال identifier؟
اي string يبدأ ب letter مطبوعة بأي تشكيلة من ال
letters و ال digits صح؟أحنا نسينا هذا ال
comparison هذا ال token comparison اللي هو ال
comparison operators يقصد تمام بيتكوّن من هاي
أمثلة عليه بيتكوّن من اي واحدة من هذه الأمثلة لاحظ
أن هذا تقريباً هذا indefinite يعني عدد لمحدود
تقريبا من الأشكال هذا شكل واحد هذا مجموعة محدودة
من الأشكال من اللاكسين صح أن ياما واحد إذا هو
keywordياما مجموعة محدودة ياما مجموعة غير محدودة
برضه ال number و ال literal تقريبا مجموعة غير
محدودة من الأشكال والأشكال كلها strings strings و
characters ال exam هو الصورة لل token بالظبط ايه
نعم هو
ال token يعني ال N اي لغة اي لغة C Java اي لغة
عادة ال token سبعتهاالمفرضات تبعتها مابتخرجش أنواع
من الخمس حالات هذه أو أنواع هذه ان يكون في عندي
keywords ان يكون في عندي keywords Keywords زي ال F
و ال S و ال Y و ال 4 و الكلام هذا إلى ان هذه ال
keywords بينعمل single او one token لكل واحد منها
برمز كل keyword برمز خاص بها صح؟ one token for
each keywordالمشكلة هي ماذا يمكن أن يكون البرامج
الواضحة الواضحة الواضحة الواضحة الواضحة الواضحة
الواضحة الواضحة الواضحة الواضحة
الواضحة الواضحة الواضحة الواضحة الواضحة الواضحة
الواضحة الو
ولا greater than ولا equal هذا تيجي كدا ال
attribute لاسم
ال token هذه الحالة الأولى كي ورد الحالة التانية ب
operator either individually او انا ممكن اعمل لكل
واحد منهم token وخلاص ال parser يستخدمبس هذا يفهم
ان ال input يحتوي على equal operator او يفهم ان
هناك operator من نوع comparison و بالتحديد هو less
than او equal كده فيا اما نعمل token for the
operators either individually لكل operator له رمز
او token name مخصوص او a class زي هيك ال
comparisonattribute اللي بتحدد مين من ال
comparison هون one token representing all
identifiers كل ال identifiers لها اسم و token واحد
اللي هو ID و بعد كده بيجي attribute اللي هي تبعتي
ال pointer one or more tokens representing ال
constants such as ال numbers و ال literals ال
numbers لها لها token يقول مثلا none اسمه none
وقيمته قيمة الرقم الرقم 6 الرقم 6.5 الرقم 2 الرقم
كذا ومثل ذلك لمن لل strings literal strings زي ما
توه هنا في الجدول هذا literal string literal
string صح؟ والاخيرة النوع الأخير من ال tokens اللي
هو ال punctuation symbols ال guess left و right و
ال semicolon و الcolons و الأيهPunctuation symbols
يعني معظم اللغات ما بتخرجش عن هذه الأصناف من الاش
من ال symbols و زي ما شوفنا بعض منها بينعمل لكل
واحد لكل أنصر من أنصر الفئة هذه فئة فئة ال
keywords هذه فئة ال operators هذه فئة ال
identifiers هذه فئة ال constants و ال numbers وهذه
فئة ال punctuation symbolsأما بيعمل token لكل واحد
أو token للفئة كلها الآن ال attributes زي ما قلنا
ال attributes على حسب إذا هو identifier لازم تيجي
attributes وattributes عديدة متعددة زي مثلا شكل ال
identifier نفسهشكله ال type تبقى نوعه و اين اول
سطر اتعرف فيه هذه قدة attributes و لأن ال token
مابسعش إلها فبتتخزن في ال symbol table و ال
attribute الوحيد اللي بتضال في ال token هي ال
pointer بعض ال tokens مابلزملوش attributes و بعض
مابلزمله attribute واحدة يعني إذا كان موجود ال
attribute في ال symbol table بس بنحط له reference
لهاللي بنقوله إنه إذا كان ال token محتاج
Attributes متعددة و هاد الكلام ينطبق بالتحديد على
ال identifiers فمنحط إيش في ال symbol table إنما
باقى ال identifiers أنا خدهم هنا أنا هنا برسل ال
keyword أصلا بلزمهاش attribute، مظبوط؟ انا هرسل
إيش زي .. زي إيه كان؟ four F شو بدي attribute
معاها؟ why؟هذا بالنسبة لـ QA Summary بالنسبة لـ
Operators برضه الـ Operators أنا ياما بحط نوعه و
بعدين هذا ياما بحطه هو لحاله ال attributes فالوحيد
اللي عمليا بيحتاجه لملتب ال attributes هو ال
identifier عشان هيك بنحطه في ال symbol table okay
okay الان كمثال على الكلام هذا و هذا الامثال حيكون
بسيط جدا
E بيتساوي M ضرب C أُس 2 هذه لما نشوفها لكسيكال
أناليزر ايش ال tokens اللي هيطلع ليها زي هذا ال E
هذي هيطلع لها token اسمه identifier و ال attribute
تبعته هي ال point الوشيء اللي مكان ال E في اللي ده
هذه هيطلع لها ال sign up شايف خلاص هو لحاله ال
parser اللي مش محتاجه اي اش تانيبتعرف إن هناك
Assignment Operator الـ Identifier للـ M
Multiplication Operator للدرب Identifier للـ C و
Exponentiation Operator للنجمتين مع بعض الدولة و
بعدين ال number integer اتنين
الان قضية بسيطة جدا اللي هي input buffering انه ال
lexical analyzer بيقرأ character character بس مش
معقول يعمل عملية disk access لكل character هو لازم
يجيب مجموعة مجموعة يحط في ال buffer و يشتغل في ال
buffer، مظبوط؟ فال input buffering اللي هو اشي
ضروري جدا لعمل ال lexical analyzer انه يجيب و ال
buffer بيسع إلى مية، متين، خمسين، حتى لو الف مثلا
من ال characters دفعة واحدة يحطها في ال buffer و
يشتغل عليهم لما بيصل لنهاية ال buffer يذهب و يعمل
reload عادة ال compilers بتشتغل على زوج من ال
buffers buffer pairs تمام و ال buffer pairs اللي
ممكن يكون متجاورين زي هيك او ممكن يكون كل احد في
memory address مختلفة الان هو اللي بيصير انه في
end و point اك اسمه vaccine beginبشار على بداية ال
current لكسيم يعني نفترض ان هو ال statement ال E
بساوية M اللى توشفناه في المثال هو الآن غالط وواصل
لحد هنا يعني هذا خلصه وطلع فيه token وهذا خلصه
وطلع فيه operator وهذا خلصه .. خلصه كله من الآن
وواصل هنا فمن القضية انه في يدي pointer يشير الى
بداية ال current لكسيم وين نهاية ال current لكسيم
في عندى pointer تانى اصلا اول ما خلصنا ال C
الاتنين ال pointers اللي هو ال forward و ال C ال
beginning شوروا على نفس ال location هذا بثبت وهذا
اللي بتحرك .. بتحرك .. بتحرك .. لحد دي ما يجتمع
لديه characters اللي تشكل token هو بيعرفه فالان
النجم هذه في عدزة تلاتة فيههو قد تكون ضرب أو قد
تكون بداية اكسبونيشش
اكسبونيشش اكسبونيشش اكسبونيشش اكسبونيشش اكسبونيشش
اكسبونيشش اكسبونيشش اكسبونيشش اكسبوني
المجموعة هذه عبارة عن تطابق ال pattern تبع ال
exponentiation operator فبصدر فيها token للبرسا
الان بيظل .. خلاص متى ما وصل الان ال axiom
beginning تنتج إلى هنا okay بيصير الان بمشي ال
forwardبلاقي end of file يعني نهاية ال input خلاص
بيعرف انه الاتنين مش هيجي وراها اشي فببقالها عيه ك
number okay الان في إشكالية بسيطة وهي انه ال
forward هذا في كل كيف اللي لابسيه من the games
يعني هتبقى بواقف لحد ما يعرف ان هذا و برايته روحه
اشيه لحد ما يرحل token و يبقى .. ايوه بنجره بنجره
على بداية على ال character اللي بعد ال token رحل
الان ال forward في اشكالية صغيرة في ال forward هو
ان ال forward هذا في كل نجلة بده يشوف هل هو طلع
برا حدود ال buffer ولا لأ لأنه
بيجي ينقل ينقل ينقل هنا طلع برا حدود ال buffer صح
ففي كل عمليةالتحريك ال forward بدي يفحص فحصين فحص
الأول هل طلعنا بره ال buffer يعني وصلنا لنهايته و
بعدها بدينا نعمل تعبئة جديدة بدينا نجيب data جديدة
و برضه بدي يفحص ال character اللي أمامه عشان يشوفه
فالبديل عن ذلك لعملية الفحصين هذوله لأنه فحص واحد
احنا بنيجي بنحط على ال buffer في نهاية النص
الأولاني هذا يسمى ال first half
بنضع هنا mark of end of buffer وهنا mark of end of
file او end of buffer اذا
لجح الواجف على character ا إذا
لجح الواجف على character ا إذا لجح الواجف على
character ا إذا لجح الواجف على character ا إذا لجح
الواجف على character ا إذا لجح الواجف على
character الـ character خارج إطار اللغة يعني معمول
كإشارة إشارة لنهاية ال data كلها أو نهاية ال
buffer هو الآن لما بيدل من position ل position
فتطلع على ال character اللي جوا إذا هو character
تمع end of file أو end of buffer يعني خلاص بتصرف
على هذا الأساسبمعنى إيش؟ إذا هو على نهاية ال first
الأول معناه لازم يحمل ال first التاني ويكمل لما هو
يصل لهنا معناه اللي بيضعب ال نص الأولاني ويرجع
الآن إذا هو مش في النهاية هذه و لا في نهاية أخرى و
لدى end of file يمكن ال input نفسه يخلص من ال BDNT
وهذا اللي هو ترجمة ال code هذا ال code هذا بيعطيك
ثلاث حالات دولةاللي هم انه اذا كان انا ال forward
ده هو ال pointer مظبوط والنجمة ده يعني المحتوى تبع
ال pointer فإذا المحتوى تبع ال pointer هو end of
file فبتتطلع هل ال forward at the end of first
buffer هل أنا جاي بتطلع على E و F وال E و F هذه
موجودة في نهاية ال firstهذا انا واجب على end of
file و ال end of file مطابق لنهاية ال first معناه
ذلك انا في نهاية ال first ممكن بدي احمل reload ال
second buffer و ال forward الان اللي كان ب shower
هنا بيصير شاور لبداية ال second طبعا مرة اخرى بقول
ال first half و ال second half دول ممكن مايكونوش
متلاصقين ممكن يكونوا واحد ايه له address range
منفصلالان لو حصل معاه نفس الشيء ان هو واقف على EUF
لجأ حاله واقف على EUF و EUF دي جاي بالظبط على
نهاية ال second ده يبقى هو في نهاية ال second okay
يبقى بيعمل reload لل first و يرجع تلاني على بداية
ال first طيب غير هيكة و هيكة يبقى جاته ال EUF في
نص ال .. في داخل ال buffer يبقى هذا ما لهوش معنى
إلا أنه يشهد هيكةنهاية يبقى بـ terminate يعني إذا
لا هدى ولا هدى إذا ما جالهش EOF يبقى character
عادي يبقى بيتعامل مع ال character هذا بحيث انه
يطلع هل بيقدر يضمه للي جابله و يشكل منه token ولا
لسه بده المزيد و يقرر ما هو بيجي ادق file برضه
باخر الشيء يكون هتمت جيد اه ما هو حالتها لما نروح
هنا ال load حالتها هيكتشف انه فش okay هذه حالة
يعنييمكن جالية الاحتمالية ضعيفة بس في هذه الحالة
هيروح يعمل load ويلاجى ان ال file انتهى تمام الان
هذا الامر كله الان ال section تلاتة واحدة section
تلاتة اتنين كله تقدر تقول مقدمة لها مفهوم لبعض
الأمور اللي لها علاقة بعمل ال lexical analyzer
اللوب اللي نريده هو كيف نستخدمه للتوكينات لتحسين
تجارب التوكينات لتحسين تجارب التوكينات لتحسين
تجارب التوكينات لتحسين تجارب
التوكيناتالتوكنز او Describing ال pattern تبع
التوكنز هي regular expressions اكيد مرد عليكم في
مادة المبادئ او يمكن انتوا نسينا بس بتطلع عليها
لسريع لان ال
regular expression اشي زي هيك احنا بنحط مثلازي ما
عملنا definition للـ syntax نعمل definition للـ
strings للمفردات حاجة من هذا القبيل خلّيني أظهر
على هذا هذا زي ال rules تبع السينتاكس كده كده can
have the form كده كده وهذه زي ال productions
بالظبط لكن المضمون مختلف هنا احنا بنصف ال strings
الأشكال تبع ال tokens كيف ممكن بنمطها هناك بنصف
ash البنيه تبع الجملة صح تبع ال syntax تبع الجملة
انه ييجي كده و ورا كده اف و ورا جوس و ورا .. مظبوط
فهذا عبارة عن مثال ل regular expression بيحدد ال
identifierالنمط اتباع ال identifier احنا بتفقد على
انه اي string يبدأ بال letter letter ويليه هذا ال
letter اي عدد من اي خليط من ال letters و ال digits
ال identifier can have the form letter underscore
هذهلأنه أيضا احنا برضه مسمحين بال underscore في
اسم ال identifier صح؟ متغيرات مسموح فيها انما اي
special character اخر مش مسموح مظبوط؟ الان
لأن هذا في حد ذاته ال letter underscore شوه هو اسم
لل regular expression هذا المهم هذا ال body هي
الاسم طبعا ف ال letter هو عبارة عن a او b او طبعا
a,b كابيتل او حاضرة لعندي كابيتل كابيتل بسم الله
بعدين a small,b small لعندي z small او underscore
معاهم underscore لأن
letter underscore يعني انا بحكيعن تشكيلة من هدولة
و لا واحد منهم فقط letter on the score بيقول واحد
من هدولة انما هنا بعد هيك النجمة هذه بتحكي عن
تشكيلة من اللي جواها فانا هيك خصصة ان انا اول عنصر
في صيغة ال identifier انهواحد من هؤلاء ممكن يبقى
برضه underscore يبدأ اسم ال identifier ب
underscore بعد هيك اي zero or more النجم هذي zero
or more يعني ممكن بس هو لحالة ال A لحالة اسم ال
identifier يجد متغير اسمه I I بسرعة كام سا مثلا او
A capital او I capital ممكن يجي يليه تشكيلة من ال
.. برضه مثلهor digit ايش ال digit؟ ال digit واحد
منها دولة فإحنا بالاسلوبها ده بال notation هذه
بطريقة الكتابة هذه الدقيقة جدا يستطيع أن يجي ال
lexical analyzer استند إليها في التعرف على ال
characters اللي أمامه يشوف هل ال characters اللي
أمامه شاف ال I شاف مثلا ال Mكلمة rate rate هذه
واحدة منها دولة تمام بعدها A بعدها T بعدها E كل
هذا مطابق للوصف هذا يبني هذا identifier شايف حاجة
تانية بيتعرف عليها حسب أوصاف اللي عنده فاحنا إذا
وصفنا النمط تبع كل واحد من مفردات اللغة المفردات
هنا أنا أقصد فيها identifiersأقصد فيها keywords
أقصد فيها operators أقصد فيها punctuation marks كل
هذا اللي هي الأنواع المختلفة من ال من ال tokens
إذا وصفناها وصفناها
جيدا بيستطيع ال lexical analyzer أنه يتعرف عليها
طيب أنا هذه ال slide انتجت اليها في جبل هفلتتهم
بترجعلهم لأنه احنا جبل ما نحكي عن ال lexical عن ال
regular expressionsبقامة الأخرى بدنا نمر على شوية
المفاهيم هذه احنا كنا واقفين هنا عند specification
of tokens بعديك في اول section في التلاتة تلاتة
اللي هو strings and languages لنفهم مفهوم ال
language حسب التعريف تبعنا هنا اول شي ال alphabet
احنا عارفين ايش هي الأحرف من a ل z لتو مرمينا
هدولة ايش ال alphabetالألفابت هي any set of
symbols الـ 01 لحاله مع بعض التانين دولة بشكل ألف
ممكن أكون منها strings متعددة، مظبوط؟ هذا string
هذا string انبنى من ألفابت بسيط اللي هي الـ01،
مظبوط؟ وهذا is a string لحاله والـ1 لحاله is a
string، صح؟ تمام؟كل هذه strings فال alphabet هي
مجموعة من ال symbols ال string over an alphabet ال
string المكوّنة من ال alphabet is a finite
sequence of symbols مشكلة من ال .. من ال symbols
تبعات ال alphabet هذا لأن ال string .. string ..
string .. كلهم مدون strings طيب إذا هذا ال string
و هذا ال .. فإيش ال language؟ ال language زي ما إن
ال string هي مجموعات من ال characters أو من ال ..
عناصر ال alphabet ال language هي مجموعات من ال
strings يعني
هذول مع بعض كمجموعة من ال strings هذول ممكن نحكي
لهم language بناء على التعريف هذاLanguage is an
uncountable set يعني عدم حلول من ال strings over
some fixed alphabet اللي اتكون من ال alphabet
محددة عشان هيك احنا لما تذكروا في أول محاضرة كنا
لما بنطلع على ال lexical analyzer بقولك بندخله
language و بطلّه ليه language احنا مفهوم ال
language بالنسبة لنا ال C is a language ال Java is
a language ال C sharp is a language لكن هنا بتعريف
هذاالبرنامج هو language البرنامج اللي أنا بكتبه
لإن هو عبارة عن مجموع من ال strings صح؟ تشكيلة
واسعة من ال strings تتكامل بعض من عناصرها keywords
بعض من عناصرها identifiers operators صح؟ فال
language is any countable set of strings ال
strings بحد ذاتها مفهوم ال prefix مفهوم ال suffix
الـ substring الـ proper string الـ subsequence
واضحة هذه ال prefix اللي هو أي جزء من ال string من
البداية ال suffix أي جزء من ال string من النهاية
ال substring أي جزء من أي مكان مظبوط ال proper أي
prefix ال proper prefix أو ال proper suffix أي
prefix أو suffix لا يشمل ال empty ولا يشمل ال
string نفسه لأن ال string نفسه يعني لو أنا عندي
هيكتهذا الـ string ايه ال sub-string منه ال a sub
-string ال a بي sub-string ال b بي sub-string تمام
هو نفسه sub-string من نفسه ال empty sub-string
تمام ال proper هات اللي هو لو استفننا ال empty و
استفننا نفسه وضل كل شيء تاني is a proper sub
-string ال sub-sequence اللي هي اللي أنا أجيبه لل
a هذا ال sequence a b aهذا الـ sequence sub
-sequence واضح هذا
بيبانان بي
بي بي بي بي بي بي بي بي بي بي بي بي بي بي بي بي بي
بي بي بي بي بي بي بي بي بي بي بي بي بي بي بي بي
بيهو عبارة عن مجموع من ال strings طيب لو أنا جيت
قولت ال L هذي لت L بي a set of letters هتقول ال
letters من A ل Z كامتر من A ل Z Small و ال D من
Zero ل تسعة هذا ال set هل هو language L
وD هل هم languages هم مجموعات من ال characters ايش
بقول ال language؟ ال language مجموعة من ال strings
لأن
ال character في حد ذاته is a string ولا لأ ال
character ده حاجة is a string، string of طول one،
مظبوط؟ فهم characters set of characters بيشكلوا
language و ال D كده الحاجة is a languageالان انا
لما يكون في عندي two languages ممكن اشكل منهم more
languages صح يعني مثلا ال UD ال union دي ال union
تبع ال L و ال D ايش هو كافة العناصر اللي في العالم
دي مع نوعهم التحيط مظبوط اللي هو اتنين و ستين لان
احنا اتنين و خمسين character هم هم ستة و عشرين ستة
و عشرين capital26 small هاي 52 ومعهم الأرقام و10
هاي 62 صح طيب ال D ايش ال D هاي ال U D هاي ال
union هاي ال concatenation يعني بتجيب واحد من هنا
بلحمه مع واحد من هنا يعني يقول مثلا a one a two a
zero صح
الأربعة كافة ال strings المشكلة من ال اللي تقولها
أربعة is the set of all four letter strings ال
نجمة أي string مشكلة من أناصر السواء طول واحد او
اتنين او اربع او اشرين النجمة هنا تحتوي معناه zero
or more اربع يعني اربع بالظبط الان هذا اللي هو هذه
و حطينا عليها جوس و نجمة و بعدين ال يعني اي string
بيبدأ بأنصر من ال أنصر واحد من ال يليه اي تشكيلة
من الياشهروهذا اللي تمكننا نحكي عنه بالظبط اللي هو
صيغة تبع ال identifying is a set of all strings of
letters and digits beginning with a letter D plus
يعني digit او اكتر ال plus هنا واحد او اكتر النجمة
zero او اكتر ال plus واحد او اكتر تلاتة اللي هي اي
تكرار من ال ال's بطوله أربعة هنا اللي وانا بحطه
يخص بيه تكرار سواء هنا ولا هنا هذا التكرار معناته
صفر أو أكتر هذا التكرار معناته بالظبط أربعة ال
plus معناته واحد أو أكتر تمام الآن بناء على هذا ال
notationاكتبنا ان يعمل صيغة ل ال identifiers سواء
C identifiers ولا Java ولا اي لغة اخرى اللي هي
عبارة عن letter underscore letter underscore ايش
هي letter underscore letter underscore احنا اللي
شفناها هنا عبارة عن اللي شفناها هنا عبارة عن
languages و تشكيل languages من languages اخرى طب
letter هذا ايش letter letter هذا اسملمجموعة
strings letter underscore هو عبارة عن مجموعة ال ..
مجموعة ال alphabet من a ل z و من a small ل z و
معاهم كمال ال underscore هذه المجموعة .. هذا set
of characters عطينا له اسم .. عطينا له اسمو digit
هي اسم لهذه المجموعة لإن
واحد لتسعة لإن هذه التسميات أخدناها عشان نبني منها
definition أكبر يعني هي هذه اسم لهذه ال definition
أو هذا اسم ال expression بنينا منهم بنينا منهم
اسملهم عشان نبني منهممجموعات أكبر لأ انا أين روحت
هنا لأن
هذا بقى عملا regular expression صيغة كوّن منها أو
استخدمناها لنصف مجموعة ال characters هذه حلوة هي
البنية الصغيرةو أعطيناها اسم وهذا صيغة تانية لنوصف
مجموعة ال characters من 0 ل 9 أعطيناها اسم الآن من
هؤلاء الاسمين بنينا اشي أكبر اللي هو الوصف تبع ال
identifier الوصف تبع ال identifier وعلى هذا الأساس
بنبني احنا ال definitions تبع ال patterns المختلفة
لمفردة اللغة هذا اسمهregular definition اللي يحتوي
على أسام زي ذلك regular إنما إذا توصيف مباشر مبني
على أساس ال alphabet فهو regular expression
regular definition بتكون من .. بيبني على regular
expressions تمام؟ هذا مثال آخر هذا ال
numberتعريف ال number regular definition تبع ال
number مبني على أساس مقابله ايش مقابله؟ كانت digit
بعدين ال digits اللي هي digit مطبوعة ب zero or
more digits صح؟ digit مطبوعة ب zero or more digits
okay الآن ال optional fraction يعني أنا هنا لما
يمكن أندي رقم زي هذا هذا الرقم مافيش فيه fraction
هذا فيه fraction okayفأي number قد يكون يحتل على
الجزء الصحيح ولا يوجد او لا يوجد fraction فال
fraction optional هو عمل تعريف لل optional
fraction على اساس ان هو النقطة يليها digits او او
كل هذا مش موجود عشان هيك هو optional فdigits ايش
هي يبقى عن digit واحد او اكثر مظبوطالان باب كمان
في هنا مثلا هذا exponent part هى هنا موجود هنا
مفيش شي وهنا مفيش شي فهو ايضا optional بعض الأقام
فيه exponent ال exponent المفصول بيه يعني ان انا
موجود مثلا رقم قويل زي ال .. رقم قويل فيه فانا
ممكن اختص الأصفر هذه و اقول خمس اتنين خمسيندرجة
عشرة أقص اش أربعة لعشرة أقص أربعة ودرجة اربعة
احولهم كذلك اعبر عنهم جذدي زي اي أربعة مظبوط هذا
يعني
هذا الرقم هو عبارة عن ستة point تلاتة تلاتة ستة
درجة عشرة أقص أربعة اللي يعني ستة الف تلاتة ستة
الف تلاتة تلاتة ستة
مفترض زائد ما تكونش موجود على حسب ال definition
زائد مش مفترض ما تكونش optional او طرح زائد او طرح
او ولا شيء او ولا شيء او
طرح او طرح او ولا شيء او طرح او طرح او طرح او طرح
او طرح او طرح او طرح او طرح او طرح او طرالأن ال
number أي number في الدنيا بناء على التعريف هذا ال
definition هذا هو عبارة عن digits لازم يحتوي عليه
digits و على الأقل واحدة على الأقل واحدة يعني ربما
optional fraction و ربما optional exponent
على أسئلة لازم أجي اللغة تبعتي أعملها definition
على مستوى ال lexical و على مستوى أيضا ال syntax
لازم أحط definitions لل grammar و definitions لل
patterns تبعت المفردات إذا عملت هذا الكلام عمليا
الشغل تبعي ممكن يجي في عندنا لأنه بعدين كانت
generators هي اللي بتبنيليالـ tools هي اللي بتبني
ال .. ال .. ال .. ال analyzers lexical analyzer أو
ال syntax analyzer طيب الآن احنا مبدئياً
okay خلاص بنكون وقفنا عند ال section نهاية ال
section تلاتة تلاتة نهاية ال section تلاتة تلاتة
في نهاية ال section تلاتة تلاتة acceptizers ضروري
تتطلع عليها محاضرة جايبنشوف آلية التعرف على ال
tokens اللي أساسها ال definition تبع ال tokens