×
ribbon

دوره آموزش اصول طراحی کامپایلر

کامپایلر یکی از اساسی‌ترین اجزای برنامه‌نویسی است که به شما کمک می‌کند کدهای نوشته شده را به زبان سخت‌افزار خود تفسیر کنید. در واقع با افزودن یک سری علائم خاص به رشته کدهایی که توسط ... ادامه

ارائه دهنده:  دانشگاه صنعتی شریف  دانشگاه صنعتی شریف
3 (7 رای)
سطح: مقدماتی
 رایگان
  
زمان مورد نیاز برای گذارندن دوره:  24 جلسه
مجموع محتوای آموزشی:  20 ساعت ویدئو
 (قابل دانلود می‌باشد)

آنچه در این دوره می‌آموزیم:

 آموزش طراحی کامپایلر

 یادگیری مفاهیم درس کامپایلر

 کمک به دانشجویان رشته مهندسی کامپیوتر

 آموزش رایگان اصول طراحی کامپایلر

سرفصل‌های دوره دوره آموزش اصول طراحی کامپایلر

فیلم های آموزشی
  مبانی کامپایلر
"29:48  
  ساختار کامپایلر
"72:08  
  واژه یابی بخش اول / الگوریتم های DFA و NFA
"54:00  
  واژه یابی بخش دوم / اسکنر
"62:41  
  معرفی انواع گرامرها
"51:11  
  طراحی پارس بخش اول / تجزیه پایین به بالا
"48:41  
  طراحی پارسر بخش دوم / مجموعه های Follow و First
"72:40  
  معرفی تجزیه کننده های LR
"44:28  
  طراحی اسکنر و پارسر در قالب Decaf / تجزیه بالا به پایین بخش اول
"61:26  
  تجزیه بالا به پایین بخش دوم
"18:40  
  کدهای میانی و متغیرهای آن
"62:12  
  IR / Semantic Analytics
"55:12  
  بررسی زبان ماشین
"58:29  
  CFG / Control flow / بهینه سازی Basic Block
"32:06  
  بهینه سازی عبارت ها
"51:18  
  بهینه سازی کامپایلر
"59:40  
  عملیات بر روی متغیرها
"60:32  
  بهینه‌سازی اکسپرشن‌ها
"41:52  
  Instruction Scheduling
"56:24  
  Loop Optimization بخش اول
"54:27  
  Loop Optimization بخش دوم
"28:17  
  Register Allocation و گراف ها
"48:48  
  Parallelization، موازی بخش اول
"43:28  
  Parallelization، موازی بخش دوم
"47:15  

درباره دوره

کامپایلر یکی از اساسی‌ترین اجزای برنامه‌نویسی است که به شما کمک می‌کند کدهای نوشته شده را به زبان سخت‌افزار خود تفسیر کنید. در واقع با افزودن یک سری علائم خاص به رشته کدهایی که توسط برنامه‌نویس نوشته شده است، به سخت‌افزار تفهیم می‌شود که دقیقاً چه پردازشی باید انجام شود. البته که این کار شاید در نگاه اول مسئله‌ای روتین به نظر بیاید اما در حقیقت، مسئله عمیق‌تر از این حرف‌ها است. چراکه هر چه کامپایلر بتواند سریع‌تر دستورات را بین cpu و برنامه‌نویس رد و بدل کند، طبیعتاً سرعت اجرا تا حد زیادی افزایش می‌یابد. ازاین‌رو یادگیری اصول طراحی کامپایلر می‌تواند به برنامه‌نویسان در هر حوزه‌ای کمک کند تا سرعت کار خود را به طرز چشمگیری ارتقاء دهند. 

دوره آموزش اصول طراحی کامپایلر

دوره آموزش اصول طراحی کامپایلر یک دوره رایگان برای درس طراحی کامپایلر بوده که از کلاس‌های دانشگاه صنعتی شریف در مکتب خونه قرار داده شده است. از طرفی اصول طراحی کامپایلر یکی از دروس اختیاری دوره کارشناسی مهندسی کامپیوتر به‌حساب می‌آید که بسیاری با درک آن مشکل دارند. این دوره آموزشی در مکتب‌خونه با عنوان اصول طراحی کامپایلر برای همه کسانی که به آن نیاز یا علاقه دارند، هم‌اکنون در دسترس قرار دارد. 

هدف از یادگیری دوره آموزش طراحی اصول کامپایلر چیست؟

