Cs802 compiler spring 2017 محاضرة 3

Page 1

‫‪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‬‬


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.