مهندسی کامپایلر
اطلاعات کلی
- نام درس به فارسی: مهندسی کامپایلر
- نام درس به انگلیسی: Compiler Engineering
- رشته، گرایش، نوع و واحد درس: مهندسی کامپیوتر – نرمافزار، اختصاصی، 3 واحد
- مقطع: کارشناسی
- پیش نیازها: آشنایی با اصول برنامهنویسی و ساختار دادهها
- مطالب پیش نیاز: مفاهیم پایه زبانهای برنامهنویسی و مبانی کامپایلر
توضیح کوتاه درس
این درس به معرفی اصول و فنون طراحی و پیادهسازی کامپایلر میپردازد. دانشجویان در این دوره با مراحل اساسی پردازش کد از تحلیل لغوی تا تولید کد نهایی همراه با بهینهسازی آشنا شده و میآموزند تا با استفاده از ابزارهای مدرن مانند Lex و Yacc، یک کامپایلر کوچکمقیاس طراحی و پیادهسازی کنند.
اهداف و نتایج درس
- درک مراحل اساسی یک کامپایلر شامل تحلیل لغوی، نحوی، معنایی، تولید کد واسط، بهینهسازی و تولید کد نهایی.
- توسعه مهارتهای پیادهسازی اجزای اصلی کامپایلر مانند تحلیلگر نحوی، جداول نمادها و تولیدکننده کد واسط.
- آشنایی با تکنیکهای تجزیه بالا به پایین (LL) و پایین به بالا (LR, LALR).
- استفاده از روشهای بهینهسازی کد برای بهبود عملکرد نهایی برنامههای کامپایلشده.
- آشنایی با مباحث پیشرفته از جمله کامپایل همزمان (JIT) و چارچوبهای مدرن کامپایلر مانند GCC و LLVM.
مخاطبین
- دانشجویان مهندسی کامپیوتر و نرمافزار
- برنامهنویسان و علاقمندان به طراحی زبانهای برنامهنویسی
- پژوهشگران حوزه زبانهای برنامهنویسی و کامپایلر
سطح دوره
- مبتدی تا متوسط (کارشناسی)
طول و زمانبندی دوره
- مدت دوره: 4 ماه (32 جلسه)
- جلسات کلاس: 28 جلسه (42 ساعت)
- جلسات جبرانی: 4 جلسه
- جلسات ارزیابی: 2 جلسه
سرفصلها و مباحث
-
مقدمهای بر طراحی کامپایلر (3 جلسه)
- نقش کامپایلر در چرخه عمر توسعه نرمافزار
- مروری بر زبانهای برنامهنویسی و ویژگیهای آنها
- معماری کلی کامپایلرها
-
تحلیل لغوی (4 جلسه)
- توکنها، الگوها و واژهها
- طراحی و پیادهسازی تحلیلگرهای لغوی
- معرفی Lex و کاربردهای آن
-
تحلیل نحوی (5 جلسه)
- گرامرهای مستقل از متن و درختهای تجزیه
- تجزیه بالا به پایین (Recursive Descent, LL)
- تجزیه پایین به بالا (LR, LALR)
- مکانیزمهای شناسایی و بازیابی خطا در تحلیلگر
-
تحلیل معنایی (4 جلسه)
- وظیفۀ تحلیل معنایی در کامپایلر
- بررسی نوعها و استنتاج نوع
- استفاده از جداول نماد و گرامرهای صفت دار
-
تولید کد واسط (4 جلسه)
- ساختارهایی مانند کد سهآدرسه، چهارگانهها و درختهای نحو انتزاعی
- ترجمه ساختارهای زبان سطح بالا به کد واسط
- پیاده سازی تولید کننده کد در ANTLR
-
بهینهسازی کد (4 جلسه)
- تکنیکهای بهینهسازی محلی و سراسری
- بهینهسازی حلقهها، حذف کد مرده و inlining
- نقش تحلیل جریان دادهها در بهینهسازی
-
تولید کد نهایی (3 جلسه)
- انتخاب دستورالعمل، تخصیص رجیسترها و بلوکهای پایه
- نمودارهای جریان
- تولید کد ماشین بهینه
-
مباحث پیشرفته (3 جلسه)
- کامپایل همزمان (Just-In-Time Compilation)
- چارچوبهای کامپایلر (GCC، LLVM)
- مقدمهای بر زبانهای خاص دامنه (Domain-Specific Languages)
-
پروژه نهایی و مطالعات موردی (جلسه پایانی)
- طراحی و پیادهسازی یک کامپایلر کوچکمقیاس
- مطالعات موردی بر روی سیستمها و چارچوبهای مدرن کامپایلر
نرمافزارها و ابزارهای مورد بحث
- Lex/FLex
- Yacc/Bison
- ANTLR
- JDT
- Roslyn
- GCC
- LLVM
تکالیف و ارزیابی
- تکالیف تئوری: 20%
- پروژه عملی: 30%
- آزمونها: 50%
مراجع درس
- Aho, S. C., Sethi, R., & Ullman, J. D.
Compilers: Principles, Techniques, and Tools (Dragon Book) - Cooper, K. D., & Torczon, L.
Engineering a Compiler - Appel, A. W.
Modern Compiler Implementation in C/Java
تهیهکننده
- نام: مرتضی ذاکری
- نگارش: 1.0