Spring 2017
Dr. Mabroka A. M.
CS802: Compliers
مرحلة التحليل اللفظي
محلل اللفظ lexical analyzer
تعريفييه :محلييل اللفييظ هييو اول مرحليية ميين مراحييل ترجميية البرنامييج الييى اللغيية الهييدف حيييث يقوم بتقسيم البرنامج الدصدر الى مجموعات صغيرة لها معنى. مهمتيه :قيراءة البرناميج الدصيدر مين اليسيار اليى اليميين كرميوز مدخلية ثم تجميعهييا فييي وحيدات ت ت صغيرة تسمى tokenالتي تمرر فيما بعد الى الحلل النحوي .Parser
العلةقة بين ال ) lexical(Scannerو ال )syntax (Parser تربييط ال lexicalو syntaxعلقة وثيقة تكمن في تبادلهما مجموعة ال ،tokensكأن يكون lexicalبرنام ج فرع ي م ن ،syntaxحينئ ذ ،يق وم ال syntaxباس تدعاء ال Scannerلق راءة الجموع يية التالي يية م يين الرم ييوز ليس ييتخدم مخرج يياته فيم ييا بع ييد لتك ييوين الشييجرة النحوي يية parse treeكما في الشكل التالي: token Source
To semantic Lexicalanalysis Analyzer
Parser
getNextToken program
Symbol table
Interactions between the lexical analyzer and the parser
:tokenهي أصغر وحدة مستقلة في البرنامج لها معنى )تعطي معنى لها( 15
Spring 2017
CS802: Compliers
Dr. Mabroka A. M.
تيعيبر عيين ال tokenكييزوج pairيتكون من اسم ال tokenو قيمة الدصفة )الخاصية( لهذا ال .token اسم ال tokenهو رمز مجرد يمثل وحدة لفظ )يدل على اللفظ( أو وصف اللفظ مثل كلمة محجوزة reserved wordاو مجموعة من الحروف التي تدل على ششيء معرف identifierحيث تيرمز له ب .id اسماء tokensهي الرموز الدخلة التي يعالجها ال .parser مثال :الجملة التالية في لغة javaهي جملة تعبير رياضشي expression ;result=result/total*100 Tokenالوصف التفق عليه
Lexemeذات الششيء
Identifier : id
result
equal or assign
=
id: identifier
result
divide
/
id: identifier
total
multiple
*
digit
100
semicolon
;
) Lexeme ذات الششيء(: و هو مجموعة الحروف التتالية في البرنامج الدصدر التي تطابق نمط ما patternل tokenما ،و يتم تحديدها من قبل ال lexical analyzerعلى أنها تؤلف .token ت كما في الثال السابق ،كلمة resultمكونة من مجموعة من الرموز التتالية التي تؤلف tokenو هي .id
النمط ي :Patternهي مجموعة القوانين التي تخضع لها فئة من السلسل ،بمعنى انها النمط الذي ينطبق على ذات الششيء ،lexemeففي حالة الكلما الحجوزة ،فإن ال patternهو فقط مجموعة 16
Spring 2017
CS802: Compliers
Dr. Mabroka A. M.
الحروف التتالية التي تشكل الكلمة الحجوزة ،بينما فييي حاليية ال ،identifierفإن ال patternهو حرف او مجموعة من الحروف متبوعة برقم او مجموعة من الرقام )اسم متغيرة .( variable
مثال :بين كل من token, lexeme, patternللجمل التالية:
)1. if (a>=b ;max=a else ;max=b )2. for(int i=0; i<=10; i++ ;)(a[i]=Jumper.next.Line ))(3. if(digit ;)(Id.get.digit
; ) 4. printf ( "Total = %d\ri" , s core
مهام الحلل اللفظي functions of Lexical Analyzer للمحلل اللفظي مهما عديدة اهمها ما يلي: Omitting space .1حذف الف راغ :تسمح العديد مناللغات باستخدام الف راغ )او الفراغات او السييطر( بييين الرمييوز tokensحيث يقوم ال Scannerبحدف هذه الفراغات و الستفاة من 17
Spring 2017
CS802: Compliers
Dr. Mabroka A. M.
رقييم السييطر فييي تحديييد مكييان الخطييا .امييا التعليقييات فيتجاهلهييا كييل ميين Scanner & Syntaxو يتم التعامل معها على انها فراغ او مجموعة من الفراغات. **سؤال :وضح كيف يقوم ال Scannerبحدف الفراغ و تحديد رةقم السطر في برنامج ما. .2
Defining constantتحدي د الث وابت :الرق م الص حيح )integer number (digitه ييو عب ييارة عيين رقييم متبييوع برقييم او مجموعيية ميين الرقييام التتالييية بييدون الفاصييلة العشييرية ،و هييو فييي واقييع ت المر يخضع لقاعدة التعبير الرياضشي regular expressionحيث تكون tokenلكل رقم ثابت. ت مهميية تجميييع الرقييام فييي صييورة رقييم صييحيح تعييزى الييى Scannerحيث يتم التعامل مع الرقام كوحدة مستقلة خلل عملية الترجمة. If digit is a token represents integer number, then, Scanner passes the word .digit together with the integer number value to the Syntax ;eg. a=3*100 )a is id as a token, the token consists of (id, position of id is digit, token consists of (digit,3) 3 )The symbol * is a token of (multiplication, null ..……………………is digit, token 100
.3
Determining the identifierتحديد اسماء التغيرات :معظم للغات تستخدم identifier ت كأسماء للمتغيرات و الثوابت و الدصفوفات و الدوال و ما شابه .قواعد اللغة في الغالب تعامل ا identifierعلى اساس أنه tokenحيث ينظر ال Syntaxالى أي identifierعلى انه idوفقا لقاعدة معينة )مثل .(context-free grammar ;eg. count=count+i تيحول ال Scannerالتعليمة السابقة الى :؟؟؟ في هذه الحالة ،يتم التمييز بين كل idعن طريق ؟؟؟ حيث يتم تمرير الجملة السابقة الى Syntaxبالشكل التالي:؟؟؟ ت **سؤال الحاضرة :اين تزخزن tokensفي الجملة السابقة؟ و كيف؟
18
Spring 2017
.4
CS802: Compliers
Dr. Mabroka A. M.
Determining the reserved wordsتحدي د الكلم ات الحج وزة :تس تخدم لغ ات البرمج ة ت مجموعي يية مي يين الكلمي ييات مثي ييل .…if, for, whileو غيره ا ال تي تس مى .keywordsإذن ،لب د ل Scannerأن يميز بين ما اذا كانت سلسلة الرموز العطاة هي idاو .reserved word هن ي يياك قواع ي ييد معين ي يية يتبعه ي ييا ال Scannerلتحدي د الكلم ات الحج وزة ف ي أي برنام ج .ه ذه القواع ييد معرف يية و مض ييمنة ف ييي ) Scannerالش كل الع ام للم ر او التعليم ة( .و بن اءا عل ى ذل ك، يتع ييرف ال Scannerعل ى ن وع سلس لة الرم وز القرؤةى و يح دد نوعه ا و يتاك د م ن انه ا تواف ق القاعدة الضمنة فيه. :eg. the format of (if statement ) is as follow ; if exp statement } ; if exp { statement
***سؤال الحاضرة :كيف يتعرف ال Lexicalعلى token؟
19