طراحی کامپایلرها 414-40
DESCRIPTION
به نام خدا. طراحی کامپایلرها 414-40. 1. مدرس: غلامرضا قاسمثانی برگردان فارسی اسلایدها : شایان افراسیابی. دربارهی درس. منبع اصلی ارزیابی. Compilers: Principles, Techniques & Tools, 2nd ed., Aho, Lam, Sethi, and Ullman, 2007. 1. آموزش درس کامپایلر. آیا موضوعی قدیمی نیست؟ - PowerPoint PPT PresentationTRANSCRIPT
طراحیکامپایلرها414-40
مدرس:غالمرضاقاسمثانی
برگردانفارسیاسالیدها:
شایانافراسیابی
بهنامخدا
1
oمنبعاصلی
oارزیابی
دربارهیدرس
1
نمره)از20)
درصد مورد
7 35% امتحانمیانترم
7 35% امتحانپایانترم
2 10% تمرینهاوکوئیزها
4 20% پروژهعملی
Compilers: Principles, Techniques & Tools, 2nd ed., Aho, Lam, Sethi, and Ullman, 2007
oآیاموضوعیقدیمینیست؟بله،وبهخوبیتبیینشدهاست
الگوریتمها،روشها،وتکنیکهایآندرمراحل
اولیهیشکلگیریعلومکامپیوترطراحیشدهاند
درحالحاضرتعدادزیادیکامپایلروجوددارد،و
تعدادزیادیابزارکهبهصورتخودکارکامپایلرتولید
میکنند
oپسچرابایدایندرسرابخوانیم؟هیچوقتیککامپایلرکاملراKباوجودیکهاحتماًال
خودتاننمیسازید،اما
تکنیکهاییکهدرایندرسمیآموزیدکاربردهای
:Kزیادیدارند؛مثال
ساختمفسربرایزبانهایاسکریپتی•
(فرمهاvalidationاعتبارسنجی)•
وغیره•
آموزشدرسکامپایلر
2
oکامپایلرزبانمبدأبرنامهایکهیکبرنامهی»قابلاجرا«به
)معموًالKزبانیسطحباًال(رابهبرنامهی»قابل
)معموًالKزبانیسطحزبانمقصدبهمعادلاجرای«
پایین(ترجمهمیکند
o(مفسرInterpreter)برنامهایکهیکبرنامهیقابلاجرارامیخواندو
نتایجحاصلازاجرایآنراتولیدمیکند
بهمعنی»اجرای«برنامهاستKاینکارمعموًال
o،دربارهیکامپایلرهاستKایندرسعمدتا
ولیدربسیاریازموارد،همینمباحث
برایمفسرهاهممطرحمیشود
اصطالحات
3
یککامپایلر
4
کامپایلربرنامهیمقصد
برنامهیمبدأ
خطاها
ورودی
خروجی
برنامهیمقصد
یکمفسر
5
مفسر
برنامهیمبدأ
ورودی
خروجی
oترجمهیخطبهخطبرنامه
oاجرایبالفاصلهیهرخطترجمهشده
oاجراکندتراستزیراترجمهتکرارمیشود
oخطاهارانسبتبهکامپایلرKولیمعموًال
بهترتشخیصمیدهد
(Hybridیککامپایلرترکیبی)
6
مترجم
برنامهیمیانی
(IR)
برنامهیمبدأ
خطاها
ورودی
خروجی
ماشینمجازی
oساختازلحاظ:تکگذره
چندگذره
oنوعکدتولیدشدهازلحاظ:مثل(مطلق.com)
.مثل(قابلجابهجاییexe)
دستهبندیکامپایلرها
7
برنامهیمقصد
مراحلکامپایل
8
تحلیلگرلغوی
تحلیلگرنحوی
تحلیلگرمعنایی
تولیدکنندهکدمیانی
بهینهسازکد
تولیدکنندهیکد
بهینهسازیجزیی
برنامهیمبدأ
مدیریتخطا
مدیریتجدولعالیم
1
2
3
4
5
6
7
Front-End
Back-End
تحلیل
ساخت
oنگاشتکدمبدأبهکدمیانیدرFront-End
oنگاشتکدمیانیبهکدمقصددرBack-End
oسادهسازیپرداختکدوتغییرکدمقصد
(retargeting)
oامکانوجودچندFront-End
Back-EndوFront-Endتقسیمبه
9
Front-End
کدمبدأ
کدمیانی(IR)
Back-End
کدمقصد
خطاها
oتحلیلگرلغوی«نشانههانگاشتنویسههابهمجموعهایاز(-»Tokens)
--واحدپایهینحو
:مثالیازنشانهها
(حذففاصلههاtab)ها،فضاهایخالی،وتوضیحات
ساختدستیتحلیلگرلغویبهجایاستفادهاز•
(ممکناستبرایافزایشLEXابزارهایخودکار)مثل
سرعتًالزمباشد
Front-End (1)
10
تحلیلگرلغوی
کدمبدأ نشانه
ها
تحلیلگرنحوی
درختتحلیل
خطاها
x = x + y id x id x id y= +
num id + - * / do end
oتحلیلگرنحوی»تشخیصنحو»مستقلازمتن
هدایتتحلیلوابستهبهمتن
(ساختکدمیانیIR)
تولیدپیغامهایخطاهایبامعنا
تالشبرایاصالحخطا
ابزارهاییمثلYACCمیتوانندفرآیندساختآنرا
خودکارکنند
Front-End (2)
11
تحلیلگرلغوی
کدمبدأ نشانه
ها
تحلیلگرنحوی
درختتجزیه
خطاها
oبرایتوصیفنحوزبانهایبرنامهسازیاز
استفادهمیشودگرامرهایمستقلازمتن
Front-End (3)
12
<expr> ::= <expr> <op> <term> | <term>
<term> ::= <number> | <id>
<op> ::= + | -
oتجزیهگرنحوی
سعیمیکند
یکبرنامهرابه
اجزاینحوی
تعریفشدهدر
گرامرتقسیم
کند
oتجزیهنحوییا
پارسرا
میتواندر
قالبیکدرخت
(Parse Treeتجزیه)
ویادرختنحو
(Syntax Tree)
نمایشداد
Front-End (4)
13
expr
expr op term
expr op term
term
id x
+ num 2
- id x
x + 2 - y
oدرختپارسرامیتوانبهصورت
فشردهتردرقالبدرختانتزاعینحو
(Abstract Syntax Treeنمایشداد)
oASTمیتواندبهعنوانIRبینFront-EndوBack-
Endبهکاررود
Front-End (5)
14
id x
+
num 2
-
id y
x + 2 - y
o(ترجمهیکدمیانیIRبهکدمقصد)
oانتخابدستورمناسببرایهرعملدرIR
oتصمیمگیریدرموردآنچهدرهرلحظه
بایددرثبoاتهاذخیرهشود
Back-End (1)
15
انتخابدستور
IR
خطاها
تخصیصثبoات
کدمقصد
oتولیدکدفشردهوسریع
oاستفادهازانواعآدرسدهیهایموجود
Back-End (2)
16
IRتولیدکد
خطاها
بهینهسازیجزیی
کدمقصد
oمنابعمحدود
oدشواریتخصیصبهینهیمنابع
Back-End (3)
17
IRتولیدکد
خطاها
بهینهسازیجزیی
کدمقصد
o:شاملسهمرحلهتحلیللغوی
پیمایشچپبهراستکدبرنامهبرای•
)یکنشانه،نشانههاشناسایی
توالیایازنویسههاستکهدرکنار
هممعنادارند(
تحلیلنحوی
گروهبندینشانههادردستههای•
بامعنا
تحلیلمعنایی
بررسیصحتاجزایبهدستآمده•
بخشتحلیلدرفرآیندکامپایل
18
oسادهترینتحلیل
oکهپایهایترینواحدهاینشانههاشناسایی
سازندههستند
oفاصلهها،نویسههایرفتنبهابتدایخط
جدید،وغیرهنادیدهگرفتهمیشوند
مرحلهاول:تحلیللغوی
19
Position := initial + rate * 60
نشانهها
مرحلهدوم:تحلیلنحوییاپارس
20
assignment_statement
identifier expression
Position expressionexpression
60
inital
expression expression
identifier
rate
number
identifier
+
*
Position := initial + rate * 60
oگرههایدرختپارسبهکمکگرامرزبان
برنامهسازیساختهمیشوند
:=
oیافتنخطاهایمعنایی
o؛دومجازبودنعملوندها،ووارسینوعها
تحلیلمهمدراینمرحله
مرحلهسوم:تحلیلمعنایی
21
60
Position
rate
:=
Position := initial + rate * 60
initial
+
*
intToRealrate
:=
initial
+
*
تبدیلنوع60
oجدولعالیمایجادونگهداری،حاویاطالعاتی)درموردذخیرهسازی،نوع
محدوده،وآرگومانها(برایهرنشانهی
»بامعنا«)معموًالKشناسهها(
،دادهساختارمناسب،درمرحلهتحلیللغوی
ایجاد،ومقداردهیاولیهمیشود
،جدولعالیمدرمراحلبعدیتحلیلوساخت
استفاده،یابهروزمیشود
oخطاپردازیشناساییخطاهایگوناگونمرتبطباتمام
مراحلکامپایل
چگونگیبرخوردباخطاهابعدازشناسایی
مراحلوفعالیتهایمکملتحلیل
22
oتولیدکدمیانیکد»انتزاعی«مقصدکهمستقلازماشیناست
تسهیلفرآیندتولیدکد»نهایی«مقصدکهوابستهبه
ماشیناست
oبهینهسازی)پرداخت(کدیافتنراههایبهتربرایاجرایکد
جایگزینکردنکدهایتولیدشدهباکدهایبهینه
oتولیدکدنهاییتولیدکدقابلجابهجاییوابستهبهماشین
oبهینهسازیجزییبادیدیمحدود،کدنهاییتولیدشدهرابهبودمیدهد
بخشساختدرفرآیندکامپایل
23
مروریبرکلیتفرآیندکامپایل(1)
24
تحلیللغوی
Position := initial + rate * 60
id1 id2:= + id3 * 60
id1 id2
:=+
id3
*
60
id1id2
:=+
id3
*
intToReal
60
جدولعالیمPosition
initial
rate
تحلیلنحوی
تحلیلمعنایی
تولیدکدمیانی
خطاپرداز
مروریبرکلیتفرآیندکامپایل(2)
25
تولیدکدمیانی
جدولعالیمPosition
initial
rate
بهینهسازیکد
تولیدکدنهایی
خطاپرداز
t1 := inttoreal(60)
t2 := id3 * t1
t3 := id2 + t2
id1 := t3
t1 := id3 * 60.0
id1 := id2 + t1
MOVF id3, R2
MULF #60.0, R2
MOVF id2, R1
ADDF R1, R2
MOVF R2, id1
دک
هسدرهآس