هدف کلی از یادگیری اصول طراحی، ایجاد یک فضای کاربردی برای برقراری ارتباط بین زبان‌های سطح بالا که توسط برنامه‌نویس نوشته می‌شود، و زبان سطح پایین که زبان ماشین است، به‌حساب می‌آید. در واقع شما به دنبال یک مترجم هستید که خواسته‌های شما را به زبان ماشین درک و به آن منتقل کرده سپس و در مقابل پاسخ ماشین را درک و به شما منتقل کند. 

دوره آموزش طراحی اصول کامپایلر مناسب چه کسانی است؟

این دوره آموزشی از طراحی اصول کامپایلر در واقع توسط «جناب آقای محمدهادی فروغمند» استادیار دانشکده علوم ریاضی دانشگاه صنعتی شریف ضبط شده است که در کلاس‌های درسی خود تدریس می‌کردند؛ بنابراین اگر دانشجوی مهندسی کامپیوتر هستید و قصد دارید این درس را با موفقیت بیشتری پشت سر بگذارید و یا نیاز دارید یک کامپایلر طراحی کنید، این دوره آموزش اصول طراحی کامپایلر برای شما مناسب خواهد بود. البته علاقه‌مندان به یادگیری زبان‌های سطح پایین به‌صورت کاربردی نیز می‌توانند از این دوره بهره‌مند شوند. 

بعد از فراگیری دوره آموزش طراحی اصول کامپایلر چه مهارت‌هایی کسب خواهید کرد؟

بعد از فراگیری این دوره آموزشی 20 ساعته از طراحی اصول کامپایلر شما درک کاملی از پردازش‌های cpu در زمان کامپایل یا به عبارتی تفسیر کدها خواهید داشت. در نتیجه می‌توانید کدهای خود را بهینه کرده تا سرعت کامپایل را افزایش دهید. البته بهینه‌سازی کامپایلر نیز از دیگر مهارت‌های کسب شده در پایان این دوره آموزش آموزش اصول طراحی کامپایلر است، یعنی شما می‌توانید بهینه‌سازی دوجانبه انجام داده و سرعت اجرای برنامه‌های خود را دوبرابر بیشتر کنید. 

چه کسانی بهترین کاندید برای یادگیری دوره آموزش اصول طراحی کامپایلر هستند؟

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

سرفصل‌ دوره‌ آموزش طراحی اصول کامپایلر چیست؟

در این بخش قصد داریم تا فهرستی از سرفصل‌های مشترک دوره‌های آموزشی ارائه دهیم. سرفصل‌ها و رئوس مطالب به شرح زیر است:

1. مقدمه و معرفی کامپایلر

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

2. تحلیلگر لغوی

  • معرفی عملکرد تحلیلگر لغوی و ارتباطان با تحلیلگر نحوی
  • کاهش حالات در ماشین خودکار
  • انواع لغات در برنامه – نشانه ها
  •  ایجاد DFA از روی عبارت باقاعده
  • ماشین خودکار متناهی (DFA, NFA)
  • عملکرد تحلیلگر لغوی
  • جدول نماد (ارتباط بین لغات و نشانه ها)
  • الگوریتم تبدیل NFA به  DFA
  • معرفی زبان ها و رشته کامپیوتر (عملیات بر روی زبان ها، معرفی اولیه زبان ها، عبارات منظم)
  • ایجاد ماشین خودکار غیرقطعی (NFA) با روش  Thompson

3. گرامرها

  • گرامر های مبهم
  • درختان تجزیه ( اشتقاق و...)
  • تعریف گرامر – انواع گرامرها ( سلسله مراتب چامسکی  (Chomsky))
  • بازگشتی چپ و حذف آن

4. تجزیه بالا به پایین

  • مجموعه های First و FOLLOW
  • نحوه عملکرد تجزیه کننده بالا به پایین
  • تجزیه کننده پیش بینی کننده غیربازگشتی – جدول تجزیه
  • تجزیه کننده پیش بینی کننده – پیش بینی کننده بازگشتی
  • گرامرهای  LL1
  • تبدیل گرامر LL1 به فاکتورگیری چپ – حذف بازگشتی چپ
  • مفهوم پوشش خطا در تجزیه
  • مدیریت خطا در تجزیه کننده

5. تجزیه کننده پایین به بالا

  • مفهوم دستگیره  (Handle)
  • نحوه عملکرد تجزیه کننده پایین به بالا
  • تجزیه کننده های  LR
  • معرفی تجزیه کننده‌های پایین بالا - تجزیه کننده اولویت با عملگر و LR
  • تجزیه کننده اولویت با عملگر
  • معرفی روش های تجزیه  LR
  • گرامرهای مبهم و تجزیه های کننده های LR
  • گرامرهای  LR0
  • گرامرهای  LR1
  • گرامرهای  SLR1
  • گرامرهای  LALR1

