|
تاریخچه ی: کامپایلر
تفاوت با نگارش: 3
| + | ||V{maketoc}|| |
| + | ^@#16: |
| !کامپایلر | | !کامپایلر |
- | به طور کلی , کامپایلر برنامهای است که متن برنامهای را که به یک زبان برنامهسازی نوشته شده است ,به عنوان ورودی میپذیرد , و خروجی آن , متن برنامهای به ی زبا دیگر است , به طوری که طوری که معنای آن متن تغییر نمیکند. این فرآیند , در زبان طبیعی , ترجمه نام دارد. مترجمها جملات یک زبان طبیعی را به زبان طبیعی دیگر ترجمه میکنند. تقریبا تمام کامپایلرها ,برنامهای به یک زبان منبع را گرفته به برنامهای به زبان مقصد تبدیل میکنند . به عنوان مثال , زبان منبع میتواندc و زبان مقصد میتواند ماشین برای کامپیوتر پنتیوم باشد. زبانی که خود کامپایلر با آن نوشته میشود, زبان پیاده ساز نام دارد. علت انجام ترجمه این است که , سخت افزار عملیاتی را انجام میدهد که توسط معنای برنامه توصیف میشود . به طور کلی , سخت افزار تنها منبع واقعی انجام محاسبات است. اجرای برنامه ترجمه شده, شامل خواندن دادههای آن بار فرمت خاص , و چاپ نتایج با فرمت دیگری است . دادههای ورودی میتواند از منابع متعددی خوانده شود , مثل فایلها , صفحه کلید و پکیجهای شبکهبه همین ترتیب , خروجی نیز میتواند در فایلها , صفحه نمایش , و چاپگر قرار گیرد . برای ترجمه برنامه,از کامپایلر استفاده میکنیم . کامپایلر برنامهای است که ورودی آ، , فایلی با فرمت متن برنامه و خرجی آ، فایلی با فرمت کد اجاریی است . برای تههی یک کامپایلر , کامپایلر دیگری رااجرا میکنیم که ورودی آن ,متن منبع این کامپایلر و خروجی آن , کد اجرایی برای این کامپایلر است . این فرآیند کامپایل است . اگر زبان منبع , همان زبان پیاده ساز باشد, و متن منبعی که کامپایل میشود, نسخه جدید خود کامپایلر باشد, این فرآیند خودرانی نام دارد. کامپایل رکدن یک برنامه, با تبدیل فرمت یک فایل به فرمت دیگر , مثل EBCDIC به اسکی تفاوت عمدهای ندارد . در کامپایل کردن برنامه, معنای برنامه باید حفظ شود , ولی در تبدیل فرمت فایل , مشهود نیست . به دلیل دو عامل زیر , کامپایلر میتواند عمل کند: *ورودی به یک زبان برنامه سازی است و در نتیجه دارای ساختاری است که در مراجع آن زبان مشخص شده است . *معنای ورودی بر اساس این ساختار توصیف میشود و به آن ساختار مربوط است این عوامل موجب میشوند تا کامپایلر برنامه را "درک کند " و معنای آن را در یک نمایش معنایی جمع آوری کند .هریک از دو عامل فوق , در زبان مقصد نیز وجود دارد . بدین ترتیب , کامپایلر میتواند معنای جمع آوری شده را بر حسب ساختار زبان مقصد ارائه کند . بخشی از کامپایلر که متن زبان منبع را تحلیل میکند , پردازشگر جلویی و بخشی از کامپایلر که زبان مقصد را ترکیب میکند, پردازشگر نهایی نام دارد اگر کامپایلر به خوبی طراحی شده باشد, پردازشگر نهایی, کاملا از زبان مقصد و پردازشگر نهایی از زبان منبع بی خبر است . هر یک از این دو بخش و از نمایش معنایی برنامه خبر دارند .این تفکیک دقیق , دلایل فنی دارد و منجر به کامپایلرهای ساخت یافته میشود. با توجه به توضیحاتی که مطرح شده , حالت دیگری از عملیات برای کامپایلر پیشنهاد میشود: اگر تمام دادههای ورودی مورد نیاز , فراهم باشند, کامپایلر میتواند مشخص شده توسط معنای برنامه را بدون تبدیل به شکل دیگر , اجرا نماید . در این صورت به جای مولد کد پردازشگر نهایی, مفسر پردازشگر نهایی قرار میگیرد و این برنامه, مفسر نامیده میشود . چند دلیل برای این کار وجود دارد . یکی از دلایل مهم این است که مفسر معمولا به ماشین خاصی اجرا میگردد. به عبارت دیگر , استفاده از مفسر منجر به افزایش قابلیت حمل میگردد. دلیل دیگر این است که نوشتن مفسر, آسانتر از پردازشگر نهاییت کامپایلر است .دلیل سوم برای استفاده از مفسر به جای کامپایلر این است که , اجرای مستقیم برنامه از معنای زبان , عیب یابی و گزارش خطا را آسانتر میکند . دلیل چهارم این است که امنیت از طریق مفسرها افزایش مییابد . این کار , در جاوا اهمیت فراوانی دارد. در کامپایلر و مفسر , متن برنامه به یک کد میانی تبدیل میشود که با روشهای تفسیر کننده , تفسیر میشود در کامپایلر موارد زیر مطرح است: *پردزاش برنامه قابل ملاحظه است *کد میانی(کد اجرایی وابسته به ماشین) سطح پایین است *تفسیر توسط cpu انجام میگیرد. *اجرای برنامه نسبتا سریع است در مفسر موارد زیر مطرح است : *پردازش برنامه از حداقل تا متوسط است *کد میانی ( که تا حدی وابسته به ساختمان داده سیستم است ) , از سطح بالا تا متوسط است اجرای برنامه تا حدی کند است ((__ساختار کامپایلر__)) __تاریخچه مختصری از کامپایلر__ |
+ | !تاریخچه کامپایلر |
| + | __در تاریخچه کامپایلر سه دوره میتوان در نظر گرفت__: |
- | در تاریچه کامایلر سه دوره میتوان ر ن رفت: |
+ | !! از 1945تا1960:تولید کد
{picture=img/daneshnameh_up/4/44/compics0070.png} |
{*در این دوره ,زبانها به تدریج به وجود آمدند و ماشینها چندان متعارف نبودند . مسئله این ود که گوه باید کدی را برای یک ماشی تولید کرد . با توجه به اینکه برنامه نویسی به زبان ((اسمبلی ))رواج داشت , این مسئله وخیمتر شد. استفاده از کامپایلر , برنامه نویسی خودکار نامیده شد . طرفداران ((زبانهای سطح بالا)) میترسیدند که کد تولید شده نسبت به زبان سمبلی کارایی چنن ناشته باشد. اولین کامپایلر ((فرترن))(شریدان 1959) به خوبی بهینه سازی شد *} !! از 1960تا1975 :تجزیه کردن |
- | __ 1945ا1960:توی کد__ د ی دور ,زبان به ری به وجود آمدند و ماشیها دان معار ندند . مسل ین بود ک گونه اید کدی ا بای یک ماشین تولید ک . توجه به ایکه رامه نویسی زبان امی ا دشت , این مه وخیتر د. استفاه از کامپایلر , ام نویسی وکار نایه د . رفداران انهای ط اا میترسیدند که کد تولید ه نسب ه زبان امی کایی نان دات اد. ین کمپایر فرن(ریدان 1959) به بی بهینه سازی ش __از 19601975 :تیه ک __ ر ههای 19601970 بنهای برنامهسازی ید به وود آمند طراان زبان معتد ک طرای ری کامپایلر برای زبان دید , مهم ا وود کامپایری با کد کارآمد اس .دین تری , ات کمایلر به رازگر یی اکید است . ر می ما , ما باهای رمی , تنیهای درمندی را بی ا ا جی , بخو توید یه کنه ه و رد __از 1975 تاکنن :تولی ک بهین ای کد __ ا 1975 اک , اد بانای جدی اا ماین ف کا یافت در نیه نیاز به کامپایلرای سی و اده یا سری و ناص رای بنها یا میهای دید , کا یاف . بزرترین تی در ای زبان ماین خات ی و ا واستا کامپایلرای ا عاد , کام و ا ا کارب م دند . بدین ترتیب , توجه به کد کیی بی زیرا با یر اندکی ک در اار ماشیه ایاد ی , ول مر کها ازایش میاب. />در مین , مدلهایی در رام یسی ه ود د که رامه ویی ابی , می و تویعی نمونهای این مدها سد, اای مان رای این زاها نت به انهای ستر افزایش یات . ی و آا ازی خدکا دا , لیستها , فرخانی یهای راه ور یر ه , ویژگیهایی ستند ه استهای زمان اجرا دارند رزه ر از "چگوگی کامایل کدن" به س " ه یزی باید کاای ود "پی رفیم |
+ | {* هههای 1960و1970 زباهای رنامهسازی جدید ه ود آمدند و طراحا زبان تقد بودند که احی سری کامپایلر برای زبان جدید , مهمتر از وجود کامپایلری با کد کارآمد است .بدین ترتیب , در ساخت کامپایر به پردازشگر جلویی تاید شد است . در همین زمان , مالعه زبانهای رسی , تکنیکهی درتمندی را برای سخت پردازشگر جلی , خصوص تولید تجزیه کننده به وجود آورد*} !! از 1975 تاکنون :تولید و بهینه ازی کد /> {*ز 1975 تاکنون , تعداد زبنهای جدید و انواع ماشین مختلف که یافت نتیجه نیاز به کامپایرهای ریع ساده یا سریع و نص برای زبانها ی مشیهای دید , کاش یاف . زررین آشفتگی در طراحی زبان و می خاتمه یات و افرد خواستا کامپایلرهای ق اعتماد , کارآد و ا وسط کاربر مناسب شدد . بدین رتیب , توجه کیفی ه کد یشتر شد زیرا با تغیر اندکی که ساختار ماشینها ایجاد میود , طول مر کها ازایش مییابد.در همین دوره , مدلهایی در نامه نویسی به وود مدند که برنامه نویسی ((تاع))ی , ((من))ی و ((ویع))ی مونههی از این دلها هتد, واای ما ری این زبانه سبت به زبانهای دستور, افزایش یفت .*} --- />!ح مختی بر کمپیر /> {*ه طور کلی , کپایلر برنامهای است ک من بنامهای را که به یک زبان برنامهسازی نوه شده است ,به عنون ورودی میپذیرد , و خروجی آن , من برنامهای به یک زبان دیگر است , ب طوری که معنای ن متن تغییر نمیکند. این فرآیند , در زبان طبیعی , ترجه نام دارد. ((مرج))ه جلت یک زبا طبیعی را ه زبان طبیعی یگر ترجمه میکنن. تقریبا تمام کامپایلرها ,برنامهای به یک زبان من را رفته به برنامهای به زبان مقصد تبدیل میکنند . به عنوان مل , زبان منع میتوند c و زبان مقصد میتواند زبان ماشین برای کامپیتر ((پنتیوم)) باشد. زبانی که خود کامپایلر با آن نوشته میشود, زبان پیاده سز نم دارد. علت انجام ترمه این ست که , ((ت فزا)) عملیاتی را انجام میدهد که وسط معای برنامه توصیف میشود . به طر کلی , خت افزر ا منع واقعی نا محاسبات است. جرای برام رجم شده, شامل وا ادهای آن بار فمت خاص , و اپ نتایج با فرمت دیری است . دادههای روی میتواند از مناب معددی وانه ود , ل ((فیل))ها , ((فه لی)) و ((پکیج))ای ((شبک))به همین ترتیب , خوی نیز میتواد فیلها , ((صه نمیش رایانه)) , و چ رر یرد . برای ترجمه برنامه,از کامپایلر استفاده میکنی . کامپایلر برنامهای است که ورودی آن، , فایلی ا فمت تن برنامه و خرجی آن، ایلی ا فمت کد اجرایی است . برای هیه یک کمپایلر , کاایر دیگری جرا میکنیم که ورودی ن ,متن منبع این کاپایلر و خروجی آن , کد اجرایی رای ای کاایل ات . این ید کاپیل است . ر زبان من , همان زبان پیاده ساز باشد, و متن منبعی که کامپایل یشود, نسه جدی خود کمپایلر باشد, این فرآین خودرانی نا ارد. کامپایل کدن یک بنامه, با تبدیل فرمت یک فایل به فرم یگر , ثل ((EBCDIC)) به ((اسکی ))فاوت عمدهای ندارد . در کاپیل کردن برنامه, معنای برنامه باید حف شود . به دو دلیل زیر امپایلر میتواند کار کند: *ورودی, به یک زبان امه سازی است و ر نتیجه دارای ختای است که در مراجع آن زبان شخص شده است . *معنای وودی بر اساس این ساختار تصی م ,و ن ساتار مبوط است. این وامل موجب میشوند تا کامپایلر براه را "رک ک " و معنی آ را در یک نمای منایی جم آوری کن .ریک ا و عامل فوق , در زبن م نی وود دارد . بدین ترتیب , کامپایلر میتواند معنای جمع آوری شده را بر حسب ساختار زبان مقصد ارائه کند . بخشی از کاپایلر که متن زبن من تحیل میکند , ((پردازشگر ))جلویی و بخشی از کمپیلر که زبان مقصد را ترکیب میکد, پرازشر نهیی نام رد اگر کامپایر به وبی طراحی ده باشد, ردازشگر نهای, کل از بان مبدا و پردازشگر جلویی ز زبان منبع بی خبر ست . هر یک از ای دو بخش از نمایش معنایی برنامه خب دارد .این کیک یق , دلایل فنی دارد و منر ب کامایرای ساخت یفته یود. />ات دیگری از علیت برای کامپایلر پیشنهاد میود: اگر تام دادههای رودی مود نیاز , فاهم بشند, کامیر میتواند مفهوم مشخص شده توط معنای برنامه را بدون تبدیل به شکل دگر , اجرا ماید . این صورت به جای مولد کد ردازشگر نهایی, ((فس ))ردزشگر هایی قر یگیرد این رنامه, مفسر نایده میشود . ند لیل رای این کار وجود دارد . یکی از لای مهم این ت که مف معمولا در ماشین خاصی اجرا میگردد. به عبارت دیگر , ستاده از مفسر منجر به افزایش قابیت حمل میگردد. لیل یگ این ست که نوشتن مفسر, آان از ردار نهایی کاپا است .دلیل سوم برای استفاده از مفسر جای کپایر این است که , اجرای تقیم برنامه , عیب یابی گزارش خطا را آسانتر میکند . دلیل هارم ی است که انیت از طریق مفسرها افزایش مییابد . این کار , در جاوا اهمیت فراوانی دارد.*} />--- !اجزا كامپايلر __ر كامپايلر از قسمت هاي صي زير تشيل ده است__: *((فاز تحليلگر لغو )) *((فاز تحليلگر نحوي )) *((فاز تحليلگر معايي)) *((فاز توليد كننه كد مياني)) *((فاز بهينه ساز )) />*((فاز توليد كنده كد)) __ و يز دو بخش كمكي:__ *((ادار ننده خطا)) *((دير دول نماد ها)) --- !پیونهای خاری *[http://en.wikipedia.org/wiki/Compiler ] *[http://www.codepedia.com/compile ] *[http://gcc.gnu.org/ ] *[http://www.caller.me.uk/Compilr/ ] *[http://www.kegel.com/crosstool/ ] *[http://tack.sourceforge.net/ ] *[http://citeseer.ist.psu.edu/cs?q=compiler ] *[http://compilers.iecc.com/ ] *[http://compilers.iecc.com/crenshaw/ ] *[http://www.gtoal.com/software/CompilersOneOhOne ] *[http://www.cafm.lsbu.ac.uk/hwcomp/ ] *[http://www.jiscmail.ac.uk/lists/hwcomp.html ] #@^ |
|