26
ی ح را ط رها ل ی ا پ م کا414-40 ی ن ا می س ا اق رض م لا غ مدرس: ی ن ا پ س را ف ا+ ان ای دها: ش لای ش یا س ار ق+ ردان گ ر ب دا ام خ هی ب1

طراحی کامپایلرها 414-40

  • Upload
    brit

  • View
    121

  • Download
    3

Embed Size (px)

DESCRIPTION

به نام خدا. طراحی کامپایلرها 414-40. 1. مدرس: غلامرضا قاسم‌ثانی برگردان فارسی اسلایدها : شایان افراسیابی. درباره‌ی درس. منبع اصلی ارزیابی. Compilers: Principles, Techniques & Tools, 2nd ed., Aho, Lam, Sethi, and Ullman, 2007. 1. آموزش درس کامپایلر. آیا موضوعی قدیمی نیست؟ - PowerPoint PPT Presentation

Citation preview

Page 1: طراحی کامپایلرها 414-40

طراحیکامپایلرها414-40

مدرس:‌غالمرضا‌قاسم‌ثانی

برگردان‌فارسی‌اسالیدها:‌

شایان‌افراسیابی

به‌نام‌خدا

1

Page 2: طراحی کامپایلرها 414-40

oمنبع‌اصلی

oارزیابی

درباره‌ی‌درس

1

‌نمره‌)از‌20)

درصد مورد

7 35% امتحان‌میان‌ترم

7 35% امتحان‌پایان‌ترم

2 10% تمرین‌ها‌و‌کوئیزها

4 20% پروژه‌عملی

Compilers: Principles, Techniques & Tools, 2nd ed., Aho, Lam, Sethi, and Ullman, 2007

Page 3: طراحی کامپایلرها 414-40

oآیا‌موضوعی‌قدیمی‌نیست؟بله،‌و‌به‌خوبی‌تبیین‌شده‌است

الگوریتم‌ها،‌روش‌ها،‌و‌تکنیک‌های‌آن‌در‌مراحل‌

اولیه‌ی‌شکل‌گیری‌علوم‌کامپیوتر‌طراحی‌شده‌اند

در‌حال‌حاضر‌تعداد‌زیادی‌کامپایلر‌وجود‌دارد،‌و

تعداد‌زیادی‌ابزار‌که‌به‌صورت‌خودکار‌کامپایلر‌تولید‌

می‌کنند

oپس‌چرا‌باید‌این‌درس‌را‌بخوانیم؟هیچ‌وقت‌یک‌کامپایلر‌کامل‌را‌‌Kبا‌وجودی‌که‌احتماًال

خودتان‌نمی‌سازید،‌اما

تکنیک‌هایی‌که‌در‌این‌درس‌می‌آموزید‌کاربردهای‌

:Kزیادی‌دارند؛‌مثال

ساخت‌مفسر‌برای‌زبان‌های‌اسکریپتی•

(‌فرم‌هاvalidationاعتبارسنجی‌)•

و‌غیره•

آموزش‌درس‌کامپایلر

2

Page 4: طراحی کامپایلرها 414-40

oکامپایلرزبان‌مبدأ‌برنامه‌ای‌که‌یک‌برنامه‌ی‌»قابل‌اجرا«‌به‌

)معموًال‌Kزبانی‌سطح‌باًال(‌‌را‌به‌برنامه‌ی‌»قابل‌

)معموًال‌Kزبانی‌سطح‌زبان‌مقصد‌‌به‌معادلاجرای«‌

