Cs802 compiler spring 2017 محاضرة 1 4

Page 1

‫‪Sebha University‬‬ ‫‪Faculty of Sciences‬‬ ‫‪Computer Department‬‬

‫جامعة سبها‬ ‫كلية العلوم‬ ‫قسم الحاسوب‬

‫املترج ـم ـ ـ ـ ـ ـ ـ ـ ــات ‪CS802:‬‬ ‫‪The Compilers‬‬ ‫اعداد‬ ‫د‪ .‬مبروكه علي معيوف‬

‫ربيع ‪2017‬‬

‫‪1‬‬


‫‪CS802: Compliers‬‬

‫‪Spring 2017‬‬

‫‪Dr. Mabroka A. M.‬‬

‫محتويات املقرر‬ ‫املقدمة‬ ‫محاضرة ‪1،2‬‬

‫‪ ‬تعريف املترجم‪ ،‬مهمة املترجم‪ ،‬انواع املترجمات‪.‬‬ ‫التحليل و التركيب‬ ‫‪ ‬معنى التحليل‬ ‫‪ ‬معنى التركيب‬ ‫‪ ‬التحليل و التركيب في عملية الترجمة‬ ‫مراحل املترجم‬ ‫‪ ‬جزء التحليل‬ ‫‪ o‬مرحلة التحليل اللفظي (الخطي) ‪lexical analysis‬‬ ‫‪ o‬مرحلة التحليل اللغوي (النحوي) ‪syntax analysis‬‬ ‫‪ o‬مرحلة التحليل الداللي (املنطقي)‪semantic analysis‬‬ ‫‪ ‬جزء التركيب‬ ‫‪ o‬توليد الشفرة الوسطية‪intermediate code generation‬‬ ‫‪ o‬مقلص الشفرة ‪code optimization‬‬ ‫‪ o‬مولد الشفرة ‪code generation‬‬ ‫‪ ‬ادارة جدول الرموز ‪symbol table management‬‬ ‫‪ ‬معالج الخطأ ‪error handler‬‬

‫محاضرة ‪3‬‬

‫‪ ‬نظام معالجة اللغة ‪language processing system‬‬ ‫‪ ‬املراحل التي يمر بها برنامج هدف مركب ‪structured source program phases‬‬ ‫‪ o‬املعالج القبلي ‪preprocessor‬‬ ‫‪ o‬املترجم ‪Compiler‬‬ ‫‪ o‬املجمع ‪assembler‬‬ ‫‪ o‬محرر املحمل‪/‬الرابط ‪loader/linker editor‬‬

‫‪2‬‬


‫‪Spring 2017‬‬

‫‪CS802: Compliers‬‬

‫‪Dr. Mabroka A. M.‬‬

‫ً‬ ‫تصنيف مراحل املترجم وفقا لبرنامج مصدر أو برنامج هدف‬ ‫‪Front end phases ‬‬ ‫محاضرة ‪4،5،6‬‬

‫‪Back end phases ‬‬ ‫مرحلة التحليل اللفظي‬ ‫‪ ‬محلل اللفظ ‪lexical analyzer‬‬ ‫‪ ‬تعريفه‪ ،‬مهمته‪ ،‬طريقة عمله‪ ،‬العالقة بين ال‪ lexical‬و ال‪syntax‬‬ ‫‪ ‬ال‪ token‬و ال‪ lexeme‬و ال‪pattern‬‬ ‫‪ ‬مواصفات ال‪token‬‬ ‫‪ ‬كيف يتعرف ال‪ lexical analyzer‬على ال‪token‬‬ ‫‪ ‬التعابير القياسية‪regular expression‬‬ ‫‪ ‬اللغات‪languages‬‬ ‫‪ ‬السالسل ‪strings‬‬ ‫‪ ‬الخواص الجبرية للتعابير القياسية‬ ‫‪ ‬اختصارات التعابير القياسية‬ ‫‪ ‬كيف يتعرف ال‪ lexical analyzer‬على ال‪token‬‬ ‫‪ ‬االوتوماتة املحدودة ‪( Finite Automata) FA‬‬ ‫‪ ‬االوتوماتة و التعابير القياسية‬ ‫‪ ‬مخطط االنتقال ‪transition diagram‬‬ ‫‪ ‬انواع االوتوماتة املحدودة‬ ‫‪NFA ‬‬ ‫‪DFA ‬‬ ‫‪ ‬التعابير القياسية و ال‪NFA‬‬ ‫‪From NFA to DFA ‬‬ ‫‪ ‬تصميم برنامج محلل لفظي بسيط ‪the design of simple lexical analyzer‬‬ ‫‪ ‬وصف ال‪ token‬باستخدام التعابير القياسية‪.‬‬ ‫‪ ‬استخدام ال‪ DFA‬للتعرف على ال‪token‬‬ ‫‪ ‬كتابة ال‪ code‬لتجميع ال‪token‬‬ ‫‪3‬‬


