کامپایلر مترجمی است که زبان مبدأ (زبان سطح بالا) را به زبان شی (زبان ماشین) تبدیل می کند. برخلاف کامپایلر، مفسر برنامه ای است که اجرای برنامه های نوشته شده به زبان مبدأ را تقلید می کند. یک تفاوت کامپایلر و مفسر این است که کامپایلر کل برنامه را یکجا تبدیل می کند. مترجم برنامه را با استفاده از یک خط در یک زمان تبدیل می کند.
بدیهی است که درک انسان و وسیله الکترونیکی مانند کامپیوتر متفاوت است. انسان ها می توانند همه چیز را از طریق زبان های طبیعی بفهمند، اما کامپیوتر قادر به درک آن نیست. کامپیوتر به یک مترجم نیاز دارد تا زبان های نوشته شده به شکل قابل خواندن توسط انسان را به فرم قابل خواندن توسط کامپیوتر تبدیل کند. کامپایلرها و مفسرها، مترجمان زبان هستند. مترجم زبان چیست؟ این سوال ممکن است در ذهن شما ایجاد شود.
مترجم زبان نرمافزاری است که برنامهها را از زبان مبدأ، که به شکلی قابل خواندن برای انسان است، به برنامهای معادل در زبان شی ترجمه میکند. زبان مبدأ عموماً یک زبان برنامه نویسی سطح بالا است و زبان شیء معمولاً زبان ماشین یک رایانه واقعی است.
تعریف کامپایلر
کامپایلر (compiler) برنامهای است که یک برنامه نوشته شده به زبان سطح بالا را می خواند و آن را به ماشین یا زبان سطح پایین تبدیل میکند و خطاهای موجود در برنامه را گزارش می دهد. کل کد منبع را به یکباره تبدیل میکند یا برای انجام این کار چندین پاس می گیرد، اما کاربر در نهایت کد کامپایل شده را آماده اجرا میکند.
کامپایلرها را می توان بر اساس عملکرد یا ساخت آنها طبقه بندی کرد. کامپایلرها را می توان به تک گذر، بارگذاری و رفتن، اشکال زدایی، چند پاس و بهینه سازی دسته بندی کرد.
کامپایلر به صورت فازی کار می کند. مراحل مختلف را می توان به دو بخش تقسیم کرد:
_مرحله تجزیه و تحلیل کامپایلر نیز به عنوان frontend شناخته می شود که در آن برنامه به بخش های اصلی تقسیم میشود و دستور زبان، معنای و نحو کد بررسی می شود و پس از آن کد میانی تولید میشود. مرحله تحلیل شامل یک تحلیلگر واژگانی، یک تحلیلگر معنایی و یک تحلیلگر نحوی است.
_مرحله سنتز کامپایلر همچنین به عنوان انتهای پشتی شناخته میشود، جایی که کد میانی بهینه شده و کد هدف تولید می شود. مرحله سنتز شامل بهینه ساز کد و تولید کننده کد است.
فازهای کامپایلر
حالا بیایید کار هر مرحله را با جزئیات درک کنیم.
کامپایل در مراحل زیر انجام می شود: تحلیلگر واژگانی، تحلیل نحو، تحلیلگر معنایی، تولیدکننده کد میانی، بهینه ساز کد، جدول نمادها و مدیریت خطا.
تحلیلگر واژگانی : کد را به عنوان یک جریان کاراکتر اسکن می کند، رشته را به واژگان گروه بندی می کند و دنبالهای از نشانه های مربوط به زبان برنامه نویسی را منتشر می کند.
Syntax Analyzer : در این مرحله، نشانههای تولید شده در مرحله قبل با دستور زبان برنامه نویسی بررسی میشوند که آیا عبارتها از نظر نحوی صحیح هستند یا خیر. برای آن درختان را تجزیه می کند.
Semantic Analyzer : بررسی میکند که آیا عبارات و عبارات تولید شده در مرحله قبل با قوانین زبان برنامه نویسی مطابقت دارند یا خیر و درختان تجزیه مشروح ایجاد میکند.
مولد کد میانی : یک کد میانی معادل کد منبع تولید می کند. نمایش های زیادی از کد میانی وجود دارد، اما TAC (کد سه آدرس) رایج ترین مورد استفاده است.
Code Optimizer : مصرف زمان و مکان برنامه را بهبود میبخشد. برای انجام این کار، کد اضافی موجود در برنامه حذف میشود.
کد مولد : این آخرین مرحله کامپایلر است که در آن کد هدف برای یک ماشین خاص تولید میشود. عملیاتی مانند مدیریت حافظه، تخصیص رجیستر و بهینه سازی مخصوص ماشین را انجام می دهد.
به یک معنا، جدول نمادها یک ساختار داده ای است که شناسه ها را همراه با نوع مربوطه از داده هایی که ذخیره میکند، مدیریت میکند. Error Handler خطاهایی را که بین فازهای مختلف یک کامپایلر رخ می دهد، شناسایی، گزارش و تصحیح میکند.
تعریف مفسر
مفسر (interpreter) جایگزینی برای پیاده سازی یک زبان برنامه نویسی است و همان کار کامپایلر را انجام میدهد. مفسر، lexing، تجزیه و بررسی نوع را شبیه به یک کامپایلر انجام میدهد. با این حال، مفسر درخت نحو را مستقیماً پردازش میکند تا به عبارات دسترسی پیدا کند و عبارات را به جای تولید کد از درخت نحو، اجرا کند. ممکن است یک مفسر نیاز داشته باشد که درخت نحو یکسانی را بیش از یک بار پردازش کند. به همین دلیل، تفسیر نسبتاً کندتر از اجرای برنامه کامپایل شده است.
کامپایل و تفسیر به احتمال زیاد یک زبان برنامه نویسی را پیاده سازی می کند. هنگامی که یک کامپایلر کد را در سطح متوسط تولید می کند، کد تفسیر می شود و به کد ماشین کامپایل نمی شود. استفاده از مفسر در طول توسعه برنامه مفید است، مهمترین بخش این است که بتوانیم یک برنامه را به سرعت تغییر دهیم تا اینکه برنامه را به طور موثر اجرا کنیم.
تفاوت کامپایلر و مفسر
بیایید به تفاوت کامپایلر و مفسر نگاه کنیم.
- کامپایلر یک برنامه را به عنوان یک کل می گیرد و آن را ترجمه می کند، اما مفسر دستور برنامه را به دستور ترجمه میکند.
- یک کامپایلر کد میانی یا کد هدف را تولید می کند. بر خلاف مترجم کد میانی تولید نمی کند.
- یک کامپایلر نسبتا سریعتر از یک مفسر است زیرا کامپایلر کل برنامه را یکباره اجرا می کند، در حالی که مفسرها هر خط کد را یک به یک کامپایل میکنند.
- کامپایلر از حافظه بیشتری نسبت به مفسر استفاده می کند، به دلیل تولید کد شی.
- کامپایلر همه خطاها را به طور همزمان نمایش می دهد و تشخیص پی در پی خطاهای نمایش مفسر کنتراست هر دستورالعمل دشوار است و تشخیص خطاها آسان تر است.
- هنگامی که کامپایلر در برنامه با خطا مواجه میشود، ترجمه آن را متوقف میکند و پس از حذف خطا، کل برنامه دوباره کامپایل میشود. برعکس، وقتی خطایی در مفسر رخ میدهد، مانع از ترجمه آن می شود و پس از رفع خطا، ترجمه ادامه می یابد.
- در یک کامپایلر، این فرآیند شامل دو مرحله است که ابتدا کد منبع را به یک برنامه هدف ترجمه کرده و سپس آن را اجرا میکند. در طول مفسر، این یک فرآیند یک مرحله ای است که در آن کد منبع به طور همزمان کامپایل و اجرا میشود.
- کامپایلر در زبان های برنامه نویسی مانند C ،C++ ،C# ،Scala و غیره استفاده میشود. دوم، مفسر در زبان هایی مانند جاوا، پی اچ پی، روبی، پایتون و غیره استفاده میشود.
سخن پایانی
هم کامپایلرها و هم مفسرها برای انجام یک کار در نظر گرفته شده اند، اما در نحوه عملکرد آنها متفاوت است. کامپایلر از کد منبع به صورت تجمیع شده استفاده می کند، در حالی که مفسر بخش های تشکیل دهنده کد منبع را میگیرد، یعنی عبارت به عبارت.
اگرچه هم کامپایلر و هم مفسر دارای مزایا و معایب خاصی هستند، زبان های تفسیر شده به عنوان کراس پلتفرم در نظر گرفته میشوند، به این معنی که کد قابل حمل است. همچنین نیازی به کامپایل هیچ عبارتی که قبلاً بر خلاف کامپایلر صرفه جویی در زمان بود، ندارد. زبان های کامپایل شده از نظر فرآیند کامپایل سریعتر هستند.
در این مقاله سعی کردیم تفاوت کامپایلر و مفسر را به بیانی ساده و جامع به شما عزیزان ارائه کنیم. چنانچه تفاوتی را شما یافتهاید، که در اینجا ذکر نشده، حتما در قسمت دیدگاه آن را با ما به اشتراک بگذارید.
سوالات متداول:
کامپایلر و مفسر چیست؟
کامپایلر و مفسر دو اصطلاح برنامه نویسی است که در وظیفه یکسان هستند. هر دو برای تبدیل کدهای نوشته شده به زبان ماشین به کار برده میشوند.
کامپایلر و مفسر چه تفاوتی دارند؟
کامپایلر کدها را پیش از اجرای برنامه تبدیل میکند ولی مفسر تبدیل کدها به زبان ماشین را همزمان با اجرای برنامه انجام میدهد.
سلام و درود
عاااللللی تفاوت کامپایلر و مفسر رو خیلی خوووب بیان کردین ممنون👌