کامپایلر برنامه نویسی چیست؟
ما میخواهیم در این مقاله به موضوع کامپایلر برنامه نویسی بپردازیم. کامپایلر مجموعهای از برنامه یا برنامههای کامپیوتری است که متنی از زبان برنامه نویسی سطح بالا (زبان مبدا) را به زبانی سطح پایین (زبان مقصد)، مثل اسمبلی یا زبان سطح ماشین، تبدیل میکند.
یک compiler باید بررسی کند که برنامه منبع باید از قراردادهای نحوی و معنایی زبان مبدأ پیروی کند و همچنین باید قوانین نوع زبان را بررسی کند. این به برنامه نویس اجازه می دهد تا نوع هایی را که ممکن است در شرایط خاص استفاده شود محدود کند و انواع را به مقادیر اختصاص دهد. نوع چک کننده تعیین می کند که آیا این مقادیر به درستی استفاده می شوند یا خیر.
نوع اشیاء را بررسی می کند و در صورت تخلف یک خطای نوع را گزارش می دهد و انواع نادرست تصحیح می شود. از هر compiler (کامپایلر) که استفاده می کنیم، در حالی که برنامه را کامپایل میکند، باید از قوانین نوع زبان پیروی کند. هر زبانی مجموعه ای از قوانین نوع خاص خود را برای زبان دارد. می دانیم که اطلاعات مربوط به انواع داده ها توسط کامپایلر نگهداری و محاسبه می شود.
اطلاعات مربوط به انواع داده مانند INTEGER ،FLOAT ،CHARACTER و سایر انواع داده ها توسط کامپایلر نگهداری و محاسبه می شود. کامپایلر شامل ماژول هایی است که چک کننده نوع یک ماژول از یک کامپایلر است و وظیفه آن بررسی نوع است.
compiler برنامه خاصی است که کد منبع یک زبان برنامه نویسی را به کد ماشین، بایت کد یا زبان برنامه نویسی دیگر ترجمه می کند. کد منبع معمولاً در یک زبان سطح بالا و قابل خواندن توسط انسان مانند جاوا یا ++C نوشته می شود.
یک برنامه نویس کد منبع را در یک ویرایشگر کد یا یک محیط توسعه یکپارچه (IDE) که شامل یک ویرایشگر است می نویسد و کد منبع را در یک یا چند فایل متنی ذخیره می کند. یک کامپایلر که از زبان برنامه نویسی مبدأ پشتیبانی می کند، فایل ها را می خواند، کدها را تجزیه و تحلیل می کند و آن را به قالبی مناسب برای پلتفرم هدف ترجمه می کند.
برخی از کامپایلرها می توانند کد منبع را به جای کد ماشین به بایت کد ترجمه کنند. بایت کد که برای اولین بار در زبان برنامه نویسی جاوا معرفی شد، یک زبان میانی است که می تواند بر روی هر پلتفرم سیستمی که دارای ماشین مجازی جاوا (JVM) یا مفسر بایت کد است، اجرا شود.
JVM یا مفسر بایت کد را به دستورالعمل هایی تبدیل می کند که می تواند توسط پردازنده سخت افزاری اجرا شود. یک JVM همچنین امکان کامپایل مجدد بایت کد توسط یک compiler به موقع را فراهم می کند.
یک COMPILER چگونه کار می کند؟
کامپایلرها در روش هایی که برای تجزیه و تحلیل و تبدیل کد منبع به کد خروجی استفاده می کنند، متفاوت هستند. علیرغم تفاوت آنها، آنها معمولاً مراحل زیر را انجام می دهند:
تحلیل واژگانی: کامپایلر کد منبع را به واژگان تقسیم می کند، که قطعات کد جداگانه ای هستند که الگوهای خاصی را در کد نشان می دهند. واژگان سپس برای آماده سازی نحو و تحلیل معنایی نشانه گذاری می شوند.
تحلیل نحوی کامپایلر: بر اساس قوانین زبان مبدأ، صحت نحو کد را تأیید میکند. به این فرآیند تجزیه و تحلیل نیز می گویند. در طول این مرحله، کامپایلر معمولاً درختهای نحو انتزاعی ایجاد میکند که ساختارهای منطقی عناصر کد خاص را نشان میدهند.
تحلیل معنایی کامپایلر: اعتبار منطق کد را تأیید می کند. این مرحله با تأیید صحت کد فراتر از تجزیه و تحلیل نحو است. به عنوان مثال، تجزیه و تحلیل معنایی ممکن است بررسی کند که آیا متغیرها انواع مناسبی دارند یا به درستی اعلام شده اند.
تولید کد IR :پس از عبور کد از هر سه مرحله تجزیه و تحلیل، کامپایلر یک نمایش میانی (IR) از کد منبع تولید می کند. کد IR ترجمه کد منبع را به فرمت های مختلف آسان تر می کند. با این حال، باید به طور دقیق کد منبع را از هر نظر نشان دهد، بدون اینکه هیچ عملکردی را حذف کند.
بهینه سازی: کامپایلر کد IR را در آماده سازی برای تولید کد نهایی بهینه می کند. نوع و میزان بهینه سازی به کامپایلر بستگی دارد. برخی از کامپایلرها به کاربران اجازه می دهند درجه بهینه سازی را پیکربندی کنند.
تولید کد خروجی: کد خروجی نهایی را با استفاده از کد IR بهینه شده تولید می کند.
انواع COMPILER
-
کامپایلرهای متقابل
آنها یک کد ماشین اجرایی برای یک پلتفرم تولید می کنند، اما این پلت فرمی نیست که کامپایلر روی آن اجرا می شود.
-
بوت استرپ
این کامپایلرها به زبان برنامه نویسی نوشته شده اند که باید آن را کامپایل کنند.
-
منبع به منبع/ترنسکامپایلر
این کامپایلرها کد منبع یک زبان برنامه نویسی را به کد منبع زبان برنامه نویسی دیگر تبدیل می کنند.
-
دیکامپایلر
اصولاً کامپایلر نیست. این فقط برعکس کامپایلر است. کد ماشین را به زبان سطح بالا تبدیل می کند.
ویژگی های یک کامپایلر
ویژگی ها به شرح زیر است:
سرعت کامپایل
صحت کد ماشین
معنی کد نباید تغییر کند
سرعت کد ماشین
تشخیص خطا خوب
بررسی صحیح کد با توجه به گرامر
تفاوت بین COMPILER و مترجم
یک کامپایلر برنامه نویسی کل برنامه را به یکباره بررسی می کند. پس از بررسی کل برنامه، تمام خطاها را در یک مکان نمایش می دهد. از سوی دیگر، یک مفسر برنامه را خط به خط بررسی می کند. اگر خطایی تشخیص داده شود، اجرا متوقف می شود.
کامپایلرهای تک گذر در مقابل کامپایلرهای چند گذر
طبقه بندی کامپایلر برنامه نویسی بر اساس تعداد پاس ها پیشینه خود را در محدودیت منابع سخت افزاری رایانه ها دارد. compiler شامل انجام کارهای زیادی می شود و کامپیوترهای اولیه حافظه کافی برای داشتن یک برنامه که همه این کارها را انجام می دهد نداشتند. بنابراین کامپایلرها به برنامههای کوچکتری تقسیم شدند که هر کدام از منبع (یا برخی از نمایشهای آن) عبور میکردند و برخی از تحلیلها و ترجمههای مورد نیاز را انجام میدادند.
نقطه ضعف کامپایل در یک پاس این است که انجام بسیاری از بهینه سازی های پیچیده مورد نیاز برای تولید کد با کیفیت بالا امکان پذیر نیست. شمارش دقیق تعداد پاس های یک کامپایلر بهینه سازی می تواند دشوار باشد. به عنوان مثال، مراحل مختلف بهینهسازی ممکن است یک عبارت را بارها تجزیه و تحلیل کنند، اما فقط یک عبارت دیگر را تجزیه و تحلیل کنند.
توجه داشته باشید که هم مفسرها و همcompiler(مانند هر برنامه دیگری) به زبان برنامه نویسی سطح بالا (که ممکن است با زبانی که قبول می کنند متفاوت باشد) نوشته شده و به کد ماشین ترجمه می شوند. به عنوان مثال، یک مفسر جاوا می تواند به طور کامل به زبان C یا حتی جاوا نوشته شود. برنامه منبع مفسر مستقل از ماشین است زیرا کد ماشین را تولید نمی کند. (به تفاوت بین تولید و ترجمه به کد ماشین توجه کنید.)
یک مفسر معمولاً کندتر از یک کامپایلر است؛ زیرا هر عبارت را در یک برنامه به اندازه تعداد ارزیابی های این عبارت پردازش و تفسیر می کند. به عنوان مثال، هنگامی که یک حلقه for تفسیر می شود، عبارات داخل بدنه حلقه for در هر مرحله حلقه تجزیه و تحلیل و ارزیابی می شود. برخی از زبان ها، مانند جاوا و لیسپ، هم مفسر و هم کامپایلر دارند.
برنامه های منبع جاوا (کلاس های جاوا با پسوند جاوا) توسط جاوا به فایل های کد بایت (با پسوند کلاس) ترجمه می شوند. مفسر جاوا که ماشین مجازی جاوا (JVM) نامیده می شود، ممکن است در واقع کدهای بایت را به طور مستقیم تفسیر کند یا ممکن است به صورت داخلی آنها را در کد ماشین کامپایل کند و سپس آن کد را اجرا کند (JIT: کامپایل به موقع).
کدام زبان های برنامه نویسی از کامپایلر AOT استفاده می کنند؟
بسیاری از زبان های برنامه نویسی معروف به compiler نیاز دارند از جمله:
۱-ویدیوی ویژه
۲-فرترن
۳-پاسکال
۴-زبان اسمبلی
۵-سی
۶-سریع
قبل از جاوا و سی شارپ، همه برنامه های کامپیوتری یا کامپایل یا تفسیر می شدند.
کد تفسیر شده
کدهای تفسیر شده دستورالعمل ها را در یک برنامه بدون زبان ماشین اجرا می کند. کد تفسیر شده به طور مستقیم کد منبع را تجزیه می کند، با یک ماشین مجازی جفت می شود که کد را برای ماشین در زمان اجرا ترجمه می کند، یا از کدهای از پیش compile شده بهره می برد. جاوا اسکریپت معمولاً تفسیر می شود.
کد compile شده سریعتر از کد تفسیر شده اجرا می شود؛ زیرا در زمان انجام عمل نیازی به انجام هیچ کاری ندارد. کار از قبل انجام شده است.
کدام زبان های برنامه نویسی از کامپایلر JIT استفاده می کنند؟
جاوا و سی شارپ از compiler به موقع استفاده می کنند. کامپایلرهای Just-in-time ترکیبی از مفسرهای AOT هستند. پس از نوشته شدن یک برنامه جاوا، JIT کد را به بایت کد تبدیل می کند تا به کدی که حاوی دستورالعمل هایی برای پردازنده یک پلتفرم سخت افزاری خاص است.
بایت کد مستقل از پلتفرم است و می تواند بر روی هر پلتفرمی که جاوا را پشتیبانی می کند ارسال و اجرا شود. به یک معنا، برنامه در یک فرآیند دو مرحله ای تدوین می شود.
سخن پایانی
در این مقاله سعی شد هر آنجه که درمورد این موضوع نیاز بود بدانیم را توضیح دهیم. امیدواریم که این مقاله برایتان مفید واقع شود. اگر قصد دارید با انواع زبان های سطح بالا و سطح پایین برنامه نویسی آشنا شوید فقط کافیست کلیک کنید.
سلام
یک کامپایلر برنامه نویسی کل برنامه رو بررسی میکنه کلی یا جزء به جزء؟
سلام مریم عزیز
بله یک کامپایلر برنامه نویسی کل برنامه را کلی بررسی میکند
سلام خسته نباشد
میشه کار کلی کامپایلر رو تو یه خط برام توضیح بدید؟
ممنون از سایت خوب و آموزندتون
سلام مهتاب جان
ممنون از لطفت
کامپایلر یک برنامهٔ کامپیوتری هست که کد نوشته شده به یک زبان برنامهنویسی سطح بالا رو به کد ماشین تبدیل میکنه.