کامپایلر نرم افزاری است که کدهای نوشته شده توسط برنامه نویس را برای CPU ترجمه میکند. تا CPU بتواند آنها را بفهمد و اجرا کند. اگر کامپایلر ها نبودند ما برنامه نویس ها مجبور بودیم کد خود را با 0 و 1 بنویسیم تا پردازنده آنها را متوجه شود. چقدر این کار اصلاً کار ساده ای نبوده و حتی گاهی غیر ممکن است.
به عبارت دیگر ما برنامه نویس ها کدهای خود را به زبانی می نویسیم که به زبان خودمان نزدیک تر است و پردازنده فقط زبان صفر و یک را می شناسد. پس در این بین باید مترجمی وجود داشته باشد که زبان ما را به زبان ماشین (همان صفر و یک) تبدیل کند. این کار وظیفه کامپایلر ها و یا مفسر ها است. در ادامه درباره تفاوت کامپایلر ها و مفسر ها نیز توضیح خواهیم داد.
نحوه کار کامپایر ها چگونه است؟
به طور کلی کامپایلر ها ابتدا برنامه را از مبدأ می خوانند، سپس آن را به یک شکل میانی(بین زبان آدم و زمان ماشین) تبدیل کرده و سرانجام آن را به زبان دیگری مثل زبان اسمبلی تبدیل می کنند. زبان اسمبلی نیز آن را آن را به همان سیستم صفر و یک که قابل فهم توسط کامپیوتر است تبدیل می کند. در نتیجه تبدیل زبان برنامه نویسی اولیه به شکل قابل فهم و اجرا توسط ماشین وظیفه ی اصلی کامپایلر است. البته نحوه انجام این کار به قواعد زبان مبدأ نیز بستگی دارد.
مراحل انجام کار کامپایلر
- اسکن کردن کد
در مرحله اول تمام حروف و کاراکتر های کد مبدأ به ترتیب بررسی می شوند و اینکه هر حرف در کدام خط قرار گرفته است بررسی می شود. اشکالات مربوط به کاراکتر ها در این بخش بررسی می شوند و در صورتی که مشکلی در استفاده از حروف یا محل قرار گیری آنها رخ داده باشد بررسی می شود. - بررسی کلمه ای
پس از عبور از مرحله ی قبل، کد به صورت کلمه کلمه بررسی خواهد شد. و جریانی از توکن ها به ازای هر مفهوم یا کلمه ایجاد می شود. - بررسی نحوی
خروجی بررسی بالا، در صورتی که خطایی در مرحله ی قبل یافت نشود، وارد این مرحله می شود. در این مرحله قواعد گرامری کد بررسی می شود، اینکه آیا کلماتی که در مرحله ی قبل تشخیص داده شدند، در ترتیب مناسبی قرار گرفته اند یا نه. - بررسی معنایی
در مرحله ی آخر، ساختار کد از لحاظ معنایی بررسی می شود. مثلاً جمله ی “امروز ایران است” را در نظر بگیرید. حروف و کلمات صحیح هستند و جای قرار گیری کلمات نیز از لحاظ فاعل و مفعول و فعل صحیح است اما این جمله از لحاظ معنایی صحیح نیست. به همین شکل در این مرحله، کامپایلر کد را از لحاظ معنایی بررسی و اشکال یابی می کند.
انواع مختلف کامپایلر ها از نظر فرایند ترجمه کد
کامپایلرها به سه دسته اصلی زیر تقسیم میشوند:
- کامپایلر تک مرحله ای
- کامپایلر دو مرحله ای
- کامپایلر چند مرحله ای
کامپایلر تک مرحله ای
در کامپایلرهای تک عبوره، کدی که نوشته ایم مستقیماً به کدهای دودویی ماشین تبدیل میشود. این نوع کامپایلر ها فقط یک بار برنامه را پیمایش و تبدیل می کند. تک تک حروف، کلمات و خطوط کد یکبار اسکن شده و از نظر نحوی و معانی بررسی می شوند و سپس تبدیل به کد های 0 و 1 می شوند.
کامپایلر دو مرحله ای
این نوع کامپایلر ها، کد را در دو مرحله کامپایل می کنند. یعنی ابتدا کد اصلی را به یک کد میانی تبدیل کرده و سپس آن کد میانی را به کد ماشین تبدیل می کنند. در اولین مرحله از کامپایل، آن چهار مرحله ای که در قسمت قبل گفته شد انجام می شود و حروف و کلمات کد از لحاظ لغوی و معنایی بررسی می شوند. مرحله ی اول این نوع کامپایلر ها مستقل از پلتفرم است زیرا خروجی این مرحله از کامپایل، با هر سیستم و پلتفرمی (موبایل، وب، دسکتاپ) سازگار است. مرحله ی میانی یک زبان سطح پایین مانند اسمبلی است. در مرحله ی دوم این زبان دوباره کامپایل شده و به زبان ماشین تبدیل می شود. این مرحله به پلتفرم وابسته است. چرا که در این مرحله قرار است کد میانی به کد قابل فهم برای آن پلتفرم خاص تبدیل شود.
کامپایلر چند مرحله ای
این نوع کامپایلر یک کد بزرگ را به چند کد کوچکتر تقسیم کرده و هر کدام را جداگانه بررسی می کند. در این مرحله چندین کد میانی تولید می شود که خروجی هر مرحله به عنوان ورودی مرحله ی جدید استفاده می شود.
تفاوت کامپایلر با مفسر
مفسر نیز مانند کامپایلر، کد را به زبان قابل فهم توسط ماشین تبدیل می کند. اما در مواردی مانند عملکرد و سرعت و … با هم تفاوت دارند که در این قسمت با هم بررسی می کنیم:
نحوه ی تبدیل کد به زبان ماشین
نحوه ی عملکرد کامپایلر ها با مفسر ها متفاوت است. کامپایلر ابتدا یکبار به صورت کامل کد را ترجمه می کند سپس برنامه ی ترجمه شده روی پلتفرم اجرا می شود. اما در زبان های مفسری کد به صورت خط به خط ترجمه شده و اجرا می شود. یعنی هر باری که بخواهیم برنامه را اجرا کنیم، تمام خط ها دوباره از اول ترجمه می شوند.
سرعت ترجمه و میزان مصرف حافظه سیستم
از آنجایی که زبان های مفسری کد را خط به خط ترجمه و اجرا می کنند، هر بار در هنگام اجرا منابع بیشتری از CPU و RAM را نسبت به کامپایلر ها مصرف می کنند. که در نتیجه ی آن سرعت اجرای زبان های مفسری نیز خیلی از زبان های کامپایلری کمتر است.
سرعت و نحوه خطایابی
در زبان های مفسری از آنجایی که کد خط به خط ترجمه می شود، کد اجرا خواهد شد تا جایی که به خطایی برخورد کند. سپس همانجا متوقف شده و متن خطا را نشان می دهد. به همین دلیل سرعت و نحوه ی خطایابی در زبان های مفسری آسان تر است. در مقابل آن در زبان های کامپایلری کل کد هر بار باید کامل ترجمه شود تا خطاهای آن مشخص شود و در صورتی که خطایی در کد باشد هیچ بخش دیگری از آن اجرا نمی شود. که برای کد های بزرگ هر بار خطایابی زمان زیادی را مصرف خواهد کرد.
چه زبان هایی از کامپایلر و چه زبان هایی از مفسر استفاده می کنند؟
زبان های Pascal، C#، C++، جاوا و … از معروف ترین زبان های کامپایلری هستند و زبان های BASIC ،MATLAB ،Perl ،PHP ،Python ،Ruby و جاوا اسکریپت از معروف ترین زبان های مفسری به شمار می روند.
معرفی کامپایلر آنلاین بکندباز
برای هر زبان کامپایلری یک نرم افزار مخصوص وجود دارد که باید روی سیستم خود نصب کنید تا بتوانید کد های خود را کامپایل کنید. ما در سایت بکندباز نرم افزاری تحت وب آماده کرده ایم که به کمک آن می توانید کد های خود را به صورت آنلاین با هر زبانی کامپایل کرده و نتیجه ی آن را تست کنید. اجرای آنلاین کد قابلیتی است که همیشه می تواند به کمک شما بیاید، مخصوصاً زمان هایی که از کامپیوتر های عمومی استفاده می کنید و امکان نصب کامپایلر را روی آن کامپیوتر ندارید. برای استفاده از کامپایلر آنلاین ما از لینک زیر استفاده کنید.
دیدگاهها