طراحی کامپایلر و انواع تحلیل در آن (آموزش صفر تا صد)

رتبه: 5 ار 5 رای SSSSS
نمودار کامپایلر
نویسنده: تیم تولید محتوا زمان مطالعه 5 دقیقه
Banner Image

هر فرد در حوزه برنامه نویسی حداقل یکبار از کامپایلر استفاده کرده است یا حتماً نام آن را شنیده یا خوانده است. آیا تا به حال به نحوه عملکرد یک کامپایلر فکر کرده اید؟ در این آموزش درباره طراحی ساختار یک کامپایلر بحث خواهیم کرد.

در اصل یک کد باید از سطوح متفاوتی عبور کند تا از یک زبان سطح بالا به زبان اسمبلی تبدیل شود و همه اینها در کامپایلر پنهان است.

شکل زیر نمودار پایه یک کامپایلر را نشان می دهد:

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

همانطور که می بینیم یک کامپایلر در مجموع از 6 سطح مختلف تشکیل شده است. چهار مورد اول با هم گروه بندی شده اند و فرانت- اند (frontend) نامیده می شوند و دو قسمت آخر نیز با در یک گروه به عنوان بک- اند (backend) قرار می گیرند.

قسمت فرانت- اند هر گونه خطا در کد مانند خطاهای نحوی، دستور زبان یا لغوی را بررسی می کند در حالیکه قسمت بک- اند برنامه را با گروه بندی قسمت های کد برنامه را ساده کرده و آن را تولید می کند.

فرآیندهای داخلی کامپایلر

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

تحلیل لغوی در کامپایلر

وقتی یک کد زبان سطح بالا از تحلیل لغوی عبور می کند، جریانی از توکن ها ایجاد می شود اما قبل از توضیح آن باید با پیش پردازنده ها آشنا باشیم. وظیفه یک پیش پردازنده این است که با حذف فایل های هدر، جریان کاراکترها را فیلتر کند و سپس آن را به قسمت تحلیل لغوی بفرستد.

نکته: جریان کاراکترها چیزی نیست جز کاراکترهای صفحه کلید که در کد از آنها استفاده می کنیم؛ مانند:

int a = 23;

printf(” Hello World! “);

اما توکن چیست؟

کد کوتاه زیر را در نظر بگیرید:

a = 10;

در اینجا هر کدام از قسمت های ؛a، =، 10،  یک توکن هستند.

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

این توکن ها به جدول نماد منتقل می شوند. نقش جدول نماد به دست آوردن ویژگی های توکن ها یا متغیرها مانند نوع، اندازه ، محدوده و … است. جدول نماد به همه مراحل کامپایلر وصل است همانطور که در نمودار می بینیم.

پس از تبدیل همه کد ها به توکن ها به تحلیل نحوی فرستاده می شود.

تحلیل نحوی در کامپایلر

این قسمت بررسی می شود که آیا کد از لحاظ نحو (یا همان سینتکس یا ساختار گرامری) درست است یا خیر. در اینجا یک تجزیه کننده استفاده می شود و خروجی آن یک درخت تجزیه است چونکه شبیه یک درخت می شود:

تحلیل نحوی در کامپایلر

اگر خطایی در سینتکس کد وجود داشته باشد، در این مرحله خطا رخ می دهد.

تحلیل معنایی در کامپایلر

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

حتما بخوانید: چگونه برنامه نویس حرفه ای شویم؟

تولید کد میانی در کامپایلر

این قسمت مرز وسط بین فرانت- اند و بک- اند است، کدی ایجاد می کند که توسط بک- اند قابل درک است یعنی یک کد مستقل از ماشین (مستقل از سیستم عامل). یک کد 3 آدرسه ایجاد می کند کد به 3 عبارت متغیر تقسیم می شود، یعنی اینکه که حداکثر 3 آدرس می تواند در یک دستور وجود داشته باشد، سپس آن را به 2 یا 3 خط کد تقسیم می شود.

a = b + c * d;

تقسیم کد بالا به دو خط:

x = c * d;

a = b + x;

این یک کد 3 آدرسه به سطح بعدی یعنی قسمت بهینه سازی کد ارسال می شود.

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

از اینجا قسمت بک- اند شروع می شود و بهینه سازی کد اولین مرحله از بک اند است. همانطور که از نام آن پیدا است، این قسمت کد را بهینه سازی می کند. چیز زیادی برای گفتن درباره آن وجود ندارد زیرا همه می دانیم بهینه سازی چیست. به عنوان مثال نماد + بسیار ساده تر از نماد * است، بنابراین:

x = 4 * y

کد بالا می تواند به کد زیر تبدیل شود:

x = y + y + y + y

// or

z = y + y;

x = z + z;

تولید کد هدف در کامپایلر

در اینجا تولید کننده کد، نسخه بهینه شده از کد میانی را می گیرد و آن را به زبان ماشین مورد نظر لینک می دهد. کد میانی را به دنباله ای از کدهای ماشین با قابلیت مکان یابی مجدد ترجمه می کند. کد ماشین تولید شده همانند کد میانی عمل می کند.

علاوه بر جدول نماد یک مدیریت خطا نیز وجود دارد که به تمام مراحل متصل است و مسئول رسیدگی به خطاهای تشخیص داده شده توسط فرانت- اند است

در نهایت، کد اصلی نوشته شده به کد اسمبلی یا کد دستگاه تبدیل می شود.

حتما در کنار این مطلب دانلود کنید: آموزش همه زبانهای برنامه نویسی از صفر (رایگان)

آموزش ویدیویی طراحی کامپایلر در 9 جلسه

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

درس 1

 

درس 2

 

درس 3

 

درس 4

 

درس 5

 

درس 6

 

درس 7

 

درس 8

 

درس 9 (آخر)

 

حتما بخوانید: آموزش صفر تا صد اسمبلی (رایگان)

profile name
تیم تولید محتوا

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

مطالب پیشنهادی برای شما

محصولات مرتبط

مشاهده همه

کلاس های آنلاین مرتبط

مشاهده همه
سایر مقالات آموزشی
سایر مقالات آموزشی

مدرس : حامد رضوانی

0

*برای مشاهده قیمت کلاس روی رزرو کلاس آنلاین کلیک کنید*

رزرو کلاس آنلاین

دیدگاهتان را بنویسید

1 2 3 4 5

5 نظر درباره «طراحی کامپایلر و انواع تحلیل در آن (آموزش صفر تا صد)»

  • گیسو
    گیسو آیا این دیدگاه مفید بود ؟

    توضیحات عالی بود
    تشکر بابت زحماتتون

    پاسخ
  • زهرا بهلولی
    زهرا بهلولی آیا این دیدگاه مفید بود ؟

    سلام وقتتون بخیر از فیلم یک تا شش برای من باز نمیشه

    پاسخ
  • کاظم
    کاظم آیا این دیدگاه مفید بود ؟

    خیلی خوب بود ممنون

    پاسخ
  • مریم
    مریم آیا این دیدگاه مفید بود ؟

    سلام ممکنه جواب تمرین هارو قرار بدید

    پاسخ
مشاهده همه نظرات
سبد خرید
سبد خرید شما خالی است
× جهت نصب روی دکمه زیر در گوشی کلیک نمائید
آی او اس
سپس در مرحله بعد برروی دکمه "Add To Home Screen" کلیک نمائید