|
تاریخچه ی: کامپایلر
تفاوت با نگارش: 11
- | !رح متری ر کامپایلر |
+ | ||V{maketoc}|| ^@#16: !کمپیلر !تریچه کامپایلر |
- | به طور کلی , کامپایلر برنامهای است که متن برنامهای را که به یک زبان برنامهسازی نوشته شده است ,به عنوان ورودی میپذیرد , و خروجی آن , متن برنامهای به یک زبان دیگر است , به طوری که طوری که معنای آن متن تغییر نمیکند. این فرآیند , در زبان طبیعی , ترجمه نام دارد. ((مترجم))ها جملات یک زبان طبیعی را به زبان طبیعی دیگر ترجمه میکنند. تقریبا تمام کامپایلرها ,برنامهای به یک زبان منبع را گرفته به برنامهای به زبان مقصد تبدیل میکنند . به عنوان مثال , زبان منبع میتواند((c)) و زبان مقصد میتواند ماشین برای کامپیوتر ((پنتیوم)) باشد. زبانی که خود امپایلر با آ نوشته میشود, زبان پیاده ساز نام دارد. علت انجام ترجمه این است که , ((سخت افزار)) عملیاتی را انجام میدهد که توسط معنای برنامه توصیف میشود . به طور کلی , سخت افزار تنها منبع واقعی انجام محاسبات است. اجرای برنامه ترجمه شده, شامل خواندن دادههای آن بار فرمت خاص , و چاپ نتایج با فرمت دیگری است . دادههای ورودی میتواند از منابع متعددی خوانده شود , مثل ((فایل))ها , ((صفحه کلید)) و ((پکیج))های ((شبکه))به همین ترتیب , خروجی نیز میتواند در فایلها , ((صفحه نمایش)) , و چاپگر قرار گیرد . برای ترجمه برنامه,از کامپایلر استفاده میکنیم . کامپایلر برنامهای است که ورودی آ، , فایلی با فرمت متن برنامه و خرجی آن، فایلی با فرمت کد اجاریی است . برای تهیه یک کامپایلر , کامپایلر دیگری رااجرا میکنیم که ورودی آن ,متن منبع این کامپایلر و خروجی آن , کد اجرایی برای این کامپایلر است . این فرآین کامپایل است . ار زبان منبع , همان زبان پیاده ساز باشد, و متن منبعی که کامپایل میشود, نسخه جدید خود کامپایلر باشد, این فرآیند خودرانی نام دارد. کامپایل کردن یک برنامه, با تبدیل فرمت یک فایل به فرمت دیگر , مثل ((EBCDIC)) به ((اسکی ))تفاوت عمدهای ندارد . در کامپایل کردن برنامه, معنای برنامه باید حفظ شود , ولی در تبدیل فرمت فایل , مشهود نیست . به دلیل دو عامل زیر , امپایلر میتوان عمل کند: *ورودی به یک زبان برنامه سازی است و در نتیجه دارای ساختاری است که در مراجع آن زبان مشخص شده است . *معنای ورودی بر اساس این ساختار توصیف میشود و به آن ساختار مربوط است این عوامل موجب میشوند تا کامپایلر برنامه را "درک کند " و معنای آن را در یک نمایش معنایی جمع آوری کند .هریک از دو عامل فوق , در زبان مقصد نیز وجود دارد . بدین ترتیب , کامپایلر میتواند معنای جمع آوری شده را بر حسب ساختار زبان مقصد ارائه کند . بخشی از کامپایلر که متن زبان منبع را تحلیل میکند , ((پردازشگر ))جلویی و بخشی از کامپایلر که زبان مقصد را ترکیب میکند, پردازشگر نهایی نام دارد اگر کامپایلر به خوبی طراحی شده باشد, پردازشگر نهایی, کاملا از زبان مقصد و پردازشگر نهایی از زبان منبع بی خبر است . هر یک از این دو بخش و از نمایش معنایی برنامه خبر دارند .این تفکیک دقیق , دلایل فنی دارد و منجر به کامپایلرهای ساخت یافته میشود. با توجه به توضیحاتی که مطرح شده , حالت دیگری از عملیات برای کامپایلر پیشنهاد میشود: اگر تمام دادههای ورودی مورد نیاز , فراهم باشند, کامپایلر میتواند مشخص شده توسط معنای برنامه را بدون تبدیل به شکل دیگر , اجرا نماید . در این صورت به جای مولد کد پردازشگر نهایی, ((مفسر ))پردازشگر نهایی قرار میگیرد و این برنامه, مفسر نامیده میشود . چند دلیل برای این کار وجود دارد . یکی از دلایل مهم این است که مفسر معمولا به ماشین خاصی اجرا میگردد. به عبارت دیگر , استفاده از مفسر منجر به افزایش قابلیت حمل میگردد. دلیل دیگر این است که نوشتن مفسر, آسانتر از پردازشگر نهاییت کامپایلر است .دلیل سوم برای استفاده از مفسر به جای کامپایلر این است که , اجرای مستقیم برنامه از معنای زبان , عیب یابی و گزارش خطا را آسانتر میکند . دلیل چهارم این است که امنیت از طریق مفسرها افزایش مییابد . این کار , در جاوا اهمیت فراوانی دارد. |
+ | __در تاریخچه کامپایلر سه دوره میتوان در نظر گرفت__: |
- | ((ساختار کامپایلر)) |
+ | !! از 1945تا1960:تولید کد
{picture=img/daneshnameh_up/4/44/compics0070.png} |
{*در این دوره ,زبانها به تدریج به وجود آمدند و ماشینها چندان متعارف نبودند . مسئله این بود که چگونه باید کدی را برای یک ماشین تولید کرد . با توجه به اینکه برنامه نویسی به زبان ((اسمبلی ))رواج داشت , این مسئله وخیمتر شد. استفاده از کامپایلر , برنامه نویسی خودکار نامیده شد . طرفداران ((زبانهای سطح بالا)) میترسیدند که کد تولید شده نسبت به زبان اسمبلی کارایی چندان نداشته باشد. اولین کامپایلر ((فرترن))(شریدان 1959) به خوبی بهینه سازی شد *} !! از 1960تا1975 :تجزیه کردن |
- | !زا امايل: />هر ملر از ق هاي الي ز تل د است: />اتلگر لو ازحليلگر ن اتليلر معن />ازي ننده د مياني />فازبهينه سا د فازتوليد ننده ك __ و ي و ش كمكي:__ #اار ننده طا #دير جدول نا ه |
+ | {* دهههای 1960و1970 زباهای برامسای جدید به ود آمد طراحان زبان معتق بند که طراحی سریع کامپیلر برای زبا دید , مهمت از جد کامپایلری ا کد کارآد است .بدی ترتیب , در سات کایلر ردازگر یی تاکید شد ات . در همین ا , طالعه زای رسی , تکنیکهای درتمندی را برای سات ردازشگر جلوی , بخصوص تولید تجزی کننده ه وج و*} !! ا 1975 تاکن :لید کد و بهین سای ک |
- | !تاریخچه کامپایلر |
+ | {*از 1975 تاکنون , تعداد زبانهای جدید و انواع ماشین مختلف کاهش یافت در نتیجه نیاز به کامپایلرهای سریع و ساده یا سریع و ناقص برای زبانها یا ماشینهای جدید , کاهش یافت . بزرگترین آشفتگی در طراحی زبان و ماشین خاتمه یافت و افراد خواستار امپایلرهای قابل اعتماد , کارآمد و با واسط کاربر ماسب شدند . بدین ترتیب , توجه کیفی به کد بیشتر شد زیرا با تغیر اندکی که در ساختار ماشینها ایجاد میشود , طول عمر کدها افزایش مییابد.در همین دوره , مدلهایی در برنامه نویسی به وجود آمدند که برنامه نویسی ((تابع))ی , ((منطق))ی و ((توزیع))ی نمونههای از این مدلها هستند, خواستههای زمان اجرای این زبانها نسبت به زبانهای دستور, افزایش یافت .*} --- !شرح مختصری بر کامپایلر |
- | __ر اریخ کامپایلر سه ر میان ر ن گت__: /> />*__ا 1945تا1960:وی کد__ />ر ین د ,زبنها به ی به وو آمن مین ندان معر ندند . مه این که چگونه ی کدی را بای ی مین تلی ک . ا ه به اینه برنامه نوی به زبان ((اسمبلی ))وا ات , این م یمتر شد. تفاده کامپایلر , برناه نویی ودک نایده . رداران ((های اا)) متریدد که کد توی شده ست زبان اسمبی کارایی چندا شه اد. این کامپایل ((فرتر))(ریان 1959) ب خوی هیه ی />*__ز 1960تا1975 :یه کرن __ ر ههای 19601970 انای برنامهسازی ی به وود آمدن ران زبن م ب که راحی سری کامپایلر ری ان دی , مم ا وود کامپایلری ا کد کارآم است .بی تی , خ کامپایلر ب رداگر لیی تاکی ده ا . در همین ا , ماه زباهی رمی , تکنیکهای درتمنی ا برای ساخت پاگر جوی , بخصو تید تی کد به و و *__از 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 ] #@^ |
|