‫‪Spring 2017‬‬

‫‪CS802: Compliers‬‬

‫‪Dr. Mabroka A. M.‬‬

‫‪ ‬امثلة تطبيقية ملا سبق‬ ‫محاضرة ‪7،8‬‬

‫‪ ‬ال‪ : Lex‬تعريفه‪ ،‬مهمته‪ ،‬مواصفاته‬ ‫مرحلة التحليل اللغوي (النحوي)‬ ‫‪ ‬محلل لغوي ‪syntax analyzer‬‬ ‫‪ o‬تعريفه‪ ،‬مهمته‪ ،‬طريقة عمله>‬ ‫‪ ‬القواعد النحوية‪ :‬قاعدة ‪Context-Free Grammar‬‬ ‫‪ ‬قواعد اللغات البرمجية‬ ‫‪ o‬نحو التعابير الرياضية ‪syntax of expressions‬‬ ‫‪ o‬نحو الجمل ‪syntax of statements‬‬ ‫‪ ‬الشجرة النحوية‪syntax tree‬‬

‫محاضرة ‪9,10‬‬

‫‪ ‬ترجمة النحو املباشر‪syntax-directed translation‬‬ ‫‪ ‬تصميم محلل لغوي ‪the design of simple syntax analyzer‬‬ ‫ادارة جدول الرموز‪symbol table management‬‬ ‫‪ ‬العالقة بين جدول الرموز و ‪lexical‬‬ ‫‪ ‬العالقة بين جدول الرموز و ‪syntax‬‬ ‫معالج الخطأ ‪error handler‬‬

‫محاضرة ‪11‬‬

‫‪ ‬العالقة بين معالج الخطأ و ‪syntax‬‬ ‫مرحلة التحليل الداللي (املنطقي) ‪semantic analysis‬‬ ‫‪ ‬محلل اللفظ ‪semantic analyzer‬‬ ‫‪ ‬تعريفه‪ ،‬مهمته‪ ،‬طريقة عمله‬ ‫‪ ‬الفاحص ‪type checker‬‬

‫محاضرة ‪12,13,14‬‬

‫‪ ‬العالقة بين ‪ semantic‬و ‪error handler‬‬ ‫مولد الشفرة الوسطية ‪intermediate code generator‬‬ ‫‪ ‬لغات وسطية ‪intermediate languages‬‬ ‫مقلص الشفرة ‪code optimizer‬‬ ‫‪ ‬مصادر التقليص‪sources of optimization‬‬ ‫‪4‬‬


Dr. Mabroka A. M.

CS802: Compliers

Spring 2017

code generator ‫مولد الشفرة‬ the target machine ‫ االلة الهدف‬ a simple code generator‫ مولد شفرة بسيط‬ mini project ‫تصميم مترجم بسيط‬ ‫ على الطالب تصميم مترجم بسيط يقرأ تعليمة بلغة ما ثم‬:‫ ورقة عمل‬ .‫يطبق عليها مراحل املترجم كمخرجات‬

‫جدول اعمال السنة واالمتحان النهائي‬ ‫االسبوع املستحق‬

‫التقييم‬

% ‫النسبة‬

2017/05/17

‫امتحان نصفى‬

20

‫كل اسبوع‬

‫ والواجبات‬،‫الحضور‬

10

‫قبل االمتحان النهائي‬

‫ورقة العمل‬

10

‫حسب جدول االمتحانات‬

‫االمتحان النهائي‬

60

‫املراجع االنجليزية‬ [1] Alfred V. Abo, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman, Compliers, Principles, Techniques & Tools, 2nd ed. , Pearson Education, 2007. [2] Torben Egidius Mogensen, Basics of Compiler Design, Anniversary edition, Published through lulu.com., c Torben Ægidius Mogensen 2000 – 2010.

Websites: http://www.bookboon.com Download free books at Bookboon.com. 5


‫‪Spring 2017‬‬

‫‪Dr. Mabroka A. M.‬‬

