کامپایلر یک برنامه کامپیوتری است که کد منبع نوشتهشده در یکزبان برنامهنویسی سطح بالا را به کد ماشین تبدیل میکند که میتواند مستقیماً توسط رایانه اجرا شود. فرآیند کامپایل شامل چندین مرحله است و خود کامپایلر معمولاً از چندین مؤلفه مختلف تشکیلشده است، ازجمله:
تحلیلگر واژگانی (Scanner): این مؤلفه کد منبع را اسکن میکند و آن را به نشانههای فردی مانند کلمات کلیدی، شناسهها، ثابتها و عملگرها تجزیه میکند.
تحلیلگر نحو: (Parser) این مؤلفه نحو کد منبع را بررسی میکند و از مطابقت آن با قوانین زبان برنامهنویسی اطمینان حاصل میکند. یک درخت تجزیه ایجاد میکند که ساختار کد را نشان میدهد.
تحلیلگر معنایی: این مؤلفه معنای کد را بررسی میکند و از منطقی بودن آن اطمینان مییابد. مواردی مانند انواع متغیرها، فراخوانی عملکردها و تکالیف را بررسی میکند.
تولیدکننده کد میانی: این مؤلفه یک نمایش میانی از کد ایجاد میکند که میتواند برای عملکرد بهینه شود.
بهینهساز کد (Code Optimizer): این جزء کد میانی را برای بهبود عملکرد و کاهش حجم کدهای کامپایل شده بهینه میکند.
مولد کد (Code Generator): این مؤلفه کد ماشین واقعی را تولید میکند که میتواند توسط رایانه اجرا شود.
دو نوع اصلی کامپایلر وجود دارد:
کامپایلرهای بومی (Native compilers): این کامپایلرها کد ماشینی را تولید میکنند که مختص یک معماری کامپیوتر یا سیستمعامل خاص است. این بدان معناست که کد کامپایل شده فقط میتواند روی همان نوع کامپیوتری اجرا شود که کامپایلر روی آن اجراشده است.
کامپایلرهای متقابل (Cross compilers): این کامپایلرها کد ماشینی را تولید میکنند که برای اجرا بر روی نوع دیگری از کامپیوتر یا سیستمعامل طراحیشده است. این به توسعهدهندگان این امکان را میدهد که روی یک پلتفرم کد بنویسند و آن را برای پلتفرم دیگری کامپایل کنند.
فرآیند کامپایل معمولاً شامل مراحل زیر است:
پیشپردازش: کد منبع برای گسترش ماکروها، گنجاندن فایلها و حذف نظرات از پیشپردازش شده است.
کامپایل: کد منبع در یک نمایش متوسط کامپایل میشود.
بهینهسازی: کد میانی برای عملکرد بهینهشده است.
تولید کد: کد بهینهشده به کد ماشین ترجمه میشود.
پیوند (Linking): کد ماشین با کتابخانهها و سایر وابستگیهای خارجی برای ایجاد یک برنامه اجرایی نهایی پیوند داده میشود.
بهطورکلی، کامپایلر یک برنامه پیچیده است که وظیفه تبدیل کدهای سطح بالا به کد ماشین اجرایی را بر عهده دارد. اجزای مختلف یک کامپایلر باهم کار میکنند تا اطمینان حاصل شود که کد کامپایل شده صحیح، کارآمد و برای عملکرد بهینهشده است.