8 تفاوت کامپایلر و مفسر که هر برنامه نویس باید بداند - بی کد

8تفاوت کامپایلر و مفسر که هر برنامه نویسی باید بداند

نویسنده : زهرا حیدری

46

برنامه نویسی

14آبان1401|56:09

تفاوت کامپایلر و مفسر
زمان مطالعه: 13 دقیقه

تفاوت کامپایلر و مفسر

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

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

کامپایلرها و مفسرها، مترجمان زبان هستند. مترجم زبان چیست؟ این سوال ممکن است در ذهن شما ایجاد شود.

مترجم زبان نرم‌افزاری است که برنامه‌ها را از زبان مبدأ، که به شکلی قابل خواندن برای انسان است، به برنامه‌ای معادل در زبان شی ترجمه می‌کند. زبان مبدأ عموماً یک زبان برنامه نویسی سطح بالا است و زبان شیء معمولاً زبان ماشین یک رایانه واقعی است.

تعریف کامپایلر

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

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

کامپایلر به صورت فازی کار می کند. مراحل مختلف را می توان به دو بخش تقسیم کرد:

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

فازهای کامپایلر

حالا بیایید کار هر مرحله را با جزئیات درک کنیم.

کامپایل در مراحل زیر انجام می شود: تحلیلگر واژگانی، تحلیل نحو، تحلیلگر معنایی، تولیدکننده کد میانی، بهینه ساز کد، جدول نمادها و مدیریت خطا.

  • تحلیلگر واژگانی : کد را به عنوان یک جریان کاراکتر اسکن می کند، رشته را به واژگان گروه بندی می کند و دنباله ای از نشانه های مربوط به زبان برنامه نویسی را منتشر می کند.
  • Syntax Analyzer : در این مرحله، نشانه‌های تولید شده در مرحله قبل با دستور زبان برنامه‌نویسی بررسی می‌شوند که آیا عبارت‌ها از نظر نحوی صحیح هستند یا خیر. برای آن درختان را تجزیه می کند.
  • Semantic Analyzer : بررسی می کند که آیا عبارات و عبارات تولید شده در مرحله قبل با قوانین زبان برنامه نویسی مطابقت دارند یا خیر و درختان تجزیه مشروح ایجاد می کند.
  • مولد کد میانی : یک کد میانی معادل کد منبع تولید می کند. نمایش های زیادی از کد میانی وجود دارد، اما TAC (کد سه آدرس) رایج ترین مورد استفاده است.
  • Code Optimizer : مصرف زمان و مکان برنامه را بهبود می بخشد. برای انجام این کار، کد اضافی موجود در برنامه حذف می شود.
  • کد مولد : این آخرین مرحله کامپایلر است که در آن کد هدف برای یک ماشین خاص تولید می شود. عملیاتی مانند مدیریت حافظه، تخصیص رجیستر و بهینه سازی مخصوص ماشین را انجام می دهد.

به یک معنا، جدول نمادها یک ساختار داده ای است که شناسه ها را همراه با نوع مربوطه از داده هایی که ذخیره می کند مدیریت می کند. Error Handler خطاهایی را که بین فازهای مختلف یک کامپایلر رخ می دهد، شناسایی، گزارش و تصحیح می کند.

تعریف مفسر

مفسر (interpreter) جایگزینی برای پیاده سازی یک زبان برنامه نویسی است و همان کار کامپایلر را انجام می دهد. مفسر، lexing، تجزیه و بررسی نوع را شبیه به یک کامپایلر انجام می دهد. با این حال، مفسر درخت نحو را مستقیماً پردازش می کند تا به عبارات دسترسی پیدا کند و عبارات را به جای تولید کد از درخت نحو، اجرا کند.

ممکن است یک مفسر نیاز داشته باشد که درخت نحو یکسانی را بیش از یک بار پردازش کند. به همین دلیل، تفسیر نسبتاً کندتر از اجرای برنامه کامپایل شده است.

 

مقالات پیشنهادی : بهترین مفسر های پایتون

 

کامپایل و تفسیر به احتمال زیاد یک زبان برنامه نویسی را پیاده سازی می کند. هنگامی که یک کامپایلر کد را در سطح متوسط ​​تولید می کند، کد تفسیر می شود و به کد ماشین کامپایل نمی شود.

استفاده از مفسر در طول توسعه برنامه مفید است، مهمترین بخش این است که بتوانیم یک برنامه را به سرعت تغییر دهیم تا اینکه برنامه را به طور موثر اجرا کنیم.

تفاوت کامپایلر و مفسر

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

  1. کامپایلر یک برنامه را به عنوان یک کل می گیرد و آن را ترجمه می کند، اما مفسر دستور برنامه را به دستور ترجمه می کند.
  2. یک کامپایلر کد میانی یا کد هدف را تولید می کند. بر خلاف مترجم کد میانی تولید نمی کند.
  3. یک کامپایلر نسبتا سریعتر از یک مفسر است زیرا کامپایلر کل برنامه را یکباره اجرا می کند، در حالی که مفسرها هر خط کد را یک به یک کامپایل می کنند.
  4. کامپایلر از حافظه بیشتری نسبت به مفسر استفاده می کند، به دلیل تولید کد شی.
  5. کامپایلر همه خطاها را به طور همزمان نمایش می دهد و تشخیص پی در پی خطاهای نمایش مفسر کنتراست هر دستورالعمل دشوار است و تشخیص خطاها آسان تر است.
  6. هنگامی که کامپایلر در برنامه با خطا مواجه می شود، ترجمه آن را متوقف می کند و پس از حذف خطا، کل برنامه دوباره کامپایل می شود. برعکس، وقتی خطایی در مفسر رخ می دهد، مانع از ترجمه آن می شود و پس از رفع خطا، ترجمه ادامه می یابد.
  7. در یک کامپایلر، این فرآیند شامل دو مرحله است که ابتدا کد منبع را به یک برنامه هدف ترجمه کرده و سپس آن را اجرا می‌کند. در طول مفسر، این یک فرآیند یک مرحله ای است که در آن کد منبع به طور همزمان کامپایل و اجرا می شود.
  8. کامپایلر در زبان های برنامه نویسی مانند C ،C++ ،C# ،Scala و غیره استفاده می شود. دوم، مفسر در زبان هایی مانند جاوا، پی اچ پی، روبی، پایتون و غیره استفاده می شود.

نتیجه

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

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

در این مقاله سعی کردیم تفاوت کامپایلر و مفسر را به بیانی ساده و جامع به شما عزیزان ارائه کنیم.

 

 

چنانچه تفاوتی را شما یافته‌اید، که در اینجا ذکر نشده، حتما در قسمت دیدگاه آن را با ما به اشتراک بگذارید.

 

 

اشتراک گذاری این مقاله در شبکه های اجتماعی

نظرات