‫‪CS802: Compliers‬‬

‫املقدمة‬ ‫يستجيب الحاسب االلي ملهمة ما إثر تنفيذه ألمر ما او مجموعة من االوامر املكتوبة بلغة يفهمها هذا‬ ‫الحاسب (لغة االلة ‪ .)machine language‬و تتعدد أوامر اللغة التي يفهمها الحاسب بشكل كبير‪،‬‬ ‫فقد يتطلب تنفيذ مهمة معينة كتابة االالف من االسطر مما يؤدي للضجر و امللل و التعرض لألخطاء‪.‬‬ ‫كما تختلف لغة االلة من جهاز حاسب ألخر حسب نوع نظام التشغيل مما يتطلب الدراية التامة و‬ ‫ً‬ ‫الخبرة بهذه اللغة من قبل اي مبرمج‪ .‬و من عيوب لغة االلة أيضا انها أقرب للغة الحاسب (رموز) منها‬ ‫للغة االنسان‪ .‬و مع التطور املستمر للغات الحاسب و لغات البرمجة (الراقية)‪ ،‬اصبح من الضروري‬ ‫خلق جسر للتواصل فيما بين الحاسب (لغة االلة) و االنسان (لغة البرمجة الراقية) عن طريق وسيط‬ ‫(مترجم) لترجمة لغة البرمجة الراقية الى لغة يفهمها الحاسب أو الى أي لغة أخرى مناسبة‪ .‬من هنا‪،‬‬ ‫تطلب االمر بناء مترجم (‪ )compiler‬للقيام بهذه املهمة‪.‬‬ ‫‪ ‬تعريف املترجم ‪ : compiler definition‬هو برنامج يقرأ برنامج آخر مكتوب بلغة ما (اللغة‬ ‫ً‬ ‫املصدر ‪ )source language‬و يحوله الى برنامج آخر مكافئ له وفقا للغة الهدف ‪target‬‬ ‫‪.language‬‬ ‫‪ ‬الجزء املهم في عملية الترجمة هو أن ‪ compiler‬يبلغ املستخدم عن وجود أي أخطاء‬ ‫في البرنامج املصدر‪.‬‬ ‫‪Compiler‬‬

‫‪target program‬‬

‫‪Source program‬‬

‫‪Error messages‬‬ ‫مالحظات‪:‬‬ ‫ً‬ ‫‪ ‬اللغة املصدر تختلف من لغة الى أخرى بدا من اللغات التقليدية مثل ‪Fortran & Pascal‬‬ ‫ً‬ ‫وصوال الى اللغات املتخصصة مثل ‪.Java‬‬ ‫ً‬ ‫‪ ‬اللغة الهدف تختلف أيضا من لغة الى اخرى‪ ،‬قد تكون لغة االلة أو لغة أخرى (مثال من‬ ‫لغة ‪ C++‬الى لغة ‪ )Java‬او العكس‪.‬‬ ‫‪ ‬لغة االلة تختلف من جهاز الى آخر حسب نوع نظام التشغيل‪.‬‬

‫‪6‬‬


‫‪Spring 2017‬‬

‫‪CS802: Compliers‬‬

‫‪Dr. Mabroka A. M.‬‬

‫‪ ‬مهمة املترجم‪ :‬ترجمة برنامج مصدر مكتوب وفق قواعد اللغة املصدر الى برنامج هدف‬ ‫حسب رؤية املترجم ‪.compiler‬‬ ‫‪‬‬ ‫‪.1‬‬ ‫‪.2‬‬ ‫‪.3‬‬ ‫‪.4‬‬ ‫‪.5‬‬

‫انواع املترجمات ‪:types of Compilers‬‬ ‫‪Single-pass‬‬ ‫‪Multi-pass‬‬ ‫‪Load-and –go‬‬ ‫‪Optimizing‬‬ ‫‪Debugging‬‬

‫مالحظة‪:‬‬ ‫يعتمد نوع ال‪ compiler‬على الطريقة التي ُيبنى ُ(يشيد) بها‪ ،‬او الوظيفة التي ُيفترض أن يقوم بها‪.‬‬ ‫التحليل و التركيب‬

