کامپایلر چیست
کامپایلر چیست .همانطور که میدانیم ،سیستم کامپیوتری تنها قادر است که اعداد 0 و 1 را بفهمد و از درک کلمات و کدهایی که برنامه نویس مینویسد ناتوان است.حال سوال اینجاست که با توجه به برنامه ای که برنامه نویس مینویسد و در بدنه آن از کلمات و اعداد و علائمی استفاده میکند ،چگونه کامپیوتر آن را درک نموده و اجرا میکند؟جواب سوال کامپایلر است.سیستم کامپیوتر با استفاده از کامپایلر میتواند کدها را به 0 و 1 ها تبدیل نموده و آن ها را عملیاتی نماید.اما کامپایلر چیست ؟در این مطلب به این سوال خواهیم پرداخت …
کامپایلر نرم افزاری است که قادر است کدهای نوشته شده توسط برنامه نویس را برای CPU ترجمه نموده و کدها را برای سیستم کامپیوتری قابل فهم نماید .در واقع کامپایلر وظیفه تبدیل زبان سطح بالا را به زبان سطح پایین مانند اسمبلی یا زبان سطح ماشین تبدیل میکند.این عمل را کامپایل نمودن گویند.
کامپایلر چیست
یکی از ابتدایی ترین و اصلی ترین برنامه های مورد نیاز برنامه نویسان ،کامپایلرها هستند که ممکن است در نگاه اول برنامه ساده ای به نظر بیایند اما در نگاهی دقیق تر خواهیم دید که در برخی موارد دارای پیچیدگی هایی هستند که ویژگی های متفاوتی که دارند ،موجب این پیچیدگی ها شده است.در برخی از موارد این پیچیدگی ها از سخت بودن زبان سطح ماشین منتج میشوند .زیرا زبان سیستم برای انسان قابل درک نیست و به همین منظور لازم است تا برای ترجمه زبان برنامه به زبان ماشین از کامپایلر استفاده شود.
نکته مهم این است که اصولا کامپایلرها توسط شرکت هایی که سخت افزاری را تولید میکنند ،تولید و ارائه میشوند.تولید کامپایلرها از یک قائده و قانون کلی تبعیت میکند که این قانون موجب شده تا هر شرکت نتواند بطور مستقل قوانینِ مورد نظر خود را بر کامپایلر اجرا نماید .به عنوان مثال در تمامی چیپ و میکروچیپ ها استاندارد زبان اسمبلی اعمال میشود .
یک کامپایلر چگونه کار میکند
اولین کاری که در حین اجرای یک برنامه توسط کامپایلر صورت میپذیرد ،این است که برنامه از لحاظ خطاهای Syntax عاری باشد .در صورتیکه برنامه خطایی نداشت ،کدها ترجمه شده و به کدهای خروجی تبدیل میشوند.در نهایت کدها به کدهای نهایی که برای CPU قابل فهم است ترجمه شده و قابل استفاده واقع میشوند.به کدهای نهایی که توسط کامپایلر تولید میشوند ،Object Code یا Object Module گفته میشود.(البته Object Code ربطی به شی گرایی ندارد)
چهار مرحله اصلی توسط کامپایلر صورت میپذیرد
• اسکن نمودن: اسکنر ،کاراکترها را در کد سورس به صورت تک به تک میخواند و موقعیت آن ها را میسنجد که در کجا واقع هستند و آن را به حافظه میسپارد.
• Lexical Analysis یا بررسی لغوی: در مرحله دوم و پس از اسکن نمودن تک تک حروف و کاراکترها ،دنباله ای از حروف ساخته میشود که به آن ها توکن Token گفته میشود.سپس توکن ها توسط برنامه Lexical Analysis به یکدیگر میپیوندند.این نرم افزار از یک جدول که کلمات درون کد سورس را داخلش ذخیره داشته استفاده میکند تا صحیح بودن کدهای توکن را تایید نماید.
• Syntactic Analysis یا بررسی نحوی: حال پس از تولید کلمات ،بررسی نحوی صورت میپذیرد که باید بررسی نماید که کلمات به درستی در کنار یکدیگر قرار گرفته اند .بنابراین کامپایلر از لحاظ قوانین سینتکسی برنامه را مورد بررسی قرار میدهد و در صورت عدم اشکال به مرحله بعد میرود.
• Semantic Analysis: در این مرحله سلسله مراتبی از مراحل قبلی طی میشود .ابتدا با استفاده از قواعد گرامری ساختار توکن ها بررسی میشود.سپس ساختار توکن ها با استفاده از مفسر و کامپایلر دارای معنی میشود و سپس یک کد به نام Object Code تولید میشود.این کد حاوی دستوراتی است که توسط CPU قابل اجرا شدن است .همه کدها برای ماشین ترجمه شده و برنامه قابلیت اجرا شدن را پیدا میکند.
انواع کامپایلرها
به منظور دسته بندی کامپایلرها ،موارد زیادی را میتوان لحاظ کرد.من جمله نوع ورودی و خروجی ،ساختار داخلی و یا رفتارهایش در زمان اجرا.
کامپایلرهای محلی و عبوری
اکثر کامپایلرها به دو دسته نقسیم میشوند.کامپایلرهای Native و کامپایلرهای Cross.
کامپایلرهای Native :کامپایلرهایی هستند که به منظور اجرای برنامه ،کد باینری تولید میکنند .زیرا تنها قابلیت بکار گیری در یک نوع از سیستم و با یک نوع از سیستم عامل را دارند .
کامپایلرهای Cross : نوع دیگری از کامپایلرها هستند که ممکن است کدهایی را تولید نمایند که در سیستم های مختلف مورد استفاده قرار گیرند.بنابراین کامپایلرهای عبوری قابلیت استفاده در پلتفرم های مختلف را دارند.برای بهره بردن از این نوع از کامپایلر تنها کافی است یکبار سخت افزار سیستمی را به آن معرفی نمود و بارها از آن استفاده کرد.
کامپایلرهای تک فاز و چند فاز
این نوع از کامپایلرها وابسته به منابع سخت افزاری هستند.در نتیجه یک کامپایلر به برنامه های کوچکتری تبدیل میشوند که هر کدام از آن ها وظیفه آنالیز قسمتی از برنامه را بر عهده دارند.کامپایلرهای تک فازی سریع تر از کامپایلرهای چند فازی عمل میکنند.اما مشکلی که وجود دارد این است که در صورتی که اعلان از کامپایل پیشی بگیرد با مشکل روبرو خواهیم شد.بدین منظور میتوان یکبار تا انتها اعلان ها را مشخص نمود و بار دوم عمل کامپایل را انجام داد.از دیگر معابل کامپایلر تک فاز دشواری در بهینه سازی کدهای زبان سطح بالا است.
کامپایلر مبدا به مبدا : کدهای سطح بالا را دریافت نموده و خروجی به زبان سطح بالا نیز تولید میکند.
کامپایلر Stage : کدهای اسمبلی را برای استفاده ماشین تولید میکند.
کامپایلر زمان اجرا : این نوع از کامپایلر به منظور استفاده در سیستم های جاوا ، Smalltalk و زبان های میانه در محصولات .NET مورد استفاده قرار میگیرند.
کامپایلرهای کامپایلی و تفسیری
زبان های سطح بالا به دو نوع کامپایلی و تفسیری تقسیم بندی میشوند.ممکن است برخی از زبان ها تنها کامپایل شوند و برخیدیگر فقط تفسیر شوند.اما هستند زبان هایی که ممکن است علاوه بر تفسیری بودن ،کامپایل نیز بشوند و یا بالعکس.
دیکامپایل کردن
دیکامپایل دقیقا برعکس عمل کامپایل است .بدین معنی که کدهای کامپایل شده و یا آبجکت کدها به کدهای سطح بالا یا همان کدهایی که برنامه نویس تولید نموده است ،تبدیل گردد.
ما در بهترین آموزشگاه برنامه نویسی ، در کنار شما هستیم
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید ؟در گفتگو ها شرکت کنید!