پیش نیازهای دوره آموزش طراحی اصول کمپایلرها چیست؟

توجه داشته باشید که جهت یادگیری کامپایلر نیاز به آگاهی از علوم مختلف از جمله علوم زیر دارید:

1. الگوریتم‌ها

2. مهندسی نرم افزارها

3. آشنایی با زبان های برنامه نویسی مثل اسمبلی

4. نظریه زبان‌ها

5. معماری ماشین‌ها و کامپیوترها

6. کار با ویژوال بیسیک

پیش‌نیاز این دوره آموزش اصول طراحی کامپایلر، دانش کافی از آنالیز الگوریتم‌ها است. ازاین‌رو پیشنهاد می‌کنیم قبل از مشاهده و یادگیری و برای درک بهتر مباحث ویدئو آموزشی کامپایلر ابتدا درس "آموزش طراحی الگوریتم" را در مکتب‌خونه مشاهده فرمایید، زیرا آنالیز و آموزش‌ها بر روی الگوریتم‌های زبان‌های برنامه‌نویسی انجام می‌گیرد و در صورت تمرین و تسلط به این بخش به‌راحتی می‌توانید از درس کامپایلر بهره ببرید. البته درصورتی‌که با طراحی الگوریتم و کار با آن‌ها آشنایی و تسلط کافی دارید، گذراندن این دوره ضروری نیست. 

درباره استاد

maktabkhooneh-teacher محمد هادی فروغمند

محمد هادی فروغمند، استادیار دانشکده علوم ریاضی دانشگاه شریف می‌باشد. زمینه‌های تحقیقاتی ایشان نظریه گراف و تجزیه و تحلیل شبکه‌های پیچیده، مدل‌های محاسباتی جدید و پیچیده، بیوانفورماتیک، تجزیه و تحلیل توالی ترکیبی و جستجو الگوریتم، الگوریتم‌ها و (ترکیبی) بهینه سازی و فلسفه علوم کامپیوتر است.

ایشان در سال 2001 عضو تیم المپیاد کامپیوتر ایران بودند و در این سال توانستند مدال طلا این مسابقات را کسب کنند و همچنین در سال‌های 2005 و 2007 جز سرپرستان تیم بودند که در هر کدام از سال‌ها مجموعا 4 مدال توسط تیم المپیاد کامپیوتر بدست آمده است.

مشاهده پروفایل و دوره‌‌های استاد

نظرات کاربران  ( نظر)

صفحه 1 از
فاطمه ماهوت چی 1401-01-16
مطالب خیلی پراکنده بود
1401-07-05
قدرت انتقال خوبی ندارند ولی محتوا عالی بود و اطلاعات مدرس خوب بود
میلاد نوروزی 1401-02-11
اصلا منظم نبود ، کیفیت فیلمبرداری و صدا خیلی بد ! متاسفم
مکتب‌خونه
همراه عزیز؛ با سپاس از نظر شما، موارد مطرح شده جهت بررسی به بخش مربوطه ارسال شد. در صورت نیاز به پیگیری بیشتر با شما در ارتباط خواهیم بود.

دوره‌های پیشنهادی

سوالات پرتکرار

آیا ممکن است که درسی ناقص ضبط شده باشد؟
ما همواره تلاش کرده­‌ایم که دروس را به طور کامل ضبط نماییم و در اختیار شما دوستان قرار دهیم. اما گاهی برخی ناهماهنگی ها سبب می شود که یک یا تعدادی از جلسات یک درس ضبط نشود. توضیح این گونه نواقص در توضیح درس­ ها آمده است.

سوالات پرتکرار

اگر لینک دانلود یا پخش ویدئو مشکل داشت چه باید کرد؟
در صورتی که با هر گونه مشکلی رو به رو شدید می توانید از طریق صفحه ارتباط با ما به ما اطلاع دهید تا ما سریعا مشکل را پیگیری و برطرف نماییم.

سوالات پرتکرار

آیا امکان دریافت فیلم های یک درس به صورت سی دی یا دی وی دی وجود دارد؟
در حال حاضر امکان ارسال دروس به صورت سی دی یا دی وی دی وجود ندارد.

درس کامپایلر چیست؟