‫‪ ‬معنى التحليل ‪ُ :analysis‬يقصد بالتحليل القيام بفصل العناصر االساسية املكونة للبرنامج ٌ‬ ‫كل‬ ‫على حدة‪ ،‬ثم قياس مستوى تواجد هذا العنصر في البرنامج و مقارنته باملستويات االخرى بهدف‬ ‫التعرف على مدى مساهمة هذا العنصر في أداء البرنامج‪ ،‬كذلك التعرف على العالقات بين‬ ‫املتغيرات و تأثير كل منها على االخر‪.‬‬ ‫‪ ‬معنى التركيب ‪ُ :synthesis‬يقصد بالتركيب تجميع االجزاء لتكوين البرنامج الكامل الذي يستطيع‬ ‫ان يؤدي الوظيفة املطلوبة‪.‬‬ ‫‪ ‬التحليل و التركيب في عملية الترجمة ‪the analysis-synthesis model of compilation‬‬ ‫هناك جزئيين مهمين في عملية الترجمة و همل التحليل ‪ analysis‬و التركيب ‪ ،synthesis‬و ُيقصد‬ ‫بالتحليل تقسيم البرنامج املصدر الى اجزاء اساسية و تكوين شفرة وسطية ‪intermediate code‬‬ ‫للبرنامج املصدر‪ .‬أما التركيب في عملية الترجمة ُ‬ ‫فيقصد به بناء البرنامج الهدف املطلوب من الشفرة‬ ‫ً‬ ‫الوسطية التي تم الحصول عليها سابقا‪.‬‬

‫‪7‬‬


Dr. Mabroka A. M.

CS802: Compliers

Spring 2017

:‫ يمكن اختصار مراحل املترجم في الشكل التالي‬:the phase of Compiler ‫مراحل املترجم‬ Source Program Lexical analyzer Scanner Linear analyzer

Syntax analyzer

Semantic analyzer Symbol table manager

Error handler Intermediate code generation

Code optimizer

Code generator

Target program

The phases of Compiler 8


Dr. Mabroka A. M.

CS802: Compliers

Spring 2017

:‫مالحظات‬ lexical analyzer, syntax analyzer, semantic analyzer :‫ تمثل كل من املراحل‬ .analysis part ‫جزء التحليل‬ intermediate code generator, code optimizer, code :‫ تمثل كل من املراحل‬ .synthesis part ‫ جزء التركيب‬generator .‫ مع جميع املراحل السابقة‬symbol table & error handler ‫ تشترك كل من مرحلتي‬

9


‫‪Spring 2017‬‬

‫‪Dr. Mabroka A. M.‬‬

‫‪CS802: Compliers‬‬

‫مراحل املترجم ‪phases of Compiler‬‬ ‫‪ ‬جزء التحليل‪:‬‬ ‫‪ .1‬مرحلة التحليل اللفظي (الخطي ‪-linear‬املاسح ‪lexical analyzer )scanner‬‬ ‫ً‬ ‫ُ‬ ‫تسمى هذه املرحلة أيضا بالتحليل الخطي ‪ Linear Analysis‬حيث يتم فيها قراءة‬ ‫ُ‬ ‫البرنامج املصدر من اليسار الى اليمين على اساس انه سلسلة من الرموز‪ .‬و تجمع‬ ‫عناصر البرنامج املصدر في مجموعات من ‪ Tokens‬و هي أصغر وحدة مستقلة في‬ ‫البرنامج لها معنى‪.‬‬ ‫مثال‪ :‬الجملة التالية في لغة برمجة‪int a=5; :‬‬ ‫يجمعها املحلل اللفظي في الشكل التالي‪:‬‬ ‫‪int‬‬ ‫‪reserved word‬‬ ‫‪a‬‬ ‫‪identifier‬‬ ‫=‬ ‫‪assignment statement‬‬ ‫‪5‬‬ ‫‪number‬‬ ‫;‬ ‫‪semicolon‬‬ ‫‪ .2‬مرحلة التحليل اللغوي (النحوي ‪syntax analysis )parser‬‬ ‫ً‬ ‫ُ‬ ‫تسمى أيضا بمرحلة التحليل التسلسلي أو الهرمي ‪ ،hierarchical analysis‬و يتم في‬ ‫هذه املرحلة تجميع ال‪ tokens‬بطريقة تسلسلية بحيث تعطي معنى كما في املثال‬ ‫السابق‪:‬‬ ‫=‬ ‫‪a‬‬

‫‪5‬‬

‫‪id‬‬

‫‪digit‬‬

‫‪10‬‬


‫‪Spring 2017‬‬

‫‪CS802: Compliers‬‬

‫‪Dr. Mabroka A. M.‬‬

