کامپایلرها
کامپایلر به یک برنامه کامپیوتری اطلاق می شود که برای ترجمه یک کد کامپیوتری که به یک زبان برنامه نویسی نوشته شده است (به عنوان زبان مبدأ) به زبان برنامه نویسی دیگر (که به آن زبان مقصد گفته می شود) استفاده می شود. اصطلاح کامپایلر در درجه اول برای برنامه هایی به کار می رود که کدهای منبع را از یک زبان برنامه نویسی سطح بالا به یک زبان برنامه نویسی سطح پایین تر ترجمه می کنند. به عنوان مثال، کد ماشین، کد شی یا زبان اسمبلی برای ایجاد یک برنامه اجرایی.
لازم به ذکر است که انواع مختلفی از کامپایلرها وجود دارد. در صورتی که برنامه ای که کامپایل می شود می تواند روی رایانه ای اجرا شود که سیستم عامل یا CPU آن با برنامه ای که کامپایلر اجرا می کند متفاوت است، کامپایلر به عنوان کامپایلر متقابل نامیده می شود. از طرف دیگر یک کامپایلر بوت استرپ به زبانی که قصد کامپایل آن را دارد نوشته شده است. Decompiler برنامه ای است که برای ترجمه زبان سطح پایین به زبان سطح بالاتر استفاده می شود. برنامه ای که برای ترجمه بین زبان های سطح بالا استفاده می شود، کامپایلر منبع به منبع نامیده می شود. می توان از آن به عنوان ترانسپایلر نیز یاد کرد. برنامه ای که وظیفه ترجمه فرم عبارات را بدون تغییر زبان دارد به عنوان بازنویس زبان شناخته می شود. اصطلاح کامپایلر-کامپایلر به ابزارهایی اطلاق میشود که برای ایجاد تجزیهکنندههای مسئول انجام تحلیل نحوی استفاده میشوند.
برخی از عملیاتی که توسط یک کامپایلر انجام می شود عبارتند از: پیش پردازش، تجزیه، (ترجمه مستقیم نحو) تحلیل معنایی، تحلیل واژگانی، تولید کد، بهینه سازی کد و تبدیل برنامه های ورودی به یک نمایش میانی. کامپایلرها مسئول اجرای این عملیات در فازهای مختلف هستند که باعث ارتقای تبدیل صحیح و طراحی کارآمد ورودی منبع به خروجی هدف می شود. ردیابی خطاهای برنامه که به دلیل رفتار نادرست کامپایلر ایجاد می شود، می تواند بسیار دشوار باشد. بنابراین، پیادهکنندههای کامپایلر تلاشهای زیادی را برای اطمینان از صحت کامپایلر انجام میدهند.
توجه به این نکته مهم است که کامپایلرها تنها مترجم هایی نیستند که برای تغییر برنامه های منبع استفاده می شوند. یک نرم افزار کامپیوتری که وظیفه تبدیل و سپس اجرای عملیات مشخص شده را بر عهده دارد، مفسر نامیده می شود. فرآیند ترجمه بر طراحی زبان های رایانه ای تأثیر می گذارد که منجر به ترجیح تفسیر یا تألیف می شود. در عمل، پیاده سازی مترجم برای کامپایلرها و زبان های کامپایل شده می تواند برای زبان های تفسیر شده پیاده سازی شود.
توجه داشته باشید که هنگام استفاده از یک کامپایلر، یک فرآیند دو مرحله ای برای اجرای یک برنامه استفاده می شود.
زنجیره ابزار گردآوری
برای برنامه هایی که بزرگ هستند، کامپایلر بخشی از یک زنجیره ابزار چند مرحله ای است،
(پیش پردازنده)- (کامپایلر)- (مونتاژکننده)- (لینکر)- (لودر).
ساختار یک کامپایلر
کامپایلرهای مدرن از دو بخش اصلی تشکیل شده اند. هر یک از این بخش ها اغلب به صورت فرعی تقسیم می شوند. این دو قسمت اصلی قسمت جلویی و انتهایی پشتی هستند.
قسمت جلویی مسئول تجزیه و تحلیل برنامه منبع است، یک نمایش میانی از برنامه ایجاد می کند و اجزای تشکیل دهنده آن را تعیین می کند. به طور کلی، قسمت جلویی مستقل از زبان مقصد است.
از طرف دیگر، قسمت پشتی مسئول سنتز برنامه هدف از نمایش میانی است که توسط قسمت جلویی تولید می شود. به طور کلی گفته می شود که انتهای پشتی مستقل از زبان مبدأ است.