CS802: Compliers
Spring 2017
Dr. Mabroka A. M.
مرحلة التحليل اللفظي محلل اللفظ lexical analyzer تعريفه :محلل اللفظ هو اول مرحلة من مراحل ترجمة البرنامج الى اللغة الهدف حيث يقوم بتقسيم البرنامج املصدر الى مجموعات صغيرة لها معنى. مهمته :قراءة البرنامج املصدر من اليسار الى اليمين كرموز مدخلة ثم تجميعها في وحدات ُ ُ صغيرة تسمى tokenالتي تمرر فيما بعد الى املحلل النحوي .Parser العالقة بين ال )Scanner( lexicalو ال)Parser( syntax تربط ال lexicalو syntaxعالقة وثيقة تكمن في تبادلهما مجموعة ال ،tokensكأن يكون lexicalبرنامج فرعي من ،syntaxحينئذ ،يقوم ال syntaxباستدعاء ال Scannerلقراءة املجموعة التالية من الرموز ليستخدم مخرجاته فيما بعد لتكوين الشجرة النحوية parse treeكما في الشكل التالي:
To semantic analysis
token Parser
getNextToken
Lexical Analyzer
Symbol table
Interactions between the lexical analyzer and the parser
15
Source program
Spring 2017
CS802: Compliers
Dr. Mabroka A. M.
:token هي أصغر وحدة مستقلة في البرنامج لها معنى (تعطي معنى لها) ُيعبر عن ال tokenكزوج pairيتكون من اسم ال tokenو قيمة الصفة (الخاصية) لهذا ال.token اسم ال tokenهو رمز مجرد يمثل وحدة لفظ (يدل على اللفظ) أو وصف اللفظ مثل كلمة محجوزة reserved wordاو مجموعة من الحروف التي تدل على ش يء معرف identifierحيث ُيرمز له ب.id اسماء tokensهي الرموز املدخلة التي يعالجها ال.parser مثال :الجملة التالية في لغة javaهي جملة تعبير رياض ي expression ;result=result/total*100 Tokenالوصف املتفق عليه
Lexemeذات الش يء
id :Identifier
result
equal or assign
=
id: identifier
result
divide
/
id: identifier
total
multiple
*
digit
100
semicolon
;
( Lexeme ذات الش يء): و هو مجموعة الحروف املتتالية في البرنامج املصدر التي تطابق نمط ما patternل tokenما ،و يتم تحديدها من قبل ال lexical analyzerعلى أنها تؤلف .token
16
Spring 2017
CS802: Compliers
Dr. Mabroka A. M.
ُ كما في املثال السابق ،كلمة resultمكونة من مجموعة من الرموز املتتالية التي تؤلف tokenو هي .id النمط : Patternهي مجموعة القوانين التي تخضع لها فئة من السالسل ،بمعنى انها النمط الذي ينطبق على ذات الش يء ،lexemeففي حالة الكلما املحجوزة ،فإن ال patternهو فقط مجموعة الحروف املتتالية التي تشكل الكلمة املحجوزة ،بينما في حالة ال ،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
17
Spring 2017
CS802: Compliers
Dr. Mabroka A. M.
مهام املحلل اللفظي functions of Lexical Analyzer للمحلل اللفظي مهما عديدة اهمها ما يلي: Omitting space .1حذف الفراغ :تسمح العديد مناللغات باستخدام الفراغ (او الفراغات او االسطر) بين الرموز tokensحيث يقوم ال Scannerبحدف هذه الفراغات و االستفاة من رقم السطر في تحديد مكان الخطا .اما التعليقات فيتجاهلها كل من Scanner & Syntaxو يتم التعامل معها على انها فراغ او مجموعة من الفراغات. **سؤال :وضح كيف يقوم ال Scannerبحدف الفراغ و تحديد رقم السطر في برنامج ما. Defining constant .2تحديد الثوابت :الرقم الصحيح ) 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 )3 is digit, token consists of (digit,3 )The symbol * is a token of (multiplication, null 100 is digit, token…………………….. Determining the identifier .3تحديد اسماء املتغيرات :معظم للغات تستخدم identifier ُ كأسماء للمتغيرات و الثوابت و املصفوفات و الدوال و ما شابه .قواعد اللغة في الغالب تعامل ً identifierعلى اساس أنه tokenحيث ينظر ال Syntaxالى أي identifierعلى انه idوفقا لقاعدة معينة (مثل .)context-free grammar ;eg. count=count+i ُيحول ال Scannerالتعليمة السابقة الى :؟؟؟ في هذه الحالة ،يتم التمييز بين كل idعن طريق ؟؟؟ حيث يتم تمرير الجملة السابقة الى Syntaxبالشكل التالي:؟؟؟ 18
Spring 2017
CS802: Compliers
Dr. Mabroka A. M.
ُ **سؤال املحاضرة :اين تخزن tokensفي الجملة السابقة؟ و كيف؟ Determining the reserved words .4تحديد الكلمات املحجوزة :تستخدم لغات البرمجة ُ مجموعة من الكلمات مثل 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