‫‪ .3‬مرحلة التحليل املنطقي (الداللي) ‪Semantic Analysis‬‬ ‫يتم في هذه املرحلة التحري و التدقيق ملعرفة ان محتويات البرنامج قد ِصيغت مع‬ ‫بعضها البعض بطريقة داللية و منطقية صحيحة‪ ،‬و خالية من االخطاء املنطقية‬ ‫‪ .logical error‬بالنظر الى املثال السابق‪:‬‬ ‫;‪eg: int a=5‬‬ ‫……‬ ‫‪…..‬‬ ‫‪….‬‬ ‫;'‪a='Ali‬‬ ‫في هذه الحالة‪ ،‬يتم اكتشاف خطأ منطقي و إصدار رسالة خطأ منطقي بان نوع‬ ‫املتغيرة ‪ a‬ال يتوافق مع القيمة املنسوبة إليها و هي سلسلة '‪.'Ali‬‬ ‫‪ ‬جزء التركيب‬ ‫‪ .4‬توليد شفرة متوسطة (وسطية) ‪intermediate code generation‬‬ ‫في هذه املرحلة‪ ،‬يتم تكوين شفرة وسطية من الشكل التسلسلي الذي تم الحصول‬ ‫ً‬ ‫عليه مسبقا من مرحلة التحليل اللغوي‪ .‬و تتميز هذه الشفرة بسهولة تكوينها و سهولة‬ ‫تحويلها الى البرنامج الهدف حيث يتم اعطاء اسماء مؤقتة للمتغيرات مثل‪:‬‬ ‫;‪a=5‬‬ ‫;‪temp1=5‬‬ ‫;‪Id=temp1‬‬ ‫و هذه صورة قريبة من لغة االلة‬

‫‪11‬‬


‫‪Spring 2017‬‬

‫‪Dr. Mabroka A. M.‬‬

‫‪CS802: Compliers‬‬

‫‪ .5‬تقليص (اختصار) شفرة ‪code optimization‬‬ ‫في هذه املرحلة‪ ،‬يتم وضع التمثيل الوسطي للبرنامج في صورة مثالية مختصرة يسهل‬ ‫الحصول منها على برنامج هدف يمكن تنفيذه في زمن اقل عن طريق حذف االجزاء‬ ‫املتكررة و التعليقات و غيرها التي ال تؤثر في تنفيذ البرنامج كما في املثال السابق‪:‬‬ ‫;‪temp1=5‬‬ ‫;‪id=temp1‬‬

‫=‪id‬‬ ‫‪5‬‬

‫‪ .6‬توليد شفرة ‪code generation‬‬ ‫يتم في هذه املرحلة توليد الصورة النهائية للبرنامج و تحويله الى برنامج بلغة االلة حيث‬ ‫توضع املتغيرات في املكان املناسب لها في الذاكرة كما في الشكل التالي‪:‬‬ ‫‪mov 5,R1‬‬ ‫‪mov R1,id‬‬ ‫‪..........‬‬ ‫………‬ ‫………‬ ‫‪ .7‬ادارة جدول الرموز ‪symbol table management‬‬ ‫ُ‬ ‫جدول الرموز عبارة عن جدول تجمع فيه املعلومات عن مختلف عناصر و مكونات‬ ‫ً‬ ‫البرنامج خصوصا البيانات من متغيرات و ثوابت‪ ،‬و يتم تجميع املعلومات املتعلقة‬ ‫بأسماء البيانات و نوعها و قيمها‪ ،‬كما في املثال السابق‪:‬‬ ‫‪name type value‬‬ ‫‪a‬‬ ‫‪int 5‬‬ ‫حيث يتم الرجوع إليه للتحقق من قيمة و نوعية عناصر البرنامج‪.‬‬

‫‪12‬‬


‫‪CS802: Compliers‬‬

‫‪Spring 2017‬‬

‫‪Dr. Mabroka A. M.‬‬

