1 / 102

طراحی و پياده سازی زبانهای برنامه سازی

دانشگاه آزاد واحد تفرش. طراحی و پياده سازی زبانهای برنامه سازی. بر اساس کتاب اصول طراحی و پياده سازی زبانهای برنامه سازی ترجمه جعفرنژاد قمی. Programming language and implementation, 4 Edition / T.W. Pratt. فصل اول. اصول طراحی زبانها. چرا زبانهای برنامه سازی را مطالعه می کنیم؟.

Download Presentation

طراحی و پياده سازی زبانهای برنامه سازی

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. دانشگاه آزاد واحد تفرش طراحی و پياده سازی زبانهای برنامه سازی بر اساس کتاب اصول طراحی و پياده سازی زبانهای برنامه سازی ترجمه جعفرنژاد قمی Programming language and implementation, 4 Edition / T.W. Pratt

  2. فصل اول اصول طراحی زبانها

  3. چرا زبانهای برنامه سازی را مطالعه می کنیم؟ • برای گسترش و بهبود توانایی خود در توسعه الگوریتمهای کارآمد مثل فهمیدن تکنیک بازگشتی • استفاده بهینه از زبان برنامه نویسی موجود، با درک اینکه چگونه ویژگیهای یک زبان پیاده سازی می شود توانایی شما در نوشتن برنامه های کارآمد افزایش می یابد.

  4. چرا زبانهای برنامه سازی را مطالعه می کنیم؟ • می توانید با ساختارهای مفید ساختارهای برنامه نویسی مثل پشتیبانی از شیء گرایی یا هم روالها آشنا شوید. • انتخاب بهترین زبان برنامه سازی بر اساس نوع کاربرد ، برای مثال پرولوگ برای کاربردهای هوش مصنوعی • یادگیری زبان جدید ساده می شود. • طراحی زبان جدید ساده می شود.

  5. عوامل مؤثر در پیدایش و طراحی زبانهای برنامه سازی • سخت افزار و سیستم عامل (platform) • روش های برنامه سازی (شیء گرایی، تابعی، دستوری و ...) • کاربردها (صنعتی، تجاری، نظامی و ...) • روش های پیاده سازی (مثلاً برای پیاده سازی آرایه از چه تکنیکی استفاده می شود، از لیست پیوندی و یا فضای ثابت و پشت سرهم حافظه) • مطالعات تئوریک • استاندارد سازی

  6. عوامل مؤثر در پیدایش و طراحی زبانهای برنامه سازی • تکامل بستر توسعه نرم افزار • محیط خارجی که اجرای برنامه را پشتیبانی می کند (مثل سیستم عامل و سخت افزار) محیط عملیاتی یا محیط مقصد نامیده می شود. • محیطی که برنامه در آن طراحی، کد، تست و اشکال زدایی می شود محیط میزبان نام دارد.

  7. عوامل مؤثر در پیدایش و طراحی زبانهای برنامه سازی • محیط دسته ای • برنامه مجموعه ای از فایل های داده ای را به عنوان ورودی گرفته، پردازش و مجموعه ای از فایل های داده خروجی را تولید می کند. • خطایی که اجرای برنامه راخاتمه دهد قابل قبول نیست. • هیچ کمک فوری برای کاربر وجود ندارد و زبان به کار رفته در این محیط هیچ تأثیری روی سرعت اجرای برنامه ندارد.

  8. عوامل مؤثر در پیدایش و طراحی زبانهای برنامه سازی • محیط محاوره ای • برنامه مستقیماً با کاربر تعامل دارد. • استفاده از سیستم اشتراک زمانی برای انجام کارهای مختلف که در یک واحد زمان به کامپیوتر داده می شود. • به هر برنامه یک برش زمانی داده می شود و بعد از اتمام این زمان، پردازنده به برنامه دیگری که آماده اجراست داده می شود. • پردازش خطا اهمیت کمتری دارد.

  9. عوامل مؤثر در پیدایش و طراحی زبانهای برنامه سازی • محیط سیستم های تعبیه شده (embedded system) • سیستم کامپیوتری بخشی از یک سیستم بزرگ مانند هواپیماست که این سیستم کامپیوتری وظیفه کنترل کل یا بخشی از سیستم بزرگ را برعهده دارد. • در چنین سیستم هایی خرابی قابل قبول نیست و لطمات جبران ناپذیری به سیستم بزرگ وارد می کند. • ویژگیهای سیستم های تعبیه شده: • قابلیت اطمینان و صحت • پردازش خطا مهم و حیاتی است هر برنامه باید بتواند خطاها را در داخل خودش برطرف نماید. • این نوع سیستم ها در زمان بلادرنگ کار می کنند

  10. عوامل مؤثر در پیدایش و طراحی زبانهای برنامه سازی • محیط توزیعی • در سالهای اخیر گرایش به سمت برنامه هایی است که قابلیت اجرا به صورت Remote داشته باشند. • محیط های وب و شبکه های محلی از جمله این محیط ها هستند.

  11. ویژگی های یک زبان خوب • وضوح، سادگی و یکپارچگی • هر چه مؤلفه های یک زبان کمتر باشد سادگی آن بیشتر است • هر چه درک مفاهیم زبان آسان باشد وضوح بیشتری خواهد داشت • هر چه ارتباط بین اجزای زبان مشخص تر باشد و میزان انتزاع قوی تر باشد زبان برنامه سازی واحدمندتر است • قابلیت تعامد (Orthogonality) • امکان ترکیب ویژگی های مختلف یک زبان • مانندif (a+b>c+d) then… • طبیعی بودن برای کاربردها • پشتیبانی از تجرید • هرچه طبقه بندی اجزاء قوی تر باشد، زبان برنامه نویسی بهتر است.

  12. ویژگی های یک زبان خوب • سهولت در بازرسی برنامه • محیط برنامه نویسی • امکانات زبان مانند کامپایلر، linker، Debugger • قابلیت حمل برنامه (Portability) • هزینه استفاده • هزینه اجرای برنامه • هزینه ترجمه برنامه • هزینه نگهداری برنامه

  13. مدلهای زبان های برنامه نویسی • زبانهای دستوری (imperative): • زبانهای مبتنی بر فرمان یا دستورگرا که شامل مجموعه ای از دستورات است. • این دیدگاه در زبان هایی مانند C، C++ و Ada پشتیبانی می شود. • زبانهای تابعی (Functional): • به جای دنبال کردن تغییر حالت ماشین، عملکرد برنامه دنبال می شود. • توسعه برنامه با ایجاد توابعی از توابع ایجاد شده قبلی به منظور ساختن توابع پیچیده انجام می شود تا این داده اولیه را دستکاری و آخرین تابع، پاسخ را از داده های اولیه تولید نماید. • مانند زبانهای Lisp و ML Fn(…(f2(f1(data)))…)

  14. مدلهای زبان های برنامه نویسی • زبانهای قانونمند (Rule based): • شرایطی را بررسی می کنند و درصورت برقرار بودن آنها فعالیتی را انجام می دهند. • مانند زبان Prolog که زبان منطقی نیز نامیده می شود. انجام عملیات 1  تعدادی شرط 1 انجام عملیات 2  تعدادی شرط 2 انجام عملیات n تعدادی شرط n • برنامه نویسی شی گرا (object orinted): • اساس این زبانها کلاسها و اشیای ساخته شده از روی این کلاسها می باشد. هر کلاس نشان دهنده یک رده خاص از اشیاء است که خصوصیات و رفتار مشابه هم دارند. • مانند java و C++

  15. فصل دوماثرات معماری ماشین

  16. عملکرد کامپیوتر کامپیوتر مجموعه ای از الگوریتمها و ساختمان داده ها است که قابلیت ذخیره و اجرای برنامه ها را دارد. • هر کامپیوتر از 6 جزء تشکیل شده است: • داده (Data): شامل داده های اولیه و ساختیافته • اعمال اولیه (Primitive operation) • کنترل ترتیب (Data control) • دستیابی به داده (Data access) • مدیریت حافظه (Storage management) • محیط عملیاتی (Operating environment)

  17. عملکرد کامپیوتر • انواع کامپیوترها: • سخت افزاری (Hardware): • از اجزاء سخت افزاری و مدارات الکترونیکی ساخته شده است. • سخت افزار مربوط به هر دستور زبان ماشین وجود دارد. • میان افزاری (Firmware): • هر دستور زبان ماشین دنباله ای از micro operation هاست که در حافظه قابل برنامه ریزی (PROM یا ROM) ذخیره شده است.

  18. عملکرد کامپیوتر • برای پیاده سازی و اجرای یک زبان سطح بالا می توان به یکی از دو روش زیر عمل کرد: • ترجمه (Translation) • شبیه سازی نرم افزاری (Software simulation)

  19. عملکرد کامپیوتر • ترجمه (کامپایل کردن) : • در این روش برنامه ای به زبان سطح بالا طی فرایندهایی تبدیل به زبان ماشین می شود که قابل اجرا روی سخت افزار است. • انواع مترجم ها: • اسمبلر • کامپایلر • بارکننده (loader) برای انتقال برنامه قابل اجرا در حافظه اصلی • پیوند دهنده (Linker) برای اتصال قسمت های مختلف برنامه • پیش پردازنده یا پردازنده ماکرو

  20. کامپیوتر مجازی (تمام یا بخشی از آن به صورت نرم افزاری شبیه سازی شده است) کتابخانه پشتیبانی زمان اجرا مترجم برنامه اجرایی نتایج خروجی برنامه منبع مفسر (میان افزار، سخت افزار یا نرم افزار) پیام های خطای ترجمه Linker برنامه های مقصد مترجم پیام های خطا برنامه منبع اعمال (میان افزار، سخت افزار یا نرم افزار) داده های اجرایی پیام های خطای ترجمه عملکرد کامپیوتر

  21. عملکرد کامپیوتر (ادامه) • شبیه سازی نرم افزاری (تفسیر نرم افزاری): • کد برنامه مستقیماً به شبیه ساز نرم افزاری داده می شود و مفسر دستور زبان سطح بالا را تفسیر و مجموعه دستورات لازم را برای انجام دستور زبان سطح بالا را اجرا می کند. • در روش ترجمه برنامه ابتدا به زبان ماشین تبدیل شده و سپس اجرا می شود در حالیکه در روش تفسیر تک تک دستورات ابتدا تفسیر سپس مجموعه دستورات لازم برای شبیه سازی آن دستور اجرا می شود.

  22. کامپیوترهای مجازی و زمانهای انقیاد (ادامه) سلسله مراتبماشینهای مجازی لایه های یک کامپیوتر مجازی برای کاربر وب با روالهای کتابخانه ای زمان اجرا که با برنامه های کامپایل شده بار شده اند پیاده سازی شده است با صفحات html پیاده سازی شده است برنامه مرورگر که با C یا جاوا پیاده سازی شده است با برنامه های زبان ماشین که بر روی کامپیوتر مجازی یا میان افزاری اجرا می شوند، پیاده سازی می شود دستورات زبان ماشین پیاده سازی شده که با ریزدستورات توسط کامپیوتر واقعی اجرا می شود توسط اجزای فیزیکی پیاده سازی شده است

  23. کامپیوترهای مجازی و زمانهای انقیاد انقیاد و زمان انقیاد (Binding Time) • انقیاد یک عنصر به یک ویژگی یا صفت خاص، مثل انتخاب یک صفت از بین مجموعه ای از صفات است. • زمانیکه در حین فرموله کردن یا پردازش برنامه این انتخاب صورت می گیرد، زمان انقیاد آن صفت برای آن عنصر نام دارد.

  24. کامپیوترهای مجازی و زمانهای انقیاد • دسته بندی انقیادها از نظر زمان • زمان اجرا • در ورود به زیر برنامه یا بلوک مانند تقید پارامترهای رسمی به مکانهای خاص حافظه • در نقطه خاصی از اجرای برنامه مانند تقید متغیر به مقدار در اثر عمل انتساب • زمان ترجمه (زمان کامپایل) • انقیاد توسط برنامه نویس انتخاب می شود مانند انتخاب نام و نوع یک متغیر • انقیاد توسط مترجم انجام می شود مانند تعیین آدرس نسبی شیء داده در حافظه تخصیص داده شده به زیربرنامه • انقیادهایی که توسط بارکننده صورت می گیرد مانند تخصیص آدرس واقعی در کامپیوتر فیزیکی به زیربرنامه ها در زمان بارگذاری برنامه • زمان پیاده سازی • مانند جزئیات نمایش اعداد و اعمال محاسباتی که به صورت سخت افزاری انجام می شود. • زمان تعریف زبان • مانند انتخاب نماد + برای نمایش جمع دو عدد

  25. کامپیوترهای مجازی و زمانهای انقیاد • در برنامه ای که به زبان L نوشته می شود انقیادها و زمانهای انقیاد عناصر زیر در مورد عبارت X=X+10 بحث می شود: • مجموعه ای از انواع ممکن برای متغیر X: • انقیاد زمان تعریف زبان • نوع متغیر: • انقیاد زمان کامپایل • مجموعه ای از مقادیر ممکن برای X: • انقیاد زمان تعریف زبان • مقدار متغیر X: • انقیاد زمان اجرا • نمایش مقدار ثابت 10: • انقیاد زمان پیاده سازی • خواص عملگر + : • انقیاد زمان تعریف زبان

  26. کامپیوترهای مجازی و زمانهای انقیاد دسته بندی زبانها از نظر زمان انقیاد: • زبان هایی با انقیاد زوردرس (early binding) • مانند زبان فرترن، C و پاسکال که اکثر انقیادها در زمان کامپایل مشخص می شود. • افزایش کارایی زبان • زبان هایی با انقیاد دیررس (Late binding) • مانند زبان ML، HTML، LISP و SNOBAL4 که اکثر انقیادها تا زمان اجرا به تأخیر می افتد. • افزایش انعطاف پذیری زبان

  27. فصل سوماصول ترجمه زبان

  28. نحو زبان برنامه سازی • در رابطه با ترجمه زبانهای برنامه سازی دو مطلب اساسی وجود دارد: • نحو (Syntax) • مفهوم (Semantic) • نحو (Syntax): • نحو ترتیب چیدمان عناصر در کنار یکدیگر برای ایجاد یک برنامه معتبر را مشخص می کند. • نحو اطلاعات ارزشمندی را برای درک برنامه در اختیار ما قرار می دهد. • نحو اطلاعات لازم جهت ترجمه برنامه منبع به برنامه مقصد را تدارک می بیند.

  29. نحو زبان برنامه سازی(ادامه) معیارهای عمومی نحو • قابلیت خوانایی • یک برنامه خوانا یا خودمستند است اگر بدون هرگونه مستندات جداگانه ای قابل فهم باشد. • قابلیت نوشتن • این قابلیت با قابلیت خوانایی در تناقض است. • سهولت بازرسی • امکان اثبات ریاضی صحت برنامه که ناشی از دو فاکتور قبلی است. • سهولت ترجمه • نحو LISP نمونه ای از زبانی است که نه قابل نوشتن است و نه قابل خواندن اما ترجمه آن آسان است. • عدم وجود ابهام • یک ساختار مبهم امکان دو یا چند تفسیر متفاوت را می دهد.

  30. نحو زبان برنامه سازی (ادامه) عناصر نحوی زبان • کاراکترها: شامل حروف، ارقام، کاراکترهای خاص • شناسه ها • نمادهای عملگر:مانند +، - ، * ، / و ... • کلمات کلیدی و کلمات رزروی • کلمات اضافی که به منظور افزایش خوانایی در دستورات قرار داده می شوند.

  31. نحو زبان برنامه سازی (ادامه) عناصر نحوی زبان (ادامه) • توضیحات • فضای خالی • فاصله ها و محصور کننده ها مانند begin … end • فرمتهای آزاد و فرمت ثابت • برای مثال در زبان فرترن که فرمت ثابت دارد 5 کاراکتر اول برای برچسب دستورات استفاده می شود. • عبارت • عبارات توابعی هستند که به اشیای داده موجود در برنامه دسترسی دارند و مقداری را بر می گردانند. • دستورات • دستورات از عبارات ساخته شده اند و مهمترین جزء نحوی در زبانهای دستوری هستند.

  32. مراحل ترجمه • نکته: زبانی که به صورت مفسری پیاده سازی شوند سرعت اجرای برنامه پایین خواهد بود. • مترجم ها بر اساس تعداد مراحلی که بر روی منبع عمل می کنند دسته بندی می شوند. کامپایلر استاندارد دو مرحله ای است. • فرآیند ترجمه به طور منطقی شامل دو مرحله : • تحلیل برنامه منبع ورودی • ترکیب برنامه مقصد اجرایی

  33. مراحل ترجمه (ادامه) • کامپایلر استاندارد دوگذره: • گذر تحلیل: برنامه را به اجزا تشکیل دهنده آن تجزیه می کند • گذر ترکیب: با استفاده از این اطلاعات جمع آوری شده برنامه مقصد را تولید می کند.

  34. برنامه منبع تحلیل لغوی نشانه های لغوی تحلیل نحوی درخت تجزیه جدول نمادها تحلیل معنایی سایر جداول کد میانی کد مقصد از سایر برنامه ها بهینه سازی کد میانی بهینه پیوند تولید کد کد اجرایی کد مقصد مراحل ترجمه (ادامه) مرحله تحلیل مرحله ترکیب

  35. مراحل ترجمه (ادامه) تحلیل برنامه منبع • تحلیل لغوی (Lexical Analysis): • دسته بندی دنباله ای از کاراکترها به اجزای بنیادی مثل شناسه، نماد عملگر، اعداد، کلمات کلیدی و ... • تحلیل نحوی (Syntax Analysis) : • ساختارهای بزرگ با استفاده از عناصر لغوی که توسط تحلیل گر لغوی تولید شدند شناسایی می شوند. • تحلیل معنایی (Semantic Analysis): • ساختارهای معنایی که توسط تحلیلگر نحوی تشخیص داده شدند پردازش می شوند و ساختار کد مقصد اجرایی شکل می گیرد.

  36. مراحل ترجمه (ادامه) متداولترین اعمال تحلیل گر معنایی: • نگهداری جدول نماد • جدول نماد یک ساختمان داده مهم در هر ترجمه است. • جدول نماد به ازای هر شناسه موجود در برنامه یک ورودی دارد. • این جدول توسط تحلیلگر نحوی ایجاد و توسط تحلیلگر معنایی نگهداری می شود. • درج اطلاعات ضمنی در برنامه مقصد به صورت صریح • برای مثال در زبان فرترن اگر نوع متغیری اعلان نشود به صورت ضمنی نوع آن بر اساس کاراکتر اول نام، تعیین می شود. • کشف خطا • به شکلی که تحلیل گر نحوی بتواند به کار خودش ادامه دهد. • پردازش ماکرو و عملیات زمان ترجمه • ماکرو قطعه برنامه ای است که به طور جداگانه تعریف در هنگام ترجمه، با فرخوانی ماکرو در برنامه درج می شود.

  37. مراحل ترجمه (ادامه) ترکیب برنامه مقصد • بهینه سازی • تحلیلگر معنایی، برنامه ترجمه شده با کد میانی تولید می کند. • تولید کد • پیوند زدن و بار کردن

  38. مدلهای رسمی ترجمه • تعریف رسمی نحو زبان برنامه نویسی گرامر نام دارد. • گرامر متشکل از مجموعه ای از قواعد است که ترتیب کاراکترها را مشخص می کند.

  39. زبان بدون محدودیت (زبانهای قابل شمارش بازگشتی) زبان حساس به متن زبان مستقل از متن زبان منظم مدلهای رسمی ترجمه Recursively enumerable Language • تقسیم بندی چامسکی در مورد زبانها: Context Sensitive Language Context Free Language Regular Language

  40. مدلهای رسمی ترجمه (ادامه) • ابهام • گرامر G مبهم است اگر برای تولید رشته w حداقل دو درخت اشتقاق چپ یا دو درخت اشتقاق راست داشته باشیم. • مثال) گرامر زیر مبهم است: S  aSb | ab |  زیرا برای w=ab دو درخت تجزیه وجود دارد. S S a b b a S 

  41. مدلهای رسمی ترجمه (ادامه) • ابهام • گنگی و ابهام یک خصیصه معمول در زبانهای طبیعی است که به روشهای گوناگون با آن برخورد می شود. • اگر هر گرامر مربوط به یک زبان مبهم باشد می گوییم زبان ذاتاً مبهم است.

  42. مدلهای رسمی ترجمه (ادامه) • ابهام • مثال) • جمله زیر می تواند دو درخت اشتقاق مختلف داشته باشد و این جمله از دید کامپایلر مبهم است زیرا مشخص نمی شود else دوم به کدام if تعلق دارد. • در زبانهای باقاعده ناچار به اشتقاق چپ هستیم. • if B1 then if B2 then A else B • if B1 then • if B2 then • A • else • B

  43. فصل چهارممدلسازی خواص زبانها

  44. فصل پنجمانواع داده اولیه

  45. خواص انواع و اشیاء • هر برنامه صرفنظر از نوع زبان ، مجموعه ای از عملیات است که باید به ترتیب خاصی بر روی داده ها اجرا شوند. • تفاوتهای بین زبانها ناشی از انواع دادهها، عملیات موجود و مکانیزم کنترل ترتیب اجرای عملیات بر روی داده ها است.

  46. خواص انواع و اشیاء (ادامه) اشیای داده ، متغیرها و ثوابت • از اصطلاح شی داده برای گروهبندی زمان اجرای یک یا چند قطعه از داده ها در کامپیوتر مجازی استفاده می کنیم. • بعضی اشیا در حین اجرای برنامه توسط برنامه نویس تعریف شده اند مانند متغیرها، مقادیر ثابت، آرایه ها و فایل ها • بعضی از اشیای داده توسط سیستم تعریف می شوند. • اجزای تعریف شده توسط سیستم در حین اجرای برنامه در صورت نیاز به طور خودکار ایجاد می شوند.

  47. خواص انواع و اشیاء (ادامه) اشیای داده ، متغیرها و ثوابت • شی داده ظرفی برای مقادیر داده است. • مقدار داده ممکن است یک عدد ، کاراکتر یا اشاره گری به شی داده دیگر باشد. • اگر شی داده حاوی مقداری باشد که همیشه به عنوان یک واحد دستکاری شود آن را شی داده اولیه گویند. • اگر شی داده مجموعه ای از سایر اشیای داده باشد ساختمان نامیده می شود.

  48. خواص انواع و اشیاء (ادامه) اشیای داده ، متغیرها و ثوابت • مهمترین صفات و تقیدهای اشیاء داده عبارتند از: • نوع • محل • مقدار • نام • اجزاء

  49. خواص انواع و اشیاء (ادامه) اشیای داده ، متغیرها و ثوابت متغیرها و ثوابت • شی داده ای که توسط برنامه نویس تعریف و نامگذاری می شود متغیر نام دارد. • ثابت یک شی داده با نام است که مقداری به آن نسبت داده می شود مثل #define max 100 • یک لیترال ثابتی است که نامش همان نمایش مقدارش است مثل 21در عبارت m=m+21

  50. خواص انواع و اشیاء (ادامه) اشیای داده ، متغیرها و ثوابت ماندگاری اغلب برنامه های امروزی هنوز براساس مدل پردازش دسته ای نوشته می شوند. یعنی برنامه نویس دنباله از رویدادهای زیر را فرض می کند: • برنامه به حافظه بار می شود. • داده خارجی مناسب برای برنامه مهیایند. • داده ورودی موردنظر خوانده شده در متغیرهایی در حافظه قرار می گیرند. • برنامه خاتمه می یابد. • دوران زندگی متغیرهای برنامه با زمان اجرای برنامه مشخص می شود. • دوران زندگی داده ها اغلب فراتر از یک اجرای منفرد است. در این حالت گفته می شود که داده ها ماندگار هستند و بین اجراهای برنامه نیز وجود دارند.

More Related