پایین(‌‌ترجمه‌می‌کند

o(مفسر‌Interpreter)برنامه‌ای‌که‌یک‌برنامه‌ی‌قابل‌اجرا‌را‌می‌خواند‌و‌

نتایج‌حاصل‌از‌اجرای‌آن‌را‌تولید‌می‌کند

به‌معنی‌»اجرای«‌برنامه‌است‌Kاین‌کار‌معموًال

o‌،درباره‌ی‌کامپایلرهاست‌Kاین‌درس‌عمدتا

ولی‌در‌بسیاری‌از‌موارد،‌همین‌مباحث‌

برای‌مفسرها‌هم‌مطرح‌می‌شود

اصطالحات

3

Page 5: طراحی کامپایلرها 414-40

یک‌کامپایلر

4

کامپایلربرنامه‌ی‌مقصد

برنامه‌ی‌مبدأ

خطاها

ورودی

خروجی

برنامه‌ی‌مقصد

Page 6: طراحی کامپایلرها 414-40

یک‌مفسر

5

مفسر

برنامه‌ی‌مبدأ

ورودی

خروجی

oترجمه‌ی‌خط‌به‌خط‌برنامه

oاجرای‌بالفاصله‌ی‌هر‌خط‌ترجمه‌شده

oاجرا‌کندتر‌است‌زیرا‌ترجمه‌تکرار‌می‌شود

oخطاها‌را‌نسبت‌به‌کامپایلر‌‌Kولی‌معموًال

بهتر‌تشخیص‌می‌دهد

Page 7: طراحی کامپایلرها 414-40

(‌Hybridیک‌کامپایلر‌ترکیبی‌)

6

مترجم

برنامه‌ی‌‌میانی‌

(IR)

برنامه‌ی‌مبدأ

خطاها

ورودی

خروجی

ماشین‌مجازی

Page 8: طراحی کامپایلرها 414-40

oساختاز‌لحاظ‌:تک‌گذره

چندگذره

oنوع‌کد‌تولیدشدهاز‌لحاظ‌:مثل‌(مطلق‌.com)

.مثل‌(قابل‌جابه‌جایی‌exe)

دسته‌بندی‌کامپایلرها

7

Page 9: طراحی کامپایلرها 414-40

برنامه‌ی‌مقصد

مراحل‌کامپایل

8

تحلیلگر‌لغوی

تحلیلگر‌نحوی

تحلیلگر‌معنایی

تولیدکننده‌کد‌میانی

بهینه‌ساز‌کد

تولیدکننده‌ی‌کد

بهینه‌سازی‌جزیی

برنامه‌ی‌مبدأ

مدیریت‌خطا

مدیریت‌جدول‌عالیم

1

2

3

4

5

6

7

Front-End

Back-End

تحلیل

ساخت

Page 10: طراحی کامپایلرها 414-40

oنگاشت‌کد‌مبدأ‌به‌کد‌میانی‌در‌Front-End

oنگاشت‌کد‌میانی‌به‌کد‌مقصد‌در‌Back-End

oساده‌سازی‌پرداخت‌کد‌و‌تغییر‌کد‌مقصد‌

(retargeting)

oامکان‌وجود‌چند‌Front-End

‌Back-Endو‌Front-Endتقسیم‌به‌

9

Front-End

کد‌مبدأ

‌کدمیانی‌(IR)

Back-End

کد‌مقصد

خطاها

Page 11: طراحی کامپایلرها 414-40

oتحلیلگر‌لغوی«نشانه‌هانگاشت‌نویسه‌ها‌به‌مجموعه‌ای‌از‌(-‌»Tokens‌)

--‌‌واحد‌پایه‌ی‌نحو

‌:مثالی‌از‌نشانه‌ها

(حذف‌فاصله‌ها‌tab)ها،‌فضاهای‌خالی،‌و‌توضیحات‌

ساخت‌دستی‌تحلیلگر‌لغوی‌به‌جای‌استفاده‌از‌•

(‌ممکن‌است‌برای‌افزایش‌LEXابزارهای‌خودکار‌)مثل‌

سرعت‌ًالزم‌باشد

Front-End (1)‌

10

تحلیلگر‌لغوی

کد‌مبدأ نشانه‌

ها

تحلیلگر‌نحوی

درخت‌تحلیل

خطاها

x = x + y id x id x id y= +

num id + - * / do end

Page 12: طراحی کامپایلرها 414-40

oتحلیلگر‌نحوی»تشخیص‌نحو‌»مستقل‌از‌متن

هدایت‌تحلیل‌وابسته‌به‌متن

(ساخت‌کد‌میانی‌IR)

تولید‌پیغام‌های‌خطاهای‌با‌معنا

تالش‌برای‌اصالح‌خطا

ابزارهایی‌مثل‌YACCمی‌توانند‌فرآیند‌ساخت‌آن‌را‌‌

خودکار‌کنند

Front-End (2)‌

11

تحلیلگر‌لغوی

کد‌مبدأ نشانه‌

ها

تحلیلگر‌نحوی

درخت‌تجزیه

خطاها

Page 13: طراحی کامپایلرها 414-40

oبرای‌توصیف‌نحو‌زبان‌های‌برنامه‌سازی‌از‌

استفاده‌می‌شودگرامرهای‌مستقل‌از‌متن‌

Front-End (3)

12

<expr> ::= <expr> <op> <term> | <term>

<term> ::= <number> | <id>

<op> ::= + | -

Page 14: طراحی کامپایلرها 414-40

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

Page 15: طراحی کامپایلرها 414-40

oدرخت‌پارس‌را‌می‌توان‌به‌صورت‌

فشرده‌تر‌در‌قالب‌درخت‌انتزاعی‌نحو‌

(Abstract Syntax Treeنمایش‌داد‌)

oASTمی‌تواند‌به‌عنوان‌‌IRبین‌‌Front-Endو‌‌Back-

Endبه‌کار‌رود‌

Front-End (5)

14

id x

+

num 2

-

id y

x + 2 - y

Page 16: طراحی کامپایلرها 414-40

o(ترجمه‌ی‌کد‌میانی‌IRبه‌کد‌مقصد‌)

oانتخاب‌دستور‌مناسب‌برای‌هر‌عمل‌در‌IR

oتصمیم‌گیری‌در‌مورد‌آن‌چه‌در‌هر‌لحظه‌

باید‌در‌ثبoات‌ها‌ذخیره‌شود

Back-End (1)‌

15

انتخاب‌دستور

IR

خطاها

تخصیص‌ثبoات

کد‌مقصد

Page 17: طراحی کامپایلرها 414-40

oتولید‌کد‌فشرده‌و‌سریع

oاستفاده‌از‌انواع‌آدرس‌دهی‌های‌موجود

Back-End (2)‌

16

IRتولید‌کد

خطاها

بهینه‌سازی‌جزیی

کد‌مقصد

Page 18: طراحی کامپایلرها 414-40

oمنابع‌محدود

oدشواری‌تخصیص‌بهینه‌ی‌منابع

Back-End (3)‌

17

IRتولید‌کد

خطاها

بهینه‌سازی‌جزیی

کد‌مقصد

Page 19: طراحی کامپایلرها 414-40

o:شامل‌سه‌مرحلهتحلیل‌لغوی

پیمایش‌چپ‌به‌راست‌کد‌برنامه‌برای‌•

‌)یک‌نشانه،‌نشانه‌هاشناسایی‌