‫‪ .8‬معالج الخطأ ‪error handler‬‬ ‫يمكن ان يحتوي البرنامج املصدر على أخطاء أو قد يحدث خطأ أثناء ترجمة البرنامج‪،‬‬ ‫هذه االخطاء يتم اكتشافها و اصدار تقارير عنها من قبل معالج الخطأ‪.‬‬ ‫‪ ‬نظام معالجة اللغة ‪A language Processing System‬‬ ‫الشكل التالي يبين أهم املراحل التي يمر بها برنامج هيكلي‪:‬‬ ‫‪ Structured Source Program‬هو البرنامج املصدر الذي يتم فيه‬ ‫تعريف دوال و ادراج ملفات بصورة‬ ‫ً‬ ‫مختصرة بدال من ادراجها كاملة‪.‬‬ ‫املعالج القبلي يقوم باستبدال الدوال و‬ ‫‪preprocessor‬‬ ‫الحزم املضمنة بمحتوياتها من ملفات‬ ‫املكتبة املناسبة‪.‬‬ ‫‪ Source Program‬يحتوي على جميع التعليمات و الدوال التي اعدها‬ ‫املبرمج او ضمنها من ملفات أخرى‪.‬‬ ‫املترجم يضع البرنامج املصدر في صورة‬ ‫لغة التجميع‬

‫‪Compiler‬‬

‫‪ Target assembly machine code‬شفرة آلة تجميع هدف (مثل ‪)bytecode‬‬ ‫املجمع يحول شفرة االلة الى لغة االلة‬ ‫املناسبة و يقوم بعنونة التعليمات و‬ ‫البيانات‬

‫‪assembler‬‬

‫‪ Re locatable machine code‬شفرة آلة متنقلة (قابلة للتحويل)‬ ‫‪ Loader‬يقوم بوضع التعليمات و‬ ‫ً‬ ‫البيانات في الذاكرة بدال من عنوانها‪ ،‬أما‬ ‫‪ linker‬فيقوم بربط عدة برامج (في صورة‬ ‫لغة آلة) مع شفرة آلة (املتنقلة)‪.‬‬

‫‪Loader/ Linker‬‬ ‫‪editor‬‬

‫‪ Absolute machine code‬شفرة آلة مطلقة‬ ‫‪fig. A Language Processing System‬‬ ‫‪13‬‬


Dr. Mabroka A. M.

CS802: Compliers

Spring 2017

‫ بناء على اعتمادها على البرنامج املصدر او البرنامج‬Compiler‫ يمكن تقسيم مراحل ال‬:‫مالحظة‬ :‫الهدف كما يلي‬

Compiler

Front-end

Lexical

back-end

optimizer

Syntax

error handler

Semantic

symbol table

Intermediate code generator

code generator

14


‫‪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‬كما في الشكل التالي‪:‬‬ ‫‪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‬‬ ‫‪ Lexeme‬ذات الش يء‬ ‫‪result‬‬ ‫=‬ ‫‪result‬‬ ‫‪/‬‬ ‫‪total‬‬ ‫*‬ ‫‪100‬‬ ‫;‬

‫‪ Token‬الوصف املتفق عليه‬ ‫‪id :Identifier‬‬ ‫‪equal or assign‬‬ ‫‪id: identifier‬‬ ‫‪divide‬‬ ‫‪id: identifier‬‬ ‫‪multiple‬‬ ‫‪digit‬‬ ‫‪semicolon‬‬

‫‪( Lexeme ‬ذات الش يء)‪:‬‬ ‫و هو مجموعة الحروف املتتالية في البرنامج املصدر التي تطابق نمط ما ‪ pattern‬ل‪ token‬ما‪ ،‬و يتم‬ ‫تحديدها من قبل ال‪ lexical analyzer‬على أنها تؤلف ‪.token‬‬ ‫ُ‬ ‫كما في املثال السابق‪ ،‬كلمة ‪ result‬مكونة من مجموعة من الرموز املتتالية التي تؤلف ‪ token‬و هي‬ ‫‪.id‬‬ ‫‪ ‬النمط ‪ :Pattern‬هي مجموعة القوانين التي تخضع لها فئة من السالسل‪ ،‬بمعنى انها النمط‬ ‫الذي ينطبق على ذات الش يء ‪ ،lexeme‬ففي حالة الكلما املحجوزة‪ ،‬فإن ال‪ pattern‬هو فقط‬ ‫مجموعة الحروف املتتالية التي تشكل الكلمة املحجوزة‪ ،‬بينما في حالة ال‪ ،identifier‬فإن‬

‫‪16‬‬


Dr. Mabroka A. M.

CS802: Compliers

Spring 2017