تاریخچه ساخت کامپایلر یا همان مفسر کدهای کامپیوتری برای cpu به اوایل دهه 1950 میلادی برمی‌گردد. دقیقاً زمانی که ماشین‌های برنامه‌نویسی جای خود را در جهان پیدا کرده بودند. اما اینکه درس کامپایلر در امروزه چیست مسئله‌ای متفاوت است. امروزه تعریف کامپایلر به کدهای اسمبلی (یا کدهای سطح پایین دیگر که برای ماشین قابل‌درک باشد) اشاره دارد. از این رو درس کامپایلر و ساخت کامپایلر به دستوراتی اشاره دارد که زبان‌های سطح بالا مثل سی یا پایتون را برای ماشین به زبانی قابل‌فهم و سطح پایین تبدیل یا تفسیر کند. پس نیاز است که کامپایلر به هر دو زبان تسلط کافی داشته باشد.

کامپایلر که معادل انگلیسی آن Compiler است، مجموعه‌ای از برنامه‌های کامپیوتری به‌حساب می‌آید که زبان مبدأ یا همان برنامه‌نویسی سطح بالا را به زبان مقصد و یا زبان سطح پایین تبدیل می‌کند و خروجی آن برای پردازش توسط دیگر برنامه‌ها مانند پیونددهنده‌ مناسب خواهد بود و انسان‌ها می‌توانند به‌راحتی آن را بخوانند. به بیانی دیگر و به‌طورکلی کامپایلر یک نرم‌افزار از پیش تعریف شده است که برای تبدیل کد از زبان برنامه‌نویسی سطح بالا (مانند جاوا) به زبان سطح پایین مورداستفاده قرار می‌گیرد. زبان‌های سطح پایین (زبان ماشین) به‌راحتی قابل‌فهم برای انسان نیستند. به همین دلیل برنامه‌نویسان زبان‌های سطح بالا (مانند Python، C#، Java و Pascal) را توسط کامپایلر، آنالیز و به زبان‌های سطح پایین (کد باینری) تبدیل و ترجمه می‌کنند.

در حقیقت عملکرد کامپایلرها همانند دوبله یک فیلم خارجی است. برای مثال، شما ابتدا کل فیلم را به زبان فارسی ترجمه کرده و سپس در اختیار سایر بینندگان قرار می‌دهید. برنامه کامپایلر نیز ابتدا زبان برنامه‌نویسی سطح بالا را به زبان ماشین تبدیل کرده و بر روی کامپیوتر اجرا می‌کند. کامپایلر از 6 سطح مختلف تشکیل‌شده است که چهار سطح اول آن یا فرانت‌اند (frontend) وظیفه بررسی هرگونه خطا در کدها مانند خطای نحوی، دستور زبان یا لغوی را بر عهده‌دارند و دو قسمت دیگر که به آن بک‌اند (backend) می‌گویند برای پردازش شدن کد به زبان ساده و تولید آن طراحی شده‌اند. کامپایلرها از همان ابتدا و بعد از Run شدن برنامه، کدهای خروجی را آنالیز و بررسی می‌کند. سپس کدها توسط CPU  به اجرا در خواهد آمد. در دوره آموزش اصول طراحی کامپایلر قرار است ما با نحوه کار این ابزار مهم در برنامه‌نویسی آشنا شویم

کدام زبان های برنامه نویسی از کامپایلر AOT استفاده می‌کنند؟

زمانی که تمام کدها جلوتر از زمان به زبان ماشین تبدیل می‌شود به آن Ahead Of Time (به معنی جلوتر از زمان) و یا بصورت مخفف کامپایل کردن AOT می‌گویند. در حقیقت، برنامه قبل از آنکه اجرا شود، کامپایل می‎شود و کدها در اختیار پلتفرم قرار می‌گیرد. زبان‌های برنامه نویسی زیر نیاز به طراحی اصول کامپایلر دارند:

  • Fortan
  • Pascal
  • Assembely Language
  • C
  • C++
  • Swift

توجه داشته باشید که قبل از زبان جاوا اسکریپت و سی شارپ، تمام برنامه‌های کامپیوتری یا با کمک Interpreter تفسیر و یا کامپیل می‌شدند.

سخن پایانی

امیدواریم این دوره آموزش اصول طراحی کامپایلر کمک شایانی به شما در راه یادگیری زبان cpu و درک پردازش‌های آن به هنگام برنامه‌نویسی داشته باشد. 

poster
  
برگزار کننده:  دانشگاه صنعتی شریف
  
زمان مورد نیاز برای گذارندن دوره:  24 جلسه
مجموع محتوای آموزشی:  20 ساعت ویدئو
 (قابل دانلود می‌باشد)