آموزش توسعه یک کامپایلر C از ابتدا - ماژول 1

Developing a C Compiler From Scratch - Module 1

نکته: آخرین آپدیت رو دریافت میکنید حتی اگر این محتوا بروز نباشد.
نمونه ویدیوها:
توضیحات دوره: طراحی کامپایلر، توسعه کامپایلر، تحلیل واژگانی، تجزیه، تولید کد، درختان نحو انتزاعی چگونه یک کامپایلر C از ابتدا بسازیم درک کامل stackframe ها و نحوه تولید زبان اسمبلی برای فایل منبع C آشنایی کامل با تحلیل واژگانی و تجزیه زبان Stronger Assembly مهارت ها به دست می آید طراحی کامپایلر پیش نیازها: باید تجربه اولیه زبان اسمبلی را داشته باشید.

آیا آماده‌اید طراحی کامپایلر و توسعه کامپایلر را بیاموزید و ثابت کنید که یک برنامه‌نویس استاد هستید؟

یاد بگیرید که کامپایلر C خود را از ابتدا ایجاد کنید. در این دوره ما یک کامپایلر ایجاد می کنیم که زیرمجموعه ای از زبان برنامه نویسی C را کامپایل می کند. زمانی که تمام ماژول‌های این دوره را به پایان می‌رسانید، می‌توانید برنامه‌های C را کامپایل کنید که از اشاره‌گرها، ساختارها، اتحادیه‌ها، آرایه‌ها، توابع، حلقه‌ها و حلقه‌های while استفاده می‌کنند. حلقه‌های while، if دستورات، سوئیچ‌ها و موارد دیگر را انجام دهید!

کامپایلر ما همچنین دارای یک سیستم ماکرو پیش‌پردازنده است که به شما امکان می‌دهد فایل‌های هدر را بگنجانید و دقیقاً مانند هر فایل C تعاریفی ایجاد کنید.

کامپایلر شما به اندازه کافی پیشرفته است که از کتابخانه استاندارد GCC استفاده کند، بنابراین ما می توانیم توابع C را از کامپایلر خود فراخوانی کنیم. کامپایلر شما می تواند زبان برنامه نویسی C را کامپایل کند.

این دوره به هیچ چارچوبی متکی نیست، ما همه کارها را از ابتدا انجام می دهیم تا بهترین تجربه یادگیری ممکن را برای دانش آموزان تضمین کنیم


ماژول 1

در ماژول 1 این دوره، ما فایل منبع C خود را که می‌خواهیم کامپایل کنیم، در حافظه بارگذاری می‌کنیم. ما یک lexer برای پیش‌فرض کردن تحلیل واژگانی روی ورودی منبع ایجاد می‌کنیم که کد منبع را به دسته‌ای از نشانه‌ها تبدیل می‌کند که کامپایلر ما به راحتی می‌تواند آن را درک کند. سپس توکن ها را از طریق تجزیه کننده عبور می دهیم تا یک درخت نحو انتزاعی تولید کنیم. یک AST برنامه C را به روشی منطقی توصیف می کند که درک آن را برای کامپایلر ما آسان تر می کند. به عنوان مثال برای عبارت 50 + 20 در نهایت با یک گره عبارت ریشه مواجه خواهید شد که دارای یک عملوند چپ با گره با مقدار 50 و یک عملوند سمت راست با گره با مقدار 20 است. ایجاد کامپایلر آسان تر است.


در طول کل دوره آموزشی، ایجاد یک کامپایلر C کاملاً کارآمد را خواهید آموخت.


سرفصل ها و درس ها

بررسی اجمالی دوره Course Overview

  • معرفی Introduction

  • بررسی اجمالی دوره Overview Of The Course

نصب و راه اندازی Installation And Setup

  • نصب و راه اندازی Installation And Setup

  • در حال آماده سازی پروژه ما Preparing our project