‫ هو حرف او مجموعة من الحروف متبوعة برقم او مجموعة من االرقام (اسم متغيرة‬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‬التعليمة السابقة الى‪count:- (id, position id in symbol table):‬‬ ‫في هذه الحالة‪ ،‬يتم التمييز بين كل ‪ id‬عن طريق ‪lexeme, position‬‬ ‫حيث يتم تمرير الجملة السابقة الى ‪ Syntax‬بالشكل التالي‪(id, count) :‬‬ ‫‪18‬‬


‫‪Spring 2017‬‬

‫‪CS802: Compliers‬‬

‫‪Dr. Mabroka A. M.‬‬

‫)‪(equal, null‬‬ ‫)‪(id,count‬‬ ‫)‪(plus,null‬‬ ‫)‪(id,i)=> (id ,position of id‬‬ ‫ُ‬ ‫**سؤال املحاضرة‪ :‬اين تخزن ‪ tokens‬في الجملة السابقة؟ و كيف؟‬ ‫يتم تخزين الجملة السابقة على شكل ‪ 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‬‬


Dr. Mabroka A. M.

CS802: Compliers

Spring 2017

token‫ على ال‬lexical analyzer‫ كيف يتعرف ال‬ ‫ البد من طريقة ما‬،token‫ التي يقوم بها و املتمثلة في التعرف على ال‬lexical‫من خالل مهمة ال‬ token ( ‫ في الغالب‬.‫ من التعرف عليها‬lexical‫ ليتمكن ال‬token‫ لل‬specification ‫لوصف‬ ُ .)RE( Regular Expression ‫) تكتب باستخدام التعابير القياسية‬specification regular expression‫ التعابير القياسية‬ ‫ ُيستخدم لوصف فئات من السالسل يسهل فهمها‬algebraic notation ‫التعبير القياس ي تدوين جبري‬ ً ‫{ تعتبر فئة من‬0,1,2,3,…,9} ‫ فئة االرقام الصحيحة هي‬:‫ فمثال‬،‫و استخدامها من قبل االنسان‬ ‫ من عدد واحد من‬string ‫ هو سلسلة‬1 ‫ الرقم‬،‫ اذن‬،‫السالسل حيث ُيؤخذ كل رقم من هذه الفئة‬ ‫ حيث‬،{a,b,c,d,….,z,A,B,…,Z,0,1,2,…,9} ‫ و كذلك فئة اسماء املتغيرات التي يمكن ان تكون‬.‫االرقام‬ .‫ مشتقة من هذه الفئة‬string ‫ان كل اسم متغيرة هو عبارة عن سلسلة‬ Regular expressions are an important notation for specifying lexeme patterns. While they cannot express all possible patterns, they are very effective in specifying those types of patterns that we actually need for tokens.

languages ‫ اللغات‬ ُ ‫اصل أي لغة هو مجموعة أو فئة الحروف االبجدية التي تصاغ منها كلمات اللغة و تنظمها مجموعة‬ ُ .L ‫ و ُيرمز لها بالرمز‬language ‫ تسمى فئة السالسل لغة‬.‫من القوانين لتعطي معنى‬ .‫املصطلحات التالية توضح تدرج مفهوم اللغة‬ 

An alphabet is any finite set of symbols. Typical examples of symbols are letters, digits, and punctuation. The set {0, 1 } is the binary alphabet. ASCII is an important example of an alphabet ; it is used in many software systems. Unicode, which includes approximately 100,000 characters from alphabets around the world, is another important example of an alphabet.

A string over an alphabet is a finite sequence of symbols drawn from that alphabet. In language theory, the terms "sentence" and "word" are often used as synonyms for "string." The length of a string s, usually written | s | , is the number of occurrences of symbols in s. For example, banana is a string of length six. The empty string, denoted Ɛ, is the string of length zero.

A language is any countable set of strings over some fixed alphabet. This definition is very broad. Abstract languages like Ø, the empty set, or {Ɛ} , the set containing only the empty string, are languages under this definition.

20


Dr. Mabroka A. M.

CS802: Compliers

Spring 2017

strings ‫ السالسل‬ ‫ يمكن دمج سلسلة أو اكثر مع اخرى‬،‫ إذن‬.‫مجموعة الرموز املتتالية (بدون فاصلة) تشكل سلسلة‬ .‫ او يمكن إجراء عملية ما على سلسلة ما لتعطي سلسلة من نوع آخر‬.‫لتعطي بذلك سلسلة جديدة‬ .‫الجدول التالي يوضح بعض املصطلحات و العمليات التي تثجرى على السالسل‬ Terms for Parts of Strings The following string-related terms are commonly used: 1. A prefix of string s is any string obtained by removing zero or more symbols from the end of s. For example, ban, banana, and e are prefixes of banana. 2. A suffix of string s is any string obtained by removing zero or more symbols from the beginning of s. For example, nana, banana, and e are suffixes of banana. 3. A substring of s is obtained by deleting any prefix and any suffix from s. For instance, banana, nan, and e are substrings of banana. 4. The proper prefixes, suffixes, and substrings of a string s are those, prefixes, suffixes, and substrings, respectively, of s that are not e or not equal to s itself. 5. A subsequence of s is any string formed by deleting zero or more not necessarily consecutive positions of s. For example, baan is a subsequence of banana.

ً :‫وفقا للمصطلحات السابقة فإن الجمل التالية صحيحة‬ If x and y are strings, then the concatenation of x and y, denoted xy, is the string formed by appending y to x. For example, if x = soft and y = ware, then xy = software. The empty string is the identity under concatenation; that is, for any string s, Ɛs=sƐ=s. If we think of concatenation as a product, we can define the "exponentiation" of strings as follows: Define s° to be Ɛ, and for all i > 0, define si to be si-1s. Since Ɛs = s, it follows that s1 = s. Then s2 = ss, s3 = sss, and so on. eg: if s=soft, then s°=??, if i=3, then si-1s=??

21


Dr. Mabroka A. M.

CS802: Compliers

Spring 2017

‫ العمليات على اللغات‬ ‫ الدمج‬،Union ‫ أهم العمليات على اللغات هي االتحاد‬،lexical analysis ‫في التحليل اللفظي‬ :‫ كما هي موضحة بالجدول التالي‬.closure ‫ و االغالق‬Concatenation OPERATION

DEFINITION AND NOTATION

Union of L and M

L U M = {s | s is in L or s is in M}

Concatenation of L and M

LM = {st | s is in L and t is in M}

Kleene closure of L

Positive closure of L Definitions of operations on languages Example : Let L be the set of letters {A, B , . . . , Z , a, b, . . . , z} and let D be the set of digits {0, 1 , . . . 9}. We may think of L and D in two, essentially equivalent, ways: One way is that L and D are, respectively, the alphabets of uppercase and lowercase letters and of digits. The second way is that L and D are languages, all of whose strings happen to be of length one. Here are some other languages that can be constructed from languages L and D, using the previous operators: 1 . L U D is the set of letters and digits - strictly speaking the language with 62 strings of length one, each of which strings is either one letter or one digit. 2. LD is the set of 520 strings of length two, each consisting of one letter followed by one digit. 3. L4 is the set of all 4-letter strings. 4. L * is the set of ail strings of letters, including Ɛ, the empty string. 5. L(L U D)* is the set of all strings of letters and digits beginning with a letter. 6. D+ is the set of all strings of one or more digit.

22


Dr. Mabroka A. M.

CS802: Compliers

Spring 2017

‫ التعبير القياس ي و اللغة‬ ‫ و يمكن دمج تعبير قياس ي مع آخر او اكثر لتشكيل تعبير قياس ي‬.‫يعتبر التعبير القياس ي وصف للغة ما‬ .‫ الجدول التالي يبين العالقة بين التعبير القياس ي و اللغات‬.‫جديد يصف فئات معقدة من السالسل‬ Regular expression a

Language (set of strings) {a}

Ɛ

{}

s|t st

L(s) U L(t) {vw|v є L(s), w є L(t) }

S*

{ } U {vw|v є L(s), w є L(s*) }

Informal description The set consisting of the one letter string “a”. The set containing the empty string. Strings from both languages Strings constructed by concatenating a string from the first language with a string from the second language. Note: In set-formulas, | is not a part of a regular expression, but part of the set-builder notation and reads as “where”. Each string in the language is a concatenation of any number of strings in the language of s.

‫ الخواص الجبرية للتعابير القياسية‬ :‫ الجدول التالي يوضح بعض الخواص الجبرية للتعابير القياسية‬،‫ هي تعابير قياسية‬r, s, t ‫لنفرض ان‬ Law description r|s=s|r | is commutative r(s|t)=(r|s)|t | is associative concatenation is associative r(s)t=(rs)t Concatenation distributes over I r(s|t)=rs|rt; (s|t)r=sr|tr є r=r є=r

r*=(r| є)* r**=r* s? = s| є ss* = s+ = ss* [string1-string n]

є is the identity for concatenation є is guaranteed in a closure

* is idempotent

By definition By definition Shorthand for consequence set values 23


Dr. Mabroka A. M.

CS802: Compliers

24

Spring 2017


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.