کامپایلر برنامهای رایانهای میباشد که بهمنظور انتقال زبانهای برنامهنویسی سطح بالا به زبانهای سطح پایین مانند زبان اسمبلی و زبان ماشین، جهت اجرایی شدن، طراحی وارائهشدهاند، خروجی این نرمافزار برای ماشینهایی مانند رایانه قابل اجرا هست.
کامپایلرها به عنوان ابتدائی تر ین و اصلیترین برنامه، برای برنامه نویسان به شمار میآیند، در اولین نگاه ممکن هست کامپایلر ها برنامههای ساده و بدون تنوع باشند اما با نگاه دقیقتر مشخص میشود که آنها در برخی موارد دارای پیچیدگیهایی هستند که به علت ویژگیهای متفاوت آنها پدید آمده است. برخی از این پیچیدگیها به علت دشوار بودن برخی زبانهای سطح ماشین میباشد؛ به عبارتی زبانهای سطح ماشین مانند زبانهای برنامهنویسی سطح بالا به سادگی قابلفهم برای انسان نیستند و برای همین منظور است که انسان به زبانهای سطح بالا برنامه را مینویسد و با استفاده از کامپایلرها آن را به سطح پایین و سطح ماشین تبدیل میکند.
کامپایلرها معمولاً توسط شرکتهای متفاوتی تولید میشود و همواره شرکتهایی که سخت افزار ماشین را تولید میکنند، کامپایلر مورد نیاز آن ماشین را نیز تولید و ارائه میکنند، البته کامپایلر ها دارای استاندارهای جهانی هستند که این امر مانع از آن میشود که هر شرکت خود به صورت دلخواه استانداردهایی مشخص کند. برای مثال استاندارد زبان اسمبلی یک استاندارد جهانی میباشد و شرکتهای تولید کننده چیپ و میکروچیپ مانند Intel، Motorola و غیره از این زبان استفاده میکنند؛ به همین منظور کامپایلرهایی برای تبدیل به این زبان توسط این شرکتهای ارائه میشود.
کامپایلرها دارای انواع متنوعی هستند که هر کدام به منظور استفاده برای کاربرهای خاصی تهیه شده است علیرغم این تنوع اعمال اساسی که هر کامپایلر بایستی انجام دهد، مشابه هم میباشند. مهمترین علت استفاده از کامپایلر ترجمه برنامه منبع به برنامه اجرائی میباشد البته در شرایطی برخی کامپایلرها این کار را برعکس نیز انجام میدهند به طوری که زبان برنامه نویسی سطح پایین را به زبان برنامه نویسی سطح بالا ترجمه میکند.
کامپایلرهای محلی و عبوری:
اکثر کامپایلرها به دو دسته محلی و عبوری تقسیم میشوند. کامپایلرهایی که به منظور اجرای برنامه های باینری هستند، کامپایلرهایی با کد محلی گوییم چرا که تنها در کامپیوترهای یک نوع با سیستمعاملهای یکسان قابل به کارگیری است. از طرف دیگر ممکن است کامپایلرها کدهای باینری را تولید کنند که در سیستمهای مختلف قابل اجرا باشد. به این دسته از کامپایلرها که وابستگی به سختافزار ندارند، کامپایلرهای عبوری گوییم.
کامپایلرهای تک فاز و چند فاز:
کامپایلرها از نظر فاز به تک فاز و چند فاز تقسیم بندی میشوند. فاز بندی کامپایلرها در عمل به محدودیتهای منابع سختافزاری وابستهاست. در نتیجه کامپایلرها به مجموعه برنامههای کوچکتر تقسیم میشوند هر یک بخشی از عمل ترجمه یا آنالیز را برعهده میگیرند.
کامپایلرهای تفسیری و کامپایلی:
زبانهای سطح بالا را به دو دسته تفسیری و کامپایلی تقسیم میکنند. کامپایلرها و مفسرها روی زبانها عمل میکنند نه زبانها روی آنها! مثلاً این تصور وجود دارد که الزاماً BASIC تفسیر میشود و C کامپایل. اما ممکن است نمونههایی از BASIC یا C ارائه شود که به ترتیب کامپایلری و تفسیری باشد. البته استثناهایی نیز وجود دارد.