تحلیل واژگانی Lexical Analysis

  • تحلیل واژگانی چیست؟ What is Lexical Analysis

  • ایجاد ساختارهای رمزی ما Creating our token structures

  • آماده کردن Lexer ما Preparing Our Lexer

  • ایجاد یک نشانه عددی Creating a number token

  • ایجاد یک نشانه رشته Creating a string token

  • ایجاد توکن اپراتور Creating a operator token

  • ایجاد نماد نماد Creating a symbol token

  • ایجاد یک نشانه شناسه Creating a identifier token

  • ایجاد نشانه کلیدواژه Creating a keyword token

  • ایجاد یک نشانه خط جدید Creating a new line token

  • ایجاد نشانه نظر Creating a comment token

  • رسیدگی به نقل قول ها در Lexer Handling quotes in the Lexer

  • پیاده سازی اعداد هگزادسیمال Implementing Hexadecimal Numbers

  • پیاده سازی اعداد باینری Implementing Binary Numbers

  • برخورد با بافر پرانتز Dealing with the parentheses buffer

  • ایجاد نشانه های خارج از فایل ورودی Creating tokens outside of the input file

  • ایجاد انواع اعداد Creating number types

  • نهایی کردن lexer Finalizing the lexer

تجزیه زبان برنامه نویسی C Parsing The C Programming Language

  • تجزیه چیست؟ What is parsing?

  • ایجاد ساختارهای تجزیه کننده ما Creating our parser structures

  • در حال نوشتن الگوی تجزیه کننده ما Writing our parser template

  • ایجاد فایل گره ما Creating our node file

  • ایجاد اولین گره ما Creating Our First Node

  • ایجاد گره بیان Creating an expression node

  • پرداختن به تقدم در عبارات - قسمت 1 Dealing with precedence in expressions - Part 1

  • پرداختن به تقدم در عبارات - قسمت 2 Dealing with precedence in expressions - Part 2

  • پرداختن به تقدم در عبارات - قسمت 3 Dealing with precedence in expressions - Part 3

  • ایجاد یک گره شناسه Creating an identifier node

  • پیاده سازی انواع داده ها و کلمات کلیدی - قسمت 1 Implementing datatypes and keywords - Part 1

  • پیاده سازی انواع داده ها و کلمات کلیدی - قسمت 2 Implementing datatypes and keywords - Part 2

  • پیاده سازی انواع داده ها و کلمات کلیدی - قسمت 3 Implementing datatypes and keywords - Part 3

  • پیاده سازی انواع داده ها و کلمات کلیدی - قسمت 4 Implementing datatypes and keywords - Part 4

  • درک دامنه ها Understanding scopes

  • پیاده سازی محدوده ها Implementing the scopes

  • درک وضوح نماد Understanding Symbol Resolution

  • پیاده سازی نماد Resolver Implementing The Symbol Resolver

  • پیاده سازی انواع داده ها و کلمات کلیدی - قسمت 5 Implementing datatypes and keywords - Part 5

  • پیاده سازی متغیرها قسمت 1 Implementing Variables Part 1

  • پیاده سازی متغیرها قسمت 2 Implementing Variables Part 2

  • پیاده سازی متغیرها قسمت 3 Implementing Variables Part 3

  • درک اعلان های آرایه Understanding Array Declarations

  • اجرای محاسبه اندازه آرایه Implementing the calculation of array sizes

  • سازه های اجرایی - قسمت 1 Implementing Structures - Part 1

  • سازه های اجرایی - قسمت 2 Implementing Structures - Part 2

  • بدنه مجری - قسمت 1 Implementing Body's - Part 1

  • بالشتک و تراز چیست What is padding and alignment

  • پیاده سازی توابع اندازه نوع داده Implementing datatype size functions

  • پیاده سازی توابع اندازه متغیر Implementing variable size functions

  • اجرای توابع تراز و بالشتک Implementing Alignment And Padding Functions

  • بدنه مجری - قسمت 2 Implementing Body's - Part 2

  • بدنه مجری - قسمت 3 Implementing Body's - Part 3

  • افست های محدوده توضیح داده شده است Scope offsets explained

  • پیاده سازی موجودیت ها و عملکردهای حوزه تجزیه کننده Implementing parser scope entities and functionalities

  • پیاده سازی افست های محدوده گره متغیر - قسمت 1 Implementing the variable node scope offsets - Part 1

  • پیاده سازی افست های محدوده گره متغیر - قسمت 2 Implementing the variable node scope offsets - Part 2

  • پیاده سازی افست های محدوده گره متغیر - قسمت 3 Implementing the variable node scope offsets - Part 3

  • هل دادن متغیرها به محدوده Pushing variables to the scope

  • بدنه اجرا - قسمت 4 Implementing Body's - Part 4

  • بدنه مجری - قسمت 5 Implementing Body's - Part 5

  • سازه های اجرایی - قسمت 3 Implementing Structures - Part 3

  • سازه های اجرایی - قسمت 4 Implementing Structures - Part 4

  • راه اندازی حل کننده نماد ما Initializing our symbol resolver

  • آزمایش عملکرد ساختار ما Testing our structure functionality

  • خطا در بررسی ساختارهای ما Error checking our structures

  • پاکسازی پروژه Project Cleanup

  • درک توابع Understanding Functions

  • پیاده سازی ساختارهای تابع Implementing the function structures

  • توابع تجزیه Parsing Functions

  • تجزیه آرگومان های تابع Parsing function arguments

  • برخورد با پشته های رو به بالا Dealing with upward stacks

  • تغییر تجزیه شناسه ها Changing the parsing of identifiers

  • Res = 0 وجود ندارد Res = 0 is missing

  • اجرای پرانتز عبارت Implementing expression parentheses

  • پیاده سازی دستورات IF Implementing IF statements

  • پیاده سازی Else And Else If Implementing Else And Else If

  • رفع برخی از هشدارهای کامپایلر Fixing some compiler warnings

  • پیاده سازی بیانیه بازگشت Implementing the return statement

  • پیاده سازی برای حلقه ها Implementing for loops

  • پیاده سازی حلقه های while Implementing while loops

  • پیاده سازی Do while Loops Implementing Do While Loops

  • پیاده سازی دستورات سوئیچ Implementing switch statements

  • اجرای ادامه و شکستن Implementing continue and break

  • پیاده سازی برچسب ها Implementing labels

  • اجرای goto Implementing goto

  • اجرای موارد سوئیچ Implementing switch cases

  • اجرای قراردادهای اجاره Implementing tenaries

  • اجرای کاما Implementing commas

  • پیاده سازی براکت های آرایه Implementing array brackets

  • اجرای قالب ها Implementing casts

  • نمایه های موردی یا تابع ثبت موردی ما Case indexes or our register case function

  • درک Fixups Understanding Fixups

  • ایجاد عملکرد اصلی تعمیرات ما Creating our fixup core functionality

  • ادغام عملکرد تعمیر ما در تجزیه کننده Integrating our fixup functionality into the parser

  • تجزیه اعلامیه های پیش رو Parsing forward declarations

  • تجزیه اتحادیه ها Parsing unions

  • تنظیم اندازه پشته تابع Adjusting the function stack size

  • ترتیب مجدد اضافی گره ها Additional reordering of nodes

سخنرانی پاداش Bonus Lecture

  • سخنرانی پاداش Bonus Lecture

نمایش نظرات

آموزش توسعه یک کامپایلر C از ابتدا - ماژول 1
جزییات دوره
14.5 hours
102
Udemy (یودمی) Udemy (یودمی)
(آخرین آپدیت)
1,666
4.8 از 5
ندارد
دارد
دارد
جهت دریافت آخرین اخبار و آپدیت ها در کانال تلگرام عضو شوید.

Google Chrome Browser

Internet Download Manager

Pot Player

Winrar

Daniel McCarthy Daniel McCarthy

همیشه چیزهای بیشتری برای یادگیری وجود دارد