توالی‌ای‌از‌نویسه‌هاست‌که‌در‌کنار‌

هم‌معنا‌دارند(

تحلیل‌نحوی

گروه‌بندی‌نشانه‌ها‌در‌دسته‌های‌•

بامعنا

تحلیل‌معنایی

بررسی‌صحت‌اجزای‌به‌دست‌آمده•

بخش‌تحلیل‌در‌فرآیند‌کامپایل

18

Page 20: طراحی کامپایلرها 414-40

oساده‌ترین‌تحلیل

oکه‌پایه‌ای‌ترین‌واحدهای‌نشانه‌هاشناسایی‌‌

سازنده‌هستند

oفاصله‌ها،‌نویسه‌های‌رفتن‌به‌ابتدای‌خط‌

جدید،‌و‌غیره‌نادیده‌گرفته‌می‌شوند

مرحله‌اول:‌تحلیل‌لغوی

19

Position := initial + rate * 60

نشانه‌ها

Page 21: طراحی کامپایلرها 414-40

مرحله‌دوم:‌تحلیل‌نحوی‌یا‌پارس

20

assignment_statement

identifier expression

Position expressionexpression

60

inital

expression expression

identifier

rate

number

identifier

+

*

Position := initial + rate * 60

oگره‌های‌درخت‌پارس‌به‌کمک‌گرامر‌زبان‌

برنامه‌سازی‌ساخته‌می‌شوند

:=

Page 22: طراحی کامپایلرها 414-40

oیافتن‌خطاهای‌معنایی

o؛‌دو‌مجازبودن‌عملوندها،‌و‌وارسی‌نوع‌ها

تحلیل‌مهم‌در‌این‌مرحله

مرحله‌سوم:‌تحلیل‌معنایی

21

60

Position

rate

:=

Position := initial + rate * 60

initial

+

*

intToRealrate

:=

initial

+

*

تبدیل‌نوع‌60

Page 23: طراحی کامپایلرها 414-40

oجدول‌عالیمایجاد‌و‌نگه‌داری‌‌،حاوی‌اطالعاتی‌)در‌مورد‌ذخیره‌سازی،‌نوع

