کامپایلر (Compiler) چیست؟

کامپایلر چیست و چگونه کار می کند؟ مسئولیت کامپایلر چیست و چه نقشی در برنامه نویسی دارد؟

اگر شما هم به دنبال پاسخ این سوالات هستید، تا انتهای مقاله همراه ما باشید.

کامپایلر

کامپایلر چیست؟

کامپایلر نقشی مترجمی در برنامه نویسی را دارد. سوال اصلی این جاست که چه چیزی را ترجمه می کند و خروجی آن ترجمه چیست؟ اصلا چه احتیاجی به ترجمه است؟

اگر مقاله مرتبط با زبان های برنامه نویسی سایت ابرمتن را مطالعه کردید، این موضوع را می دانید که زبان ها دارای دسته بندی بسیار مهمی هستند.

زبان های سطح بالا و سطح پایین این دسته بندی را تشکیل می دهند. وظیفه کامپایلر در برنامه نویسی نیز ترجمه زبان سطح بالا ( نزدیک به زبان انسان) به یک برنامه با زبان سطح پایین (قابل درک برای ماشین) است.

به بیان دیگر وقتی شما سلسله دستوراتی را در زبان برنامه نویسی مدنظر خود مانند C، می نویسید و آن را کامپایل و run می کنید، کامپایلر کدهای شما را می خواند و همه را به زبان مقصد (ماشین و یا اسمبلی) تغییر می دهد.

ورودی کامپایلر را معمولا با نام Source code می شناسیم و خروجی آن را نیز با نام Object code می شناسیم.

روش کار کامپایلر:

بعضی از کامپایلر ها زبان مبدا (زبان سطح بالا) را به صورت مستقیم به کدهای باینری یا دودویی تبدیل می کنند و بعضی دیگر این کار را به صورت غیر مستقیم انجام می دهند. یعنی در مرحله میانی کامپایل(intermediate Step)، ابتدا آن را به زبان اسمبلی ترجمه می کنند و سپس اط اسمبلی به دودویی تبدیل می کنند.

به این فرایند تبدیل کد منبع به کدهای باینری یا دودویی کامپایل یا compilation می گوییم.

compilationفرایند کامپایل قواعد نحوی یک زبان برنامه‌نویسی را به یک زبان برنامه‌نویسی دیگر ترجمه می کند. باید این نکته را یادآور بشویم که کامپایلر تنها یک برنامه است و توانایی برطرف کردن ایراد کدهای نوشته شده توسط انسان را ندارد. به این ترتیب اگر کد اولیه برنامه اشکال و ایرادی داشته باشد، تا زمانی که این ایرادها بر طرف نشده باشند، کامپایلر نمی‌تواند آن را کامپایل کند.

می توانیم بگوییم که پیچیدگی کار کامپایلر به مقدار زیادی به پیچیدگی نحو زبان مبدا بستگی دارد. به عنوان مثال کار کامپایلر زبان c، راحت تر از کامپایلر زبان سی پلاس پلاس و یا سی شارپ است.

مراحل کار کامپایلر:

همه کامپایلر ها برای کار معمولا مراحل زیر را طی می کنند:

اسکن:

در این مرحله حروف و خطوط به صورت خط به خط اسکن می شوند. کامپایلر صحت خط ها و کدها و حروف آن را از نظر نحوی چک می کند و اگر مشکلی وجود نداشته باشد به مرحله بعدی می رود. (برای درک بهتر نحو و syntax به مقاله خطاهای syntax و semantic مراجعه کنید.)

تحلیل حروف:

در این مرحله کامپایلر پس از این که حروف را اسکن کرد، دسته بندی توکن های برنامه را مشخص می کند. به عنوان مثال int a= 3 این خط کد شامل 3 توکن است. یک توکن برای نوع اینتیجر یا صحیح، یک توکن برای انتساب یا = و توکن دیگر برای مقدار یا value. در این بخش نقش هر توکن مشخص می شود.

تحلیل نحوی :

بعد از این که کامپایلر حروف و توکن ها را تحلیل کرد، وارد مرحله تحلیلگر نحوی می شود. در این مرحله اعتبار کلمات و عبارات بر اساس دستورات گرامری سنجیده می شود. در واقع در این بخش این موضوع چک می شود که آیا توکن هایی که کنار یکدیگر قرار گرفتند از لحاظ نحوی و ترتیب درست هستند یا خیر.

تحلیل معنایی :

در این نوع تحلیل چند فرایند اتفاق می‌افتد. فرایند اول این است که همه ساختار توکن‌های از نو بررسی می‌شوند، و ترتیب و محل قرارگیری آنها در دستور زبان یا گرامر یک زبان برنامه‌نویسی مشخص بررسی می‌شود. سپس معنای ساختار توکن توسط پارسر (parser) و تحلیل گر برنامه تحلیل می‌شود تا در نهایت کدی اجرایی به دست بیاید که به آن کد ابژه گفته می‌شود.

کد ابژه شامل دستوراتی می‌شود که فعالیت پردازنده را در قبال یک توکن مشخص در برنامه مشخص می‌کند. در نهایت، تمام کد مبدا در پارسر بررسی و تحلیل می‌شود تا امکان بهینه‌سازی‌های احتمالی بررسی شود. در صورتی که امکان بهینه‌سازی وجود داشته باشد، توکن‌های اصلاح شده در کد ابژه قرار می‌گیرند تا کد ابژه نهایی به دست بیاید؛ که در نهایت در یک فایل ذخیره می‌شود.

2 دیدگاه. پیغام بگذارید

برای نوشتن دیدگاه باید وارد بشوید.
keyboard_arrow_up