Skip to content

Latest commit

 

History

History
41 lines (26 loc) · 12.3 KB

compiler.md

File metadata and controls

41 lines (26 loc) · 12.3 KB

کامپایلر

زمانیکه شما یک برنامه را با یک زبان برنامه‌نویسی سطح بالا می‌نویسید‫ کامپیوتری که فقط صفر و یک را متوجه می‌شود درکی از برنامه‌ای که شما نوشته‌اید و کدهای درون آن نخواهد داشت. بنابراین شما به چیزی نیاز دارید که این برنامه سطح بالا را به زبانی تبدیل کند که برای کامپیوتر قابل فهم باشد. اینجا درست زمانی است که Compiler و Interpreter ها به کمک ما می‌آیند و هر دوی آنها یک کار را برای ما انجام می‌دهند ، آنها زبان سطح بالا را به زبانی که کامپیوتر متوجه شود تبدیل می‌کنند. خروجی این برنامه ممکن است برای پردازش شدن توسط برنامه دیگری مثل پیونددهنده مناسب باشد یا فایل متنی باشد که انسان نیز بتواند آن را بخواند. به بیان ساده، کامپایلر برنامه‌ای است که یک برنامه نوشته شده در یک زبان خاص ساخت‌ یافته(دارای ساختار) را خوانده و آن را به یک برنامه مقصد (Target Language) تبدیل می‌نماید. در یکی از مهم‌ترین پروسه‌های این تبدیل، کامپایلر وجود خطا را در برنامه ‬مبدأ اعلام می‌نماید. کامپایلر را می‌توان بر اساس روش کامپایل کردن به طور عمده به دو فاز تقسیم کرد: فاز تحلیل و فاز سنتز.

فاز تحلیل

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

فاز سنتز

در این فاز که Back End نیز نامیده می‌شود‫، برنامه هدف با کمک بازنمایی کد میانجی و ‬ جدول نمادها ایجاد می‌شود.

یک کامپایلر ممکن است فازها و گذرهای‫ مختلفی داشته باشد:‬

‫گذر (pass): منظور از گذر، پیمایش کل ‫برنامه از سوی یک کامپایلر است‬.‬

‫فاز (phase): منظور از فاز در کامپایلر یک‫ مرحله قابل تمیز است که در آن ورودی از فاز قبلی تحویل و مورد پردازش قرار می‌گیرد و خروجی به عنوان ورودی فاز بعدی تحویل داده می‌شود. هر گذر می‌تواند شامل یک یا چند فاز باشد‬.

کامپایلرها دارای انواع متنوعی هستند که هر‫ کدام به منظور استفاده برای کاربردهای خاصی تهیه شده است. علی‌رغم این تنوع اعمال اساسی که هر کامپایلر بایستی انجام دهد، مشابه هم می‌باشند. مهم‌ترین علت استفاده از کامپایلر ترجمه برنامه منبع به برنامه اجرائی می‌باشد البته در شرایطی برخی کامپایلرها این کار را برعکس نیز انجام می‌دهند به طوری که زبان برنامه نویسی سطح پایین را به زبان برنامه نویسی سطح بالا ترجمه می‌کند‬.‬

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

فورتن یکی از اولین زبان‌­های برنامه­‌نویسی ‫کامپیوتری امروزی است که اغلب برای برنامه‌های علمی و عددی استفاده می‌شود. این زبان در سال ۱۹۵۰ در شرکت آی‌بی‌ام توسط ۲۵ نفر از دانشمندان برجسته رایانه به سرپرستی جان بکوس [John Backu] طراحی شد. نسخه‌های اخیر فورترن بر خلاف نسخه‌های قدیمی دارای قابلیت‌های شئ‌گرایی هستند. فورترن دومین زبانی بود که از سوی انسی [ANSI] استاندارد شد تکامل آن را می‌توان در نسخه‌های پرشمار بعدی آن دید (فورترن ۶۶، فورترن۷۷، فورترن ۹۰، فورترن۹۵ و فورترن ۲۰۰۳). در فورترن سازگاری میان هر نسخه با نسخه پیشین هم‌چنان حفظ شد. از نسخه‌های جدید آن می‌توان به ویژوال فورترن[visual fortran] اشاره کرد.‬ استفاده از فورترن به عنوان زبان برنامه‌نویسی امروزه گسترش زیادی یافته است. همانطور که ذکر شد هر زبان سطح بالا باید توسط یک کامپایلر به زبان سطح پایین تبدیل شود. ‫در فورترن این کار توسط کامپایلر فورترن [Fortran compiler] انجام می‌­پذیرد.‬ ‫از جمله این کامپایلرها می‌­توان به کامپایلر فورترن اینتل اشاره کرد. کامپایلر فورترن اینتل [Intel Fortran Compiler]، شامل گروهی از کامپایلرهای زبان برنامه‌نویسی فورترن است که توسط شرکت اینتل تولید شده‌است. هدف اصلی توسعه فورترن اینتل ، استفاده از قابلیت پردازش موازی رایانه و به تبع آن اجرای هر چه سریعتر کدهای نوشته شده توسط زبان فورترن می‌باشد. کامپایلر فورترن اینتل در محیط‌های ویندوز ، لینوکس و مک منتشر شده‌است؛ در ویندوز تحت عنوان Intel Visual Fortran و در لینوکس و مک به نام Intel Fortran شناخته می‌شود. این کامپایلر به راحتی در لینوکس و توزیع‌­های مختلف آن قابل نصب است و [Gfortran GNU fortran compiler] نامیده می‌­شود. ‬

کامپایلر زبان C

