كامپايلر برنامه يا مجموعهاي از برنامههاي كامپيوتري است كه متني از زبان برنامهنويسي سطح بالا (زبان مبدأ) را به زباني سطح پايين (زبان مقصد)، مثل اسمبلي يا زبان سطح ماشين، تبديل ميكند. خروجي اين برنامه ممكن است براي پردازش شدن توسط برنامه ديگري مثل پيونددهنده مناسب باشد يا فايل متني باشد كه انسان نيز بتواند آن را بخواند. به اين علت فرودبر نامگذاري شدهاست كه كد با زبان سطح بالا را به كد زبان سطح پايين تبديل ميكند بدون اين كه در رفتار كد تغييري حاصل شود. به عمل compile كردن فرودش گفته ميشود.
مهمترين علت استفاده از ترجمه كد مبدأ، ايجاد برنامه اجرايي ميباشد. برعكس برنامهاي كه زبان برنامهنويسي سطح پايين را به بالاتر تبديل ميكند را مترجموارون گوييم.
ترجمه كامل كد منبع برنامهاي از يك زبان سطح بالا به كد شيء، پيش از اجراي برنامه را همگرداني يا كامپايل ميگويند.
به بيان ساده، كامپايلر برنامهاي است كه يك برنامه نوشته شده در يك زبان خاص ساختيافته را خوانده و آن را به يك برنامه مقصد (Target Language) تبديل مينمايد. در يكي از مهمترين پروسههاي اين تبديل، كامپايلر وجود خطا را در برنامه مبدأ اعلام مينمايد.
شمايي از يك كامپايلردر اولين نگاه، تنوع كامپايلرها ممكن است به چشم نيايد. تعداد بسيار زيادي زبانهاي منبع وجود دارند كه دامنه آنها از زبانهاي شناخته شده مانند فرترن و پاسكال تا زبانهاي خاص منظوره گستردهاست. زبانهاي مقصد نيز گستردگي متناظر با اين زبانها دارند. يك زبان مقصد ممكن است زبان برنامهسازي ديگر يا زبان ماشين يا … باشد.
كامپايلرها به انواع تكگذره، چند گذره، باردهي و اجرا، بهينهساز، غلطياب و … بسته با عمل انجام شده تقسيم ميشوند. عليرغم اين تنوع اعمال اساسي كه هر كامپايلر بايستي انجام دهد، مشابه هم ميباشند.
دانستههاي ما دربارهٔ سازمانبندي و نوشتن كامپايلر نسبت به زماني كه اولين كامپايلرها در اوايل دهه ۱۹۵۰ ايجاد شدند، بسيار افزايش يافتهاست. تخمين تاريخ دقيق ساخت اولين كامپايلر عمل آساني نيست، زيرا گروههاي متفاوتي نسبت به ساخت كامپايلرها در آن زمان اقدام نمودهاند. اولين كارهايي كه در ساخت كامپايلرها انجام شد، تبديل فرمولهاي رياضي به زبان ماشين بود.
در اواسط دهه ۱۹۵۰ كامپايلرها به عنوان برنامههايي دشوار شناخته شده بودند. اولين كامپايلر فرترن، به عنوان مثال ۱۸ سال زمان براي طراحي صرف كرد. از آن زمان روشهاي سيستماتيك براي استفاده از بسياري اعمال مهم حين عمل كامپايل ابداع شدهاست. همچنين زبانهاي پيادهسازي خوب، محيطهاي برنامهنويسي و ابزارهاي نرمافزاري مناسب ايجاد شدهاند. با كمك اين پيشرفتها يك كامپايلر را ميتوان حتي به عنوان پروژه درسي در يك ترم تحصيلي دانشجويي طراحي كرد.
تاريخچهدر اواخر دهه ۱۹۵۰ ميلادي ماشينهاي داراي زبانهاي برنامهنويسي رواج يافتند و كامپايلرهاي آزمايشي ايجاد شدند. زبان فرترن به سرپرستي جان باكوس در شركت آيبيام به عنوان اولين كامپايلر كامل در سال ۱۹۵۷ توليد شد. كوبول اولين زبان كامپايلي با معماري چندگانه در سال ۱۹۶۰ توليد شد. در طي دهه ۶۰ كامپايلرهاي زيادي توليد شد اما بر روي كيفيت كامپايلرها كمتر فكر ميشد. همزمان با تكامل زبانهاي برنامهسازي و افزايش قدرت كامپيوترها، كامپايلرها هرچه بيشتر پيچيده ميشدند.
يك كامپايلر خود برنامهاي است كه توسط زبان پيادهساز توليد شدهاست. اولين كامپايلر خود محور كه ميتوانست كد خود را كامپايل كند براي زبان Lisp و توسط Hart و Levin در سال ۱۹۶۲ و در مؤسسه فناوري ماساچوست ايجاد شد. در دهه ۷۰ از زبانهاي سطح بالايي مثل پاسكال و سي جهت نوشتن كامپايلرها استفاده شد. ساخت كامپايلرهاي خود محور داراي مشكل راهاندازي است، چونكه هر كامپايلري بايد توسط كامپايلر نوشته شدهاي به زبان ديگر كامپايل شود يا براي اين مشكل دست به دامن مفسري بشود.
ساختار كامپايلرها و كامپايلر بهينهساز امروزه بخشي از برنامه درسي دانشجويان كامپيوتر است. برخي كامپايلرها به منظور آموزشي براي زبانهاي برنامهنويسي توليد ميگردد. مثلاً كامپايلر PL/۰ توسط Niklaus Wirth براي آموزش در دهه ۱۹۷۰ به كار رفت. به علت سادگي و دلايل زير هنوز براي آموزش مورد استفاده قرار ميگيرد:
توسعه گام به گام برنامهبهكارگيري پارسرهاي بازگشتياستفاده از EBNF جهت تعريف نحو زباناستفاده از P-Code در جريان توليد كد خروجي قابل حملنمايش T-diagram جهت تعارف رسميدر تاريخچه كامپايلر سه دوره ميتوان در نظر گرفت:
از ۱۹۴۵تا۱۹۶۰:توليد كد(m.h.sزبان ماشيي)
در اين دوره، زبانها به تدريج به وجود آمدند و ماشينها چندان متعارف نبودند. مسئله اين بود كه چگونه بايد كدي را براي يك ماشين توليد كرد. با توجه به اينكه برنامهنويسي به زبان اسمبلي رواج داشت، اين مسئله وخيمتر شد. استفاده از كامپايلر، برنامهنويسي خودكار ناميده شد. طرفداران زبانهاي سطح بالا ميترسيدند كه كد توليد شده نسبت به زبان اسمبلي كارايي چندان نداشته باشد. اولين كامپايلر فرترن (شريدان ۱۹۵۹) به خوبي بهينهسازي شد.
از ۱۹۶۰تا۱۹۷۵:تجزيه كردن
در دهههاي ۱۹۶۰و۱۹۷۰ زبانهاي برنامهسازي جديد به وجود آمدند و طراحان زبان معتقد بودند كه طراحي سريع كامپايلر براي زبان جديد، مهمتر از وجود كامپايلري با كد كارآمد است. بدين ترتيب، در ساخت كامپايلر به پردازشگر جلويي تأكيد شدهاست. در همين زمان، مطالعه زبانهاي رسمي، تكنيكهاي قدرتمندي را براي ساخت پردازشگر جلوي، بهخصوص توليد تجزيهكننده به وجود آورد.
از ۱۹۷۵ تاكنون:توليد كد و بهينهسازي كد
از ۱۹۷۵ تاكنون، تعداد زبانهاي جديد و انواع ماشين مختلف كاهش يافت در نتيجه نياز به كامپايلرهاي سريع و ساده يا سريع و ناقص براي زبانها يا ماشينهاي جديد، كاهش يافت. بزرگترين آشفتگي در طراحي زبان و ماشين خاتمه يافت و افراد خواستار كامپايلرهاي قابل اعتماد، كارآمد و با واسط كاربر مناسب شدند. بدين ترتيب، توجه كيفي به كد بيشتر شد زيرا با تغيير اندكي كه در ساختار ماشينها ايجاد ميشود، طول عمر كدها افزايش مييابد. در همين دوره، مدلهايي در برنامهنويسي به وجود آمدند كه برنامهنويسي تابعي، منطقي و توزيعي نمونههاي از اين مدلها هستند، خواستههاي زمان اجراي اين زبانها نسبت به زبانهاي دستور، افزايش يافت.