⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 http:^^www.cs.bu.edu^faculty^mcchen^cs320^chap6-exh.html

📁 This data set contains WWW-pages collected from computer science departments of various universities
💻 HTML
字号:
Date: Tue, 14 Jan 1997 20:27:51 GMTServer: NCSA/1.5Content-type: text/html<TITLE>Concepts in Programming Languages. Chapter 6</TITLE><H2>Chapter 6: Modeling Objects</H2><H3>Block Structured Language (Pascal, C)</H3>Illustrating Static Link to Lexical Parent<PRE><TT>PROCEDURE foolish ( ... );TYPE list = ^cell;  cell = RECORD value:integer; link:list END;VAR P1, P2: list;    FUNCTION product (jj:  integer):integer;    VAR kk:  integer;    BEGIN        IF jj <= 0 THEN product := 1        ELSE BEGIN            readln(kk);            product := kk * product(jj-1);    P1^.value:=P1^.value * kk;        END    END;BEGIN (* the executable section of procedure foolish *)              P1^.value := 1;              P2^.value := product (2);END (* the end of procedure foolish *)Inputs:    25  7</TT></PRE>The Static link for all invocations of <TT> FUNCTION product </TT> goes to<TT> PROCEDURE foolish</TT>, which is its lexical parent.The Dynamic link for <TT>product(2)</TT> goes to <TT>foolish</TT>; whilethat of <TT>product(1)</TT> goes to <TT>product (2)</TT> and that of <TT>product(0)</TT> goes to <TT>product(1)</TT>.<P><H3>Managing the Stack Memory</H3>Operations on the Runtime Stack during a function/procedure call:<P><OL><LI> The calling program puts the argument values on the stack   using the local-allocation pointer.  Typically, the last   argument in the function call is loaded on the stack first,   followed by the second-last, and so on.  The first argument   ends up at the top of the stack.   <LI> The return address is written at the top of the stack, above   the the first argument.   <LI> The current top-of-stack pointer is copied to the top of the   stack.  This will become the new dynamic link field.  The   address of this location is stored into the top-of-stack   pointer. <LI> The static link for the new frame is written on the stack.   This is the same as either the static link or the dynamic   link of the calling block.  Code is generated at compile   time to copy the appropriate link.<LI> The local allocation pointer is incremented by enough   locations to store the return value and the local variables.   If the locals have initializers, those values are also   copied.<LI> Control is transferred to the subroutine.</OL><P><H3>Dereferencing a variable</H3>Different Context:<OL><LI> The left-hand side of an assignment operator.   <LI> The right-hand side of an assignment operator.   <LI> Part of a subscript expression.   <LI> A pointer expression.   <LI> A parameter in a function or procedure call.</OL><P><HR> <!WA0><IMG ALIGN=MIDDLE SRC="http://cs-www.bu.edu/faculty/crovella/icons/next_motif_gr.gif"> <!WA1><IMG ALIGN=MIDDLE SRC="http://cs-www.bu.edu/faculty/crovella/icons/up_motif_gr.gif"> <!WA2><IMG ALIGN=MIDDLE SRC="http://cs-www.bu.edu/faculty/crovella/icons/previous_motif_gr.gif">  <BR><HR> <P><HR></BODY><P><ADDRESS><!WA3><A HREF=http://cs-www.bu.edu/faculty/mcchen/main_menu.html            >Marina Chen</A></ADDRESS>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -