Sebha University Faculty of Sciences Computer Department
جامعة سبها كلية العلوم قسم الحاسوب
املترج ـم ـ ـ ـ ـ ـ ـ ـ ــات CS802: The Compilers اعداد د .مبروكه علي معيوف
ربيع 7102
CS802: Compliers
Spring 2017
Dr. Mabroka A. M.
محتويات املقرر املقدمة محاضرة 2،1
تعريف املترجم ،مهمة املترجم ،انواع املترجمات. التحليل و التركيب معنى التحليل معنى التركيب التحليل و التركيب في عملية الترجمة مراحل املترجم جزء التحليل 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
Spring 2017
CS802: Compliers
Dr. Mabroka A. M.
ً تصنيف مراحل املترجم وفقا لبرنامج مصدر أو برنامج هدف Front end phases محاضرة 6،5،4
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
Spring 2017
CS802: Compliers
Dr. Mabroka A. M.
امثلة تطبيقية ملا سبق محاضرة 8،7
ال : 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
محاضرة 22
العالقة بين معالج الخطأ و syntax مرحلة التحليل الداللي (املنطقي) semantic analysis محلل اللفظ semantic analyzer تعريفه ،مهمته ،طريقة عمله الفاحص type checker
محاضرة 12,13,14
العالقة بين semanticو error handler مولد الشفرة الوسطية intermediate code generator لغات وسطية intermediate languages مقلص الشفرة code optimizer مصادر التقليصsources of optimization
Dr. Mabroka A. M.
CS802: Compliers
Spring 2017
code generator مولد الشفرة the target machine االلة الهدف a simple code generator مولد شفرة بسيط mini project تصميم مترجم بسيط على الطالب تصميم مترجم بسيط يقرأ تعليمة بلغة ما ثم: ورقة عمل .يطبق عليها مراحل املترجم كمخرجات
جدول اعمال السنة واالمتحان النهائي االسبوع املستحق
التقييم
% النسبة
1528/55/28
امتحان نصفى
20
كل اسبوع
والواجبات،الحضور
10
قبل االمتحان النهائي
ورقة العمل
25
حسب جدول االمتحانات
االمتحان النهائي
45
املراجع االنجليزية [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.
Spring 2017
Dr. Mabroka A. M.
CS802: Compliers
املقدمة يستجيب الحاسب االلي ملهمة ما إثر تنفيذه ألمر ما او مجموعة من االوامر املكتوبة بلغة يفهمها هذا الحاسب (لغة االلة .)machine languageو تتعدد أوامر اللغة التي يفهمها الحاسب بشكل كبير، فقد يتطلب تنفيذ مهمة معينة كتابة االالف من االسطر مما يؤدي للضجر و امللل و التعرض لألخطاء. كما تختلف لغة االلة من جهاز حاسب ألخر حسب نوع نظام التشغيل مما يتطلب الدراية التامة و ً الخبرة بهذه اللغة من قبل اي مبرمج .و من عيوب لغة االلة أيضا انها أقرب للغة الحاسب (رموز) منها للغة االنسان .و مع التطور املستمر للغات الحاسب و لغات البرمجة (الراقية) ،اصبح من الضروري خلق جسر للتواصل فيما بين الحاسب (لغة االلة) و االنسان (لغة البرمجة الراقية) عن طريق وسيط (مترجم) لترجمة لغة البرمجة الراقية الى لغة يفهمها الحاسب أو الى أي لغة أخرى مناسبة .من هنا، تطلب االمر بناء مترجم ( )compilerللقيام بهذه املهمة. تعريف املترجم : compiler definitionهو برنامج يقرأ برنامج آخر مكتوب بلغة ما (اللغة ً املصدر )source languageو يحوله الى برنامج آخر مكافئ له وفقا للغة الهدف target .language الجزء املهم في عملية الترجمة هو أن compilerيبلغ املستخدم عن وجود أي أخطاء في البرنامج املصدر. target program
Compiler
Source program
Error messages مالحظات: ً اللغة املصدر تختلف من لغة الى أخرى بدا من اللغات التقليدية مثل Fortran & Pascal ً وصوال الى اللغات املتخصصة مثل .Java ً اللغة الهدف تختلف أيضا من لغة الى اخرى ،قد تكون لغة االلة أو لغة أخرى (مثال من لغة C++الى لغة )Javaاو العكس. لغة االلة تختلف من جهاز الى آخر حسب نوع نظام التشغيل.
Spring 2017
CS802: Compliers
Dr. Mabroka A. M.
مهمة املترجم :ترجمة برنامج مصدر مكتوب وفق قواعد اللغة املصدر الى برنامج هدف حسب رؤية املترجم .compiler .2 .1 .3 .6 .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 للبرنامج املصدر .أما التركيب في عملية الترجمة ُ فيقصد به بناء البرنامج الهدف املطلوب من الشفرة ً الوسطية التي تم الحصول عليها سابقا.
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
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 تشترك كل من مرحلتي
Spring 2017
Dr. Mabroka A. M.
CS802: Compliers
مراحل املترجم phases of Compiler جزء التحليل: .0مرحلة التحليل اللفظي (الخطي -linearاملاسح lexical analyzer )scanner ً ُ تسمى هذه املرحلة أيضا بالتحليل الخطي Linear Analysisحيث يتم فيها قراءة ُ البرنامج املصدر من اليسار الى اليمين على اساس انه سلسلة من الرموز .و تجمع عناصر البرنامج املصدر في مجموعات من Tokensو هي أصغر وحدة مستقلة في البرنامج لها معنى. مثال :الجملة التالية في لغة برمجةint a=5; : يجمعها املحلل اللفظي في الشكل التالي: int reserved word a identifier = assignment statement 5 number ; semicolon .7مرحلة التحليل اللغوي (النحوي syntax analysis )parser ً ُ تسمى أيضا بمرحلة التحليل التسلسلي أو الهرمي ،hierarchical analysisو يتم في هذه املرحلة تجميع ال tokensبطريقة تسلسلية بحيث تعطي معنى كما في املثال السابق: = 5
digit
a
id
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 و هذه صورة قريبة من لغة االلة
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 .......... ……… ……… .2ادارة جدول الرموز symbol table management ُ جدول الرموز عبارة عن جدول تجمع فيه املعلومات عن مختلف عناصر و مكونات ً البرنامج خصوصا البيانات من متغيرات و ثوابت ،و يتم تجميع املعلومات املتعلقة بأسماء البيانات و نوعها و قيمها ،كما في املثال السابق: name type value a int 5 حيث يتم الرجوع إليه للتحقق من قيمة و نوعية عناصر البرنامج.
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
Dr. Mabroka A. M.
CS802: Compliers
Spring 2017
بناء على اعتمادها على البرنامج املصدر او البرنامجCompiler يمكن تقسيم مراحل ال:مالحظة :الهدف كما يلي
Compiler
Front-end
Lexical
back-end
optimizer
Syntax
error handler
Semantic Intermediate code generator
symbol table code generator