‫ ‫زبان برنامه­‌نویسی C یکی از محبوبترین و قدرتمندترین زبان‌­های برنامه‌­نویسی است که برنامه‌­نویسان بسیاری را به سمت خود جذب کرده‌است. این زبان برنامه‌­نویسی کامل و جامع، ساخت‌­یافته و است که در سال 1972 توسط دنیس ریچی [Dennis Ritchie] دانشمند علوم کامپیوتر آمریکایی و یکی از سازندگان سیستم عامل یونیکس، ساخته‌شد. تاریخچه زبان برنامه‌نویسی به سال 1967 باز می‌گردد که مارتین ریچاردز [Martin Richards] زبان BCPL را برای نوشتن سیستم عامل و کامپایلرها در دانشگاه کمبریج ابداع کرد. پس از آن کن تامپسون [Ken Thompson] در سال 1970 زبان برنامه‌نویسی B را بر پایه زبان برنامه‌نویسی BCPL نوشت و از آن برای تولید نرم افزار سیستم عامل یونیکس در آزمایشگاه بل استفاده کرد. زبان C در سال ۱۹۷۲ توسط دنیس ریچی از روی زبان B و BCPL در آزمایشگاه بل ساخته شد و ویژگی‌های جدیدی همچون نظارت بر نوع داده‌ها نیز به آن اضافه شد. ریچی از این زبان برای ایجاد سیستم عامل یونیکس استفاده کرد اما بعدها اکثر سیستم عامل­‌های دیگر نیز با همین زبان نوشته شدند. این زبان با سرعت بسیاری گسترش یافت و چاپ کتاب "The C Programming Language" در سال ۱۹۷۸ توسط گرنیگان و ريچی باعث رشد روزافزون این زبان در جهان شد.‬ با توجه به این که زبان برنامه نویسی C یک زبان سطح بالاست پس ما به یک کامپایلر برای اجرا کردن برنامه‌های خود نیاز داریم. ‫در ویندوز اغلب از Visual Studio برای زبان‌های متفاوت استفاده می‌­کنیم.‬‫ ‫حال در لینوکس برای اجرا کردن دستورات C به یک کامپایلر ) به نام‬GNU C Compiler) gcc‮نیاز داریم. اگر در سیستم خود این package را نصب ندارید، به ­راحتی می­‌توانید آن را نصب کنید.‬‬

مجموعه کامپایلرهای گنو [GNU Compiler Collection] مجموعه کد مترجم‌های گنو که به اختصار GCC نیز خوانده می‌شود، مجموعه‌ای از کامپایلرها برای زبان‌های برنامه‌نویسی مختلف است که بوسیله پروژه گنو بوجود آمده‌است. gcc یکی از کلیدی‌ترین اعضای سلسله‌ برنامه‌های گنو [Gnu ToolChain] است. gcc در ابتدا فقط کامپایلری استاندارد برای سیستم گنو بود ولی امروزه در بسیاری از سیستم‌ عامل‌های مشابه یونیکس از آن استفاده می‌شود؛ مانند گنو/لینوکس، خانواده ‌BSD و OSX. همچنین gcc برای معماری‌های سخت‌افزاری مختلف نیز پورت شده‌است. gcc در اوایل سرنام کلمات GNU C Compiler بود. زیرا فقط توانایی کامپایل برنامه‌های نوشته شده به زبان C را داشت؛ که با مرور زمان قادر به ترجمه زبان‌های بیشتری مانند C++ ، Fortran، Paskal ، Java ، objective C ، و Ada شد. پس از آن gcc سرنام کلمات GNU Compiler Collection شد. بنیاد نرم‌افزارهای آزاد gcc را تحت اجازه‌نامه آزاد گنو [GPL] نسخه ۳ به انضمام استثناهای منحصر به gcc منتشر کرده‌است.

زبان‌های تفسیری

زبان تفسیری به نوعی به زبان‌های برنامه‌نویسی گفته می‌شود که اکثر دستوراتش به صورت مستقیم و بدون نیاز به کامپایل کردن برنامه به دستورات زبان ماشین توسط مفسر اجرا می‌شود. در واقع مفسر هر برنامه را در قالب دنباله‌ای از زیر روال‌های کوچکتر که پیش‌تر به زبان ماشین تبدیل شده‌اند اجرا می‌کند. در زبان‌های تفسیری ممکن است مفسر به صورت مستقیم دستورات را اجرا کرده و یا آن را به یک حالت میانی تبدیل نموده و سپس آن‌ها را اجرا نماید. با این وجود ممکن است سیستم‌های تفسیری نیز همانند کامپایلرها نوعی کار ترجمه هم انجام دهند اما فرایند اصلی مورد استفاده از نوع تفسیری خواهد بود. معمولا برنامه‎‌هایی که به زبان‌های تفسیری نوشته شده‌اند نسبت به مدل کامپایل شده کندتر اجرا می‌شوند اما در عوض سایز کمتری دارند. ‬ ‫از معروف ترین زبان‌های مفسری دنیا که بیشترین استفاده را دارند می‌توانیم به زبان‌های BASIC ، javascript ، Jscript ، MATLAB ، Perl ، PHP ، Python ، List ، PostScript ، Ruby ، VBScript و PowerShell اشاره کنیم و در عین حال از معروف‌ترین زبان‌های کامپایلری دنیا که بیشترین استفاده را دارند می‌توانیم به زبان‌های ALGOL ، Visual Basic ، True Basic ، GCC ، Visual C++ ، Borland C++ ، Visual C# ، Mono ( Xamarin ) ، Visual Cobol و Turbo Pascal اشاره کنیم.‬