پرش به محتویات

مهندسی کامپایلر

اطلاعات کلی

  • نام درس به فارسی: مهندسی کامپایلر
  • نام درس به انگلیسی: Compiler Engineering
  • رشته، گرایش، نوع و واحد درس: مهندسی کامپیوتر – نرم‌افزار، اختصاصی، 3 واحد
  • مقطع: کارشناسی
  • پیش نیازها: آشنایی با اصول برنامه‌نویسی و ساختار داده‌ها
  • مطالب پیش نیاز: مفاهیم پایه زبان‌های برنامه‌نویسی و مبانی کامپایلر

توضیح کوتاه درس

این درس به معرفی اصول و فنون طراحی و پیاده‌سازی کامپایلر می‌پردازد. دانشجویان در این دوره با مراحل اساسی پردازش کد از تحلیل لغوی تا تولید کد نهایی همراه با بهینه‌سازی آشنا شده و می‌آموزند تا با استفاده از ابزارهای مدرن مانند Lex و Yacc، یک کامپایلر کوچک‌مقیاس طراحی و پیاده‌سازی کنند.


اهداف و نتایج درس

  • درک مراحل اساسی یک کامپایلر شامل تحلیل لغوی، نحوی، معنایی، تولید کد واسط، بهینه‌سازی و تولید کد نهایی.
  • توسعه مهارت‌های پیاده‌سازی اجزای اصلی کامپایلر مانند تحلیلگر نحوی، جداول نمادها و تولیدکننده کد واسط.
  • آشنایی با تکنیک‌های تجزیه بالا به پایین (LL) و پایین به بالا (LR, LALR).
  • استفاده از روش‌های بهینه‌سازی کد برای بهبود عملکرد نهایی برنامه‌های کامپایل‌شده.
  • آشنایی با مباحث پیشرفته از جمله کامپایل هم‌زمان (JIT) و چارچوب‌های مدرن کامپایلر مانند GCC و LLVM.

مخاطبین

  • دانشجویان مهندسی کامپیوتر و نرم‌افزار
  • برنامه‌نویسان و علاقمندان به طراحی زبان‌های برنامه‌نویسی
  • پژوهشگران حوزه زبان‌های برنامه‌نویسی و کامپایلر

سطح دوره

  • مبتدی تا متوسط (کارشناسی)

طول و زمان‌بندی دوره

  • مدت دوره: 4 ماه (32 جلسه)
  • جلسات کلاس: 28 جلسه (42 ساعت)
  • جلسات جبرانی: 4 جلسه
  • جلسات ارزیابی: 2 جلسه

سرفصل‌ها و مباحث

  1. مقدمه‌ای بر طراحی کامپایلر (3 جلسه)

    • نقش کامپایلر در چرخه عمر توسعه نرم‌افزار
    • مروری بر زبان‌های برنامه‌نویسی و ویژگی‌های آن‌ها
    • معماری کلی کامپایلرها
  2. تحلیل لغوی (4 جلسه)

    • توکن‌ها، الگوها و واژه‌ها
    • طراحی و پیاده‌سازی تحلیلگرهای لغوی
    • معرفی Lex و کاربردهای آن
  3. تحلیل نحوی (5 جلسه)

    • گرامرهای مستقل از متن و درخت‌های تجزیه
    • تجزیه بالا به پایین (Recursive Descent, LL)
    • تجزیه پایین به بالا (LR, LALR)
    • مکانیزم‌های شناسایی و بازیابی خطا در تحلیلگر
  4. تحلیل معنایی (4 جلسه)

    • وظیفۀ تحلیل معنایی در کامپایلر
    • بررسی نوع‌ها و استنتاج نوع
    • استفاده از جداول نماد و گرامرهای صفت دار
  5. تولید کد واسط (4 جلسه)

    • ساختارهایی مانند کد سه‌آدرسه، چهارگانه‌ها و درخت‌های نحو انتزاعی
    • ترجمه ساختارهای زبان سطح بالا به کد واسط
    • پیاده سازی تولید کننده کد در ANTLR
  6. بهینه‌سازی کد (4 جلسه)

    • تکنیک‌های بهینه‌سازی محلی و سراسری
    • بهینه‌سازی حلقه‌ها، حذف کد مرده و inlining
    • نقش تحلیل جریان داده‌ها در بهینه‌سازی
  7. تولید کد نهایی (3 جلسه)

    • انتخاب دستورالعمل، تخصیص رجیسترها و بلوک‌های پایه
    • نمودارهای جریان
    • تولید کد ماشین بهینه
  8. مباحث پیشرفته (3 جلسه)

    • کامپایل هم‌زمان (Just-In-Time Compilation)
    • چارچوب‌های کامپایلر (GCC، LLVM)
    • مقدمه‌ای بر زبان‌های خاص دامنه (Domain-Specific Languages)
  9. پروژه نهایی و مطالعات موردی (جلسه پایانی)

    • طراحی و پیاده‌سازی یک کامپایلر کوچک‌مقیاس
    • مطالعات موردی بر روی سیستم‌ها و چارچوب‌های مدرن کامپایلر

نرم‌افزارها و ابزارهای مورد بحث

  • Lex/FLex
  • Yacc/Bison
  • ANTLR
  • JDT
  • Roslyn
  • GCC
  • LLVM

تکالیف و ارزیابی

  • تکالیف تئوری: 20%
  • پروژه عملی: 30%
  • آزمون‌ها: 50%

مراجع درس

  1. Aho, S. C., Sethi, R., & Ullman, J. D.
    Compilers: Principles, Techniques, and Tools (Dragon Book)
  2. Cooper, K. D., & Torczon, L.
    Engineering a Compiler
  3. Appel, A. W.
    Modern Compiler Implementation in C/Java

تهیه‌کننده

  • نام: مرتضی ذاکری
  • نگارش: 1.0

اطلاعات بیشتر

🧑🏻‍💻 سایت درس