1 / 26

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

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

brit
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. درباره‌ی درس • منبع اصلی • ارزیابی • Compilers: Principles, • Techniques & Tools, • 2nd ed., Aho, Lam, Sethi, • and Ullman, 2007 1

  3. آموزش درس کامپایلر • آیا موضوعی قدیمی نیست؟ • بله، و به خوبی تبیین شده است • الگوریتم‌ها، روش‌ها، و تکنیک‌های آن در مراحل اولیه‌یشکل‌گیری علوم کامپیوتر طراحی شده‌اند • در حال حاضر تعداد زیادی کامپایلر وجود دارد، و • تعداد زیادی ابزار که به صورت خودکار کامپایلر تولید می‌کنند • پس چرا باید این درس را بخوانیم؟ • با وجودی که احتمالاً هیچ‌وقت یک کامپایلر کامل را خودتان نمی‌سازید، اما • تکنیک‌هایی که در این درس می‌آموزید کاربردهای زیادی دارند؛ مثلاً: • ساخت مفسر برای زبان‌هایاسکریپتی • اعتبارسنجی (validation) فرم‌ها • و غیره 2

  4. اصطلاحات • کامپایلر • برنامه‌ای که یک برنامه‌ی «قابل اجرا» به زبان مبدأ (معمولاً زبانی سطح بالا) را به برنامه‌ی «قابل اجرای» معادل به زبان مقصد (معمولاً زبانی سطح پایین) ترجمه می‌کند • مفسر (Interpreter) • برنامه‌ای که یک برنامه‌ی قابل اجرا را می‌خواند و نتایج حاصل از اجرای آن را تولید می‌کند • این کار معمولاً به معنی «اجرای» برنامه است • این درس عمدتاً درباره‌یکامپایلرهاست، ولی در بسیاری از موارد، همین مباحث برای مفسرها هم مطرح می‌شود 3

  5. یک کامپایلر برنامه‌ی مبدأ برنامه‌ی مقصد کامپایلر خطاها برنامه‌ی مقصد خروجی ورودی 4

  6. یک مفسر برنامه‌ی مبدأ مفسر خروجی ورودی • ترجمه‌ی خط به خط برنامه • اجرای بلافاصله‌ی هر خط ترجمه‌شده • اجرا کندتر است زیرا ترجمه تکرار می‌شود • ولی معمولاً خطاها را نسبت به کامپایلر بهتر تشخیص می‌دهد 5

  7. یک کامپایلر ترکیبی (Hybrid) برنامه‌ی مبدأ مترجم خطاها برنامه‌ی میانی (IR) ماشین مجازی ورودی خروجی 6

  8. دسته‌بندی کامپایلرها • از لحاظ ساخت: • تک‌گذره • چندگذره • از لحاظ نوع کد تولیدشده: • مطلق (مثل .com) • قابل جابه‌جایی (مثل .exe) 7

  9. مراحل کامپایل برنامه‌ی مبدأ 1 تحلیلگر لغوی 2 تحلیل تحلیلگر نحوی Front-End 3 تحلیلگر معنایی مدیریت جدول علایم مدیریت خطا 4 تولیدکننده کد میانی 5 بهینه‌ساز کد 6 ساخت تولیدکننده‌ی کد Back-End 7 بهینه‌سازی جزیی برنامه‌ی مقصد 8

  10. تقسیم به Front-End و Back-End کد مبدأ Front-End کد میانی (IR) Back-End کد مقصد خطاها • نگاشت کد مبدأ به کد میانی در Front-End • نگاشت کد میانی به کد مقصد در Back-End • ساده‌سازی پرداخت کد (optimization) • امکان وجود چند Front-End 9

  11. Front-End (1) کد مبدأ تحلیلگر لغوی نشانه‌ها تحلیلگر نحوی درخت تحلیل خطاها • تحلیلگر لغوی • نگاشت نویسه‌ها به مجموعه‌ای از «نشانه‌ها» -(Tokens) -- واحد پایه‌ی نحو • مثالی از نشانه‌ها: • حذف فاصله‌ها (tab ها، فضاهای خالی، و توضیحات) • ساخت دستی تحلیلگر لغوی به جای استفاده از ابزارهای خودکار (مثل LEX) ممکن است برای افزایش سرعت لازم باشد x = x + y id x = id x + id y num id + - * / do end 10

  12. Front-End (2) کد مبدأ تحلیلگر لغوی نشانه‌ها تحلیلگر نحوی درخت تحلیل خطاها • تحلیلگر نحوی • تشخیص نحو «مستقل از متن» • هدایت تحلیل وابسته به متن • ساخت کد میانی (IR) • تولید پیغام های خطاهای با معنا • تلاش برای اصلاح خطا • ابزارهایی مثل YACCمی‌توانند فرآیند ساخت آن را خودکار کنند 11

  13. Front-End (3) • برای توصیف نحو زبان‌های برنامه‌سازی از گرامرهای مستقل از متن استفاده می‌شود 12

  14. Front-End (4) • تحلیلگر نحوی سعی می‌کند یک برنامه را به اجزای نحوی تعریف‌شده در گرامر تقسیم کند • تحلیل نحوی یا پارس را می‌توان در قالب یک درخت پارس (Parse Tree) و یا درخت نحو (Syntax Tree ) نمایش داد x + 2 - y expr op expr term term expr op - id x term + num 2 id x 13

  15. Front-End (5) • درخت پارس را می‌توان به صورت فشرده‌تر در قالب درخت انتزاعی نحو (Abstract Syntax Tree) نمایش داد • ASTمی‌تواند به عنوان IR بین Front-Endو Back-Endبه کار رود - + id y x + 2 - y id x num 2 14

  16. Back-End (1) IR انتخاب دستور تخصیص ثبّات کد مقصد خطاها • ترجمه‌ی کد میانی (IR) به کد مقصد • انتخاب دستور مناسب برای هر عمل در IR • تصمیم‌گیری در مورد آن‌چه در هر لحظه باید در ثبّات‌ها ذخیره شود 15

  17. Back-End (2) IR تولید کد بهینه‌سازی جزیی کد مقصد خطاها • تولید کد فشرده و سریع • استفاده از انواع آدرس‌دهی های موجود 16

  18. Back-End (3) IR تولید کد بهینه‌سازی جزیی کد مقصد خطاها • منابع محدود • دشواری تخصیص بهینه‌ی منابع 17

  19. بخش تحلیل در فرآیند کامپایل • شامل سه مرحله: • تحلیل لغوی • پیمایش چپ به راست کد برنامه برای شناسایی نشانه‌ها (یک نشانه، توالی‌ای از نویسه‌هاست که در کنار هم معنا دارند) • تحلیل نحوی • گروه‌بندینشانه‌ها در دسته‌هایبامعنا • تحلیل معنایی • بررسی صحت اجزای به‌دست‌آمده 18

  20. مرحله اول: تحلیل لغوی • ساده‌ترین تحلیل • شناسایی نشانه‌ها که پایه‌ای‌ترین واحدهای سازنده هستند • فاصله‌ها، نویسه‌های رفتن به ابتدای خط جدید، و غیره نادیده گرفته می‌شوند Position:=initial+rate*60 نشانه‌ها 19

  21. مرحله دوم: تحلیل نحوی یا پارس • گره‌های درخت پارس به کمک گرامر زبان برنامه‌سازی ساخته می‌شوند assignment_statement identifier expression := expression expression + Position identifier expression * expression identifier number inital rate 60 Position := initial + rate * 60 20

  22. مرحله سوم: تحلیل معنایی • یافتن خطاهای معنایی • وارسی نوع‌ها، و مجازبودنعملوندها؛ دو تحلیل مهم در این مرحله := := Position + + initial * initial * rate 60 rate intToReal Position := initial + rate * 60 تبدیل نوع‌ 60 21

  23. مراحل و فعالیت‌های مکمل تحلیل • ایجاد و نگه‌داریجدول علایم • حاوی اطلاعاتی (در مورد ذخیره‌سازی، نوع، محدوده، و آرگومان‌ها) برای هر نشانه‌ی «بامعنا» (معمولاً شناسه‌ها) • داده‌ساختار مناسب، در مرحله تحلیل لغوی، ایجاد، و مقداردهی اولیه می‌شود • جدول علایم در مراحل بعدی تحلیل و ساخت، استفاده، یا به‌روزمی‌شود • خطا پردازی • شناسایی خطاهای گوناگون مرتبط با تمام مراحل کامپایل • چگونگی برخورد با خطاها بعد از شناسایی 22

  24. بخش ساخت در فرآیند کامپایل • تولید کد میانی • کد «انتزاعی» مقصد که مستقل از ماشین است • تسهیل فرآیند تولید کد «نهایی» مقصد که وابسته به ماشین است • بهینه‌سازی (پرداخت) کد • یافتن راه‌های بهتر برای اجرای کد • جای‌گزین کردن کدهای تولیدشده با کدهای بهینه • تولید کد نهایی • تولید کد قابل جابه‌جایی وابسته به ماشین • بهینه‌سازی جزیی • با دیدی محدود، کد نهایی تولیدشده را بهبود می‌دهد 23

  25. مروری بر کلیت فرآیند کامپایل (1) Position := initial + rate * 60 تحلیل لغوی id1 := id2 + id3 * 60 تحلیل نحوی := + * خطاها id1 id2 id3 60 تحلیل معنایی := + * id1 id2 intToReal id3 60 تولید کد میانی 24

  26. مروری بر کلیت فرآیند کامپایل (2) تولید کد میانی 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 25

More Related