کامپایلر: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
جز ←‏جایگزینی با [[وپ:اشتباه|اشتباه‌یاب]]: دستورات⟸دستورهای، برنامه⟸برنامه (رایانه)|برنامه، پاسکال⟸پاسکال (زبان برنامه‌نویسی)|پاسکال، سی⟸سی (زبان برنامه‌نویسی)|سی، نگاشت⟸نگاشت خطی، گراف⟸پایگاه داده‌های گراف|گراف، حلقه⟸حلقه (الفبای لاتین)|حلقه، انتزائی⟸انتزاعی، جونکه⟸زیرا، نگاشتگر⟸نگاشت گر، وابسطه⟸وابسته
خط ۱۰:
[[پرونده:Compiler.GIF|چپ|بندانگشتی|شمایی از یک کامپایلر]]
 
در اولین نگاه، تنوع کامپایلرها ممکن است به چشم نیاید. تعداد بسیار زیادی زبان‌های منبع وجود دارند که دامنه آن‌ها از زبان‌های شناخته شده مانند [[فرترن]] و [[پاسکال (زبان برنامه‌نویسی)|پاسکال]] تا زبان‌های خاص منظوره گسترده استگسترده‌است. زبان‌های مقصد نیز گستردگی متناظر با این زبان‌ها دارند. یک زبان مقصد ممکن است [[زبان برنامه‌سازی]] دیگر یا [[زبان ماشین]] یا … باشد.
 
کامپایلرها به انواع [[تک‌گذره]]، [[چند گذره]]، [[باردهی و اجرا]]، [[بهینه‌ساز]]، [[غلط یابغلط‌یاب]] و … بسته با عمل انجام شده تقسیم می‌شوند. علی‌رغم این تنوع اعمال اساسی که هر کامپایلر بایستی انجام دهد، مشابه هم می‌باشند.
 
دانسته‌های ما دربارهٔ سازمان‌بندی و نوشتن کامپایلر نسبت به زمانی که اولین کامپایلرها در اوایل دهه ۱۹۵۰ ایجاد شدند، بسیار افزایش یافته‌است. تخمین تاریخ دقیق ساخت اولین کامپایلر عمل آسانی نیست، زیرا گروه‌های متفاوتی نسبت به ساخت کامپایلرها در آن زمان اقدام نموده‌اند. اولین کارهایی که در ساخت کامپایلرها انجام شد، تبدیل فرمول‌های ریاضی به [[زبان ماشین]] بود.
خط ۲۶:
ساختار کامپایلرها و [[کامپایلر بهینه‌ساز]] امروزه بخشی از برنامه درسی دانشجویان کامپیوتر است. برخی کامپایلرها به منظور آموزشی برای زبان‌های برنامه‌نویسی تولید می‌گردد. مثلاً کامپایلر PL/۰ توسط Niklaus Wirth برای آموزش در دهه ۱۹۷۰ به کار رفت. به علت سادگی و دلایل زیر هنوز برای آموزش مورد استفاده قرار می‌گیرد:
* توسعه گام به گام برنامه
* به کارگیریبه‌کارگیری پارسرهای بازگشتی
* استفاده از EBNF جهت تعریف نحو زبان
* استفاده از P-Code در جریان تولید کد خروجی قابل حمل
خط ۶۰:
تقسم بندی کامپایلرها به برنامه‌های کوچکتر تکنیکی است که همچنان مورد بحث محققان است.
در این نوع دسته‌بندی کامپایلرها، انواع دیگری نیز وجود دارد:
* '''کامپایلر مبدأ به مبدأ''' که کدی با زبان سطح بالا را دریافت می‌کند و خروجی آن نیز زبان سطح بالا می‌باشد. مثلاً موازی‌سازی خودکار کامپایلر در مواردی که به‌طور تکراری در برنامه ورودی وجود دارد و سپس تغییر شکل دادنشکل‌دادن کد و نوشتن کد یا ساختار زبانی موازی (برابر) با آن. (همچون دستور DOALL در [[فورترن]]).
* '''کامپایلر Stage''' که به [[زبان اسمبلی]] برای ماشین نظری ترجمه می‌کند. مثلاً در [[پرولوگ]]
** ماشین پرولوگ معمولاً ماشین انتزاعی (WAM) خوانده می‌شود. بایت کدهای [[جاوا (زبان برنامه‌نویسی)|جاوا]] و Python زیر مجموعه‌ای از این دسته‌اند.