Upload
spyridon-galen
View
35
Download
0
Embed Size (px)
DESCRIPTION
به نام خدا. فصل نهم کنترل زیربرنامه. استاد مربوطه: استاد بیدکی. رویا ادراکی فاطمه مصلحی. فهرست. مفاهیم زیربرنامه ها و تعاریف اولیه زبربرنامه ساده فراخوانی –برگشت زیربرنامه های بازگشتی صفات کنترل داده حوزه ایستا و پویا وابستگی ها و محیط های ارجاع مفاهیم اصلی کنترل داده - PowerPoint PPT Presentation
Citation preview
رویا •ادراکی
فاطمه •مصلحی
1
استاد مربوطه: استاد بیدکی
فهرستمفاهیم زیربرنامه ها و تعاریف اولیهزبربرنامه ساده فراخوانی –برگشت زیربرنامه های بازگشتی صفات کنترل داده حوزه ایستا و پویاوابستگی ها و محیط های ارجاع مفاهیم اصلی کنترل داده نام مستعار ساختار بلوکی داده های محلی و محیط های ارجاع محلی پارامترها و انتقال پارامترهاپیاده سازی انتقال پارامترها محیط های مشترک صریحاشتراک صریح متغیرپیاده سازی حوزه پویاپیاده سازی حوزه ایستا 2
مفاهیم زیربرنامه ها و تعاریف اولیه
در زبان های برنامه سازی مدرن ، مجموعه ای از دستورات که هدف مشترکی دنبال می کنند ، برای استفاده مجدد درون
زیربرنامه ها نوشته می شوند.
زیربرنامه سطحی از انتراع را در برنامه فراهم می کند ، زیرا مجموعه ای از دستورات درون برنامه با یک دستور
فراخوان جایگزین می شوند.
پس جزییات پیاده سازی را پنهان می کند و خوانایی برنامه ها با نمایش ساختار منطقی برنامه و پنهان کردن جزییات
سطح پایین ، افزایش می یابد.
3
زیربرنامه ساده فراخوانی -برگشت
توضیح داده می شود: اثر قاعده کپی این پیاده سازی توسط دستور فراخوانی مثل این است که قبل از اجرا، یک کپی از
زیربرنامه در نقطه ی فراخوانی قرار داده شده است.
فرضیه های قاعده کپی:
.زیربرنامه ها نمی توانند 1 بازگشتی باشند.
.نیاز به دستور فراخوانی صریح 2 است.
.زیربرنامه ها در هر فراخوانی 3 باید بطور کامل
اجرا شوند..کنترل به نقطه فراخوانی برمی 4
گردد..در هر زمان فقط یک زیربرنامه 5
کنترل را در دست دارد.
4
فراخوانی های بازگشتی مستقیم،نمی توانیم از درقاعده کپی استفاده کنیم، زیرا هر جایگزینی که یک
دستور فراخوانی را حذف می کند،فراخوانی جدیدی به همان زیربرنامه را معرفی می کند که برای آن
.جایگزین دیگری الزم است
5
6
7
فراخوانی زیربرنامه ها به دوشکل انجام می شود:
فراخوانی تابع: برای زیربرنامه هایی که مقادیر را بطور مستقیم
برمیگردانند.
فراخوانی رویه یا زیرروال: برای زیربرنامه هایی که اثرات جانبی روی داده های مشترک
دارند.
پیاده سازی: فرض می کنیم ترتیب دستورات و عبارات در زمان
.اجرا،بصورت بلوکی از کد هستند
مفسر نرم یا مفسر سخت افزار اجرای این کدها افزار
8
9
در هر نقطه،در حین اجرای برنامه بهنیاز داریم که دستوری را که اشاره گری
در سگمنت کد وجود دارد و فعأل توسط مفسر در حال اجراست را،مشخص کند.
؟؟؟؟؟؟ برای نگهداری نقطه ای که زیربرنامه برنامه از آنجا اجرا می شود،به چه چیزهایی نیاز
داریم؟؟؟؟
اشاره گر دستور CIP)فعلی) چون تمام سابقه های فعالیت یک
زیربرنامه از یک سگمنت کد استفاده باید وجود داشته اشاره گری می کنند،
باشد که سابقه فعالیت مورد استفاده اشاره گر محیط را هم مشخص کند.
CEP)فعلی) 10
مثال: دارای رکورد فعالیت مراجعه می کند، هر Xمتغیر وقتی دستوری در کد به
است ولی محتویاتش ممکن است با شی دیگری متفاوت باشد.Xشی
11
زیربرنامه فراخوان CIP وCEP می توان را در رکورد فعالیت زیربرنامه ای که
فراخوانی می شود ذخیره کرد.نقطه در این حالت شی داده ای دیگری بنام
توسط سیستم در رکورد فعالیت برگشت بوجود می آید.
؟؟؟؟؟
زیربرنامه قبلی چی میشه؟؟CIP و CEPتکلیف مقدار
شامل فضایی برای دو مقدار نقطه برگشت:(CEPوCIPاشاره گر است)
اگر زیربرنامه ای زیربرنامه دیگر را فراخوانی کند،برای رکورد فعالیت آن قرار می گیرد.CIPو CEPزیربرنامه مقادیر جدیدی در
12
فراخوانی برگشت
• 295شکل صفحه
13
برای شرط استفاده از این مدل ا، بایدسرعت اجرافزایش
در حافظه زیادی اختیار داشته باشیم.
مدل ساده تری از پیاده سازی زیربرنامه
برای رکورد فعالیت هر زیربرنامه بطور ایستا حافظه تخصیصیابد.می
)پیاده سازی های فرترن و کوبول(
و با هر فراخوانی زیربرنامه ،همان رکورد قبلی در اختیارش قرار می گیرد که در
این شرایط که هر زیربرنامه فقط یک رکورد فعالیت دارد،نیازی به اشاره گر
CEPنمی باشد .14
در این مدل توسط سخت افزار نیز،پشتیبانی اندکی ارائه می شود.
مدل کلی تری از فراخوانی و برگشت)برگشت-پرش(
سخت افزار یک دستور برگشت-پرش را تدارک می بیند کهفراخوانی زیربرنامه را با یک دستور سخت افزاری پیاده سازی می
کند. در این مدلCIP اشاره گر دستور فعلی( با ثبات آدرس برنامه ی(
سخت افزار نمایش داده می شود.
نتیجه این مدل پیاده سازی تخصیص ایستای رکوردهای فعالیت
15
برگشت- پرش
• شکل صفحه 296
16
ساده ترین تکنیک مدیریت حافظه در زمان اجرا،روش استفاده از پشته است.
پیاده سازی پشته ای:یاد آوری
برای مدیریت این پشته،نیاز به یک اشاره گر پشته است کههمواره به باالی پشته اشاره می کند.
هنگامی که زیربرنامه ای صدا زده می شود،رکورد جدیدیباالی پشته ساخته می شود و با تمام شدن برنامه، آن را
از باالی پشته حذف می کند. در اغلب پیاده سازی های پاسکال،یک پشته مرکزی برای
رکوردهای فعالیت زیربرنامه و یک حافظه ایستا برای سگمنت کد برنامه ها اختصاص داده می شود.
17
• 298شکل صفحه
18
اگر فراخوانی بازگشتی برنامه امکان مشخصات: می تواند هر Aپذیر باشد،
زیربرنامه ای از جمله خودش را فراخوانی کند.
به دلیل امکان وجود چندین سابقه پیاده سازی: دو اشاره فعالیت بطور همزمان،به هر
نیاز داریم.CIPوCEP گر
به این صورت که در ازای هر فراخوانی زیربرنامه،محتوای در پشته CIPوCEP هردو اشاره گر
ذخیره می شوند و در می POP از پشته RETUTRN ازای
شوند.
زیربرنامه های بازگشتی
19
اعالن پیشرو در پاسکال
زبان هایی که کامپایلر آنها در یک گذر کار می کنند ، موقع ترجمه یزیربرنامه های بازگشتی ممکن است با مشکالتی مواجه شوند.
را فراخوانی کند Bزیربرنامه Aدو زیربرنامه باشند بطوریکه B,Aاگر مثال: را فراخوانی کند، نمی توان تعیین کرد که کدام A نیز زیربرنامهBو
زیربرنامه باید زودتر نوشته شود. چون هر زیربرنامه ای که فراخوانی می شود ،کامپایلر باید آن را
ترجمه کرده باشد تا بتواند ارجاع به آن را بسازد.:پاسکال این مشکل را با اعالن پیشرو حل می کند
Procedure A( (پارامتر مجازی ;forward;
20
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
اعالن مثال:)(پیشرو
برنامه ترجمه نمی شود یک برنامه anomly، زیرا
نامعتبر است.، 2در محل Sفراخوانی
3رویه موجود در محل را فراخوانی می کند و
این یک ارجاع پیشرو است که فاقد اعالن
forward.است
21
وقتی که عملیاتی در یک زبان نوشته می شود،باید چگونگی آماده سازی داده ها
نیز معلوم باشد.
صفات کنترل داده ها تعیین می کند که وقتی به یک عملیات می رسیم:
صفات کنترل داده ها
- چه داده هایی باید برای آن عملیات قابل مشاهده و در 1دسترس باشند.
- این داده ها چگونه برای عملیات آماده شوند.2- نتایج عملیات چگونه ذخیره و توسط عملیات بعدی بازیابی 3
شوند.22
1 -Y غیرمحلی یامتغیر محلی ممکن است یک بایدYباشد.از کدام
(.نقش حوزه استفاده کنیم)باشد که از طریق پارامتر مجازی یک Y- اگر 2
زیربرنامه انتقال یافتهمطرح می انتقال پارامتر است،آنگاه روش های
شود. فاقد زیربرنامه نام یک Y- اگر 3
برگشت نتایجپارامترباشد،مکانیزم های مطرح می شود.
مثال:y:را در نظر بگیرید.مساله مهم کنترل داده در مورد X:=y+2*Zدستور
23
حوزه
یک متغیر ، محدوده ی دستوراتی است که متغییر حوزه ی در آنها قابل مشاهده است.
قوانین حوزه ی یک زبان تعیین می کند که حضور یکنام در برنامه چگونه و به چه متغیری مربوط می شود.
یه عبارت بهتر به کمک قوانین حوزه می توانیمتعیین کنیم که ارجاع به متغیرهای خارج از زیربرنامه
ی فعلی به کدام اعالن مربوط می شوند.
پس از بدست آوردن اعالن مورد نظر، صفات آنمتغیرها از جمله آدرس حافظه قابل محاسبه می
شود)برای کامپایلر( 24
: در یک عبارت محاسباتی وقتی انتقال مستقیم- 1عبارتی محاسبه می شود،
در اختیار بخش مستقیم نتیجه آن عبارت بصورت بعدی عملیات قرارمیگیرد.این
نوع انتقال: الف(در حافظه موقت ذخیره می شود. ب(تا آخر طول عمرش
معموال نامی ندارد
مثال: با انتقال مستقیم به عملیات X:=Y+2*Z در عبارت Z*2 عبارت
منتقل می شود. Yجمع با
داده ها به دو روش به عنوان عملوند عملیات به کار می روند:
با اعالن های ضمنی و صریح از طریق داده ی نامدار: -2در برنامه قابل استفاده هستند.
وقتی می خواهیم به داده ای دوباره مراجعه کنیم از طریق نام به آن رجوع می کنیم.
25
عناصر زیادی در برنامه نامدار هستند،ولی سه مورد ازآنها در کنترل داده ها اهمیت دارند:
- 3- پارامترهای مجازی 2- متغیرها 1انواع داده ای تعریف شده
عناصر نامدار
نام یک متغیر ساده،پارامتر مجازی، ساده: زیربرنامه و ...
اسامی
نامی که به یک مولفه از ساختمان مرکب: داده مربوط می شود.
یک A[3] اسمی ساده و A یک آرایه باشد، نام Aاگر مثال: .نام مرکب است
.
26
در حین اجرای برنامه داده هایی در حافظهکامپیوتر ایجاد می شود و مورد استفاده قرار
می گیرند.
وابستگی ها و محیط های ارجاع
برای هر داده معموال یک نام)شناسه( در نظر می گیرند.
اینکه کدام شناسه به چه داده ای مربوط شده است می گویند.وابستگیرا
در آغاز اجرای برنامه اصلی دو دسته از وابستگی ها اتفاق می افتد:(ترجمهیا زمان اجرا )انقیاد هر متغیر درون برنامه را به یک نام وابستگی شناسه ها:
داده)حافظه( مقید می کند.: که نام زیربرنامه هایی را که در برنامه وابستگی زیربرنامه ها
فراخوانی می شود به یک تعریف بخصوص مرتبط می سازد.
مثال:چهار عمل ارجاعی اتفاق می A:=B+fun(C) در دستور
افتد. سه عمل ارجاعی، عملوندهای متناظر با سه شناسه A,B,C را تعیین می کنند و عمل ارجاعی چهارم زیر برنامه
را ارزیابی می کند.funمربوط به 27
در فراخوانی و برگشت از زیربرنامه ها،وابستگی ها مرتبا ایجاد و نابود می شوند. بر این اساس پنج
مفهوم اصلی کنترل داده:
- محیط های ارجاع1 - قابلیت مشاهده2 -حوزه پویا3 -عملیات ارجاع4 -ارجاع های محلی،غیر محلی و عمومی5
مفاهیم اصلی کنترل داده ها
28
محیط ارجاع یک دستور،مجموعه همه ی متغیرهایی)شناسه ها( است که برای آن دستور
قابل مشاهده و در دسترس هستند.
محیط های ارجاع
است و در طول ثابت محیط ارجاع در حین اجرامی ماند.بدون تغییر اجرا
حوزه ایستا محیط ارجاع یک دستور در یک زبان باشامل متغیرهایست که در حوزه آن دستور اعالن
شده اند بعالوه مجموعه متغیرهایی که از حوزه های باالتر برای آن دستور قابل مشاهده اند.
:محیط ارجاع چند جزء دارد-محیط ارجاع 2- محیط ارجاع محلی 1
غیرمحلی- محیط ارجاع از 4- محیط ارجاع عمومی 3
پیش تعریف شده 29
محیط ارجاع غیر محلی
مجموعه ای از وابستگی های مربوط به شناسه هایی که در زیربرنامه استفاده می شوند ولی هنگام ورود به آن ایجاد نمی
شوند. تعریف شده GدرFدر پاسکال اگر تابع مثال:
،محیط ارجاع Fباشد،محیط ارجاع غیرمحلی برای می باشد.Gمحلی برای
محیط ارجاع محلی
شامل متغیرها یا وابستگی هایست که در هنگام ورود به یک زیربرنامه ایجاد می شوند و
فقط در آن زیر برنامه قابل مشاهده هستند.
امترهای مجازی،متغیرهای محلی،زیربرنامه پارمثال: های که درون زیربرنامه تشکیل شده اند...
30
محیط ارجاع از پیش تعریف شده
شامل اسامی است که توسط کامپایلر تعریف شده و داخل برنامه قابل دسترس هستند. این
شناسه ها بدون اعالن صریح قابل استفاده هستند.
داده ها یا نام زیربرنامه هایی که در مثال: کتابخانه استاندارد هر زبان تعریف شده اند.
محیط ارجاع عمومی
متغیرها و وابستگی هایی که در آغاز اجرای برنامه ایجاد می شوند و در همه زیربرنامه ها
قابل استفاده هستند را محیط ارجاع عمومی می گوییم.*** محیط عمومی بخشی از محیط غیرمحلی هستند.
31
قابلیت مشاهده
وابستگی یک شناسه)یک متغیر یا زیربرنامه(، وقتی در یک زیربرنامه قابل
مشاهده است که بخشی از محیط ارجاع آن باشد. یک متغیر ممکن است وجود داشته باشد ولی در یک زیربرنامه قابل
مشاهده نباشد. اصطالحا متغیر پنهان است و در محیط ارجاع آن زیربرنامه یا
دستور بخصوص قرار ندارد.
حوزه پویا
دارد و یک ایستا وابستگی هر شناسه یک وابستگی.پویاوابستگی
قابل تعیین است ولی ترجمه هنگام ایستا وابستگی برنامه تعیین می شود)با اجرای هنگام بستگی پویا وا
مفهوم رکورد فعالیت در ارتباط است(.32
: حوزه پویا
33
: حاوی ترتیب اعالن اشاره گر زنجیره ایستا زیربرنامه هاست.
ارجاع ها را به اعالن اسامی در متن برنامه ربط می دهد.حوزه ایستا قاعده ، در حوزه ارجاعی ایستا اسامی در زمان کامپایل و بر اساس ساختار تودرتوی
زیربرنامه ها مشخص می شوند. قواعد حوزه ایستا، بدون نیاز به ردیابی اجرای برنامه می تواند اسامی ارجاع
شده در برنامه را به اعالن آن ها ربط دهد.
حوزهایستا
34
با توجه به یک شناسه و محیط ارجاع ، وابستگی مناسبی را برای آن شناسه در آن محیط ارجاع پیدا می کند و شیء داده ی وابسته یا تعریف برنامه را
برمی گرداند.
کامپایلر برای تولید کد به عملیات ارجاع نیاز دارد.وقتی که نامی را پردازش می کند باید بداند
.یک متغیر است یا زیربرنامه
امضای ارجاع:
عملیات ارجاع
Ref_op: id* refrencing_environment data_object or subprogram
35
نام مستعار برای اشیای داده اگر در یک محیط ارجاع بتوان از طریق بیش از یک نام به شی داده
ای دست یافت هر کدام از نام ها را نام مستعار شی می نامند.
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
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 36
نام مستعار مشکالتی را برای برنامه نویس به وجود می آورد،زیرا درک برنامه را دشوار می کند.
; X := A + B:مثالY := C + D ;
به خاطر مشکالتی که نام مستعار ایجاد می کند ،طراحینام مستعار محدود کردن یا حذفزبان جدید سعی در
دارند.
می مستقل از یکدیگر است و به هر ترتیبی امکان پذیرX,Yانتساب به باشند.برای یک شیء داده باشند در این صورت این دو نام مستعاری X,Cاما اگر
دستور به هم وابسته اند و نیاز به ترتیب اجرای مشخص دارند.
37
ساختار بلوکی
ساخت یافته مفهوم ساختار بلوک در زبان هایپیدا شد.پاسکال بلوکی مثل
در یک زبان ساخت یافته بلوکی،هر برنامه یازیربرنامه به صورت مجموعه ای از بلوک های
تودرتو سازمان دهی می شود. هر بلوک، با مجموعه ای از اعالن ها برای
اسامی)اعالن متغیرها،تعریف نوع،تعریف ثوابت و غیره(شروع می شود و سپس دستورات قرار
می گیرند. ارجاع اعالن های موجود در یک بلوک،محیط
آن را تعریف می کند.محلی
38
قواعد حوزه ی ایستا مربوط به برنامه هایساخت یافته بلوکی:
. اعالن های ابتدای هر بلوک محیط ارجاع محلی بلوک را می 1سازند.هر ارجاع به شناسه ای در بدنه بلوک)که شامل بلوک های تودرتو نیست(،به عنوان ارجاع به اعالن محلی آن شناسه مربوط
می شود.. اگر در بدنه بلوک برای شناسه ای اعالن محلی وجود 2
در اولین بلوکی نداشته باشد،آن ارجاع به یک اعالن که آن را در بر گرفته محسوب می شود.
در بلوک های تودرتو هر اعالن در بلوک داخلی از بلوک .3های خارجی تر پنهان است.
.بلوک می تواند دارای نام باشد. نام بلوک به عنوان بخشی از 4محیط ارجاع بلوکی که آن را در بر می گیرد محسوب می
شود.Procedure p ( A : real ) مثال:
P.نام محلی در برنامه اصلی است پارامتر مجازیAبخشی از محیط محلی p در برنامه اصلیP قابل ارجاع ولیA .قابل ارجاع نیست
39
اعالن ها در بلوک های محلی
برای پیاده سازی این اعالن ها نمی توان از رکورد فعالیت استفاده کرد بلکه از تکنیکی شبیه ساختار حافظه استفاده
می کنیم.مثال:
K وlهمانند m وn می توانند از یک محل حافظه استفاده کنند،زیرا همزمان نمی توانند فعال باشند.
40
داده های محلی و محیط های ارجاع محلی
محیط محلی زیربرنامه شامل شناسه های که در عنوانزیربرنامه )به جز نام خود زیربرنامه( اعالن شده اند.
برای محیط های محلی قواعد حوزه پویا و ایستابرای پیاده سازی حوزه ی ایستا کامپایلر ممکن است سازگارند.
جدولی از اعالن های محلی برای شناسه ها داشته باشد.
پیاده سازی قاعده حوزه ی پویا به دو روش انجام می :گیرد
. حذف2 نگهداری 1.
در x: وابستگی گهداری نحین فراخوانی های
مختلف، نگهداری می شود.
در بین فرا X : وابستگی حذفخوانی های مختلف حذف می
شود.41
Procedure R; …End;Procedure Q;Var X : integer := 30; Begin write(X); R; X := X + 1; write(X);End;Procedure P; … Q; …End;
مثال:
.
C، و 4اسنوبال ،پاسکال ، ادا ، لیسپAPL
حذفنگهداری کوبول و فرترن
PL/I نگهداری و حذف
xاگر وابستگینگهداری شود ، در
فراخوانی دوم چاپ می 31عدد
شود.
xاگر وابستگیحذف شود، در هر
Q،30بار اجرای چاپ می شود.
xاگر وابستگینگهداری شود ، در
فراخوانی دوم چاپ می 31عدد
شود.
xاگر وابستگیحذف شود، در هر
Q،30بار اجرای چاپ می شود.
42
پیاده سازی محیط هایارجاع
در این پیاده سازی بهتر است محیط محلی زیربرنامه بهصورت جدول محیط ارجاع نشان داده شود.
با استفاده از این جدول ، پیاده سازی روش های حذف ونگهداری ساده تر خواهد شد.
43
نگهداری:
اگر محیط ارجاع محلی زیربرنامه بین فراخوانی هایمختلف نگهداری شود فقط یک جدول محیط محلی
ایجاد می شود. این جدول به عنوان بخشی
محسوب subاز سگمنت کد می شود.
کامپایلر اندازه هر متغیر رادر جدول محیط محلی تعیین می کند و آفست شروع شی
داده را از شروع سگمنت کد)آدرس پایه( پیدا می کند.
44
:حذف
اگر محیط محلیsub در بین فراخوانی ها حذف شود و هنگام ورود به آن دوباره ایجاد
شود،جدول محیط محلی متغیرهای حذف subشده ،به عنوان بخشی از رکورد فعالیت
تخصیص می یابد. رکورد فعالیت هنگام
در یک پشته subورود به مرکزی ایجاد و با خروج از زیربرنامه حذف می شود.
)حذف محیط محلی به صورت خودکار انجام می
در حال اجرا subاگر گیرد.(مراجعه Yباشد وبه متغیر
کند،محل شی داده با افزودن Yوابسته به
CEP به محتویاتYآفستبه دست می آید.
45
به چند نکته باید حذف ونگهداریدر پیاده سازی توجه کرد:
.در پیاده سازی ساختار فراخوانی –برگشت)غیر 1بازگشتی(نگهداری و حذف پیاده سازی یکسانی
دارند..با هر متغیر به دو شکل 2
:می توان برخورد کرد
.نام زیر برنامه به 3اعالنی برای آن
زیربرنامه در محیط محلی وابسته است و همواره نگهداری می
شود..نام پارامتر مجازی ،یک شی داده را نشان4
می دهد که در هر بار فراخوانی زیربرنامه ،مقدار جدیدی می گیرد.با این پارامترها به روش
حذف وابستگی برخورد می شود.
o آنهایی که مقادیرشان در سگمنتکد نگهداری می شود
o آنهایی که مقادیرشان در رکوردغعالیت قرار می گیرد و باید حذف
شوند.
در پاسکال static نگهداری automatic حذف
46
امتیازات ومعایب روش نگهداری و حذف:
روش نگهداری باعث ایجاد برنامه هایی می شود کهنسبت به گذشته حساس هستند .
در روش حذف برای نگهداری متغیرها بین فراخوانیهای مختلف باید برای آن زیربرنامه به صورت غیرمحلی
اعالن شوند. برای زیربرنامه بازگشتی ،روش حذف ،روش
متداولتری است.
47
در یک برنامه کامپیوتری،موارد بسیاری رخ می دهد که یک سری اطالعات باید بین تعدادی از زیربرنامه
گذاشته شود. اشتراک ها بهبرای دسترسی به داده های مشترک:
پارامترها و انتقال پارامترها
انتقال پارامترها و نتایج1.
محیط های مشترک صریح2.
محیط های به چهار طریق می توان بین زیربرنامه ها ایجاد کرد تا به مشترکی
محیط های مشترک و غیرمحلی 1.اطالعات مشترک دسترسی داشته باشند:صریح
حوزه ی ایستا2.
حوزه ی پویا3.
وراثت4.48
پارامترهای مجازی و واقعی
اصطالح آرگومان و نتیجه به داده هایی اطالق می شودکه بامکانیزم های مختلفی به زیربرنامه ارسال و از آن دریافت
می شود.
پارامتر مجازی نوعی شی داده محلی در یک زیربرنامهاست که نام آن شناسه ای ساده است و اعالن آن ،نوع و
سایر صفات را مشخص می کند.
پارامتر واقعی یک شی داده است که با زیر برنامهفراخوان مشترک است.
49
تناظر بین پارامترهای واقعی و مجازی
oتناظر بین پارامترهای مجازی و تناظر موقعیتی :واقعی بر اساس موقعیت آنها در لیست
پارامترهای واقعی و مجازی تعیین می شود. oدر برخی زبان ها چون ادا تناظر بر اساس نام:پارامترهای مجازی با پارامترهای واقعی صریحا توسط
Sub(Y=>B,X=>27)نام متناظر می شوند.
.اغلب زبان ها از تناظر موقعیتی استفاده می کنند
. تناظر بر 2. تناظر موقعیتی 1اساس نام
50
مدل های معنایی انتقال پارامترها
خود را مدل معنایی انتقال پارامتر قبل از انتخاب روش انتقال پارامترها، باید مشخص کنیم و طبق مدل معنایی مورد انتظار بهترین روش را برگزینیم.
پارامترهای مجازی با یکی از سه مدل معنایی زیر شناخته می شوند:
حالت پارامترهای واقعی به پارامترهای مجازی ارسال شوند )1. (ورودی
مقدار پارامتر توسط زیربرنامه تولید و هنگام خروج به پارامتر واقعی 2.(حالت خروجیزیربرنامه ارسال شود )
مقدار پارامتر هنگام فراخوانی به زیربرنامه ی فراخوانی شده منتقل 3.می شود و هنگام خروج از آن ، مقدارش در پارامتر واقعی در
(حالت ورودی خروجیزیربرنامه فراخوان قرار می گیرد) 51
انتقال پارامترها روش هایی هستند که پارامترها را کرده و از آنها دریافت می ارسالبه زیربرنامه ها
کنند.
روش های انتقال پارامتر:
فراخوانی با نام 1.
فراخوانی با ارجاع)آدرس(2.
فراخوانی با مقدار 3.
فراخوانی با مقدار ثابت 4.
فراخوانی با نتیجه 5.
فراخوانی با مقدار-نتیجه6.
انتقال پارامترها
52
فراخوانی با نام
Procedure p(X , Y , Z){ int i , i=7; X = I+(7/Y)*Z;}
در صورت فراخوانی:
P(A,B+2,27+3)
Procedure p(X , Y , Z){ int i , i=7; A = i+(7/(B+2))*(27+3);}
فراخوانی با نام ، انتقال پارامتر در حالتورودی/خروجی است.
وقتی پارامترها از طریق نام ارسال میشوند ، پارامتر واقعی جایگزین همه ی
تکرارهای پارامتر رسمی)مجازی( در متن زیربرنامه می شود.
فراخوانی با نام پارامترها را ارزیابی نشدهارسال می کند.
مثال:
53
مثال:اگر در مثال قبل ،فراخوانی با نام انجام شود،با وجود
THUNK.کدهای زیر تولید می شود،داریم:P(A,B+2,27+3) برای فراخوانی
( thunkپس برای پیاده سازی فراخوانی با نام باید از زیربرنامه ی فاقد پارامتر)استفاده کنیم.
کدی است که مقدار چپ و مقدار راست یک آرگومان را محاسبه می کند. thunkیک
Jump to subroutine pAddress of thunk1 to return L_value(A)Address of thunk2 to return R_value(A)Address of thunk3 to return L_value(B+2)Address of thunk4 to return R_value(B+2)Address of thunk5 to return L_value(27+3)Address of thunk6 to return R_value(27+3)
Thunkمنظور از آدرس آدرس کدترجمه شده ی
مطلوب است.Xبرای انتساب به
فراخوانی می Thunk1ال رو .شود
X برای دسترسی به مقدار فراخوانی می Thunk2روال . شود
Thunkمنظور از آدرس آدرس کدترجمه شده ی
مطلوب است.Xبرای انتساب به
فراخوانی می Thunk1ال رو .شود
X برای دسترسی به مقدار فراخوانی می Thunk2روال . شود
54
)فراخوانی با ارجاع) آدرس
.متداولترین روش انتقال پارامترهاست.آدرس)مقدار چپ( پارامتر واقعی به زیربرنامه فرستاده می شود تغییراتی که به پارامترهای مجازی درون تابع داده می شود، به
پارامترهای واقعی متناظر در زیربرنامه صدازننده اعمال می شود. مثال:
Void fn(int x , int y) { x= -4; y= -6; print f(“%d %d” , x,y);}
Main() { int a=1 , b=3; print f(“ %d % d” , a,b); F(n) (&a , &b); print f(“%d %d” , a ,b);{
3 قبل از فراخوانی1
در زیربرنامه فراخوانی شده
6- 4-
-4 -6 بعد از فراخوانی
55
فراخوانی با مقدار
در این روش مقدار راست پارامتر واقعی در پارامتر مجازیکپی می شود.
در زیربرنامه دیگر به پارامتر واقعی دسترسی نداریم وتغییراتی که در پارامتر مجازی داده می شود،به پارامتر
واقعی اعمال نمی شود.
Void fn(int x , int y) { x= -4; y= -6; print f(“%d %d” , x,y);}
Main() { int a=1 , b=3; print f(“ %d % d” , a,b); F(n) (a , b); print f(“%d %d” , a ,b);{
3 قبل از فراخوانی1
در زیربرنامه فراخوانی شده
6- 4-
1 3 بعد از فراخوانی
56
فراخوانی با مقدار-نتیجه
در این روش فراخوانی،مقدار پارامتر واقعی در پارامتر مجازی کپیمی شود.
داخل زیربرنامه هر تغییری فقط روی پارامتر مجازی انجام می گیردو روی پارامتر واقعی اثری ندارد.
هنگام بازگشت از زیربرنامه، پارامتر مجازی در پارامتر واقعی کپیمی شود،یعنی پارامتر واقعی تا زمان خاتمه زیربرنامه، مقدار اصلی خودش را حفظ کرده و پس از اجرای زیربرنامه مقدار جدیدی می
گیرد.
فراخوانی با ارجاع و مقدار-نتیجه از دید برنامه نویس نتایج یکسانی دارند.
معرفی شد.Wدر الگول-
57
فراخوانی با مقدار ثابت
مشابه فراخوانی با مقدار ،ومقدار پارامتر واقعی درپارامتر مجازی کپی می شود و در حین اجرای زیربرنامه
پارامتر مجازی قابل تغییر نیست. لذا این پارامتر مجازی مثل یک متغیر ثابت محلی عمل می
کند.
فراخوانی با نتیجه
از این شیوه فقط جهت برگرداندن نتیجه بهبرنامه فراخوان استفاده می شود.
مقدار اولیه پارامتر واقعی در زیربرنامه قابلاستفاده نیست.
هنگامی که زیربرنامه تمام می شود، مقدارنهایی پارامتر مجازی بعنوان مقدار جدید
پارامتر واقعی محسوب می شود.تابع ورودی ندارد و فقط دارای
پارامتر خروجی است.58
پیاده سازی انتقال پارامترها
اعمالی که در انتقال پارامترها انجام می شوند،:زیربرنامه اتفاق می افتد.نقطه ی فراخوانی اعمال که در هر 1( ومقدمهاعمالی که مربوط به ورود و خروج در خود زیربرنامه هستند که 2(
نامیده می شوند.مؤخره
:اعمال نقطه فراخوانی1(
در نقطه ی فراخوانی،عبارات پارامتر واقعی ارزیابی میشوند و کپی هایی از مقادیر آن ها یا اشاره گرهایی به
داده ها ایجاد و تنظیم می شوند. این ارزیابی در محیط ارجاع زیربرنامه فراخوان صورت
می گیرند. سپس کنترل به زیربرنامه منتقل می شود و دو اشاره گر
)اشاره گر CIP)اشاره گر محیط فعلی( و CEPموسوم به دستور فعلی( تنطیم می شوند.
قبل از انتقال کنترل، رکورد فعالیتی برای فراخوانیفعلی زیربرنامه ایجاد و در باالی پشته زمان اجرا درج می
شود.
59
( اعمال بعد از ورود به زیربرنامه:2
مقدمه ی زیربرنامه عملیات انتقال پارامترها را تکمیلمی کند. مقادیر پارامتر واقعی در پارامتر مجازی کپی می شوند یا اشاره گر به پارامترهای واقعی در اشاره
گر به پارامتر مجازی کپی می شوند. قبل از خاتمه زیربرنامه ، مؤخره آن، نتیجه را در
پارامترهای واقعی که از طریق نتیجه یا مقدار و نتیجه ارسال شده اند،کپی می کند. مقادیر تابع به حافظه
های موقت یا ثبات ها کپی می شوند. زیربرنامه خاتمه میابد و رکورد فعالیت آن از بین می رود.
60
کامپایلر در پیاده سازی انتقال پارامترها دو وظیفه دارد:
درست برای اعمال هنگام فراخوانی و مقدمه و مؤخره ی تولید کد اجرایی 1(زیربرنامه.) کد اجرایی مورد نیاز برای هر روش انتقال پارامتر متفاوت است(
برای اطمینان از سازگاری نوع پارامترهای واقعی و نوع ایستا کنترل 2(پارامترهای رسمی متناظر. برای این منظور کامپایلر باید امضای کامل
زیربرنامه شامل تعداد، نوع و ترتیب آرگومان های ورودی و نوع آرگومان خروجی را بداند.)مخصوصا برای زیربرنامه هایی که بطور مستقل ترجمه می
شوند(
61
نتیجه عبارت )ارسال پارامتر(
: مثال
را از طریق ارجاع ارسال کنیم: a+b اگر بخواهیم عباراتمترجم در نقطه ی فراخوانی ابتدا باید این عبارت را ارزیابی کند.1.ذخیره کند.Pسپس آن را در حافظه موقت در 2. Q را بعنوان پارامتر به p)اشاره گر به آن محل )حافظه موقت در 3.
ارسال کند.
انتقال با ارجاع موجب می شود تا پارامتر مجازی، حاوی اشاره گر به محل 1. باشد.p حافظه موقت در
نامی نداردکه بتوان به آن مراجعه کرد ،هر انتسابی که در pچون این محل در 2.Qاز انتقال به صورت می گیرد ، مقداری را تغیر نمی دهد
استفاده می شودمقدارروش
Q (&(a+b), &b)
62
نام مستعار و پارامترها)ارسال پارامتر(
امکان استفاده از نام مستعار در ارتباط با انتقال پارامترها، در اغلب زبان ها وجود دارد.
هنگام انتقال پارامترها ، نام مستعار به دو روش بوجود می آید:
شیء داده ای که از طریق ارجاع ارسال پارامتر مجازی و متغیر غیرمحلی :1(شد، در داخل زیربرنامه ، از طریق یک نام غیرمحلی ، بطور مستقیم قابل
دستیابی است.
یک شیء داده ممکن است در آن واحد، در دو موقعیت دو پارامتر مجازی: 2(مختلف )در یک
فراخوانی( به عنوان پارامتر واقعی ارسال شود. در این صورت نام های دو پارامتر مجازی ،
63 مستعار خواهند بود.
ارسال زیربرنامه به عنوان پارامتر
در بسیاری از زبان ها ، زیربرنامه را می توان به عنوان پارامتر واقعی به زیربرنامه دیگری ارسال کرد.
است زیربرنامهشامل نام پارامتر واقعی در این حالت ،عبارت است. زیربرنامهنوع متناظر با آن از پارامتر مجازی و هم چنین
مثال: )پاسکال(Procedure Q( x: integer ; function R(y,z:integer):integer)
که یک )(R. 2 از نوع صحیح X. 1دو پارامتر مجازی دارد: )(Qروال تابع است
نیز دو عدد صحیح به عنوان ورودی دریافت می کند و خروجی از نوع )(R تابع .صحیح برمی گرداند
Q(27,fn) fn پارامتر واقعی: Rپارامتر مجازی : ()64
دو موضوع ، ارسال زیربرنامه ها را به عنوان پارامتر پیچیده می کند:
ارجاع های غیرمحلی)متغیرهای . 2 کنترل نوع ایستا . 1آزاد(
کنترل نوع ایستا کامپایلر باید بتواند پارامترهای زیربرنامه ای که به عنوان
پارامتر ارسال شده را از نظر نوع وارسی کند.
وقتی پارامتر زیربرنامه ای با استفاده از نام پارامتر (، R(I,x)مجازی فراخوانی می شود) مثل
کنترل نوع ایستا مهم است تا تضمین شود که تعداد و نوع این پارامترهای این فراخوانی مناسب
است.
65
ارجاع های غیرمحلی) متغیرهای آزاد(
(FN)ارجاع دارد و این زیربرنامهZ به FNفرض کنیم اگر
تعریف محلی برای این متغیرها ندارند.
: وقتی زیربرنامه ای فراخوانی می شود، یک محیط ارجاع غیرمحلی به علت وجود می آید واین محیط غیرمحلی در حین اجرای زیربرنامه مورد استفاده قرار
می گیرد.
این ارجاع غیر محلی را متغیرهای آزاد گویند.
ارجاع غیرمحلی )ارجاع به متغیرهای آزاد ( ، باید همان : راه حل کلی معنا را در حین اجرای زیربرنامه ای که بعنوان پارامتر ارسال شد داشته
باشد که اگر این زیربرنامه در نقطه ای به عنوان پارامتر واقعی ظاهر شده است اجرا می شد ، این معنا را تداعی می کرد.
66
Program main var x0: integer; procedure Q( var I0:integer ; function R(j: integer): integer); var x1 : integer; begin X1 := 4; write ( “in Q , before call of R , I = “,I0 , “x = “,x1); I0 := R(I) End;Procedure p; var I1: integer; function FN (k: integer): integer; begin x0 := X0 + k; FN := I1 + k; write (“in p , I =“,I1, “k= “,K, “x=“,X0) end; begin I1 := 2; Q(x0 , FN); write ( “ in p, I = “,I1 , “x=“, x0) end;
beginX0 :=7;P();writeln(‘in main,x=’,x0);END
(1)
(2)
67
68
69
محیط های مشترک صریح
محیط مشترک برای به اشتراک گذاشتناشیا داده به کار می رود.
مجموعه ای از اشیا داده که باید بین چندینزیربرنامه مشترک باشد در حافظه یک بلوک خاص
تخصیص می یابد. بلوکCOMMON، در فرترنpackage در ادا و متغیرهایی که
+C مشخص می شوند ،کالس ها درCدر externبه صورتو اسمالتاک این ویژگی را دارا هستند.+
محیط مشترک می تواند شامل تعریف متغیرها،ثوابتو انواع باشد اما نمی تواند شامل تعریف زیربرنامه
یا پارامترهای مجازی باشد.
70
مثا:ل
در packageمشخصات:ادا
دسترسی به محیط مشترک در package با دستورwith صورت می گیرد.
With shared_table;
برای دستیابی به نام های موجود درpackage:Shared-table.T1;
71
پیاده سازی محیط های مشترک صریح
در حین ترجمه کامپایلر در مواجعه با دستورwith اعالن از کتابخانه یا بخش دیگری از مربوط به محیط مشترک را متن برنامه بازیابی می کند.
اعالن های محیط مشترک نیز به عنوان اسامی محلیزیربرنامه در جدول نمادها ذخیره می شود تا زیربرنامه به
آنها مراجه کند.
محلی در سگمنت کد زیربرنامه، اشاره گری به بلوک )یعنیآدرس پایه بلوک( را ذخیره می کند.
72
اشتراک صریح متغیرها
اشتراک صریح متغیرها باعث می شود یک متغیر درمحیط زیربرنامه،برای زیربرنامه های دیگر قابل دسترس
باشد. .برای این کار یک »تعریف صدور« باید ارائه شود (define)توسط
مثال:
زیربرنامه که می خواهد به متغیر صادرشده دسترسیداشته باشد از »تعریف وارد کردن« استفاده می کند.
( uses)توسط
73
پیاده سازی حوزه پویا
به جای استفاده از محیط مشترک ،می توان ازوابستگی محیط غیرمحلی با هر زیربرنامه در حال اجرا
استفاده کرد.( محیط غیرمحلی برای زیربرنامهp شامل محیط های )
محلی سابقه فعالیت سایر زیربرنامه هایی است که در ( دستیابی دارند. pحین اجرا به زیربرنامه )
پیاده سازی قاعده تازه ترین وابستگی به دو شیوه صورت می گیرد:
.جدول محیط ارجاع 2.با استفاده از پشته مرکزی 1 مرکزی
74
.پیاده سازی با توجه به پشته 1مرکزی:
در ورود به زیربرنامه ،رکورد فعالیت ایجاد و هنگامخروج از آن از بین می رود.
جستجو در هر ارجاع غیر محلی ،هم مستلزم زمانو هم ذخیره نمایش هایی از خود شناسه ها در
جدول های وابستگی محلی است.
در این روش نمی توان ازمحاسبات آدرس پایه و
آفست استفاده کرد.
75
.جدول محیط ارجاع 2مرکزی:
این جدول در طول اجرای برنامه،تمام سابقه هایصرفنظر از فعالیت فعلی شناسه ها را در بر می گیرد.)
(اینکه شناسه ها محلی اند یا غیر محلی به ازای هر شناسه یک ورودی در جدول قرار می گیرد
و هر ورودی یک نشانگر فعالیت دارد که فعال بودن یا نبودن وابستگی را مشخص می کند.
تمام ارجاع ها توسط الگوی آدرس پایه و آفست،بهپشته مرکزی سوق داده می شود.
ورود به زیربرنامه و خروج از آن،گران تمام میشود،زیرا هر تغییر در محیط ارجاع مستلزم تغییرات در
جدول مرکزی است. برای بازیابی وابستگی ها نیاز به پشته زمان اجرا داریمکه به عنوان یک پشته مخفی منظور می شود.
76
77
پیاده سازی حوزه ایستا
رایج ترین روش برای پیاده سازی حوزه ایستا در زبانهایی که زیربرنامه های تودرتو دارند ساخت زنجیرهای
ایستا است. نیاز به اشاره گر به رکورد فعالیت ) اشاره گر حوزه
ایستا( داریم.
از پیوند ایستا به منظور دسترسی به متغیرهایغیرمحلی استفاده می کنیم.
78
مثال:
79
در زمان رجوع به یک متغیر غیرمحلی ،رکورد فعالیت حاوی آن متغیر را به دو شیوه می توان یافت:
. از آغاز زنجیره ایستا،جستجو را انجام دهیم تا رکورد فعالیت 1موردنظر را پیدا کنیم.
. تودرتویی حوزه ها در زمان ترجمه معلوم می شود.بنابراین 2کامپایلر نه تنها غیرمحلی بودن ارجاع را تعیین می کند بلکه
می تواند طول زنجیر ایستا تا رکورد فعالیت موردنظر را محاسبه کند.
80
ارجاع واقعی با یک زوج مرتب از اعداد صحیح می تواند نشان (آفست محلی،موقعیت زنجیرداده می شود:)
اختالف بین عمق ایستای روالی که حاوی را Xاست و عمق ایستای روالی که Xارجاع به
اعالن کرده است)عمق تودرتویی(.
عمق ایستا عددی است که به یک حوزه ایستا داده می شود این عددنشان می دهد حوزه
موردنظر در چه عمقی از خارجی ترین حوزه واقع شده است.
مثال:Procedure A is procedure B is procedure C is … end; :
… end; … end;
81
استفاده می کنیم: نمایشگر در این پیاده سازی،از
نمایشگر بردار جداگانه ای است که زنجیر ایستایفعلی هنگام ورود به هر زیربرنامه را در خود نگه
نمایشگر جدا از پشته مرکزی است و در مجموعه می دارد.ای از ثبات های سریع نمایش داده می شود.
هر سطر آن مربوط به یک رکورد فعالیت میباشد.
ارجاع به نمایشگر توسط دو آفست گفته شدهصورت می گیرد .مقدار اول تعداد مراحل برگشت به عقب از انتهای زنجیر تا به رکورد موردنظر برسیم و
مقدار دوم آفستی در رکورد فعالیت می باشد.
82
83
یک روزیک ساعتیک دقیقه
هرگز باز نمی گردندپس لطفا
از جنگ بپرهیزیداز خشم دوری کنید
عاشقانه حرف بزنید را وسعت لبخندتانو
بخشید.
با سپاس
84