1.45k likes | 2.11k Views
طراحی و پیاده سازی زبان های برنامه نویسی. مصطفی قبائی آرانی Home Page:www.ghobaee.ir E-mail:mostafaghobaye@yahoo.com. فهرست مطالب. فصل اول: اصول طراحی زبان ها فصل دوم: اثرات معماری ماشین بر زبان ها فصل سوم: اصول ترجمه زبان فصل چهارم: مدل سازی خواص زبان ها فصل پنجم: انواع داده اولیه
E N D
طراحی و پیاده سازی زبان های برنامه نویسی مصطفی قبائی آرانی Home Page:www.ghobaee.ir E-mail:mostafaghobaye@yahoo.com
فهرست مطالب فصل اول: اصول طراحی زبان ها فصل دوم: اثرات معماری ماشین بر زبان ها فصل سوم: اصول ترجمه زبان فصل چهارم: مدل سازی خواص زبان ها فصل پنجم: انواع داده اولیه فصل ششم: انواع داده ساختاریافته فصل هفتم: وراثت فصل هشتم: کنترل ترتیب اجرا فصل نهم: کنترل ترتیب زیربرنامه ها طراحی و پیاده سازی زبان ها
فهرست مطالب فصل اول • دلایل(فواید) مطالعه انواع زبان های برنامه نویسی • تاریخچه (نسل های) مختلف زبان برنامه نویسی • طبقه بندی زبان ها از نظر کاربرد • اثر محیط برطراحی وپیاده سازی زبان برنامه نویسی • ویژگی های یک زبان برنامه نویسی خوب • مدل های محاسباتی زبان های برنامه نویسی • استاندارد سازی زبان های برنامه نویسی طراحی و پیاده سازی زبان ها
دلایل(فواید) مطالعه زبان های برنامه نویسی • افزایش توانایی های خود در نوشتن الگوریتم های کارا • استفاده بهینه از زبان های برنامه نویسی موجود • آشنایی با اصطلاحات مفید ساختارهای برنامه نویسی(افزایش دامنه لغات برنامه نویسی) • انتخاب بهترین زبان برنامه نویسی • یادگیری یک زبان جدید آسانتر می شود • طراحی یک زبان جدید آسانتر می شود طراحی و پیاده سازی زبان ها
نسل های زبان برنامه نویسی • نسل اول( (Machine Language: در این نسل، برنامه به صورت صفر و یک (زبان ماشین) می باشد- نیازی به مترجم ندارد و سریع اجرا می شود- نوشتن برنامه و آموزش مشکل- اشکال زدایی مشکل • نسل دوم (Assembly Language) : در این نسل، برنامه نویسی کمی راحت تر شد و به جای بعضی صفر و یک های معروف نماد(سمبل) قرار داده شد ولی در عوض یک برنامه به زبان اسمبلی باید توسط اسمبلر ترجمه شود. • نسل سوم (سطح بالای ساخت یافته) : در این نسل، برنامه نویس باید نحوه اجرا برنامه را به صورت الگوریتم کد نویسی کند.(how to do?) مثل زبان های C# , C++ , C , Pascal • نسل چهارم (خیلی سطح بالا یا ویژوال) : در این نسل، کد نویسی آنچنانی لازم نیست و فقط لازم است کاربر خواسته هایش را بگوید(what to do?) نکته: زبان های نسل اول و دوم سطح پایین و زبان های نسل سوم و چهارم سطح بالا هستند. طراحی و پیاده سازی زبان ها
طبقه بندی زبان ها از نظر کاربرد • زبان های علمی فنی محاسباتی (مبتنی بر اعداد) : قدرت انجام محاسبات حجیم، دارای توابع کتابخانه ای ریاضی قوی .مثل Fortran Algol - Matlab • زبان های تجاری : برای کاربرد های تجاری، حسابداری و .. استفاده می شود . مثل Cobol • زبان های سیستمی: کاربرد های سیستمی دارند مانند کامپایلر و سیستم عامل . Assembly -Ada - C • زبان های هوش مصنوعی: پردازش تصویر و متن توسط این زبان ها صورت می گیرد و از استنتاج به جای پردازش استفاده می شود . ML – Lisp – Prolog - IPL طراحی و پیاده سازی زبان ها
اثر محیط بر طراحی و پیاده سازی زبان • بیان مفهوم محیط • تفاوت محیط میزبان و محیط عملیاتی(مقصد) • انواع محیط • محیط دسته ای(Batch) • محیط محاوره ای(Interactive) • محیط سیستم تعبیه شده(Embedded System) طراحی و پیاده سازی زبان ها
اثر محیط بر طراحی و پیاده سازی زبان محیط دسته ای (Batch) : در محیط های دسته ای، کاربر با برنامه نوشته شده به یک زبان برنامه نویسی، هیچ گونه تعامل و محاوره ای ندارد و ترتیب اجرای برنامه، در بدنه خود برنامه گنجانده شده است. در این محیط، کاربر در یک فاز، ورودی های مورد نیاز برنامه را وارد کرده و سپس منتظر می ماند تا در فاز بعدی، پردازش صورت گیرد و در نهایت در فاز خروجی، نتایج بدست می اید. در این محیط، ارتباط کاربر با برنامه به صورت offline است و اگر خطایی در حین اجرای برنامه رخ دهد کاربر نمی تواند در همان لحظه، آن را اصلاح نماید و باید منتظر اتمام فازها بماند. طراحی و پیاده سازی زبان ها
اثر محیط بر طراحی و پیاده سازی زبان محیط محاوره ای (Interactive) : در محیط های محاوره ای، کاربر با برنامه به طور مستقیم محاوره و تعامل دارد و خروجی برنامه به طور online در نمایشگر نشان داده می شود مانند محیط مربوط به تایپ متن با نرم افزار word با توجه به ارتباط online کاربر با محیط، اگر در حین اجرای برنامه خطایی رخ دهد، کاربر در همان لحظه قادر به اصلاح خطا خواهد بود. طراحی و پیاده سازی زبان ها
اثر محیط بر طراحی و پیاده سازی زبان محیط سیستم های تعبیه شده (Embedded System) به سیستم کامپیوتری که جهت کنترل بخشی از یک سیستم بزرگتر استفاده می شود سیستم کامپیوتری تعبیه شده یا توکار یا جاسازی شده گفته می شود مانند سیستم کامپیوتری مربوط به ماشین لباسشویی، مایکروویو، هواپیما و ... بر خلاف محیط های محاوره ای و دسته ای پردازش خطا در این محیط ها از اهمیت زیادی برخوردار است و در صورت عدم اصلاح خطا در یک بازه زمانی مشخص، زیان های جدی به بار خواهد آمد. بنابراین، قابلیت اطمینان در این محیط ها مهم است معمولا سیستم های تعبیه شده به صورت بلادرنگ(Real-time) کار می کنند و بدون سیستم عامل هستند و برنامه های نوشته شده در یک حافظه ROM قرار می گیرند طراحی و پیاده سازی زبان ها
ویژگی های یک زبان خوب • وضوح سادگی و یکپارچگی • قابلیت تعامد(Orthogonallity) • طبیعی بودن برای کاربردها • پشتیبانی از انتزاع(Abstraction) • سهولت در بازرسی برنامه • محیط برنامه نویسی قدرتمند • قابلیت حمل بالا (Portability) • هزینه استفاده طراحی و پیاده سازی زبان ها
مدل های محاسباتی زبان • مدل محاسباتی:چگونگی توصیف یک برنامه (نحوه نوشتن یک برنامه) در یک زبان برنامه نویسی انواع مدل های محاسباتی: • دستوری • تابعی • قانون گرا • شی گرا طراحی و پیاده سازی زبان ها
مدل های محاسباتی زبان مدل دستوری: برنامه= مجموعه ای از دستورات زبانهای این مدل:C,C++,Ada,Pascal,Cobol,Fortran,Ada,… طراحی و پیاده سازی زبان ها
مدل های محاسباتی زبان مدل تابعی: برنامه= مجموعه ای از توابع تودرتو زبانهای این مدل:ML,Lisp,Scheme,… طراحی و پیاده سازی زبان ها
مدل های محاسباتی زبان مدل قانون گرا: برنامه= مجموعه ای از قوانین زبانهای این مدل:Prolog (زبان برنامه نویسی منطقی- کاربرد در سیستم های خبره و هوش مصنوعی)
مدل های محاسباتی زبان مدل شی گرا: برنامه= مجموعه ای از اشیا (کلاس ها) زبانهای این مدل:C++,C#,Java,Smaltalk برنامه کلاس 1 کلاس 2 ویژگی رفتار ویژگی رفتار . . . طراحی و پیاده سازی زبان ها
استاندارد سازی زبان ها • زمان شناسی : زمان استاندارد سازی مهم است از نظر زمانی، هر چه زودتر یک زبان برنامه نویسی، استاندارد سازی شود بهتر است • پیروی : • هنگامی که یک زبان برنامه نویسی استاندارد شد، باید از آن استاندارد استفاده کرد و تمام برنامه ها باید بر طبق آن استاندارد نوشته شوند و کامپایلر نیز برنامه های نوشته شده بر طبق استاندارد را کامپایل حواهد کرد(کامپایلر پیرو) • کهنگی و منسوخ شدن : • یعنی در استاندارد های جدید، برخی ویژگی های موجود در استاندارد های قبلی که منسوخ شده اند، بروزرسانی خواهند شد طراحی و پیاده سازی زبان ها
فصل دوم:اثرات معماری ماشین بر زبان ها
فهرست مطالب فصل دوم • کامپیوتر و اجزای آن • سازمان کامپیوتر معمولی • روش های اجرای برنامه • ترجمه • تفسیری • تفاوت دو روش • زبان های کامپایلری و مفسری • انواع مترجم ها • انقیاد و زمان های انقیاد طراحی و پیاده سازی زبان ها
کامپیوتر و اجزای آن • کامپیوتر های سخت افزاری : • کامپیوتر سخت افزاری کامپیوتری است که کاملا از اجرای سخت افزاری و مدارات الکترونیکی شامل حافظه ثبات ها و ALU و . . . ساخته شده است در این نوع کامپیوتر ها دقیقا سخت افزار مربوط به هر دستور زبان ماشین وجود دارد . • کامپیوتر های میان افزار : • یک کامپیوتر میان افزار نامیده می شود در صورتیکه هر دستور زبان ماشین دنباله ای از ریز عملیات می باشد که در حافظه قابل برنامه ریزی ذخیره شده است . سیستم هاي عامل پیشرفته
اجزای کامپیوتر • داده : • یک کامپیوتر باید مجموعه ای از داده های اولیه (مثل int real , char) و داده های ساخت یافته (مثل رکورد ، آرایه و . . . ) برای انجام عملیات فراهم کند . • اعمال اولیه : • یک کامپیوتر باید مجموعه ای از عملیات اولیه برای پردازش روی داده ها را داشته باشد . مثل دستورات CPU یا زبان ماشین • کنترل ترتیب محاسبات: • یک کامپیوتر باید مکانیزمی برای کنترل ترتیب اجرای عملیات داشته باشد . سیستم هاي عامل پیشرفته
اجزای کامپیوتر • دستیابی به داده : • یک کامپیوتر باید مکانیزم هایی برای کنترل داده هایی داشته باشد که با اجرای عملیات تولید می شوند . (کنترل انتقال داده بین برنامه و زیر برنامه ها) • مدیریت حافظه : • یک کامپیوتر باید مکانیزم هایی جهت تخصیص حافظه برای برنامه و داده و همچنین آزاد سازی حافظه داشته باشد . • محیط عملیاتی : • یک کامپیوتر باید مکانیزم هایی برای مبادله اطلاعات با دستگاه های جانبی فراهم سازد . سیستم هاي عامل پیشرفته
سازمان کامپیوتر واحد پردازش مرکزی (cpu) از بخش های مهم یک کامپیوتر می باشد .این واحد از ثبات های سریع و عناصر پردازش فعال تشکیل شده است . ثبات هایی که وجود دارند ثبات داده و ثبات آدرس می باشند . • ثبات های آدرس : برای آدرس دهی کردن داده ها و دستورات روی حافظه استفاده می شوند . • ثبات های داده : برای آدرس دهی کردن داده ها و دستورات روی حافظه استفاده می شوند . سیستم هاي عامل پیشرفته
سازمان کامپیوتر • هر دستور العمل روی حافظه اصلی مشخص کننده یک هدف می باشد .که این عمل توسط مفسر cpu ترجمه (کد گشایی عملیات) و دستورات لازم به بخش های مختلف داده می شود.تا اینکه عمل اولیه بر روی داده انجام شود . • عناصر پردازش فعال یک cpu از اعمال اولیه ای که برای آن تعیین شده تشکیل شده است . این اعمال ممکن است در پردازش گر های مختلف باشند . سیستم هاي عامل پیشرفته
روش های اجرای برنامه • روش ترجمه ، کامپایل کردن (Translation) • روش تفسیری ، شبیه سازی نرم افزاری (Interpreter) سیستم هاي عامل پیشرفته
روش های اجرای برنامه • روش ترجمه ، کامپایل کردن (Translation) : • در این روش برنامه به زبان سطح بالا طی فرایند هایی تبدیل به زبان ماشین می شود که قابل اجر ا روی سخت افزار است . به طور کلی مفسر (نرم افزار مترجم) به هر پردازنده زبانی گفته می شود که برنامه ای به زبان منبع که می تواند سطح بالا یا پایین باشد را گرفته و آن را به زبان مقصد تبدیل می کند . سیستم هاي عامل پیشرفته
روش های اجرای برنامه روش ترجمه ، کامپایل کردن (Translation) : در روش ترجمه ابزارهایی مورد نیاز است که هر کدام از این ابزار ها خود یک نوع مترجم می باشند . نکته : اگر برنامه به زبان مبدا با ساختار زبان مبدا تطابق نداشته باشد پیغام خطا صادر خواهد شد . سیستم هاي عامل پیشرفته
انواع مترجم ها (مفسر ها) • اسمبلر (Assembler) • کامپایلر (Compiler) • بار کننده (Loader) • پیوند دهنده (Linker) • پیش پردازنده یا پردازنده ماکرو (Preproccesor) سیستم هاي عامل پیشرفته
انواع مترجم ها (مفسر ها) • اسمبلر (Assembler) : مفسری می باشد که زبان منبع آن زبان اسمبلی و زبان مقصد آن زبان ماشین برای برنامه واقعی می باشد . • کامپایلر (Compiler) : مفسری می باشد که زبان منبع آن یک زبان سطح بالا و زبان مقصد آن نزدیک به زبان ماشین (مثل اسمبلی ) می باشد . سیستم هاي عامل پیشرفته
انواع مترجم ها (مفسر ها) • بار کننده (Loader) : مفسری می باشد که زبان منبع آن زبان ماشین به شکل جابجا پذیر (آدرس نسبی) و زبان مقصد آن کد ماشین واقعی است . بار کننده ، ماژولهای مختلف اجرایی را به هم پیوند داده و آدرس های آنها را به صورت مناسب جابجا می کند . • پیوند دهنده (Linker) : این مفسر بخش های مختلف برنامه را دریافت نموده ، آنها را سر هم بندی کرده و برنامه خروجی تقریبا شبیه برنامه ورودی به شکل کامل تر تولید می شود . سیستم هاي عامل پیشرفته
انواع مترجم ها (مفسر ها) • پیش پردازنده یا پردازنده ماکرو (Preproccesor) : • مفسری می باشد که زبان منبع آن شکل توسعه یافته ای از یک زبان سطح بالا مانند C++ می باشد و زبان مقصد آن شکل استانداردی از همان زبان می باشد (همان برنامه C) . • مثلا در زبان C دستوراتی که با علامت # شروع می شوند مثل تعریف ماکرو ها یا فایل های includ ابتدا بسط داده شده و به دستوراتی از زبان C تبدیل می شوند . سیستم هاي عامل پیشرفته
ترتیب اجرای مفسر ها برای ترجمه یک برنامه سیستم هاي عامل پیشرفته
روش های اجرای برنامه • روش تفسیری ، شبیه سازی نرم افزاری (Interpreter) : در این روش کد برنامه منبع مستقیما به شبیه ساز نرم افزاری یا مفسر داده می شود و مفسر دستورات زبان سطح بالا را تفسیر و بلافاصله اجرا می کند در این روش به جای اینکه زبان سطح بالا به زبان ماشین ترجمه شود به کمک شبیه سازی ، آن برنامه روی یک کامپیوتر میزبان ، اجرا خواهد شد. سیستم هاي عامل پیشرفته
مقایسه روش ترجمه و تفسیری • در روش ترجمه برنامه به طور کامل به زبان ماشین تبدیل شده و سپس اجرا می شود . در حالی که در روش تفسیری تک تک دستورات زبان سطح بالا ابتدا تفسیر و مجموعه دستورات لازم برای شبیه سازی آن دستور اجرا می شود . • سرعت اجرا در روش ترجمه بیشتر از مفسری است . زیرا در روش ترجمه فاز ترجمه و اجرا جدای از یکدیگر هستند ؛ ولی در شبیه سازی این دو فاز یکسان هستند . • مترجم دستورات برنامه را به ترتیب فیزیکی ورودی پردازش می کند ولی شبیه ساز جریان منطقی برنامه را دنبال می کند . سیستم هاي عامل پیشرفته
مقایسه روش ترجمه و تفسیری • مترجم هر دستور را فقط یکبار پردازش یا ترجمه می کند ولی شبیه ساز ممکن است برخی از دستورات را چندبار پردازش کرده مانند حلقهfor یا حتی پردازش نکند مثل یک بلوک شرطی که همیشه غلط است . • در روش کامپایلری برای n بار اجرا یک ترجمه لازم است ولی در روش تفسیری برای n بار اجرا n ترجمه لازم است .(حلقه for) سیستم هاي عامل پیشرفته
مقایسه روش ترجمه و تفسیری • ترجمه محض و شبیه سازی محض دو کرانه اند که به ندرت استفاده می شوند . اغلب زبان ها به صورت ترکیبی از ترجمه و تفسیری پیاده سازی می شوند . • برخی از جنبه های ساختار برنامه بهتر است قبل از اجرا ترجمه شوند ولی برخی دیگر از جنبه ها بهتر است فقط در زمان اجرا پردازش شوند . ترجمه محض : در مواردی که زبان ورودی دقیقا شبیه زبان ماشین باشد مانند اسمبلی شبیه سازی محض : در مواردی مثل زبان های محاوره ای یا زبان کنترل سیستم عامل سیستم هاي عامل پیشرفته
مقایسه روش ترجمه و تفسیری • ایراد مهم ترجمه از دست رفتن اطلاعاتی در رابطه با برنامه است ولی در روش تفسیری تمام اطلاعات مربوطه موجود است . • در روش تفسیری چون دستورات تا زمان اجرا شکل اولیه خود را خواهند داشت چند کپی از آنها نگهداری نمی شود . در مقابل در روش ترجمه چندین فایل داریم که نتیجه ترجمه در آن ذخیره می شود . سیستم هاي عامل پیشرفته
مقایسه روش ترجمه و تفسیری به صورت خلاصه سیستم هاي عامل پیشرفته
انواع زبان ها • زبان های کامپایلری: • C , C++ , FORTRAN , ADA • زبان های مفسری: • Java , Lisp , Perl , Postscript , Basic ML ,HTML Smalltalk, سیستم هاي عامل پیشرفته
انقیاد و زمان های انقیاد • تعریف : اختصاص یک ویژگی به مولفه ای از برنامه از بین مجموعه ای از ویژگی های ممکن انقیاد نام دارد ؛ و زمان اختصاص این ویژگی زمان انقیاد نام دارد . • زمان های انقیاد : • زمان اجرا • زمان ترجمه • زمان پیاده سازی • زمان تعریف یا طراحی زبان سیستم هاي عامل پیشرفته
انقیاد زمان اجرا این انقیاد ها در هنگام اجرای برنامه صورت می گیرند . مثل انقیاد متغیر ها به متغیرشان و انقیاد متغیر ها به محل های خاصی از حافظه . انواع انقیاد های زمان اجرا : • در هنگام ورود به زیر برنامه • در نقطه خاصی از اجرای برنامه سیستم هاي عامل پیشرفته
انقیاد زمان اجرا • در هنگام ورود به زیر برنامه : به هنگام صدا زدن تابع در زبان c یا pascal انقیاد پارامتر های مجازی به واقعی و انقیاد پارامتر های مجازی به محل هایی از حافظه • در نقطه خاصی از اجرای برنامه : • برخی از انقیاد ها در حین اجرا ، در نقطه خاصی از برنامه انجام می پذیرند . مانند انقیاد متغیر ها به مقادیرشان توسط دستور انتساب یا انقیاد اسامی متغیر ها به محل هایی از حافظه در هر نقطه ای از برنامه مثلا در زبان ML و Lisp سیستم هاي عامل پیشرفته
انقیاد زمان ترجمه این انقیاد ها در زمان ترجمه رخ می دهند . • توسط برنامه نویس : • مانند اسامی متغیر ها ، نوع متغیر ها ، و ساختار دستورات • توسط مترجم زبان : • مانند انتخاب محل نسبی داده در حافظه ای که به زیر برنامه اختصاص داده می شود یا چگونگی ذخیره سازی آرایه ها (سطری یا ستونی ) • توسط بار کننده : • برنامه ای که شامل چند زیر برنامه است هنگام بار کردن آن در حافظه آدرس متغیر های موجود در زیر برنامه ها باید به آدرس واقعی انقیاد شود . سیستم هاي عامل پیشرفته
انقیاد زمان پیاده سازی • برخی از ویژگی های یک زبان ممکن است در پیاده سازی های مختلف آن متفاوت باشد. به عنوان مثال نمایش اعداد ، اعمال محاسباتی ، محاسبات ریاضی و غیره . • محدوده مقادیر اعداد short int در پیاده سازی های مختلف زبان C ممکن است متفاوت باشد . مثلا در یک ماشین ممکن است 8 بیتی و در ماشین دیگر ممکن است 16 بیتی باشد . • نکته : • پیاده سازی زبان با توجه به امکانات سخت افزاری می باشد . سیستم هاي عامل پیشرفته
انقیاد زمان تعریف یا طراحی زبان • اغلب ساختارهای زبان های برنامه نویسی ، شکل های مختلف دستورات ، انواع متغیر ها ، انواع ساختمان داده ها و غیره مواردی هستند که در زمان تعریف زبان معین می شوند . • مثلا متغیر های I , j , . . . , n در فرترن به طور پیش فرض integer است . سیستم هاي عامل پیشرفته
نمونه ای از انقیاد ها انقیادنوع Int i ; i=10; i=i+1; انقیاد مقدار انقیاد نماد سیستم هاي عامل پیشرفته
اهمیت زمان های انقیاد • انقیاد دیر رس (Late binding) : • اگر عمل انقیاد در زمان اجرا مشخص شود انقیاد دیر رس گفته می شود . • انقیاد زود رس(Erly binding) : • اگر عمل انقیاد در زمان ترجمه مشخص شود انقیاد زودرس گفته می شود . سیستم هاي عامل پیشرفته
انواع زبان ها بر اساس زمان مقد سازی • زبان هایی با انقیاد زودرس (EBT) : • کارایی بالا – سرعت بالا – انعطاف پذیری پایین – در زمان ترجمه • مانند زبانهایFortran – c – Pascal • زبان هایی با انقیاد دیررس (LBT) : • کارایی پایین – سرعت پایین – انعطاف پذیری بالا – در زمان اجرا • مانند Basic , Prolog , Lisp , ML سیستم هاي عامل پیشرفته