84
ا روی ی ک ادرا ه م ط ا ف ل ص م1 ی ک د ی ب اد ی س وطه: ا! ب ر م اد ی س ا

به نام خدا

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: به نام خدا

رویا •ادراکی

فاطمه •مصلحی

1

استاد مربوطه: استاد بیدکی

Page 2: به نام خدا

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

Page 3: به نام خدا

مفاهیم زیربرنامه ها و تعاریف اولیه

در زبان های برنامه سازی مدرن ، مجموعه ای از دستورات که هدف مشترکی دنبال می کنند ، برای استفاده مجدد درون

زیربرنامه ها نوشته می شوند.

زیربرنامه سطحی از انتراع را در برنامه فراهم می کند ، زیرا مجموعه ای از دستورات درون برنامه با یک دستور

فراخوان جایگزین می شوند.

پس جزییات پیاده سازی را پنهان می کند و خوانایی برنامه ها با نمایش ساختار منطقی برنامه و پنهان کردن جزییات

سطح پایین ، افزایش می یابد.

3

Page 4: به نام خدا

زیربرنامه ساده فراخوانی -برگشت

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

زیربرنامه در نقطه ی فراخوانی قرار داده شده است.

فرضیه های قاعده کپی:

.زیربرنامه ها نمی توانند 1 بازگشتی باشند.

.نیاز به دستور فراخوانی صریح 2 است.

.زیربرنامه ها در هر فراخوانی 3 باید بطور کامل

اجرا شوند..کنترل به نقطه فراخوانی برمی 4

گردد..در هر زمان فقط یک زیربرنامه 5

کنترل را در دست دارد.

4

Page 5: به نام خدا

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

دستور فراخوانی را حذف می کند،فراخوانی جدیدی به همان زیربرنامه را معرفی می کند که برای آن

.جایگزین دیگری الزم است

5

Page 6: به نام خدا

6

Page 7: به نام خدا

7

Page 8: به نام خدا

فراخوانی زیربرنامه ها به دوشکل انجام می شود:

فراخوانی تابع: برای زیربرنامه هایی که مقادیر را بطور مستقیم

برمیگردانند.

فراخوانی رویه یا زیرروال: برای زیربرنامه هایی که اثرات جانبی روی داده های مشترک

دارند.

پیاده سازی: فرض می کنیم ترتیب دستورات و عبارات در زمان

.اجرا،بصورت بلوکی از کد هستند

مفسر نرم یا مفسر سخت افزار اجرای این کدها افزار

8

Page 9: به نام خدا

9

Page 10: به نام خدا

در هر نقطه،در حین اجرای برنامه بهنیاز داریم که دستوری را که اشاره گری

در سگمنت کد وجود دارد و فعأل توسط مفسر در حال اجراست را،مشخص کند.

؟؟؟؟؟؟ برای نگهداری نقطه ای که زیربرنامه برنامه از آنجا اجرا می شود،به چه چیزهایی نیاز

داریم؟؟؟؟

اشاره گر دستور CIP)فعلی) چون تمام سابقه های فعالیت یک

زیربرنامه از یک سگمنت کد استفاده باید وجود داشته اشاره گری می کنند،

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

CEP)فعلی) 10

Page 11: به نام خدا

مثال: دارای رکورد فعالیت مراجعه می کند، هر Xمتغیر وقتی دستوری در کد به

است ولی محتویاتش ممکن است با شی دیگری متفاوت باشد.Xشی

11

Page 12: به نام خدا

زیربرنامه فراخوان CIP وCEP می توان را در رکورد فعالیت زیربرنامه ای که

فراخوانی می شود ذخیره کرد.نقطه در این حالت شی داده ای دیگری بنام

توسط سیستم در رکورد فعالیت برگشت بوجود می آید.

؟؟؟؟؟

زیربرنامه قبلی چی میشه؟؟CIP و CEPتکلیف مقدار

شامل فضایی برای دو مقدار نقطه برگشت:(CEPوCIPاشاره گر است)

اگر زیربرنامه ای زیربرنامه دیگر را فراخوانی کند،برای رکورد فعالیت آن قرار می گیرد.CIPو CEPزیربرنامه مقادیر جدیدی در

12

Page 13: به نام خدا

فراخوانی برگشت

• 295شکل صفحه

13

Page 14: به نام خدا

برای شرط استفاده از این مدل ا، بایدسرعت اجرافزایش

در حافظه زیادی اختیار داشته باشیم.

مدل ساده تری از پیاده سازی زیربرنامه

