کامپایلر یکی از بنیادیترین اجزای دنیای برنامهنویسیه. کاری که انجام میده اینه که کدهای نوشتهشده به زبان سطح بالا رو به زبون قابلفهم برای سختافزار ترجمه میکنه. یه جورایی مثل مترجمی میمونه که بین شما و ماشین وساطت میکنه. شا...
دوره آموزش اصول طراحی کامپایلر
چرا یادگیری طراحی کامپایلر مهمه؟ 🤔
کامپایلر یکی از بنیادیترین اجزای دنیای برنامهنویسیه. کاری که انجام میده اینه که کدهای نوشتهشده به زبان سطح بالا رو به زبون قابلفهم برای سختافزار ترجمه میکنه. یه جورایی مثل مترجمی میمونه که بین شما و ماشین وساطت میکنه. شاید اولش ساده به نظر برسه، ولی وقتی عمیقتر نگاه کنی میبینی که هرچی کامپایلر سریعتر بتونه دستورات رو بین CPU و برنامهنویس جابهجا کنه، سرعت اجرای برنامه هم بهطرز محسوسی بالا میره. به همین دلیله که یادگیری اصول طراحی کامپایلر میتونه به هر برنامهنویسی، در هر حوزهای، کمک کنه تا عملکرد کارش رو بهتر کنه.
این دوره دقیقاً چیه؟
دوره آموزش اصول طراحی کامپایلر یک دوره رایگانه که از کلاسهای دانشگاه صنعتی شریف برداشت شده و در مکتبخونه در دسترس قرار گرفته. اصول طراحی کامپایلر یکی از دروس اختیاری دوره کارشناسی مهندسی کامپیوتره که خیلی از دانشجوها باهاش چالش دارن. این دوره آموزشی برای همه کسانی که به این مبحث نیاز دارن یا بهش علاقه دارن، بدون هیچ هزینهای قابل استفادهست.
مشخصات کلی دوره
ویژگی
جزئیات
عنوان دوره
آموزش اصول طراحی کامپایلر
مدرس
محمدهادی فروغمند (استادیار دانشکده علوم ریاضی دانشگاه صنعتی شریف)
مدت زمان
حدود ۲۰ ساعت و ۱۵ دقیقه
تعداد جلسات
۲۴ جلسه
سطح
کارشناسی (درس اختیاری مهندسی کامپیوتر)
هزینه
رایگان
هدف از یادگیری این دوره چیه؟
هدف اصلی، ساختن یه پل ارتباطی بین زبانهای سطح بالا که برنامهنویس مینویسه و زبان سطح پایین که همون زبان ماشینه. در واقع شما دنبال یه مترجم میگردید که خواستههاتون رو به زبان ماشین بفهمه و منتقل کنه و بعد جواب ماشین رو دوباره به زبان شما برگردونه. این مهارت پایهای برای هر کسیست که میخواد بفهمه زیر پوست برنامهنویسی چه خبره.
این دوره برای کی مناسبه؟
دانشجویان مهندسی کامپیوتر که میخوان درس کامپایلر رو با موفقیت پاس کنن
کسانی که قصد دارن یه کامپایلر طراحی کنن
علاقهمندان به یادگیری کاربردی زبانهای سطح پایین
هر کسی که به زبان برنامهنویسی مثل جاوا اسکریپت و مشابهش علاقه داره و میخواد دانش خودش رو عمیقتر کنه
بعد از این دوره چه مهارتهایی به دست میارید؟
درک کامل از پردازشهای CPU هنگام کامپایل یا تفسیر کدها
توانایی بهینهسازی کدها بهمنظور افزایش سرعت کامپایل
آشنایی با بهینهسازی دوجانبه کامپایلر و بالا بردن سرعت اجرای برنامهها
شناخت ساختار زبانهای خاص و نحوه ساخت اونها
سرفصلهای دوره آموزش اصول طراحی کامپایلر
۱. مقدمه و معرفی کامپایلر
تعریف اولیه کامپایلر
انواع روشهای ترجمه و اجرای برنامهها، دلیل و لزوم استفاده از کامپایلر
جلوبندی و عقببندی (اجرا روی ماشینهای گوناگون)
فازهای مختلف کامپایلر (تحلیلگر لغوی، نحوی)
۲. تحلیلگر لغوی
معرفی عملکرد تحلیلگر لغوی و ارتباطش با تحلیلگر نحوی
کاهش حالات در ماشین خودکار
انواع لغات در برنامه – نشانهها
ایجاد DFA از روی عبارت باقاعده
ماشین خودکار متناهی (DFA, NFA)
جدول نماد (ارتباط بین لغات و نشانهها)
الگوریتم تبدیل NFA به DFA
معرفی زبانها و رشتههای کامپیوتری (عملیات روی زبانها، عبارات منظم)
معرفی تجزیهکنندههای پایین به بالا – تجزیهکننده اولویت با عملگر و LR
تجزیهکننده اولویت با عملگر
معرفی روشهای تجزیه LR
گرامرهای مبهم و تجزیهکنندههای LR
گرامرهای LR0
گرامرهای LR1
گرامرهای SLR1
گرامرهای LALR1
پیشنیازهای دوره
برای یادگیری کامپایلر بهتره با علوم مختلفی آشنایی داشته باشید:
الگوریتمها
مهندسی نرمافزار
آشنایی با زبانهای برنامهنویسی مثل اسمبلی
نظریه زبانها
معماری ماشینها و کامپیوترها
کار با ویژوال بیسیک
پیشنیاز اصلی این دوره، دانش کافی از آنالیز الگوریتمهاست. اگه با طراحی الگوریتم و کار با اونها تسلط کافی دارید، نیازی به گذراندن دورههای مقدماتی نیست. در غیر این صورت، بهتره اول مباحث پایه الگوریتم رو تمرین کنید تا راحتتر از درس کامپایلر بهره ببرید.
درس کامپایلر در یک نگاه
تاریخچه ساخت کامپایلر یا همون مفسر کدهای کامپیوتری برای CPU به اوایل دهه ۱۹۵۰ میلادی برمیگرده. امروز تعریف کامپایلر به کدهای اسمبلی (یا کدهای سطح پایین دیگهای که برای ماشین قابل درک باشه) اشاره داره. درس کامپایلر و ساخت کامپایلر مربوط به دستوراتی میشه که زبانهای سطح بالا مثل سی یا پایتون رو برای ماشین به زبانی قابلفهم و سطح پایین تبدیل یا تفسیر میکنه. پس کامپایلر باید به هر دو زبان تسلط کافی داشته باشه.
کامپایلر که معادل انگلیسیش Compiler هست، مجموعهای از برنامههای کامپیوتریست که زبان مبدأ یا همون برنامهنویسی سطح بالا رو به زبان مقصد یا زبان سطح پایین تبدیل میکنه و خروجیش برای پردازش