1 / 84

به نام خدا

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

Télécharger la présentation

به نام خدا

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. به نام خدا فصل نهم کنترل زیربرنامه استاد مربوطه: استاد بیدکی • رویا ادراکی • فاطمه مصلحی

  2. فهرست مفاهیم زیربرنامه ها و تعاریف اولیه زبربرنامه ساده فراخوانی –برگشت زیربرنامه های بازگشتی صفات کنترل داده حوزه ایستا و پویا وابستگی ها و محیط های ارجاع مفاهیم اصلی کنترل داده نام مستعار ساختار بلوکی داده های محلی و محیط های ارجاع محلی پارامترها و انتقال پارامترها پیاده سازی انتقال پارامترها محیط های مشترک صریح اشتراک صریح متغیر پیاده سازی حوزه پویا پیاده سازی حوزه ایستا

  3. در زبان های برنامه سازی مدرن ، مجموعه ای از دستورات که هدف مشترکی دنبال می کنند ، برای استفاده مجدد درون زیربرنامه ها نوشته می شوند. زیربرنامه سطحی از انتراع را در برنامه فراهم می کند ، زیرا مجموعه ای از دستورات درون برنامه با یک دستور فراخوان جایگزین می شوند. پس جزییات پیاده سازی را پنهان می کند و خوانایی برنامه ها با نمایش ساختار منطقی برنامه و پنهان کردن جزییات سطح پایین ، افزایش می یابد. مفاهیم زیربرنامه ها و تعاریف اولیه

  4. این پیاده سازی توسط قاعده کپی توضیح داده می شود: اثر دستور فراخوانی مثل این است که قبل از اجرا، یک کپی از زیربرنامه در نقطه ی فراخوانی قرار داده شده است. فرضیه های قاعده کپی:1.زیربرنامه ها نمی توانند بازگشتی باشند. 2.نیاز به دستور فراخوانی صریح است. 3.زیربرنامه ها در هر فراخوانی باید بطور کامل اجرا شوند. 4.کنترل به نقطه فراخوانی برمی گردد. 5.در هر زمان فقط یک زیربرنامه کنترل را در دست دارد. زیربرنامه ساده فراخوانی -برگشت

  5. 1.زیربرنامه ها نمی توانند بازگشتی باشند:بازگشتی مستقیم: اگر زیربرنامه ای خودش را فراخوانی کند.بازگشتی غیرمستقیم: اگر زیربرنامهA زیربرنامه B را فراخوانیکندوزیربرنامه Bنیززیربرنامه A را فراخوانی نماید. در فراخوانی های بازگشتی مستقیم،نمی توانیم از قاعده کپی استفاده کنیم، زیرا هر جایگزینی که یک دستور فراخوانی را حذف می کند،فراخوانی جدیدی به همان زیربرنامه را معرفی می کند که برای آن جایگزین دیگری لازم است.

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

  7. 4.کنترل به نقطه فراخوانی برمی گردد: دستور فراخوانی صریح در یک برنامه نشان می دهد که کنترل در آن نقطه به زیربرنامه منتقل می شود و لذا کپی کردن بدنه زیربرنامه در آن نقطه از برنامه نیز همان اثر را دارد . • 5.در هر زمان فقط یک زیربرنامه کنترل را در دست دارد: کنترل اجرا از برنامه فراخوان به زیربرنامه فراخوانی شده می رود و به برنامه فراخوان برمی گردد. اما برای فراخوانی زیربرنامه های زمانبندی شده،اجرای زیربرنامه ممکن است مدتی به تعویق افتد. اما زیربرنامه هایی که بعنوان تسک مورد استفاده قرار می گیرند،ممکن است بطور همزمان اجرا شوند

  8. فراخوانی زیربرنامه ها به دوشکل انجام می شود: فراخوانی تابع: برای زیربرنامه هایی که مقادیر را بطور مستقیم برمیگردانند. فراخوانی رویه یا زیرروال: برای زیربرنامه هایی که اثرات جانبی روی داده های مشترک دارند. پیاده سازی: فرض می کنیم ترتیب دستورات و عبارات در زمان اجرا،بصورت بلوکی از کد هستند. اجرای این کدها مفسر سخت افزار یا مفسر نرم افزار

  9. در مورد هر زیربرنامه دو مفهوم وجود دارد: تعریف زیربرنامه: آن چیزی است که در برنامه می نویسیم و به یک قالب تبدیل می شود.مثل: نام و نوع متغیرها، دستورات حلقه و...سابقه فعالیت: در هربار فراخوانی با استفاده از قالب که از تعریف ایجاد شده، بوجود می آید. 1. سگمنت کد: حاوی کد اجرایی و ثوابت است.سابقه فعالیت: 2.رکورد فعالیت: حاوی داده های محلی،پارامترها و سایر عناصر است. در حین اجرا تغییر نمی کند. توسط مترجم ایجاد می شود. بطور ایستا در حافظه قرار می گیرد. تمام سابقه فعالیت زیربرنامه از یک سگمنت کد استفاده می کنند.

  10. اشاره گر دستور فعلی((CIP ؟؟؟؟؟؟ برای نگهداری نقطه ای که زیربرنامه برنامه از آنجا اجرا می شود،به چه چیزهایی نیاز داریم؟؟؟؟ • چون تمام سابقه های فعالیت یک زیربرنامه از یک سگمنت کد استفاده می کنند،اشاره گری باید وجود داشته باشد که سابقه فعالیت مورد استفاده را هم مشخص کند. در هر نقطه،در حین اجرای برنامه به اشاره گری نیاز داریم که دستوری را که در سگمنت کد وجود دارد و فعلأ توسط مفسر در حال اجراست را،مشخص کند. اشاره گر محیط فعلی((CEP

  11. وقتی کنترل به دستور فراخوانی زیربرنامه رسید،یک رکورد فعالیت* از آن برنامه ایجاد و CEP به آن اشاره می کند، هم چنین CIPبه اولین دستور سگمنت کد زیربرنامه اشاره خواهد کرد. *رکورد فعالیت،محیط ارجاع را مشخص می کند. مثال: وقتی دستوری در کد به متغیر X مراجعه می کند، هر رکورد فعالیت دارای شی X است ولی محتویاتش ممکن است با شی دیگری متفاوت باشد.

  12. اگر زیربرنامه ای زیربرنامه دیگر را فراخوانی کند،برای رکورد فعالیت آن زیربرنامه مقادیر جدیدی در CEP وCIP قرار می گیرد. ؟؟؟؟؟ تکلیف مقدار CEP و CIP زیربرنامه قبلی چی میشه؟؟ می توان CEP و CIP زیربرنامه فراخوان را در رکورد فعالیت زیربرنامه ای که فراخوانی می شود ذخیره کرد.در این حالت شی داده ای دیگری بنام نقطه برگشت توسط سیستم در رکورد فعالیت بوجود می آید. نقطه برگشت:شامل فضایی برای دو مقدار اشاره گر است(CIPوCEP)

  13. فراخوانی برگشت • شکل صفحه295

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

  15. مدل کلی تری از فراخوانی و برگشت(برگشت-پرش) • سخت افزار یک دستور برگشت-پرش را تدارک می بیند که فراخوانی زیربرنامه را با یک دستور سخت افزاری پیاده سازی می کند. • در این مدل CIP (اشاره گر دستور فعلی) با ثبات آدرس برنامه ی سخت افزار نمایش داده می شود. در این مدل توسط سخت افزار نیز،پشتیبانی اندکی ارائه می شود. نتیجه این مدل پیاده سازی تخصیص ایستای رکوردهای فعالیت

  16. برگشت- پرش • 296 شکل صفحه

  17. یاد آوری:پیاده سازی پشته ای • برای مدیریت این پشته،نیاز به یک اشاره گر پشته است که همواره به بالای پشته اشاره می کند. • هنگامی که زیربرنامه ای صدا زده می شود،رکورد جدیدی بالای پشته ساخته می شود و با تمام شدن برنامه، آن را از بالای پشته حذف می کند. • در اغلب پیاده سازی های پاسکال،یک پشته مرکزی برای رکوردهای فعالیت زیربرنامه و یک حافظه ایستا برای سگمنت کد برنامه ها اختصاص داده می شود. ساده ترین تکنیک مدیریت حافظه در زمان اجرا،روش استفاده از پشته است.

  18. شکل صفحه298

  19. زیربرنامه های بازگشتی مشخصات:اگر فراخوانی بازگشتی برنامه امکان پذیر باشد،A می تواند هر زیربرنامه ای از جمله خودش را فراخوانی کند.پیاده سازی: به دلیل امکان وجود چندین سابقه فعالیت بطور همزمان،به هر دو اشاره گرCEPوCIP نیاز داریم. به این صورت که در ازای هر فراخوانی زیربرنامه،محتوایهردو اشاره گرCEPوCIP در پشته ذخیره می شوند و در ازای retutrn از پشته pop می شوند.

  20. زبان هایی که کامپایلر آنها در یک گذر کار می کنند ، موقع ترجمه ی زیربرنامه های بازگشتی ممکن است با مشکلاتی مواجه شوند. مثلا: اگر B,Aدو زیربرنامه باشند بطوریکه Aزیربرنامه Bرا فراخوانی کند وB نیز زیربرنامهA را فراخوانی کند، نمی توان تعیین کرد که کدام زیربرنامه باید زودتر نوشته شود. چون هر زیربرنامه ای که فراخوانی می شود ،کامپایلر باید آن را ترجمه کرده باشد تا بتواند ارجاع به آن را بسازد. پاسکال این مشکل را با اعلان پیشرو حل می کند: Procedure A( (پارامتر مجازی ;forward; اعلان پیشرو در پاسکال

  21. مثال:(اعلان پیشرو) برنامه ترجمه نمی شود ، زیرا anomlyیک برنامه نامعتبر است. فراخوانی S در محل 2، رویه موجود در محل 3 را فراخوانی می کند و این یک ارجاع پیشرو است که فاقد اعلان forward است. Program anomaly; procedure S; {1} begin {of S} … end; {of S} procedure T; {missing procedure S; forward; here} procedure U; begin {of U} S; {2} end; {of U} procedure S; {3} begin {of S} end; {of S} begin {of T} U; end; {of T} begin {of anomaly

  22. صفات کنترل داده ها وقتی که عملیاتی در یک زبان نوشته می شود،باید چگونگی آماده سازی داده ها نیز معلوم باشد. صفات کنترل داده ها تعیین می کند که وقتی به یک عملیات می رسیم: 1- چه داده هایی باید برای آن عملیات قابل مشاهده و در دسترس باشند. 2- این داده ها چگونه برای عملیات آماده شوند. 3- نتایج عملیات چگونه ذخیره و توسط عملیات بعدی بازیابی شوند.

  23. مثال: دستور X:=y+2*Zرا در نظر بگیرید.مساله مهم کنترل داده در مورد :y 1- y ممکن است یک متغیر محلی یا غیرمحلی باشد.از کدام y بایداستفاده کنیم(نقش حوزه).2- اگر y یک پارامتر مجازی باشد که از طریق زیربرنامه انتقال یافتهاست،آنگاه روش های انتقال پارامتر مطرح می شود.3- اگر y نام یک زیربرنامه فاقد پارامترباشد،مکانیزم های برگشت نتایجمطرح می شود.

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

  25. داده ها به دو روش به عنوان عملوند عملیات به کار می روند: 1- انتقال مستقیم: در یک عبارت محاسباتی وقتی عبارتی محاسبه می شود، نتیجه آن عبارت بصورت مستقیم در اختیار بخش بعدی عملیات قرارمیگیرد.این نوع انتقال: الف)در حافظه موقت ذخیره می شود. ب)تا آخر طول عمرش معمولا نامی ندارد مثال: عبارت 2*Z در عبارت x:=y+2*Z با انتقال مستقیم به عملیات جمع با y منتقل می شود. 2-از طریق داده ی نامدار: با اعلان های ضمنی و صریح در برنامه قابل استفاده هستند. وقتی می خواهیم به داده ای دوباره مراجعه کنیم از طریق نام به آن رجوع می کنیم.

  26. عناصر نامدار ساده: نام یک متغیر ساده،پارامتر مجازی، زیربرنامه و ... اسامی مرکب: نامی که به یک مولفه از ساختمان داده مربوط می شود. مثال:اگرA یک آرایه باشد، نام A اسمی ساده و A[3] یک نام مرکب است. . عناصر زیادی در برنامه نامدار هستند،ولی سه مورد ازآنها در کنترل داده ها اهمیت دارند:1- متغیرها 2- پارامترهای مجازی 3- انواع داده ای تعریف شده

  27. برای هر داده معمولا یک نام(شناسه) در نظر می گیرند. • اینکه کدام شناسه به چه داده ای مربوط شده است را وابستگی می گویند. • (انقیاد زمان اجرا یا ترجمه) وابستگی ها و محیط های ارجاع در آغاز اجرای برنامه اصلی دو دسته از وابستگی ها اتفاق می افتد: وابستگی شناسه ها: نام هر متغیر درون برنامه را به یک داده(حافظه) مقید می کند. وابستگی زیربرنامه ها: که نام زیربرنامه هایی را که در برنامه فراخوانی می شود به یک تعریف بخصوص مرتبط می سازد. در حین اجرای برنامه داده هایی در حافظه کامپیوتر ایجاد می شود و مورد استفاده قرار می گیرند. مثال: در دستورA:=B+fun(C)چهار عمل ارجاعی اتفاق می افتد. سه عمل ارجاعی، عملوندهای متناظر با سه شناسه A,B,C را تعیین می کنند و عمل ارجاعی چهارم زیر برنامه مربوط به fun را ارزیابی می کند.

  28. مفاهیم اصلی کنترل داده ها در فراخوانی و برگشت از زیربرنامه ها،وابستگی ها مرتبا ایجاد و نابود می شوند. بر این اساس پنج مفهوم اصلی کنترل داده: 1- محیط های ارجاع 2- قابلیت مشاهده 3-حوزه پویا 4-عملیات ارجاع 5-ارجاع های محلی،غیر محلی و عمومی

  29. محیط ارجاع در حین اجرا ثابت است و در طول اجرا بدون تغییر می ماند. • محیط ارجاع یک دستور در یک زبان با حوزه ایستا شامل متغیرهایست که در حوزه آن دستور اعلان شده اند بعلاوه مجموعه متغیرهایی که از حوزه های بالاتر برای آن دستور قابل مشاهده اند. • محیط ارجاع چند جزء دارد: • 1- محیط ارجاع محلی 2-محیط ارجاع غیرمحلی • 3- محیط ارجاع عمومی 4- محیط ارجاع از پیش تعریف شده محیط های ارجاع محیط ارجاع یک دستور،مجموعه همه ی متغیرهایی(شناسه ها) است که برای آن دستور قابل مشاهده و در دسترس هستند.

  30. محیط ارجاع محلی شامل متغیرها یا وابستگی هایست که در هنگام ورود به یک زیربرنامه ایجاد می شوند و فقط در آن زیر برنامه قابل مشاهده هستند. مثال: پارامترهای مجازی،متغیرهای محلی،زیربرنامه های که درون زیربرنامه تشکیل شده اند... محیط ارجاع غیر محلیمجموعه ای از وابستگی های مربوط به شناسه هایی که در زیربرنامه استفاده می شوند ولی هنگام ورود به آن ایجاد نمی شوند.مثال:در پاسکال اگر تابع fدرg تعریف شده باشد،محیط ارجاع غیرمحلی برایf ،محیط ارجاع محلی برای G می باشد.

  31. محیط ارجاع عمومی متغیرها و وابستگی هایی که در آغاز اجرای برنامه ایجاد می شوند و در همه زیربرنامه ها قابل استفاده هستند را محیط ارجاع عمومی می گوییم. *** محیط عمومی بخشی از محیط غیرمحلی هستند. محیط ارجاع از پیش تعریف شدهشامل اسامی است که توسط کامپایلر تعریف شده و داخل برنامه قابل دسترس هستند. این شناسه ها بدون اعلان صریح قابل استفاده هستند.مثال:داده ها یا نام زیربرنامه هایی که در کتابخانه استاندارد هر زبان تعریف شده اند.

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

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

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

  35. عملیات ارجاع با توجه به یک شناسه و محیط ارجاع ، وابستگی مناسبی را برای آن شناسه در آن محیط ارجاع پیدا می کند و شیء داده ی وابسته یا تعریف برنامه را برمی گرداند.کامپایلر برای تولید کد به عملیات ارجاع نیاز دارد.وقتی که نامی را پردازش می کند باید بداند یک متغیر است یا زیربرنامه.امضای ارجاع: Ref_op: id* refrencing_environmentdata_object or subprogram

  36. نام مستعار برای اشیای داده • اگر در یک محیط ارجاع بتوان از طریق بیش از یک نام به شی داده ای دست یافت هر کدام از نام ها را نام مستعار شی می نامند. Program main(output); Var I : integer; Procedure sub1(var J: integer); begin …{ I and J refer to same } end; { data object here } Procedure sub2; var I : integer; begin … sub1(I); { I is visible, J is not} … end; Begin … Sub2{I is visible, J is not} … End. (b) I and J are aliased in sub1 Program main(output) Procedure sub1(var J : Iinteger) begin …{J is visible , I not } end; Procedure sub2; var I : integer; … sub1(I);{I is visible , J is not } … end; begin … sub2{ neither is visible } … end. (a) NO aliasing

  37. نام مستعار مشکلاتی را برای برنامه نویس به وجود می آورد،زیرا درک برنامه را دشوار می کند. X := A + B ; Y := C + D ; مثال: انتساب به X,Y مستقل از یکدیگر است و به هر ترتیبی امکان پذیرمی باشند. اما اگرX,Cنام مستعاری برای یک شیء داده باشند در این صورت این دو دستور به هم وابسته اند و نیاز به ترتیب اجرای مشخص دارند. • به خاطر مشکلاتی که نام مستعار ایجاد می کند ،طراحی زبان جدید سعی در حذف یا محدود کردن نام مستعار دارند.

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

  39. قواعد حوزه ی ایستا مربوط به برنامه های ساخت یافته بلوکی: 1. اعلان های ابتدای هر بلوک محیط ارجاع محلی بلوک را می سازند.هر ارجاع به شناسه ای در بدنه بلوک(که شامل بلوک های تودرتو نیست)،به عنوان ارجاع به اعلان محلی آن شناسه مربوط می شود. 2. اگر در بدنه بلوک برای شناسه ای اعلان محلی وجود نداشته باشد،آن ارجاع به یک اعلان در اولین بلوکی که آن را در بر گرفته محسوب می شود. 3.در بلوک های تودرتو هر اعلان در بلوک داخلی از بلوک های خارجی تر پنهان است. 4.بلوک می تواند دارای نام باشد. نام بلوک به عنوان بخشی از محیط ارجاع بلوکی که آن را در بر می گیرد محسوب می شود. مثال: Procedure p ( A : real ) • P نام محلی در برنامه اصلی است. • پارامتر مجازی A بخشی از محیط محلیp • در برنامه اصلی Pقابل ارجاع ولی A قابل ارجاع نیست.

  40. اعلان ها در بلوک های محلی برای پیاده سازی این اعلان ها نمی توان از رکورد فعالیت استفاده کرد بلکه از تکنیکی شبیه ساختار حافظه استفاده می کنیم. • مثال: • Kو l همانندmو n می توانند از یک محل حافظه استفاده کنند،زیرا همزمان نمی توانند فعال باشند.

  41. داده های محلی و محیط های ارجاع محلی • محیط محلی زیربرنامه شامل شناسه های که در عنوان زیربرنامه (به جز نام خود زیربرنامه) اعلان شده اند. • برای محیط های محلی قواعد حوزه پویا و ایستا سازگارند. • برای پیاده سازی حوزه ی ایستا کامپایلر ممکن است جدولی از اعلان های محلی برای شناسه ها داشته باشد. پیاده سازی قاعده حوزه ی پویا به دو روش انجام می گیرد : • نگهداری 2. حذف نگهداری : وابستگی x در حین فراخوانی های مختلف، نگهداری می شود. حذف : وابستگی X در بین فرا خوانی های مختلف حذف می شود.

  42. مثال: . Procedure R; … End; Procedure Q; Var X : integer := 30; Begin write(X); R; X := X + 1; write(X); End; Procedure P; … Q; … End; اگر وابستگیx نگهداری شود ، در فراخوانی دوم عدد31 چاپ می شود. اگر وابستگیx حذف شود، در هر بار اجرای Q،30 چاپ می شود. • C ،پاسکال ، ادا ، لیسپ ،اسنوبال4و APLحذف • کوبول و فرترننگهداری • PL/Iنگهداری و حذف

  43. پیاده سازی محیط های ارجاع • در این پیاده سازی بهتر است محیط محلی زیربرنامه به صورت جدول محیط ارجاع نشان داده شود. • با استفاده از این جدول ، پیاده سازی روش های حذف و نگهداری ساده تر خواهد شد.

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

  45. حذف: • اگر محیط محلی sub در بین فراخوانی ها حذف شود و هنگام ورود به آن دوباره ایجاد شود،جدول محیط محلی متغیرهای حذف شده ،به عنوان بخشی از رکورد فعالیت sub تخصیص می یابد. • رکورد فعالیت هنگام ورود به sub در یک پشته مرکزی ایجاد و با خروج از زیربرنامه حذف می شود.(حذف محیط محلی به صورت خودکار انجام می گیرد.) • اگر sub در حال اجرا باشد وبه متغیر Yمراجعه کند،محل شی داده وابسته به Y با افزودن آفستY به محتویاتCEP به دست می آید.

  46. در پیاده سازی نگهداری و حذف به چند نکته باید توجه کرد: 1.در پیاده سازی ساختار فراخوانی –برگشت(غیر بازگشتی)نگهداری و حذف پیاده سازی یکسانی دارند. • آنهایی که مقادیرشان در سگمنت کد نگهداری می شود • آنهایی که مقادیرشان در رکورد غعالیت قرار می گیرد و باید حذف شوند. • در پاسکال • static نگهداری • automatic حذف 2.با هر متغیر به دو شکل می توان برخورد کرد: 3.نام زیر برنامه به اعلانی برای آن زیربرنامه در محیط محلی وابسته است و همواره نگهداری می شود. 4.نام پارامتر مجازی ،یک شی داده را نشان می دهد که در هر بار فراخوانی زیربرنامه ، مقدار جدیدی می گیرد.با این پارامترها به روش حذف وابستگی برخورد می شود.

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

  48. انتقال پارامترها و نتایج محیط های مشترک صریح پارامترها و انتقال پارامترها به چهار طریق می توان محیط های مشترکی بین زیربرنامه ها ایجاد کرد تا به اطلاعات مشترک دسترسی داشته باشند: در یک برنامه کامپیوتری،موارد بسیاری رخ می دهد که یک سری اطلاعات باید بین تعدادی از زیربرنامه ها به اشتراک گذاشته شود.برای دسترسی به داده های مشترک: محیط های مشترک و غیرمحلی صریح حوزه ی ایستا حوزه ی پویا وراثت

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

  50. تناظر بین پارامترهای واقعی و مجازی 1. تناظر موقعیتی 2. تناظر بر اساس نام تناظر بر اساس نام:در برخی زبان ها چون ادا پارامترهای مجازی با پارامترهای واقعی صریحا توسط نام متناظر می شوند. Sub(Y=>B,X=>27) • تناظر موقعیتی: تناظر بین پارامترهای مجازی و واقعی بر اساس موقعیت آنها در لیست پارامترهای واقعی و مجازی تعیین می شود. • اغلب زبان ها از تناظر موقعیتی استفاده می کنند.

More Related