شرح مختصری بر کامپایلر
به طور کلی , کامپایلر برنامهای است که متن برنامهای را که به یک زبان برنامهسازی نوشته شده است ,به عنوان ورودی میپذیرد , و خروجی آن , متن برنامهای به یک زبان دیگر است , به طوری که معنای آن متن تغییر نمیکند. این فرآیند , در زبان طبیعی , ترجمه نام دارد. مترجمها جملات یک زبان طبیعی را به زبان طبیعی دیگر ترجمه میکنند. تقریبا تمام کامپایلرها ,برنامهای به یک زبان منبع را گرفته به برنامهای به زبان مقصد تبدیل میکنند . به عنوان مثال , زبان منبع میتواند c و زبان مقصد میتواند زبان ماشین برای کامپیوتر پنتیوم باشد. زبانی که خود کامپایلر با آن نوشته میشود, زبان پیاده ساز نام دارد.
علت انجام ترجمه این است که , سخت افزار عملیاتی را انجام میدهد که توسط معنای برنامه توصیف میشود . به طور کلی , سخت افزار تنها منبع واقعی انجام محاسبات است. اجرای برنامه ترجمه شده, شامل خواندن دادههای آن بار فرمت خاص , و چاپ نتایج با فرمت دیگری است . دادههای ورودی میتواند از منابع متعددی خوانده شود , مثل فایلها , صفحه کلید و پکیجهای شبکهبه همین ترتیب , خروجی نیز میتواند در فایلها , صفحه نمایش رایانه , و چاپگر قرار گیرد .
برای ترجمه برنامه,از کامپایلر استفاده میکنیم . کامپایلر برنامهای است که ورودی آن، , فایلی با فرمت متن برنامه و خرجی آن، فایلی با فرمت کد اجرایی است .
برای تهیه یک کامپایلر , کامپایلر دیگری رااجرا میکنیم که ورودی آن ,متن منبع این کامپایلر و خروجی آن , کد اجرایی برای این کامپایلر است . این فرآیند کامپایل است . اگر زبان منبع , همان زبان پیاده ساز باشد, و متن منبعی که کامپایل میشود, نسخه جدید خود کامپایلر باشد, این فرآیند خودرانی نام دارد.
کامپایل کردن یک برنامه, با تبدیل فرمت یک فایل به فرمت دیگر , مثل EBCDIC به اسکی تفاوت عمدهای ندارد . در کامپایل کردن برنامه, معنای برنامه باید حفظ شود . به دو دلیل زیر کامپایلر میتواند کار کند:
ورودی, به یک زبان برنامه سازی است و در نتیجه دارای ساختاری است که در مراجع آن زبان مشخص شده است .
معنای ورودی بر اساس این ساختار توصیف میشود ,و به آن ساختار مربوط است.
این عوامل موجب میشوند تا کامپایلر برنامه را "درک کند " و معنای آن را در یک نمایش معنایی جمع آوری کند .هریک از دو عامل فوق , در زبان مقصد نیز وجود دارد . بدین ترتیب , کامپایلر میتواند معنای جمع آوری شده را بر حسب ساختار زبان مقصد ارائه کند .
بخشی از کامپایلر که متن زبان منبع را تحلیل میکند , پردازشگر جلویی و بخشی از کامپایلر که زبان مقصد را ترکیب میکند, پردازشگر نهایی نام دارد اگر کامپایلر به خوبی طراحی شده باشد, پردازشگر نهایی, کاملا از زبان مبدا و پردازشگر جلویی از زبان منبع بی خبر است . هر یک از این دو بخش از نمایش معنایی برنامه خبر دارند .این تفکیک دقیق , دلایل فنی دارد و منجر به کامپایلرهای ساخت یافته میشود.
حالت دیگری از عملیات برای کامپایلر پیشنهاد میشود: اگر تمام دادههای ورودی مورد نیاز , فراهم باشند, کامپایلر میتواند مفهوم مشخص شده توسط معنای برنامه را بدون تبدیل به شکل دیگر , اجرا نماید . در این صورت به جای مولد کد پردازشگر نهایی, مفسر پردازشگر نهایی قرار میگیرد و این برنامه, مفسر نامیده میشود . چند دلیل برای این کار وجود دارد . یکی از دلایل مهم این است که مفسر معمولا در ماشین خاصی اجرا میگردد. به عبارت دیگر , استفاده از مفسر منجر به افزایش قابلیت حمل میگردد. دلیل دیگر این است که نوشتن مفسر, آسانتر از پردازشگر نهاییت کامپایلر است .دلیل سوم برای استفاده از مفسر به جای کامپایلر این است که , اجرای مستقیم برنامه , عیب یابی و گزارش خطا را آسانتر میکند . دلیل چهارم این است که امنیت از طریق مفسرها افزایش مییابد . این کار , در جاوا اهمیت فراوانی دارد.
تاریخچه کامپایلر
در تاریخچه کامپایلر سه دوره میتوان در نظر گرفت:
از 1945تا1960:تولید کد
در این دوره ,زبانها به تدریج به وجود آمدند و ماشینها چندان متعارف نبودند . مسئله این بود که چگونه باید کدی را برای یک ماشین تولید کرد . با توجه به اینکه برنامه نویسی به زبان اسمبلی رواج داشت , این مسئله وخیمتر شد. استفاده از کامپایلر , برنامه نویسی خودکار نامیده شد . طرفداران زبانهای سطح بالا میترسیدند که کد تولید شده نسبت به زبان اسمبلی کارایی چندان نداشته باشد. اولین کامپایلر فرترن(شریدان 1959) به خوبی بهینه سازی شد
شامل 16 صفحه word
دانلود مقاله درباره کامپایلر