محدوده،‌و‌آرگومان‌ها(‌برای‌هر‌نشانه‌ی‌

»بامعنا«‌)معموًال‌Kشناسه‌ها(

‌،داده‌ساختار‌مناسب،‌در‌مرحله‌تحلیل‌لغوی

ایجاد،‌و‌مقداردهی‌اولیه‌می‌شود

‌،جدول‌عالیم‌در‌مراحل‌بعدی‌تحلیل‌و‌ساخت

استفاده،‌یا‌به‌روز‌می‌شود

oخطا‌پردازیشناسایی‌خطاهای‌گوناگون‌مرتبط‌با‌تمام‌

مراحل‌کامپایل

چگونگی‌برخورد‌با‌خطاها‌بعد‌از‌شناسایی

مراحل‌و‌فعالیت‌های‌مکمل‌تحلیل

22

Page 24: طراحی کامپایلرها 414-40

oتولید‌کد‌میانیکد‌»انتزاعی«‌مقصد‌که‌مستقل‌از‌ماشین‌است

تسهیل‌فرآیند‌تولید‌کد‌»نهایی«‌مقصد‌که‌وابسته‌به‌

ماشین‌است

oبهینه‌سازی‌)پرداخت(‌کدیافتن‌راه‌های‌بهتر‌برای‌اجرای‌کد

جای‌گزین‌کردن‌کدهای‌تولیدشده‌با‌کدهای‌بهینه

oتولید‌کد‌نهاییتولید‌کد‌قابل‌جابه‌جایی‌وابسته‌به‌ماشین

oبهینه‌سازی‌جزییبا‌دیدی‌محدود،‌کد‌نهایی‌تولیدشده‌را‌بهبود‌می‌دهد

بخش‌ساخت‌در‌فرآیند‌کامپایل

23

Page 25: طراحی کامپایلرها 414-40

مروری‌بر‌کلیت‌فرآیند‌کامپایل‌(1)

24

تحلیل‌لغوی

Position := initial + rate * 60

id1 id2:= + id3 * 60

id1 id2

:=+

id3

*

60

id1id2

:=+

id3

*

intToReal

60

جدول‌عالیمPosition

initial

rate

تحلیل‌نحوی

تحلیل‌معنایی

تولید‌کد‌میانی

خطاپرداز

Page 26: طراحی کامپایلرها 414-40

مروری‌بر‌کلیت‌فرآیند‌کامپایل‌(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

د‌ک

هسدره‌آس