Principles of Compiler Design - Lecture Notes PDF
Document Details
Uploaded by Deleted User
Tags
Summary
These notes provide a comprehensive explanation of compiler design principles, focusing on finite automata, including deterministic finite automata (DFAs) and non-deterministic finite automata (NFAs). They detail the conversion process between these automata types and introduce regular expressions.
Full Transcript
اصول طراحی کامپایلرها 1 درس دوم: تحلیلگر لغوی ﺟﻠﺴﻪ ﺳﻮم 2 ماشین خودکارمتناهی ماشین خودکارمتناهی یک رشته از یک زبان منظم را دریافت می کند،و درصورتیکه رشته متعلق به زبان باشد آ...
اصول طراحی کامپایلرها 1 درس دوم: تحلیلگر لغوی ﺟﻠﺴﻪ ﺳﻮم 2 ماشین خودکارمتناهی ماشین خودکارمتناهی یک رشته از یک زبان منظم را دریافت می کند،و درصورتیکه رشته متعلق به زبان باشد آنرا تصدیق می کندو درغیراینصورت انرا رد می کند.ماشین خودکارمتناهی دونوع است: -1ماشین خودکارقطعی)(DFA -2ماشین خودکارغیرقطعی)(NFA 38 ماشین خودکارغیرقطعی ماشین خودکارقطعی را بصورت ) M = (Q , , , q 0 , Fتعریف می کنیم. Qمجموعه متناهی از حاالت مجموعه متناهی ازنمادها که الفبای زبان است تابع گذر q0حالت شروع Fحالت یا حاالت نهایی oدر این ماشین،درهرحالت با خواندن یکی از الفبای زبان امکان چندین گذر وجود دارد. 39. طراحی کنیدL = ba n : n 1 b n a : n 2 برایnfa یک:مثال 40 41 مثال:آیا زبان زیر منظم است؟ L = vwv :v ,w a , b ,| v |= 2 * 42 43 ماشین خودکارقطعی ماشین خودکارقطعی را بصورت ) M = (Q , , , q 0 , Fتعریف می کنیم. Qمجموعه متناهی از حاالت مجموعه متناهی ازنمادها که الفبای زبان است تابع گذر q 0حالت شروع Fحالت یا حاالت نهایی oدر این ماشین،درهرحالت با خواندن یکی از الفبای زبان تنها یک گذر وجود دارد. 44 مثال:یک DFAبرای پذیرش زبان با رشته هایی که دقیقا دو aدارند. 45 مثال :یک DFAبرای پذیرش زبان با رشته هایی که حداقل یک aو دقیقا دوتا bدارند. 46 مثال:یک DFAبرای عبارت باقاعده ) 0 ( 10)* (01رسم کنید. 47 ایجادnfaازعبارت منظم(باقاعده)-الگوریتم تامپسون oابتداعبارت منظمrرا به زیرعبارت های سازنده آن تجزیه می کنیم. r = ( a + b ) (c + )* r1 = a r2 = b r3 = c r4 = * oبرای هر کدام از زیرعبارتها یکnfaرسم می کنیم.یعنی برای هرa یک nfaبا حالت شروع iبدین صورت ایجاد می کنیم. start a i f 48 f N(r) oرا برای عبارت منظم r = s + tبصورت زیر رسم می کنیم: ) N (s start i f ) N (t 49 N(r) oرا برای عبارت منظم r = s.tبصورت زیر رسم می کنیم: start i ) N (s ) N (t f 50 f N(r) oرا برای عبارت منظم * r = sبصورت زیر رسم می کنیم: start ) N (s i f 51 مثال:یک NFAبرای عبارت باقاعده ) 0 ( 10)* (01رسم کنید. 52 مثال:یک NFAبرای عبارت باقاعده* ) a + b * (ab + cرسم کنید. 53 تبدیل NFAبه DFA oتعریف) : _ closure (qمجموعه حاالتی از NFAکه از حالت qبا تبدیل قابل دسترس هستند. b a 1 3 a 5 0 b 2 4 54 : _ closure (Tمجموعه حاالتی از NFAکه از حاالت مجموعه Tبا تبدیل قابل دسترس هستند. oتعریف ) 55 oتعریف ) : move (T , aمجموعه حاالتی از NFAکه از حالت sدرمجموعه Tوبانماد ورودی aیک گذر به انها انجام می شود. 56 الگوریتم تبدیل NFAبه :DFA _closure(s) oرا محاسبه می کنیم.وبه مجموعه حاصل یک اسم اختصاص می دهیم.وآنرا به جدول Dtransاضافه می کنیم.مجموعه موردنظر حالت شروعDFAمی باشد. oیک حالت عالمت نخورده،درDtransراپیدا می کنیم.و آنرا Tمی نامیم.ومراحل زیر را روی ان اجرا میکنیم (ابتدا فقط یک حالت درجدول Dtransوجود دارد).درصورت عدم وجود حالت عالمت نخورده الگوریتم تمام است. -1حالت انتخاب شده را عالمت می زنیم. -2برای هرنماد از الفبای زبان(در الگوریتم انها را aمی نامیم) مراحل زیر را انجام می دهیم: 57 :1-2مجموعه) ) _closure ( move (T , aرامحاسبه می کنیم(.درالگوریتم آنراUمی نامیم) اگر این مجموعه با مجموعه هایموجود در Dtransیکسان نبود نام جدیدی به آن اختصاص می دهیم،و آنرا به Dtransاضافه می کنیم. :2-2در واقع باید به جدول ،Dtransدرصورت تکراری نبودن Dtrans [T , a ] = Uرا اضافه کنیم. مجموعه ای را که شامل حداقل یکی از حالت های پایانیNFAباشد را بعنوان حالت پایانی DFAمشخص می کنیم. 58 مثالNFA:زیر را به DFAتبدیل کنید. b a 1 3 b a 6 -1 0 5 b 2 4 59 آموزش طراحی کامپایلر faradars.org/fvsft104 59 آموزش طراحی کامپایلر faradars.org/fvsft104 60 آموزش طراحی کامپایلر faradars.org/fvsft104 61 آموزش طراحی کامپایلر faradars.org/fvsft104 62 آموزش طراحی کامپایلر faradars.org/fvsft104 63 مثالNFA:زیر را به DFAتبدیل کنید. b a 1 3 a 0 b 2 4 64 65