برای رکورد فعالیت هر زیربرنامه بطور ایستا حافظه تخصیصیابد.می

)پیاده سازی های فرترن و کوبول(

و با هر فراخوانی زیربرنامه ،همان رکورد قبلی در اختیارش قرار می گیرد که در

این شرایط که هر زیربرنامه فقط یک رکورد فعالیت دارد،نیازی به اشاره گر

CEPنمی باشد .14

Page 15: به نام خدا

در این مدل توسط سخت افزار نیز،پشتیبانی اندکی ارائه می شود.

مدل کلی تری از فراخوانی و برگشت)برگشت-پرش(

سخت افزار یک دستور برگشت-پرش را تدارک می بیند کهفراخوانی زیربرنامه را با یک دستور سخت افزاری پیاده سازی می

کند. در این مدلCIP اشاره گر دستور فعلی( با ثبات آدرس برنامه ی(

سخت افزار نمایش داده می شود.

نتیجه این مدل پیاده سازی تخصیص ایستای رکوردهای فعالیت

15

Page 16: به نام خدا

برگشت- پرش

• شکل صفحه 296

16

Page 17: به نام خدا

ساده ترین تکنیک مدیریت حافظه در زمان اجرا،روش استفاده از پشته است.

پیاده سازی پشته ای:یاد آوری

برای مدیریت این پشته،نیاز به یک اشاره گر پشته است کههمواره به باالی پشته اشاره می کند.

هنگامی که زیربرنامه ای صدا زده می شود،رکورد جدیدیباالی پشته ساخته می شود و با تمام شدن برنامه، آن را

از باالی پشته حذف می کند. در اغلب پیاده سازی های پاسکال،یک پشته مرکزی برای

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

17

Page 18: به نام خدا

• 298شکل صفحه

18

Page 19: به نام خدا

اگر فراخوانی بازگشتی برنامه امکان مشخصات: می تواند هر Aپذیر باشد،

زیربرنامه ای از جمله خودش را فراخوانی کند.

به دلیل امکان وجود چندین سابقه پیاده سازی: دو اشاره فعالیت بطور همزمان،به هر

نیاز داریم.CIPوCEP گر

به این صورت که در ازای هر فراخوانی زیربرنامه،محتوای در پشته CIPوCEP هردو اشاره گر

ذخیره می شوند و در می POP از پشته RETUTRN ازای

شوند.

زیربرنامه های بازگشتی

19

Page 20: به نام خدا

اعالن پیشرو در پاسکال

زبان هایی که کامپایلر آنها در یک گذر کار می کنند ، موقع ترجمه یزیربرنامه های بازگشتی ممکن است با مشکالتی مواجه شوند.

را فراخوانی کند Bزیربرنامه Aدو زیربرنامه باشند بطوریکه B,Aاگر مثال: را فراخوانی کند، نمی توان تعیین کرد که کدام A نیز زیربرنامهBو

زیربرنامه باید زودتر نوشته شود. چون هر زیربرنامه ای که فراخوانی می شود ،کامپایلر باید آن را

ترجمه کرده باشد تا بتواند ارجاع به آن را بسازد.:پاسکال این مشکل را با اعالن پیشرو حل می کند

Procedure A( (پارامتر مجازی ;forward;

20

Page 21: به نام خدا

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

Page 22: به نام خدا

وقتی که عملیاتی در یک زبان نوشته می شود،باید چگونگی آماده سازی داده ها

نیز معلوم باشد.

صفات کنترل داده ها تعیین می کند که وقتی به یک عملیات می رسیم:

صفات کنترل داده ها

- چه داده هایی باید برای آن عملیات قابل مشاهده و در 1دسترس باشند.

- این داده ها چگونه برای عملیات آماده شوند.2- نتایج عملیات چگونه ذخیره و توسط عملیات بعدی بازیابی 3

شوند.22

Page 23: به نام خدا

1 -Y غیرمحلی یامتغیر محلی ممکن است یک بایدYباشد.از کدام

(.نقش حوزه استفاده کنیم)باشد که از طریق پارامتر مجازی یک Y- اگر 2

زیربرنامه انتقال یافتهمطرح می انتقال پارامتر است،آنگاه روش های

شود. فاقد زیربرنامه نام یک Y- اگر 3

برگشت نتایجپارامترباشد،مکانیزم های مطرح می شود.

مثال:y:را در نظر بگیرید.مساله مهم کنترل داده در مورد X:=y+2*Zدستور

23

Page 24: به نام خدا

حوزه

یک متغیر ، محدوده ی دستوراتی است که متغییر حوزه ی در آنها قابل مشاهده است.

قوانین حوزه ی یک زبان تعیین می کند که حضور یکنام در برنامه چگونه و به چه متغیری مربوط می شود.

یه عبارت بهتر به کمک قوانین حوزه می توانیمتعیین کنیم که ارجاع به متغیرهای خارج از زیربرنامه

ی فعلی به کدام اعالن مربوط می شوند.

پس از بدست آوردن اعالن مورد نظر، صفات آنمتغیرها از جمله آدرس حافظه قابل محاسبه می

شود)برای کامپایلر( 24

Page 25: به نام خدا

: در یک عبارت محاسباتی وقتی انتقال مستقیم- 1عبارتی محاسبه می شود،

در اختیار بخش مستقیم نتیجه آن عبارت بصورت بعدی عملیات قرارمیگیرد.این

نوع انتقال: الف(در حافظه موقت ذخیره می شود. ب(تا آخر طول عمرش

معموال نامی ندارد

مثال: با انتقال مستقیم به عملیات X:=Y+2*Z در عبارت Z*2 عبارت

منتقل می شود. Yجمع با

داده ها به دو روش به عنوان عملوند عملیات به کار می روند:

با اعالن های ضمنی و صریح از طریق داده ی نامدار: -2در برنامه قابل استفاده هستند.

وقتی می خواهیم به داده ای دوباره مراجعه کنیم از طریق نام به آن رجوع می کنیم.

25

Page 26: به نام خدا

عناصر زیادی در برنامه نامدار هستند،ولی سه مورد ازآنها در کنترل داده ها اهمیت دارند:

- 3- پارامترهای مجازی 2- متغیرها 1انواع داده ای تعریف شده

عناصر نامدار

نام یک متغیر ساده،پارامتر مجازی، ساده: زیربرنامه و ...

اسامی

نامی که به یک مولفه از ساختمان مرکب: داده مربوط می شود.

یک A[3] اسمی ساده و A یک آرایه باشد، نام Aاگر مثال: .نام مرکب است

.

26

Page 27: به نام خدا

در حین اجرای برنامه داده هایی در حافظهکامپیوتر ایجاد می شود و مورد استفاده قرار

می گیرند.

وابستگی ها و محیط های ارجاع

برای هر داده معموال یک نام)شناسه( در نظر می گیرند.

اینکه کدام شناسه به چه داده ای مربوط شده است می گویند.وابستگیرا

در آغاز اجرای برنامه اصلی دو دسته از وابستگی ها اتفاق می افتد:(ترجمهیا زمان اجرا )انقیاد هر متغیر درون برنامه را به یک نام وابستگی شناسه ها:

داده)حافظه( مقید می کند.: که نام زیربرنامه هایی را که در برنامه وابستگی زیربرنامه ها

فراخوانی می شود به یک تعریف بخصوص مرتبط می سازد.

مثال:چهار عمل ارجاعی اتفاق می A:=B+fun(C) در دستور

افتد. سه عمل ارجاعی، عملوندهای متناظر با سه شناسه A,B,C را تعیین می کنند و عمل ارجاعی چهارم زیر برنامه

را ارزیابی می کند.funمربوط به 27

Page 28: به نام خدا

در فراخوانی و برگشت از زیربرنامه ها،وابستگی ها مرتبا ایجاد و نابود می شوند. بر این اساس پنج

مفهوم اصلی کنترل داده:

- محیط های ارجاع1 - قابلیت مشاهده2 -حوزه پویا3 -عملیات ارجاع4 -ارجاع های محلی،غیر محلی و عمومی5

مفاهیم اصلی کنترل داده ها

28

Page 29: به نام خدا

محیط ارجاع یک دستور،مجموعه همه ی متغیرهایی)شناسه ها( است که برای آن دستور

قابل مشاهده و در دسترس هستند.

محیط های ارجاع

است و در طول ثابت محیط ارجاع در حین اجرامی ماند.بدون تغییر اجرا

حوزه ایستا محیط ارجاع یک دستور در یک زبان باشامل متغیرهایست که در حوزه آن دستور اعالن

شده اند بعالوه مجموعه متغیرهایی که از حوزه های باالتر برای آن دستور قابل مشاهده اند.

:محیط ارجاع چند جزء دارد-محیط ارجاع 2- محیط ارجاع محلی 1

غیرمحلی- محیط ارجاع از 4- محیط ارجاع عمومی 3

پیش تعریف شده 29

Page 30: به نام خدا

محیط ارجاع غیر محلی

مجموعه ای از وابستگی های مربوط به شناسه هایی که در زیربرنامه استفاده می شوند ولی هنگام ورود به آن ایجاد نمی

شوند. تعریف شده GدرFدر پاسکال اگر تابع مثال:

،محیط ارجاع Fباشد،محیط ارجاع غیرمحلی برای می باشد.Gمحلی برای

محیط ارجاع محلی

شامل متغیرها یا وابستگی هایست که در هنگام ورود به یک زیربرنامه ایجاد می شوند و

فقط در آن زیر برنامه قابل مشاهده هستند.

امترهای مجازی،متغیرهای محلی،زیربرنامه پارمثال: های که درون زیربرنامه تشکیل شده اند...

30

Page 31: به نام خدا

محیط ارجاع از پیش تعریف شده

شامل اسامی است که توسط کامپایلر تعریف شده و داخل برنامه قابل دسترس هستند. این

شناسه ها بدون اعالن صریح قابل استفاده هستند.

داده ها یا نام زیربرنامه هایی که در مثال: کتابخانه استاندارد هر زبان تعریف شده اند.

محیط ارجاع عمومی

متغیرها و وابستگی هایی که در آغاز اجرای برنامه ایجاد می شوند و در همه زیربرنامه ها

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

31

Page 32: به نام خدا

قابلیت مشاهده

وابستگی یک شناسه)یک متغیر یا زیربرنامه(، وقتی در یک زیربرنامه قابل

مشاهده است که بخشی از محیط ارجاع آن باشد. یک متغیر ممکن است وجود داشته باشد ولی در یک زیربرنامه قابل

مشاهده نباشد. اصطالحا متغیر پنهان است و در محیط ارجاع آن زیربرنامه یا

دستور بخصوص قرار ندارد.

حوزه پویا

دارد و یک ایستا وابستگی هر شناسه یک وابستگی.پویاوابستگی

قابل تعیین است ولی ترجمه هنگام ایستا وابستگی برنامه تعیین می شود)با اجرای هنگام بستگی پویا وا

مفهوم رکورد فعالیت در ارتباط است(.32

Page 33: به نام خدا

: حوزه پویا

33

Page 34: به نام خدا

: حاوی ترتیب اعالن اشاره گر زنجیره ایستا زیربرنامه هاست.

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

زیربرنامه ها مشخص می شوند. قواعد حوزه ایستا، بدون نیاز به ردیابی اجرای برنامه می تواند اسامی ارجاع

شده در برنامه را به اعالن آن ها ربط دهد.

حوزهایستا

34

Page 35: به نام خدا

با توجه به یک شناسه و محیط ارجاع ، وابستگی مناسبی را برای آن شناسه در آن محیط ارجاع پیدا می کند و شیء داده ی وابسته یا تعریف برنامه را

برمی گرداند.

کامپایلر برای تولید کد به عملیات ارجاع نیاز دارد.وقتی که نامی را پردازش می کند باید بداند

.یک متغیر است یا زیربرنامه

امضای ارجاع:

عملیات ارجاع

Ref_op: id* refrencing_environment data_object or subprogram

35

Page 36: به نام خدا

نام مستعار برای اشیای داده اگر در یک محیط ارجاع بتوان از طریق بیش از یک نام به شی داده

ای دست یافت هر کدام از نام ها را نام مستعار شی می نامند.

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

Page 37: به نام خدا

نام مستعار مشکالتی را برای برنامه نویس به وجود می آورد،زیرا درک برنامه را دشوار می کند.

; X := A + B:مثالY := C + D ;

به خاطر مشکالتی که نام مستعار ایجاد می کند ،طراحینام مستعار محدود کردن یا حذفزبان جدید سعی در

دارند.

می مستقل از یکدیگر است و به هر ترتیبی امکان پذیرX,Yانتساب به باشند.برای یک شیء داده باشند در این صورت این دو نام مستعاری X,Cاما اگر

دستور به هم وابسته اند و نیاز به ترتیب اجرای مشخص دارند.

37

Page 38: به نام خدا

ساختار بلوکی

ساخت یافته مفهوم ساختار بلوک در زبان هایپیدا شد.پاسکال بلوکی مثل

در یک زبان ساخت یافته بلوکی،هر برنامه یازیربرنامه به صورت مجموعه ای از بلوک های

تودرتو سازمان دهی می شود. هر بلوک، با مجموعه ای از اعالن ها برای

اسامی)اعالن متغیرها،تعریف نوع،تعریف ثوابت و غیره(شروع می شود و سپس دستورات قرار

می گیرند. ارجاع اعالن های موجود در یک بلوک،محیط

آن را تعریف می کند.محلی

38

Page 39: به نام خدا

قواعد حوزه ی ایستا مربوط به برنامه هایساخت یافته بلوکی:

. اعالن های ابتدای هر بلوک محیط ارجاع محلی بلوک را می 1سازند.هر ارجاع به شناسه ای در بدنه بلوک)که شامل بلوک های تودرتو نیست(،به عنوان ارجاع به اعالن محلی آن شناسه مربوط

می شود.. اگر در بدنه بلوک برای شناسه ای اعالن محلی وجود 2

در اولین بلوکی نداشته باشد،آن ارجاع به یک اعالن که آن را در بر گرفته محسوب می شود.

در بلوک های تودرتو هر اعالن در بلوک داخلی از بلوک .3های خارجی تر پنهان است.

.بلوک می تواند دارای نام باشد. نام بلوک به عنوان بخشی از 4محیط ارجاع بلوکی که آن را در بر می گیرد محسوب می

شود.Procedure p ( A : real ) مثال:

P.نام محلی در برنامه اصلی است پارامتر مجازیAبخشی از محیط محلی p در برنامه اصلیP قابل ارجاع ولیA .قابل ارجاع نیست

39

Page 40: به نام خدا

اعالن ها در بلوک های محلی

برای پیاده سازی این اعالن ها نمی توان از رکورد فعالیت استفاده کرد بلکه از تکنیکی شبیه ساختار حافظه استفاده

می کنیم.مثال:

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

40

Page 41: به نام خدا

داده های محلی و محیط های ارجاع محلی

محیط محلی زیربرنامه شامل شناسه های که در عنوانزیربرنامه )به جز نام خود زیربرنامه( اعالن شده اند.

برای محیط های محلی قواعد حوزه پویا و ایستابرای پیاده سازی حوزه ی ایستا کامپایلر ممکن است سازگارند.

جدولی از اعالن های محلی برای شناسه ها داشته باشد.

پیاده سازی قاعده حوزه ی پویا به دو روش انجام می :گیرد

. حذف2 نگهداری 1.

در x: وابستگی گهداری نحین فراخوانی های

مختلف، نگهداری می شود.

در بین فرا X : وابستگی حذفخوانی های مختلف حذف می

شود.41

Page 42: به نام خدا

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

Page 43: به نام خدا

پیاده سازی محیط هایارجاع

در این پیاده سازی بهتر است محیط محلی زیربرنامه بهصورت جدول محیط ارجاع نشان داده شود.

با استفاده از این جدول ، پیاده سازی روش های حذف ونگهداری ساده تر خواهد شد.

43

Page 44: به نام خدا

نگهداری:

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

ایجاد می شود. این جدول به عنوان بخشی

محسوب subاز سگمنت کد می شود.

کامپایلر اندازه هر متغیر رادر جدول محیط محلی تعیین می کند و آفست شروع شی

داده را از شروع سگمنت کد)آدرس پایه( پیدا می کند.

44

Page 45: به نام خدا

:حذف

اگر محیط محلیsub در بین فراخوانی ها حذف شود و هنگام ورود به آن دوباره ایجاد

شود،جدول محیط محلی متغیرهای حذف subشده ،به عنوان بخشی از رکورد فعالیت

تخصیص می یابد. رکورد فعالیت هنگام

در یک پشته subورود به مرکزی ایجاد و با خروج از زیربرنامه حذف می شود.

)حذف محیط محلی به صورت خودکار انجام می

در حال اجرا subاگر گیرد.(مراجعه Yباشد وبه متغیر

کند،محل شی داده با افزودن Yوابسته به

CEP به محتویاتYآفستبه دست می آید.

45

Page 46: به نام خدا

به چند نکته باید حذف ونگهداریدر پیاده سازی توجه کرد:

.در پیاده سازی ساختار فراخوانی –برگشت)غیر 1بازگشتی(نگهداری و حذف پیاده سازی یکسانی

دارند..با هر متغیر به دو شکل 2

:می توان برخورد کرد

.نام زیر برنامه به 3اعالنی برای آن

زیربرنامه در محیط محلی وابسته است و همواره نگهداری می

شود..نام پارامتر مجازی ،یک شی داده را نشان4

می دهد که در هر بار فراخوانی زیربرنامه ،مقدار جدیدی می گیرد.با این پارامترها به روش

حذف وابستگی برخورد می شود.

o آنهایی که مقادیرشان در سگمنتکد نگهداری می شود

o آنهایی که مقادیرشان در رکوردغعالیت قرار می گیرد و باید حذف

شوند.

در پاسکال static نگهداری automatic حذف

46

Page 47: به نام خدا

امتیازات ومعایب روش نگهداری و حذف:

روش نگهداری باعث ایجاد برنامه هایی می شود کهنسبت به گذشته حساس هستند .

در روش حذف برای نگهداری متغیرها بین فراخوانیهای مختلف باید برای آن زیربرنامه به صورت غیرمحلی

اعالن شوند. برای زیربرنامه بازگشتی ،روش حذف ،روش

متداولتری است.

47

Page 48: به نام خدا

در یک برنامه کامپیوتری،موارد بسیاری رخ می دهد که یک سری اطالعات باید بین تعدادی از زیربرنامه

گذاشته شود. اشتراک ها بهبرای دسترسی به داده های مشترک:

پارامترها و انتقال پارامترها

انتقال پارامترها و نتایج1.

محیط های مشترک صریح2.

محیط های به چهار طریق می توان بین زیربرنامه ها ایجاد کرد تا به مشترکی

محیط های مشترک و غیرمحلی 1.اطالعات مشترک دسترسی داشته باشند:صریح

حوزه ی ایستا2.

حوزه ی پویا3.

وراثت4.48

Page 49: به نام خدا

پارامترهای مجازی و واقعی

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

می شود.

پارامتر مجازی نوعی شی داده محلی در یک زیربرنامهاست که نام آن شناسه ای ساده است و اعالن آن ،نوع و

سایر صفات را مشخص می کند.

پارامتر واقعی یک شی داده است که با زیر برنامهفراخوان مشترک است.

49

Page 50: به نام خدا

تناظر بین پارامترهای واقعی و مجازی

oتناظر بین پارامترهای مجازی و تناظر موقعیتی :واقعی بر اساس موقعیت آنها در لیست

پارامترهای واقعی و مجازی تعیین می شود. oدر برخی زبان ها چون ادا تناظر بر اساس نام:پارامترهای مجازی با پارامترهای واقعی صریحا توسط

Sub(Y=>B,X=>27)نام متناظر می شوند.

.اغلب زبان ها از تناظر موقعیتی استفاده می کنند

. تناظر بر 2. تناظر موقعیتی 1اساس نام

50

Page 51: به نام خدا

مدل های معنایی انتقال پارامترها

خود را مدل معنایی انتقال پارامتر قبل از انتخاب روش انتقال پارامترها، باید مشخص کنیم و طبق مدل معنایی مورد انتظار بهترین روش را برگزینیم.

پارامترهای مجازی با یکی از سه مدل معنایی زیر شناخته می شوند:

حالت پارامترهای واقعی به پارامترهای مجازی ارسال شوند )1. (ورودی

مقدار پارامتر توسط زیربرنامه تولید و هنگام خروج به پارامتر واقعی 2.(حالت خروجیزیربرنامه ارسال شود )

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

(حالت ورودی خروجیزیربرنامه فراخوان قرار می گیرد) 51

Page 52: به نام خدا

انتقال پارامترها روش هایی هستند که پارامترها را کرده و از آنها دریافت می ارسالبه زیربرنامه ها

کنند.

روش های انتقال پارامتر:

فراخوانی با نام 1.

فراخوانی با ارجاع)آدرس(2.

فراخوانی با مقدار 3.

فراخوانی با مقدار ثابت 4.

فراخوانی با نتیجه 5.

فراخوانی با مقدار-نتیجه6.

انتقال پارامترها

52

Page 53: به نام خدا

فراخوانی با نام

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

Page 54: به نام خدا

مثال:اگر در مثال قبل ،فراخوانی با نام انجام شود،با وجود

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

Page 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-

-4 -6 بعد از فراخوانی

55

Page 56: به نام خدا

فراخوانی با مقدار

در این روش مقدار راست پارامتر واقعی در پارامتر مجازیکپی می شود.

در زیربرنامه دیگر به پارامتر واقعی دسترسی نداریم وتغییراتی که در پارامتر مجازی داده می شود،به پارامتر

واقعی اعمال نمی شود.

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

Page 57: به نام خدا

فراخوانی با مقدار-نتیجه

در این روش فراخوانی،مقدار پارامتر واقعی در پارامتر مجازی کپیمی شود.

داخل زیربرنامه هر تغییری فقط روی پارامتر مجازی انجام می گیردو روی پارامتر واقعی اثری ندارد.

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

گیرد.

فراخوانی با ارجاع و مقدار-نتیجه از دید برنامه نویس نتایج یکسانی دارند.

معرفی شد.Wدر الگول-

57

Page 58: به نام خدا

فراخوانی با مقدار ثابت

مشابه فراخوانی با مقدار ،ومقدار پارامتر واقعی درپارامتر مجازی کپی می شود و در حین اجرای زیربرنامه

پارامتر مجازی قابل تغییر نیست. لذا این پارامتر مجازی مثل یک متغیر ثابت محلی عمل می

کند.

فراخوانی با نتیجه

از این شیوه فقط جهت برگرداندن نتیجه بهبرنامه فراخوان استفاده می شود.

مقدار اولیه پارامتر واقعی در زیربرنامه قابلاستفاده نیست.

هنگامی که زیربرنامه تمام می شود، مقدارنهایی پارامتر مجازی بعنوان مقدار جدید

پارامتر واقعی محسوب می شود.تابع ورودی ندارد و فقط دارای

پارامتر خروجی است.58

Page 59: به نام خدا

پیاده سازی انتقال پارامترها

اعمالی که در انتقال پارامترها انجام می شوند،:زیربرنامه اتفاق می افتد.نقطه ی فراخوانی اعمال که در هر 1( ومقدمهاعمالی که مربوط به ورود و خروج در خود زیربرنامه هستند که 2(

نامیده می شوند.مؤخره

:اعمال نقطه فراخوانی1(

در نقطه ی فراخوانی،عبارات پارامتر واقعی ارزیابی میشوند و کپی هایی از مقادیر آن ها یا اشاره گرهایی به

داده ها ایجاد و تنظیم می شوند. این ارزیابی در محیط ارجاع زیربرنامه فراخوان صورت

می گیرند. سپس کنترل به زیربرنامه منتقل می شود و دو اشاره گر

)اشاره گر CIP)اشاره گر محیط فعلی( و CEPموسوم به دستور فعلی( تنطیم می شوند.

قبل از انتقال کنترل، رکورد فعالیتی برای فراخوانیفعلی زیربرنامه ایجاد و در باالی پشته زمان اجرا درج می

شود.

59

Page 60: به نام خدا

( اعمال بعد از ورود به زیربرنامه:2

مقدمه ی زیربرنامه عملیات انتقال پارامترها را تکمیلمی کند. مقادیر پارامتر واقعی در پارامتر مجازی کپی می شوند یا اشاره گر به پارامترهای واقعی در اشاره

گر به پارامتر مجازی کپی می شوند. قبل از خاتمه زیربرنامه ، مؤخره آن، نتیجه را در

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

های موقت یا ثبات ها کپی می شوند. زیربرنامه خاتمه میابد و رکورد فعالیت آن از بین می رود.

60

Page 61: به نام خدا

کامپایلر در پیاده سازی انتقال پارامترها دو وظیفه دارد:

درست برای اعمال هنگام فراخوانی و مقدمه و مؤخره ی تولید کد اجرایی 1(زیربرنامه.) کد اجرایی مورد نیاز برای هر روش انتقال پارامتر متفاوت است(

برای اطمینان از سازگاری نوع پارامترهای واقعی و نوع ایستا کنترل 2(پارامترهای رسمی متناظر. برای این منظور کامپایلر باید امضای کامل

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

شوند(

61

Page 62: به نام خدا

نتیجه عبارت )ارسال پارامتر(

: مثال

را از طریق ارجاع ارسال کنیم: a+b اگر بخواهیم عباراتمترجم در نقطه ی فراخوانی ابتدا باید این عبارت را ارزیابی کند.1.ذخیره کند.Pسپس آن را در حافظه موقت در 2. Q را بعنوان پارامتر به p)اشاره گر به آن محل )حافظه موقت در 3.

ارسال کند.

انتقال با ارجاع موجب می شود تا پارامتر مجازی، حاوی اشاره گر به محل 1. باشد.p حافظه موقت در

نامی نداردکه بتوان به آن مراجعه کرد ،هر انتسابی که در pچون این محل در 2.Qاز انتقال به صورت می گیرد ، مقداری را تغیر نمی دهد

استفاده می شودمقدارروش

Q (&(a+b), &b)

62

Page 63: به نام خدا

نام مستعار و پارامترها)ارسال پارامتر(

امکان استفاده از نام مستعار در ارتباط با انتقال پارامترها، در اغلب زبان ها وجود دارد.

هنگام انتقال پارامترها ، نام مستعار به دو روش بوجود می آید:

شیء داده ای که از طریق ارجاع ارسال پارامتر مجازی و متغیر غیرمحلی :1(شد، در داخل زیربرنامه ، از طریق یک نام غیرمحلی ، بطور مستقیم قابل

دستیابی است.

یک شیء داده ممکن است در آن واحد، در دو موقعیت دو پارامتر مجازی: 2(مختلف )در یک

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

63 مستعار خواهند بود.

Page 64: به نام خدا

ارسال زیربرنامه به عنوان پارامتر

در بسیاری از زبان ها ، زیربرنامه را می توان به عنوان پارامتر واقعی به زیربرنامه دیگری ارسال کرد.

است زیربرنامهشامل نام پارامتر واقعی در این حالت ،عبارت است. زیربرنامهنوع متناظر با آن از پارامتر مجازی و هم چنین

مثال: )پاسکال(Procedure Q( x: integer ; function R(y,z:integer):integer)

که یک )(R. 2 از نوع صحیح X. 1دو پارامتر مجازی دارد: )(Qروال تابع است

نیز دو عدد صحیح به عنوان ورودی دریافت می کند و خروجی از نوع )(R تابع .صحیح برمی گرداند

Q(27,fn) fn پارامتر واقعی: Rپارامتر مجازی : ()64

Page 65: به نام خدا

دو موضوع ، ارسال زیربرنامه ها را به عنوان پارامتر پیچیده می کند:

ارجاع های غیرمحلی)متغیرهای . 2 کنترل نوع ایستا . 1آزاد(

کنترل نوع ایستا کامپایلر باید بتواند پارامترهای زیربرنامه ای که به عنوان

پارامتر ارسال شده را از نظر نوع وارسی کند.

وقتی پارامتر زیربرنامه ای با استفاده از نام پارامتر (، R(I,x)مجازی فراخوانی می شود) مثل

کنترل نوع ایستا مهم است تا تضمین شود که تعداد و نوع این پارامترهای این فراخوانی مناسب

است.

65

Page 66: به نام خدا

ارجاع های غیرمحلی) متغیرهای آزاد(

(FN)ارجاع دارد و این زیربرنامهZ به FNفرض کنیم اگر

تعریف محلی برای این متغیرها ندارند.

: وقتی زیربرنامه ای فراخوانی می شود، یک محیط ارجاع غیرمحلی به علت وجود می آید واین محیط غیرمحلی در حین اجرای زیربرنامه مورد استفاده قرار

می گیرد.

این ارجاع غیر محلی را متغیرهای آزاد گویند.

ارجاع غیرمحلی )ارجاع به متغیرهای آزاد ( ، باید همان : راه حل کلی معنا را در حین اجرای زیربرنامه ای که بعنوان پارامتر ارسال شد داشته

باشد که اگر این زیربرنامه در نقطه ای به عنوان پارامتر واقعی ظاهر شده است اجرا می شد ، این معنا را تداعی می کرد.

66

Page 67: به نام خدا

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

Page 68: به نام خدا

68

Page 69: به نام خدا

69

Page 70: به نام خدا

محیط های مشترک صریح

محیط مشترک برای به اشتراک گذاشتناشیا داده به کار می رود.

مجموعه ای از اشیا داده که باید بین چندینزیربرنامه مشترک باشد در حافظه یک بلوک خاص

تخصیص می یابد. بلوکCOMMON، در فرترنpackage در ادا و متغیرهایی که

+C مشخص می شوند ،کالس ها درCدر externبه صورتو اسمالتاک این ویژگی را دارا هستند.+

محیط مشترک می تواند شامل تعریف متغیرها،ثوابتو انواع باشد اما نمی تواند شامل تعریف زیربرنامه

یا پارامترهای مجازی باشد.

70

Page 71: به نام خدا

مثا:ل

در packageمشخصات:ادا

دسترسی به محیط مشترک در package با دستورwith صورت می گیرد.

With shared_table;

برای دستیابی به نام های موجود درpackage:Shared-table.T1;

71

Page 72: به نام خدا

پیاده سازی محیط های مشترک صریح

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

اعالن های محیط مشترک نیز به عنوان اسامی محلیزیربرنامه در جدول نمادها ذخیره می شود تا زیربرنامه به

آنها مراجه کند.

محلی در سگمنت کد زیربرنامه، اشاره گری به بلوک )یعنیآدرس پایه بلوک( را ذخیره می کند.

72

Page 73: به نام خدا

اشتراک صریح متغیرها

اشتراک صریح متغیرها باعث می شود یک متغیر درمحیط زیربرنامه،برای زیربرنامه های دیگر قابل دسترس

باشد. .برای این کار یک »تعریف صدور« باید ارائه شود (define)توسط

مثال:

زیربرنامه که می خواهد به متغیر صادرشده دسترسیداشته باشد از »تعریف وارد کردن« استفاده می کند.

( uses)توسط

73

Page 74: به نام خدا

پیاده سازی حوزه پویا

به جای استفاده از محیط مشترک ،می توان ازوابستگی محیط غیرمحلی با هر زیربرنامه در حال اجرا

استفاده کرد.( محیط غیرمحلی برای زیربرنامهp شامل محیط های )

محلی سابقه فعالیت سایر زیربرنامه هایی است که در ( دستیابی دارند. pحین اجرا به زیربرنامه )

پیاده سازی قاعده تازه ترین وابستگی به دو شیوه صورت می گیرد:

.جدول محیط ارجاع 2.با استفاده از پشته مرکزی 1 مرکزی

74

Page 75: به نام خدا

.پیاده سازی با توجه به پشته 1مرکزی:

در ورود به زیربرنامه ،رکورد فعالیت ایجاد و هنگامخروج از آن از بین می رود.

جستجو در هر ارجاع غیر محلی ،هم مستلزم زمانو هم ذخیره نمایش هایی از خود شناسه ها در

جدول های وابستگی محلی است.

در این روش نمی توان ازمحاسبات آدرس پایه و

آفست استفاده کرد.

75

Page 76: به نام خدا

.جدول محیط ارجاع 2مرکزی:

این جدول در طول اجرای برنامه،تمام سابقه هایصرفنظر از فعالیت فعلی شناسه ها را در بر می گیرد.)

(اینکه شناسه ها محلی اند یا غیر محلی به ازای هر شناسه یک ورودی در جدول قرار می گیرد

و هر ورودی یک نشانگر فعالیت دارد که فعال بودن یا نبودن وابستگی را مشخص می کند.

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

ورود به زیربرنامه و خروج از آن،گران تمام میشود،زیرا هر تغییر در محیط ارجاع مستلزم تغییرات در

جدول مرکزی است. برای بازیابی وابستگی ها نیاز به پشته زمان اجرا داریمکه به عنوان یک پشته مخفی منظور می شود.

76

Page 77: به نام خدا

77

Page 78: به نام خدا

پیاده سازی حوزه ایستا

رایج ترین روش برای پیاده سازی حوزه ایستا در زبانهایی که زیربرنامه های تودرتو دارند ساخت زنجیرهای

ایستا است. نیاز به اشاره گر به رکورد فعالیت ) اشاره گر حوزه

ایستا( داریم.

از پیوند ایستا به منظور دسترسی به متغیرهایغیرمحلی استفاده می کنیم.

78

Page 79: به نام خدا

مثال:

79

Page 80: به نام خدا

در زمان رجوع به یک متغیر غیرمحلی ،رکورد فعالیت حاوی آن متغیر را به دو شیوه می توان یافت:

. از آغاز زنجیره ایستا،جستجو را انجام دهیم تا رکورد فعالیت 1موردنظر را پیدا کنیم.

. تودرتویی حوزه ها در زمان ترجمه معلوم می شود.بنابراین 2کامپایلر نه تنها غیرمحلی بودن ارجاع را تعیین می کند بلکه

می تواند طول زنجیر ایستا تا رکورد فعالیت موردنظر را محاسبه کند.

80

Page 81: به نام خدا

ارجاع واقعی با یک زوج مرتب از اعداد صحیح می تواند نشان (آفست محلی،موقعیت زنجیرداده می شود:)

اختالف بین عمق ایستای روالی که حاوی را Xاست و عمق ایستای روالی که Xارجاع به

اعالن کرده است)عمق تودرتویی(.

عمق ایستا عددی است که به یک حوزه ایستا داده می شود این عددنشان می دهد حوزه

موردنظر در چه عمقی از خارجی ترین حوزه واقع شده است.

مثال:Procedure A is procedure B is procedure C is … end; :

… end; … end;

81

Page 82: به نام خدا

استفاده می کنیم: نمایشگر در این پیاده سازی،از

نمایشگر بردار جداگانه ای است که زنجیر ایستایفعلی هنگام ورود به هر زیربرنامه را در خود نگه

نمایشگر جدا از پشته مرکزی است و در مجموعه می دارد.ای از ثبات های سریع نمایش داده می شود.

هر سطر آن مربوط به یک رکورد فعالیت میباشد.

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

مقدار دوم آفستی در رکورد فعالیت می باشد.

82

Page 83: به نام خدا

83

Page 84: به نام خدا

یک روزیک ساعتیک دقیقه

هرگز باز نمی گردندپس لطفا

از جنگ بپرهیزیداز خشم دوری کنید

عاشقانه حرف بزنید را وسعت لبخندتانو

بخشید.

با سپاس

84