Cs802 compiler spring 2017 محاضرة 3

Page 1

‫‪Spring 2017‬‬

‫‪CS802: Compliers‬‬

‫‪Dr. Mabroka A. M.‬‬

‫مرحلة التحليل اللفظي‬ ‫‪ ‬محلل اللفظ ‪lexical analyzer‬‬ ‫‪ ‬تعريفه‪ :‬محلل اللفظ هو اول مرحلة من مراحل ترجمة البرنامج الى اللغة الهدف حيث‬ ‫يقوم بتقسيم البرنامج املصدر الى مجموعات صغيرة لها معنى‪.‬‬ ‫‪ ‬مهمته‪ :‬قراءة البرنامج املصدر من اليسار الى اليمين كرموز مدخلة ثم تجميعها في وحدات‬ ‫ُ‬ ‫ُ‬ ‫صغيرة تسمى ‪ token‬التي تمرر فيما بعد الى املحلل النحوي ‪.Parser‬‬ ‫‪ ‬العالقة بين ال‪ )Scanner( lexical‬و ال‪)Parser( syntax‬‬ ‫تربط ال‪ lexical‬و ‪ syntax‬عالقة وثيقة تكمن في تبادلهما مجموعة ال‪ ،tokens‬كأن يكون‬ ‫‪ lexical‬برنامج فرعي من ‪ ،syntax‬حينئذ‪ ،‬يقوم ال‪ syntax‬باستدعاء ال‪ Scanner‬لقراءة‬ ‫املجموعة التالية من الرموز ليستخدم مخرجاته فيما بعد لتكوين الشجرة النحوية ‪parse‬‬ ‫‪ tree‬كما في الشكل التالي‪:‬‬

‫‪15‬‬


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


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.