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

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

folderسایر مقالات آموزشی
comments5 دیدگاه
اساطیر زبان

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

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

 


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

توی این پک فوق العاده، صفرتاصد مبانی برنامه نویسی رو جوری یاد میگیری که تو هیچ کلاس آموزشی یا پک دیگه ای نه دیدی نه شنیدی! بدون هیچ کلاسی، با صفرتاصد مبانی برنامه نویسی اپلیکیشن بزن، پروژه محور یاد بگیر و حسابی پول در بیار! 


 

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

word image 7

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

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

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

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

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

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

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

int a = 23;

printf(” Hello World! “);

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

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

a = 10;

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

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

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

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

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

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

image

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

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

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

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

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

این قسمت مرز وسط بین فرانت- اند و بک- اند است، کدی ایجاد می کند که توسط بک- اند قابل درک است یعنی یک کد مستقل از ماشین (مستقل از سیستم عامل). یک کد 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 (آخر)

 

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

تفاوت پک های حرفه ای ما با آموزشهای رایگان: بطور خلاصه از زمین تا آسمان! 1-پکها، جدیدترین نسخه نرم افزارها را آموزش می دهند با قابلیت های بسیار بیشتر. 2-پکها توسط متخصص آن نرم افزار، به صورت کاملا پروژه محور و با حل چالش هایی که در مسیر کار عملی و حرفه ای با آن روبرو می شوید تهیه شده اند و بعد از استفاده، کاملا برای بازار کار آماده اید! 3- متد این پکها کاملا کار شده و تا ماهها، در ذهن تان ماندگارند و یادگیری بسیار سریعتر و کاملتری خواهید داشت. آموزشهای رایگان فقط دستورات نرم افزارها را (آنهم ناقص) بیان می کنند و تازه برای ورود به بازار باید ماهها تجربه عملی هم کسب کنید !!

turned_in,

چرب زبان

با این اپلیکیشن ساده، هر زبانی رو فقط با 5 دقیقه در روز، توی 80 روز مثل بلبل حرف بزن! بهترین متد روز، تقویت حافظه، آموزش تصویری. یادگیری زبان کلید یادگیری هر مهارتی در قرن 21 !


حتما بخوانید!

5 دیدگاه. ارسال دیدگاه جدید

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست