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

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

صفحه 1:
طراحی و پیاده سازی زبانها ‎a‏ کنترل زیربرنامه Narges S. Bathaeian

صفحه 2:
شکل کلی حافظه بعد از 020 پرنامه وک ‎fe AD‏ مج موم تیصو مد Narges S. Bathaeian

صفحه 3:
متغیی‌های 9100۱ بارامترهاى تابع »ا اد رکشت متخيررهاى محلى تابع > متغیس‌های موقت تابع 2 متخي ررهاى محلى تابع لا ‎cla ae‏ موقت تابع لا “tivation record X gb Activation record y gb Activation recor Narges S. Bathaeian

صفحه 4:
activation record Remember that data storage for subprograms is in activation record. Activation record for P ۷ integer; X is of type integer. L-value of X is some speci activation record. Goal is to look at locating activation record for P. L*value for x Given an expression: X= Y+Z 1. Locate activation record containing Y. 2. Get L-value of Y from fixed location in activation record. 3. Repeat process for Z amd then X.

صفحه 5:
انواع محیطهای اجرا simple call- :fully static) v4! sults ۴ return FORTRAN77 ® (stack based) axe, » ‏مبتنى‎ * C, PASCAL ® dully dynamic) ty sus * LISP = Narges S. Bathaeian

صفحه 6:
Fully static * قبل از اجرای برنامه, یک ۲6۵۵۲0 ۸1۷31100 برای هر تابع , در نظر گرفته می شود. * همه متغیرها (۱06۱ ,9100۱ از یک آدرس ثابت قابل ۴ پارامترهای توابع تنها اشاره گر به مکانهایی از تابع صدا زننده هستند. * توابع بازگشتی نمی توانیم داشته باشیم. * پوینتر نمی توانیم داشته باشیم. Narges S. Bathaeian

صفحه 7:
شکل کلی حافظه در محیط کاملا ایستا(الگوی اول)

صفحه 8:
شکل ‎IS‏ حافظه در محيط كاملا ایستا(الگوی دوم) آدرس دستور كد تابع 2 بارامترها و متغيرهاى محلى

صفحه 9:
PROGROO TEST 000۵000 00۵۵ 10۲۵۵66 00۵۵ ‏مثال از تكد ناكاضة‎ ROG, THOLEWO), TEOP 7D OOXO1LE = 40 ROPO *, THOLO(), THOLB(C), THOLO! BO RT RA N OGM GOEDDESO(TOGLE,S, TEDE) PROT *, PEO 900 GDGBROOMY AOGDOGGO(G, OAL, ADOHO) 0۵0۵000 00۵۵ 102۵۵66 ‏,م00۵۵‎ CILE ROP OIL), ADEHO, TEOP WTOGER K ۵۵ = 0.0 1 (( O1LG.OP.OOXG1LE).OR.(G1LCL1.4)) GOTO 88 09 ۵ 20, O1LB 2۵۵6 - ۵۵6+ ۵0000 10990۵۵6۵ 29 AODEGO = GART(TEOP/OTLO) ROTORO 900 Narges S. Bathaeian

صفحه 10:
مثال از یک برنامه ‎FORTRAN‏ Ror’, —" Return addr. (I > MAXSIZE 200 * || TABLE(1) COGROOMD AOGODGGO(®, OLE, DCG) 3 00 Tn ‏ی‎ O16 % | [TABLE(20) ROP OO1LE), BOEHO, ۵۵ ® | | TEMP 10۳۳۵0۵6 a 3 — POOP = 0.0 > AP (( C1LE.CT.OGXGILE).OR.(GITELP.) ‏مزاخ‎ ‏هی‎ 2 00 40 120, 08 2 ۵06 - 6۵۵+ ۵00*00 & | |QMEAN 6 @ | [RETURN ‏موه‎ AOCGO = CART(TEOPIOTLO) 2 | | 6085 ROTORO = 000 8 | ۴ ۱۱۵۲96۶ ٩ 0 K

صفحه 11:
Stack based ۲660۲۵ ‏با فراخوانی تابع‎ ۴ مربوط به آن در 0۱151 , 531 می شود و هنگام بازگشت به تابع صدازننده, از 5101 0 , می شود. دو نوع ۰ 2 * بدون ۵۲۵660۲6 10681 : مانند زبان ) Pascal jl; ast :local procedure t * Dynamic Scope ® Narges S. Bathaeian

صفحه 12:
Activation record structure Subprogram cade System data, including |S segnents and aysten Stabe state chain paint code segments 0 Retun point location ۳ ‘station record storage stack ‏مام‎ ‎Foxmal parameters ۱ 070) ‏هوم ات‎ ۳ Steck Local variables ‏اليد‎ ‘ree space lavalabie fer use) End of lack block Tenporaries for expraselon evaluation Tenrares ( garentervananeson heap gout (atecnen nw) heap heap baton ۳ را ۱

صفحه 13:
مثال از یکل برنامه 15 « 6 CEP موم y: 10 Act. rec yismain 15 ۷ 0 ER IP u:10 ۷ 5 ‏مع‎ IP u:5 v:0 EP: IP <stdio.k> { P (V==O) retusa ‏إن‎ ober retro yod(y , u % v); } 0 { woe (“Yd%od’, Box, ‏:وق‎ ‎pric (“Yod\e” ard); :0 او } Control link = EP: Environment Poihtel

صفحه 14:
nment Pointer) = FP ۰۶ activation yell »o «55.24 (frame pointer) ‏جارعدر آرلست‎ 0 ‎pointer "‏ 5۵1 : 50: رجیستری‌که در لرآدیس‌سر 5121 در آن لست ‏* ۶۳: آدیس۲660۲0 2011۷110۳0 قبلیا دارد. ‏* آدرس متغیرهای ‎PUSN‏ شده می تواند با توجه به )و اندازه بایت لازم ‏* متغیرهای محلی تابع و موقت بعد از 300۳655 ‎push ab jo return‏ می شوند. ‎DCP (Dynamic 6۵1۳ ‏ها تشکیلی کزنجیره بنام‎ CEP ® aay.» Pointer) ‎Narges S. Bathaeian

صفحه 15:
هنگام فراخوانی یک ‎(PFOIOQUE) wl‏ 4 * آرگومانها محاسبه شده و در 50لا , 51961 می شوند. " مقدار ‎Stack , push js CEP‏ 42 شود.(۴۳) ‎ge Ge SP yly CEP wom joie *‏ شود. ‏۴ آدرس بازگشت (۳) در 0۱151 , 5121 می شود. (۱۳) ‎uF clos! a JUMP S "‏ تابع فراخوانی شده انجام می شود. ‎Narges S. Bathaeian

صفحه 16:
هنكام بازكشت از یک ‎(Epilogue) at‏ ۳۹ * مقدار ‎CEP‏ در 50 ریخته می شود. * مقدار ۶ به داخل 0 س)ريخته می شود. ۴ یک پرش با توجه به آدرس موجود در 200۳655 ۲6۲۱۲۳۲ به كد انجام مى شود. * آرگومانها از 000 , 5121 می شوند تا مقدار 50 تصحیح شود. Narges S. Bathaeian

صفحه 17:
مثال از یک برنامه ‎C‏ xo y: 10 phe {Fed , w % v); Act. rec yismain |CEP= xxoc returct}} } Sp = XX04 0 1 ‏عمق ,700707 )مسد‎ , &y ); pri (“Yorn ‏:((موج الح‎ pc = XOXO ‏مسر‎ ©: } Narges S. Bathaeian

صفحه 18:
مثال از یکل برنامه 15 « 6 - 8 —sp=XX11 y: 10 Act. rec yismain +15. v :10 XX00 XOXO Ey بعد سسا :(ند قلا د , بلحي 1 ) وطاع صموور اسب { ‏يا‎ 8x , &y ); prio (“%d\a” xed(x)); vets O; } Narges S. Bathaeian

صفحه 19:
مثال از یکل برنامه 15 « 6 - 8 —sp=XX0OF y: 10 Act. rec yismain +15. v :10 XX00 XOXO Es بعد ‎P (=O)‏ :(ند قلا د , بلحي 1{ وطاع 5 صموور ‎pc = XOXD‏ 1 اسب { ‏يا‎ 8x , &y ); prio (“%d\a” xed(x)); vets O; } Narges S. Bathaeian

صفحه 20:
مثال از یکل برنامه 15 « 6 ۴ y: 10 Act. rec yismain Narges S. Bathaeian عمد ‎P (=O)‏ :(ند قلا د , بلحي 1{ ‎ebe‏ ‏صموور اسب { ‏يا‎ 8x , &y ); prio (“%d\a” xed(x)); vets O; }

صفحه 21:
محاسبه 01۴561 متغیرها در زمان کامپایل * آدرس ۶۳ در هر ۲۵6۵۲۵ 2011۷۵110۳0 مبنا در نظر گرفته می شود. * آدرس متغیر هایی که در بالای ۶۳ هستند (پارامترهای تابع) با مقدار مثبت و بقیه با مقدار منفی نمایش داده می شوند. Narges S. Bathaeian

صفحه 22:
مثال 3 >. Int : 2 byte Float : 4 byte Address : 4 byte Char : 1 byte Double : 8 byte av +4 ~— | cEP "ur +6 =t: -6 Narges S. Bathaeian x: 15 m u:15 ۷ 0 XX00 XOXO 0 لا ۷9 ‎XX0B‏ ‎X0XD‏ ts.

صفحه 23:
6 هایت ودر تو * در هر حوزه (80006) به اسامی تعریف شده در آن حوزه میتوا دسترسی داشت. پس: " هر ‎ule procedure « procedure‏ فرزند و برادر خود دسترسی دارد و می تواند آنها را فراخوانی کند. * حوزه متفیرهای تعریف شده در یک حوزه, آن حوزه و حوزه های فرزند آن حوزه است. * پیاده سازی: ‎Act. 91: Access link L, SCP (static chain pointer) =‏ پدر (دسترسیبه ۳06601۲6 پدر) * فراخوانی شده از پدر * فراخوانی شده از برادر ‎Narges S. Bathaeian‏

صفحه 24:
منال ۱ از یک برنامه زا سب سسب جام ی 9] ‎Pascal‏ ۳ y: 10 Act. rec gismain 7 تست ‎(est)‏ :ل لس اجازه دسترسيها د ‎ie‏ ‏7 مپسا زمان كاميايل نكهدارى .مى شود ‎ead;‏ ‏بح ‏8 © : ‎Oud;‏ Narges S. Bathaeian

صفحه 25:
‎flee‏ ۱ از یک برنامه سا يدا ‎J‏ )2 ~ بر 9 ‎Pascal‏ 1 ‎bead xs:‏ ‎y: 10‏ 3 ‎main i‏ تايع ‎Act. rec‏ ‎No SCP‏ 3 = ‎ae . |DCP‏ ‎begs ۳‏ 3-3 و6 ۰ ‎Oud;‏ ‎Narges S. Bathaeian ‎ ‎ ‎ ‎ ‎

صفحه 26:
منال ۱ از یک برنامه ‎Pascal‏ ‎xt‏ y: 10 Act.recgumain ‏نما‎ ny No SCP DCP 59 SCP ‏لب‎ ‎DcP Act. Rec gAct. Rec فراخوانى از طرفل يد مقدار 628 در 06 قرار داده مي شو Narges S. ‏هه‎

صفحه 27:
منال ۱ از یک برنامه ‎prow test;‏ ‎—Pascal‏ 24 تسس y: 10 [Act.rec.ismain 3 ss No SCP ;| DCP 2 ct. Rec p SCP ‏لم‎ ‎DCP —| 59 م50 ‎DCP‏ فراخوانى از طرف بيلد مقدار 508 برادر در 56۶ قرار هی و2مو ]دز .5 ‎Narges‏ Act. REC r Act. Rec

صفحه 28:
منال ۲ از یک برنامه ‎proce bn‏ ‎px Pascal‏ ف y: 10 [Act.rec.ismain No SCP DCP ct. Rec p SCP a ۷ pcp م50 لد ‎DCP‏ ‏زنجیره 50 Act. REC r Act. Rec Narges S. Bathaeian

صفحه 29:
۶ ۹ Whe ideo! Put the stoic ‏اهنا‎ ia a sepordie stack cited ‏ولو و‎ MRe eotries ia the disphoy ure porters to the rt_revs thot have the voriubles iu the Represed rePereuces us (display_oP Peet, bovol_vP Poet) where disphoy_oPP set is the sueve us choia_pPPset Narges S. Bathaeian

صفحه 30:
۶ ۹ (Por ‏:جا خام ار ۱ دص و امه وه‎ * Gwe, io the vew @ot_rev, ou vopy oP the displ poitter ut posiiza kK * ut the tok to the @ot_rec Por P ot positive k io the display Narges S. Bathaeian

صفحه 31:
Oispys (Cxcople) program MAIN 3; procedure BIGSUB; procedure SUB1; end; { SUB1 } procedure SUB2; procedure SUB3; end; { SUB3 } end; { SUB2 } end; { BIGSUB } end. { MAIN 3 } Narges S. Bathaeian

صفحه 32:
Oppky اس Ore ٩: 582 ‏امس‎ 1 OePore te oul, we bayet @.R. Por SUB2 AR. Por MAIN. 3 اس Pier ther val, wee bene OAR. Por SUBL AR. Por SUB2 .R. Por BIGSUB @.AR. Por MAIN 3 Orch Narges S. Bathaeian program MAIN 3; procedure BIGSUB; procedure SUB1; end; { SUB1 } procedure SUB2; procedure SUB3; end; { SUB3 } end; { SUB2 } end; { BIGSUB } end. { MAIN 3 }

صفحه 33:
e200 جات ات0 3 سای ‎٩82‏ :0 ع0 تسوا مت ری سا ات0 OR Por GOME 0008 0۸:۳۷ 0۵ اس Pier the cal, wer bene: OR. Por ۵9 OR. Por CHOE OR. Por O1HOOO, OR. Por ۵ ‏اس‎ Narges S. Bathaeian Oispaps xavpte) program MAIN 3; procedure BIGSUB; procedure SUB1; end; { SUB1 } procedure SUB2; procedure SUB3; end; { SUB3 } end; { SUB2 } end; { BIGSUB } end. { MAIN 3 }

صفحه 34:
9 © qa o Ouse 9: SUB3 vay SUB1 (DePore thee vel weer beet OR. Por GOOD OR. Por ©OOE OR. Por O1WOOO OR. Por OOT_D One [BP ether ‏ویب‎ ‎OR. Bar ۸ OR. Por GOOD OR. Por ۵ OR. Por ۵۵۵۸۵ 00۵ 00۱۰ اس Narges S. Bathaeian Oisplays xavpt) program MAIN 3; procedure BIGSUB; procedure SUB1; end; { SUB1 } procedure SUB2; procedure SUB3; end; { SUB3 } end; { SUB2 } end; { BIGSUB } end. { MAIN 3 }

صفحه 35:
Dynamic scope rule = refers to most recent activation record (DCP) = Not fully stack based = Stack: function calls = Eamples = Lisp Narges S. Bathaeian

صفحه 36:
Static vs. Dynamic Scope outer 6۲ block (3) function g(z\{ return x+z; } function f(y) 02) Ea Which x is used for expression ? static scope 1 lynamic scope ski OO

صفحه 37:
۳۹ Retention vs. Deletion = Retention = Deletion = Fortran = Local variables in = Static and global C, Pascal variables in C Narges S. Bathaeian

صفحه 38:
Parameter passing eter: A variable in a procedure that represents some data from the procedure that invoked the given = Parameter transmission: How that information is passed to the procedure. The parameter is also called the formal argument.The data from the invoking procedure is called the actual argument or sometimes just the argument. Usual syntax: Actual arguments: call P(A, B+2, 27+3) Parameters: Procedure P(X, Y, Z) What is connection between the parameters and the arguments? Call by name Call by reference Call by value Call by result (or value-res@at)

صفحه 39:
Language dependent ۷ ‏جص‎ languages have different mechanisms: - ALGOL - name, value - Pascal - value, reference * C - value (BUT pointers give us reference Constant tension between desire for efficiency and semantic correctness in defining parameter transmission.

صفحه 40:
Call by name = Substitute argument for parameter at each rrence of parameter: 5 27+3( 9. Definition: procedure P(X,Y,Z) {int I; I=7; X = I + (7/Y)*Z;} . Meaning: P(X,Y,Z) {int I; I=7; A=I+(7/(B+2) )*(27+3) ;} = This is a true macro expansion. Simple semantics, BUT: 1. Implementation. How to do it? 2. Aliases. What if statement of P were: I = A? 3. Expressions versus statements: If we had D=P(1,2,3) and a return(42) in P, what does semantics mean? 4. Error conditions: P(A+B, B+2, 27+3) 40

صفحه 41:
A thunk is the code which computes the L-value and R- je of an argument. ach argument, pass code address that computes both 27+3) generates: subroutine P of thunk to return L-value(A) of thunk to return R-value(A) of thunk to return L-value(B+2) of thunk to return R-value(B+2) of thunk to return L-value(27+3) of thunk to return R-value(27+3) to X, call thunk 1, To access X, call thunk 2 to Y, call thunk 3, To access Y, call thunk 4 to Z, call thunk 5, To access Z, call thunk 6 name P(A, B+2, jump to address address address address address address To assign To assign To assign Issue: Assignment to (B+2): How? = Call by name is conceptually convenient, but inefficient. 41

صفحه 42:
Examples of Call by Name ) {x = x + xj} Seems simple enough Y=2; P(Y); ite(Y) = means Y = Y+Y write(Y) = prints 4 2. int A[10]; for(I=0; I<10; I++) {A[I]=I;}; I=1; P(A[I]) = A[1] = A[1] + A[1] = A[1] set to 2 3. But: F {I = I + 1; return I;} What is: P(A[F])? P(A[F]) = ALF] = A[F]+A[F] => A[I++] = A[I++]+A[I++] = A[2] = A[3]+A[4] 4. Write a program to exchange values of X and Y: (swap(X,Y)) Usual way: swap(x,y) {t=x; x=y; y=t;} Cannot do it with call by name. Cannot handle both of following: swap(I, A[I]) swap(A[I],1) One of these must fail. 42

صفحه 43:
Call by reference = Pass the L-value of the argument for parameter. py inx ‘Act Res. for P Act rec. for @ int = Implementation: 0 ۲ | ‏لجز ر‎ "۲67001 = B+2 7] ~] Temp2 = 27+3 call Ux) jump to subroutin L-value of A L-value 1 L-value of Temp2 = This is the most common parameter transmission mechanism. In the procedure activation record, parameter X is a local variable whose R-value is the L-value of the aggument.

صفحه 44:
Gall by value s the R-value of the argument for the meter. cation: P(A, ۲۳ Act 9۵ 0۴ Act reo. for ity, 7-7 20 = Implementation: Templ = B+2 Temp2 = 27+3 jump to subroutine P R-value of A R-value of Temp1 R-value of Temp2 = In procedure activation record, parameter X is a local variable whose R-value is the R-value of the argument. 44 8 از 01 |

صفحه 45:
Call by reference in C " ©) only has call by value, =" BUT pointer variables allow for simulating call by reference: P(i, j) = passes i and j by value. P(&i, &j) => passes L-values of i and I P(*x, *y) {*x = *y + 1;} => arguments are addresses (pointers) 45

صفحه 46:
Call by result (or lue-result) « )211 ۵۷ value, AND pass back the final value to argument upon return. = Parameter is a local value in procedure. "Similar to call by reference, except for aliasanghcian

صفحه 47:
۳۹ Pass by value " مقدار یک پارامتر قبل از ‎void inc2(int x)‏ فراخوانی تابع محاسبه شده و ‎ou‏ 44%{ نتیجه فرستاده می شود. } ‎++x;‏ s تغییر پارامتر در تابع فراخوانی شده, تأثیری در تابع فراخوانی کننده ندارد. مگر اينکه اشاره كر به متغير فرستاده شده 3 ‎++(*x);‏ { باشد. } ;)4(4%+ C, Pascal, ADA ® void inc2(int * Narges S. Bathaeian

صفحه 48:
۳۹ Pass by reference * مقدار آدرس پارامتر فرستاده ‎void inc2(int &x)‏ مى شود. رب ۲ * عنوان پارامتر در تابع فراخوانی } ‎++x;‏ ‏شده, مجازی است. * :6 در تابع فراخوانی شده, * ۴0۳۲3077 آدرس پارامتر که بطور تسبی فرستاده شده باید ۴۵56۵۱ : ۲ ۴ پا توجه به 962۳ دوباره محاسبه شود. Narges S. Bathaeian

صفحه 49:
۳۹ Pass by value-result * مقدار یک پارامتر قبل از ‎void p(int x, int y)‏ فراخوانی تابع محاسبه شده و ‎+4x;‏ { نتيجه فرستاده می شود. سپس } ‎++y;‏ ‏مقدار پارامتر پس از تغییر در ۱ تابع فراخوانی شده, دوباره در ‎main()‏ ‏مکان اول خود کپی می شود. ‎int a=1;‏ { ‎p(a,a); ADA : in out ۴‏ * پیاده سازی؟ ‎printf(“%d”, a);‏ return 0; ۷ Narges S. Bathaeian

صفحه 50:
Pass by name * مقدار یک پارامتر قبل از فراخوانی تابع ‎te‏ 9 و ۲ ۱۳۲ محا 7 5 اخوان , void p(int x) Serre 29 Sa Ae ۳ شده محاسبه مى شود. 4 " هر بارامتر, خود يك ‎+4x; } procedure‏ است. main() Algol60 ۰ { i=a[{1]=a[2]=1; sue ‏نا‎ ‎۳ Si printf(“%d %d”, a[1],a[2]) ‏پیاده سازی مشکل‎ return 0; Lazy evaluating * 1 Narges S. Bathaeian

صفحه 51:
Block " برخى زبانها مانند © بلوك بندى مى شوند. ۴ 56006 متغیرهایت عریفشده در ی کب اوکآنبلوکو بلوکهایف رزند آنبلوک لست ‎main()‏ { int i,j; 1 . /Jundefined variable k Narges S. Bathaeian

صفحه 52:
پیاده سازی بلوک 4 ۴ با وارد شدن به یک بلوک متغیرها در 0۱05/0 ‎co SACK,‏ شوند. * با خارج شدن از یک بلوک متغیرها از 000 ,510 می شوند. * در محاسبه 07۲561 متغیرها در زمان کامپایل باید دقت شود. بلوکهای برادر از ‎Offset‏ یکسانی شروع می شوند. Narges S. Bathaeian

صفحه 53:
Fully Dynamic * در ۷00۱132 می توان یک ‎procedure‏ را به عنوان آرگومان برگشتی 0۲0۵660۱1۲6 دیگر داشت. * کاملا در 1680] پیاده سازی می شود. * مثال صوری: ‎typedef int (*proc)(void);‏ ‎proc g(int x)‏ ‎int f(void) {return x; }‏ { ‎return f;‏ main() { proc c; c= (2); printf(“%d”,c()); return 0; 1 Narges S. Bathaeian

صفحه 54:
* در خواست تخصیص حافظه توسط برنامه ‎new‏ ۵۱06 " " بيدا كردن فضاى مناسب خالی در حافظه = در خواست آزادسازى حافظه توسط برنامه ‎free‏ " * آزادسازی حافظه و اضافه کردن آن به لیست فضاهای خالی Narges S. Bathaeian

صفحه 55:
Dynamic environment * برای مواقعی که طول عمر یک متغیر بیشتر از 6 مربوطه است. * بخاطر 000 شدن 0۲۵660۱۲6 با 51001 قابل پیاده سازی نیست. * مثال: ‎int *dangle(void)‏ ‎{int x;‏ ‎return &x;}‏ آدرس ‏ یک آرگومان برگشتی است. پس باید ذر قسمتی جدا از 581 تعریف شده باشد. Narges S. Bathaeian

طراحي و پیاده سازی زبانها کنترل زیربرنامه ‏Narges S. Bathaeian متغيرهاي global …… پارامترهاي تابع x آدرس برگشت متغيرهاي محلي تابع x متغيرهاي موقت تابع x ........ كد تابع ‏main …… كد تابع 1 ........ كد تابع 2 ........ ‏Narges S. Bathaeian حافظه تخصيص داده شده به يك برنامه شكل كلي حافظه بعد از loadبرنامه ... ‏Code ‏segment ‏Data ‏segment متغيرهاي global …… پارامترهاي تابع x آدرس برگشت متغيرهاي محلي تابع x متغيرهاي موقت تابع x ........ پارامترهاي تابع y آدرس برگشت متغيرهاي محلي تابع y متغيرهاي موقت تابع y …….. ‏Activation record Activation recordت ابع x Activation recordت ابع y ‏Narges S. Bathaeian activation record Remember that data storage for subprograms is in an activation record. var X: integer; X is of type integer. L-value of X is some specific offset in an activation record. Goal is to look at locating activation record for P. Given an expression: X = Y + Z 1. Locate activation record containing Y. 2. Get L-value of Y from fixed location in activation record. 4 3. Repeat process for Z and then X. انواع محيطهاي اجرا simple call- :)fully static( كامال ايستا return FORTRAN77  )stack based( مبتني بر پشته C, PASCAL Narges S. Bathaeian   )fully dynamic( كامال پويا LISP    Fully static ‏ ‏ ‏ ‏ ‏ قبل از اجراي برنامه ,يك Activation recordبراي هر تابع ,در نظر گرفته مي شود. همه متغيرها ( )global, localاز يك آدرس ثابت قابل دستيابي هستند. پارامترهاي توابع تنها اشاره گر به مكانهايي از تابع صدا زننده هستند. توابع بازگشتي نمي توانيم داشته باشيم. پوينتر نمي توانيم داشته باشيم. ‏Narges S. Bathaeian شكل كلي حافظه در محيط كامال ايستا(الگوی اول) كد تابع main كد تابع 1 … . كد تابع n متغيرهاي global Activation recordت ابع ‏main Activation recordت ابع 1 …. ‏Narges S. Bathaeian شكل كلي حافظه در محيط كامال ايستا(الگوی دوم) متغيرهاي )(common آدرس دستور كد تابع main پارامترها و متغیرهای محلی آدرس دستور كد تابع 1 پارامترها و متغیرهای محلی آدرس دستور كد تابع 2 پارامترها و متغیرهای محلی …. ‏Narges S. Bathaeian ‏global PROGRAM TEST COMMON MAXSIZE INTEGER MAXSIZE REAL TABLE(10), TEMP MAXSIZE = 10 READ *, TABLE(1), TABLE(2), TABLE(3) CALL QUADMEAN(TABLE,3,TEMP) PRINT *, TEMP END SUBROUTIN QUADMEAN(A, SIZE, QMEAN) COMMON MAXSIZE INTEGER MAXSIZE, SIZE REAL A(SIZE), QMEAN, TEMP INTEGER K TEMP = 0.0 IF(( SIZE.GT.MAXSIZE).OR.(SIZE.LT.1)) GOTO 99 DO 10 K=1, SIZE TEMP = TEMP+ A(K) * A(K) 10 CONTINUE 99 QMEAN = SQRT(TEMP/SIZE) RETURN END مثال از يك برنامه FORTRAN Narges S. Bathaeian مثال از يك برنامه FORTRAN Act. rec ت ابعTEST Act. rec ت ابعQUADMEAN PROGRAM TEST COMMON MAXSIZE INTEGER MAXSIZE REAL TABLE(10), TEMP MAXSIZE = 10 READ *, TABLE(1), TABLE(2), TABLE(3) CALL QUADMEAN(TABLE,3,TEMP) PRINT *, TEMP Return addr. (IP = END PC) SUBROUTIN QUADMEAN(A, SIZE, QMEAN) COMMON MAXSIZE INTEGER MAXSIZE, SIZE REAL A(SIZE), QMEAN, TEMP INTEGER K TEMP = 0.0 IF(( SIZE.GT.MAXSIZE).OR.(SIZE.LT.1)) GOTO 99 DO 10 K=1, SIZE TEMP = TEMP+ A(K) * A(K) 10 CONTINUE 99 QMEAN = SQRT(TEMP/SIZE) RETURN END Narges S. Bathaeian MAXSIZE TABLE(1) … TABLE(10) TEMP 3 A SIZE QMEAN RETURN ADDRESS TEMP K Stack based ... Code segment Stack activation record با فراخواني تابع مي شودstack , push مربوط به آن در stack از,و هنگام بازگشت به تابع صدازننده . مي شود, pop دو نوع Static scope C مانند زبان: local procedure بدون Pascal مانند زبان: local procedure با Heap   Dynamic Scope Narges S. Bathaeian     Activation record structure PZ09A Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, 2000 مثال از يك برنامه y: 10 C x: 15 #include <stdio.h> int x , y ; int gcd ( int u , int v ) { if (v==0) return u; else return gcd(v , u % v); } Act. rec ت ابعmain u : 15 v : 10 EP IP u : 10 v :5 EP IP main() { u :5 scanf(“%d%d”, &x , &y ); v :0 printf(“%d\n”,gcd(x,y)); EP return 0; IP } Control link = EP: Environment Pointer Narges S. Bathaeian CEP sp توضيحات CEP (Current Environment Pointer) = FP activationسNنآدرNيستريكه در آNجN ر:(frame pointer) تN . سNناNيدر آNارN جrecord نN در آstack رNNسسNنآدرNيستريكه در آNجN ر:sp : stack pointer تN . سNا .بليرا داردNN قactivation recordسN آدر:EP و اندازه بايت الزمCEP شده مي تواند با توجه بهpush آدرس متغيرهاي .تعيين شوند push در تابعreturn address متغيرهاي محلي تابع و موقت بعد از .مي شوند DCP (Dynamic chain نامNN بNجیرهNنNکزNNشکیلیNN ها تCEP .هندNیدN مpointer) Narges S. Bathaeian       هنگام فراخواني يك تابع (:)prologue ‏ ‏ ‏ ‏ ‏ آرگومانها محاسبه شده و در stack , pushمي شوند. مقدار CEPدر stack , pushمي شود)EP(. مقدار جديد CEPبرابر spجاري مي شود. آدرس بازگشت ( )PCدر stack , pushمي شود)IP( . يك jumpبه ابتداي كد تابع فراخواني شده انجام مي شود. ‏Narges S. Bathaeian هنگام بازگشت از يك تابع (:)Epilogue ‏ ‏ ‏ ‏ مقدار CEPدر spريخته مي شود. مقدار EPبه داخل CEPريخته مي شود. يك پرش با توجه به آدرس موجود در return address به كد انجام مي شود. آرگومانها از stack , popمي شوند تا مقدار spتصحيح شود. ‏Narges S. Bathaeian #include <stdio.h> int x , y ; int gcd ( int u , int v ) { int t; if (v==0) return u; else { t= gcd(v , u % v); return t;} } main() { scanf(“%d%d”, &x , &y ); printf(“%d\n”,gcd(x,y)); return 0; } مثال از يك برنامه C x: 15 y: 10 Act. rec ت ابعmain CEP= XX00 sp = XX04 pc = X0X0 Narges S. Bathaeian مثال از يك برنامه y: 10 C x: 15 #include <stdio.h> int x , y ; Act. rec ت ابعmain int gcd ( int u , int v ) u : 15 { int t; pc = X0XA v : 10 if (v==0) return u; XX00 else { t= gcd(v , u % v); X0X0 return t;} t: } main() { scanf(“%d%d”, &x , &y ); printf(“%d\n”,gcd(x,y)); return 0; } Narges S. Bathaeian CEP=XX0B sp=XX11 مثال از يك برنامه y: 10 C x: 15 #include <stdio.h> int x , y ; int gcd ( int u , int v ) { int t; if (v==0) return u; else { t= gcd(v , u % v); return t;} } Act. rec ت ابعmain u : 15 v : 10 XX00 X0X0 t : pc = X0XD main() { scanf(“%d%d”, &x , &y ); printf(“%d\n”,gcd(x,y)); return 0; } Narges S. Bathaeian CEP=XX0B sp=XX0F مثال از يك برنامه y: 10 C x: 15 #include <stdio.h> int x , y ; int gcd ( int u , int v ) { int t; if (v==0) return u; else { t= gcd(v , u % v); return t;} } main() { scanf(“%d%d”, &x , &y ); printf(“%d\n”,gcd(x,y)); return 0; } Act. rec ت ابعmain u : 15 v : 10 XX00 X0X0 t: u : 10 v :5 XX0B X0XD t : Narges S. Bathaeian CEP sp محاسبه offsetمتغيرها در زمان كامپايل ‏ ‏ آدرس EPدر هر activation recordمبنا در نظر گرفته مي شود. آدرس متغير هايي كه در باالي EPهستند (پارامترهاي تابع) با مقدار مثبت و بقيه با مقدار منفي نمايش داده مي شوند. ‏Narges S. Bathaeian x: 15 y: 10 Act. rec ت ابع main :فرض  u : 15 v : 10 XX00 X0X0 t: u : 10 v :5 XX0B X0XD t :      CEP   Int : 2 byte Float : 4 byte Address : 4 byte Char : 1 byte Double : 8 byte v: +4 u: +6 t: -6 Narges S. Bathaeian  مثال ProcedureهايتNNودر تNNو ‏ در هر حوزه ( )scopeبه اسامی تعریف شده در آن حوزه میتوان دسترسی داشت .پس: ‏ ‏ ‏ هر procedureبه procedureهاي فرزند و برادر خود دسترسي دارد و مي تواند آنها را فراخواني كند. حوزه متغيرهاي تعريف شده در يك حوزه ,آن حوزه و حوزه های فرزند آن حوزه است. پياده سازي: ‏ ) SCP (static chain pointerیNNا : Access linkآدرNسAct. RecپNNدر (دNسNترسNيبNNه procedureپNNدر) ‏ ‏ فراخواني شده از پدر فراخواني شده از برادر ‏Narges S. Bathaeian از يك برنامه1 مثال Pascal program test; Var x,y:integer; Procedure p; … procedure q; begin x: 15 … r; … end; procedure r; … begin … end; Begin … p; … End; y: 10 Act. rec ت ابعmain test P q Narges S. Bathaeian اجازه دسترسيها در زمان كامپايل نگهداري مي شود. r از يك برنامه1 مثال Pascal program test; Var x,y:integer; Procedure p; … procedure q; begin x: 15 end; procedure r; … begin … end; Begin … p; … End; y: 10 Act. rec ت ابعmain Act. Rec p … r; … … No SCP DCP … Narges S. Bathaeian از يك برنامه1 مثال Pascal program test; Var x,y:integer; Procedure p; … procedure q; begin end; procedure r; … begin … q; … end; Begin … p; … End; y: 10 Act. Rec q Act. Rec p … r; … x: 15 Act. rec ت ابعmain … No SCP DCP … … SCP DCP … :فراخواني از طرف پدر . قرار داده مي شودSCP درCEP مقدار Narges S. Bathaeian از يك برنامه1 مثال x: 15 Pascal y: 10 program test; Var x,y:integer; Procedure p; … procedure q; begin … r; … end; procedure r; … begin … q; … end; Begin … p; … End; Act. Rec r Act. Rec qAct. Rec p Act. rec ت ابعmain … No SCP DCP … … SCP DCP … … SCP DCP :درNفراخواني از طرف برا … . قرار داده مي شودSCP برادر درSCP مقدار Narges S. Bathaeian از يك برنامه2 مثال x: 15 Pascal y: 10 Act. rec ت ابعmain Act. Rec r Act. Rec qAct. Rec p program test; Var x,y:integer; Procedure p; … procedure q; procedure r; … begin … r; … end; begin … q; … end; Begin … p; … End; … No SCP DCP … … SCP DCP … … SCP DCP … Narges S. Bathaeian SCP زنجيره Displays The idea: Put the static links in a separate stack called a display. The entries in the display are pointers to the Act_recs that have the variables in the referencing environment. Represent references as (display_offset, local_offset) where display_offset is the same as chain_offset Narges S. Bathaeian Displays For a call to procedure P with a static_depth of k:   Save, in the new Act_rec, a copy of the display pointer at position k Put the link to the Act_rec for P at position k in the display Narges S. Bathaeian Displays (Example) program MAIN_3; procedure BIGSUB; procedure SUB1; end; { SUB1 } procedure SUB2; procedure SUB3; end; { SUB3 } end; { SUB2 } end; { BIGSUB } end. { MAIN_3 } Narges S. Bathaeian Displays (Example) Case 1: SUB2 calls SUB1 Before the call, we have: A.R. for SUB2 A.R. for BIGSUB program MAIN_3; procedure BIGSUB; procedure SUB1; end; { SUB1 } procedure SUB2; procedure SUB3; end; { SUB3 } end; { SUB2 } end; { BIGSUB } end. { MAIN_3 } 2 1 0 A.R. for MAIN_3 Stack Display After the call, we have: A.R. for SUB1 A.R. for SUB2 A.R. for BIGSUB 2 1 0 A.R. for MAIN_3 Stack Narges S. Bathaeian Display Displays (Example) Case 2: SUB2 calls SUB3 Before the call, we have: AR. for SUB2 AR. for BIGSUB program MAIN_3; procedure BIGSUB; procedure SUB1; end; { SUB1 } procedure SUB2; procedure SUB3; end; { SUB3 } end; { SUB2 } end; { BIGSUB } end. { MAIN_3 } 2 1 0 AR. for MAIN_3 Stack Display After the call, we have: AR. for SUB3 AR. for SUB2 3 2 1 0 AR. for BIGSUB AR. for MAIN_3 Stack Narges S. Bathaeian Display Displays (Example) Case 3: SUB3 calls SUB1 Before the call, we have: AR. for SUB3 AR. for SUB2 3 2 1 0 AR. for BIGSUB program MAIN_3; procedure BIGSUB; procedure SUB1; end; { SUB1 } procedure SUB2; procedure SUB3; end; { SUB3 } end; { SUB2 } end; { BIGSUB } end. { MAIN_3 } AR. for MAIN_3 Stack Display After the call, we have: AR. for SUB1 AR. for SUB3 AR. for SUB2 3 2 1 0 AR. for BIGSUB AR. for MAIN_3 Stack Narges S. Bathaeian Display Dynamic scope rule   refers to most recent activation record (DCP) Not fully stack based   Stack: function calls Eamples   Lisp … Narges S. Bathaeian Static vs. Dynamic Scope  Example var x=1; function g(z) { return x+z; } function f(y) { var x = y+1; return g(y*x); } f(3); outer block f(3) x 1 y x 3 4 g(12) z 12 Which x is used for expression x+z ? static scope dynamic scope slide 36 Retention vs. Deletion  Retention    Fortran Static and global variables in C Deletion  Narges S. Bathaeian Local variables in C, Pascal Parameter passing  Parameter: A variable in a procedure that represents some other data from the procedure that invoked the given procedure.  Parameter transmission: How that information is passed to the procedure. The parameter is also called the formal argument.The data from the invoking procedure is called the actual argument or sometimes just the argument. •     • • • • Usual syntax: Actual arguments: call P(A, B+2, 27+3) Parameters: Procedure P(X, Y, Z) What is connection between the parameters and the arguments? Call by name Call by reference Call by value 38 Call by result (or value-result) Language dependent  • • •  Difference languages have different mechanisms: ALGOL - name, value Pascal - value, reference C - value (BUT pointers give us reference Constant tension between desire for efficiency and semantic correctness in defining parameter transmission. 39 Call by name      Substitute argument for parameter at each occurrence of parameter: Invocation: P(A, B+2, 27+3) Definition: procedure P(X,Y,Z) {int I; I=7; X = I + (7/Y)*Z;} Meaning: P(X,Y,Z) {int I; I=7; A=I+(7/(B+2))*(27+3);} This is a true macro expansion. Simple semantics, BUT: 1. Implementation. How to do it? 2. Aliases. What if statement of P were: I = A? 3. Expressions versus statements: If we had D=P(1,2,3) and a return(42) in P, what does semantics mean? 4. Error conditions: P(A+B, B+2, 27+3) 40 name    A thunk is the code which computes the L-value and Rvalue of an argument. For each argument, pass code address that computes both L-values and R-values of arguments. P(A, B+2, 27+3) generates: jump to address address address address address address To assign To assign To assign   subroutine P of thunk to return L-value(A) of thunk to return R-value(A) of thunk to return L-value(B+2) of thunk to return R-value(B+2) of thunk to return L-value(27+3) of thunk to return R-value(27+3) to X, call thunk 1, To access X, call thunk 2 to Y, call thunk 3, To access Y, call thunk 4 to Z, call thunk 5, To access Z, call thunk 6 Issue: Assignment to (B+2): How? Call by name is conceptually convenient, but inefficient. 41 Examples of Call by Name 1. P(x) {x = x + x;} Seems simple enough … Y = 2; P(Y); write(Y)  means Y = Y+Y write(Y)  prints 4 2. int A[10]; for(I=0; I<10; I++) {A[I]=I;}; I=1; P(A[I])  A[1] = A[1] + A[1]  A[1] set to 2 3. But: F {I = I + 1; return I;} What is: P(A[F])? P(A[F])  A[F] = A[F]+A[F]  A[I++] = A[I++]+A[I++]  A[2] = A[3]+A[4] 4. Write a program to exchange values of X and Y: (swap(X,Y)) Usual way: swap(x,y) {t=x; x=y; y=t;} Cannot do it with call by name. Cannot handle both of following: swap(I, A[I]) swap(A[I],I) One of these must fail. 42 Call by reference     Pass the L-value of the argument for the parameter. Invocation: P(A, B+2, 27+3) Implementation: Temp1 = B+2 Temp2 = 27+3 jump to subroutine P L-value of A L-value of Temp1 L-value of Temp2 This is the most common parameter transmission mechanism. In the procedure activation record, parameter X is a local variable whose R-value is the L-value of the argument. 43 Call by value    Pass the R-value of the argument for the parameter. Invocation: P(A, B+2, 27+3) Implementation: Temp1 = Temp2 = jump to R-value R-value R-value  B+2 27+3 subroutine P of A of Temp1 of Temp2 In procedure activation record, parameter X is a local variable whose R-value is the R-value of the argument. 44 Call by reference in C   C only has call by value, BUT pointer variables allow for simulating call by reference: P(i, j)  passes i and j by value. P(&i, &j)  passes L-values of i and j. P(*x, *y) {*x = *y + 1;}  arguments are addresses (pointers) 45 Call by result (or value-result)  Call by value, AND pass back the final value to argument upon return.  Parameter is a local value in procedure.  Similar to call by reference, except for aliasing. Narges S. Bathaeian Pass by value ‏ ‏ ‏ مقدار يك پارامتر قبل از فراخواني تابع محاسبه شده و نتيجه فرستاده مي شود. تغيير پارامتر در تابع فراخواني شده ,تاثيري در تابع فراخواني كننده ندارد .مگر اينكه اشاره گر به متغير فرستاده شده باشد. ‏C , Pascal , ADA ‏Narges S. Bathaeian )void inc2(int x بي تاثير ;{ ++x } ;++x )void inc2(int *x ;){ ++(*x موثر } ;)++(*x Pass by reference ‏ ‏ )void inc2(int &x ;{ ++x } ;++x مقدار آدرس پارامتر فرستاده مي شود. عنوان پارامتر در تابع فراخواني شده ,مجازي است. ‏ ‏ ‏ & : ++C ‏Fortran77 ‏Pascal : var در تابع فراخواني شده, آدرس پارامتر كه بطور نسبي فرستاده شده بايد با توجه به SCPدوباره محاسبه شود. ‏Narges S. Bathaeian Pass by value-result ‏ )void p(int x, int y ;{ ++x } ;++y مقدار يك پارامتر قبل از فراخواني تابع محاسبه شده و نتيجه فرستاده مي شود .سپس مقدار پارامتر پس از تغيير در تابع فراخواني شده ,دوباره در مكان اول خود كپي مي شود. ‏ ‏ ‏ADA : in out پياده سازي؟ ‏a=2 ‏Narges S. Bathaeian )(main ;{ int a=1 ;)p(a,a ;)printf(“%d”, a ;return 0 } Pass by name ‏ ‏ مقدار يك پارامتر قبل از فراخواني تابع محاسبه نشده و در تابع فراخواني شده محاسبه مي شود. هر پارامتر ,خود يك procedure است. ‏ ‏ ‏ ‏ ‏a[1]=1 ;]int a[10 ;int i )void p(int x ;{ ++i } ;++x )(main ‏Algol60 ‏a[2]=2 ;{ i=a[1]=a[2]=1 نتايج غير منتظره ;i=2 ;)]p(a[i پياده سازي مشكل ;)]printf(“%d %d”, a[1],a[2 ‏Lazy evaluating ;return 0 } ‏Narges S. Bathaeian Block . بلوك بندي مي شوندC برخي زبانها مانند لوكNNنبNند آNرزNNايفNلوكهNNلوكو بNNنبNلوكآNNب , در يكNهNدN عريفشNNتغيرهايتN مScope تN . سNا ... main() { int i,j; { int k=0; i=j=1; … } k=… //undefined variable k … } Narges S. Bathaeian   پياده سازي بلوك ‏ ‏ ‏ با وارد شدن به يك بلوك متغيرها در stack, pushمي شوند. با خارج شدن از يك بلوك متغيرها از stack, popمي شوند. در محاسبه offsetمتغيرها در زمان كامپايل بايد دقت شود. بلوكهاي برادر از offsetيكساني شروع مي شوند. ‏Narges S. Bathaeian Fully Dynamic را به عنوان آرگومانprocedure مي توان يكModula2 در . ديگر داشتprocedure برگشتي typedef int (*proc)(void); proc g(int x) { int f(void) {return x; } return f; } main() { proc c; c = g(2); printf(“%d”,c()); return 0; } . پياده سازي مي شودheap كامال در :مثال صوري Narges S. Bathaeian    تخصيص حافظه ‏ در خواست تخصيص حافظه توسط برنامه ‏malloc , new ‏ ‏ پيدا كردن فضاي مناسب خالي در حافظه در خواست آزادسازي حافظه توسط برنامه ‏ آزادسازي حافظه و اضافه كردن آن به ليست فضاهاي خالي ‏ ‏free ‏Narges S. Bathaeian ‏ Dynamic environment ‏ براي مواقعي كه طول عمر يك متغير بيشتر از procedureمربوطه است. بخاطر popشدن procedureبا stack قابل پياده سازي نيست. مثال: )int *dangle(void ;{ int x };return &x آدرس xیک آرگومان برگشتي است .پس بايد در قسمتي جدا از stackتعريف شده باشد. ... ‏Code ‏segment ‏Stack ‏Heap ‏Narges S. Bathaeian

51,000 تومان