【正文】
? (3) begin writeln(h(2)) end。 (5)} (6)main( ) (7){ int a=1,b=2。 傳值 的實(shí)現(xiàn) ? ,即在被調(diào)過程的活動記錄中開辟了形參的存儲空間,這些存儲位置即是我們所說的形式單元(用以存放實(shí)參)。 帶有非局部變量和形參的 PASCAL過程 非局變量 a[i]和 a[j]的 值進(jìn)行交換, i,j為形參(在這里是傳值) (1)program reference(input,output)。 這樣,每個過程的活動記錄所含的內(nèi)容有: TOP值,它指向過程活動記錄的棧頂位置。 L8:end。 主 ?? p roc Q (b)。A [l 1:u 1, l 2:u 2,?? , ln : un] l1 u1 l2 u2 : : t y pe a (首地址) n C ? 過程活動記錄 AR :為說明方便,假定程序是由過程組成,過程區(qū)分為源文本,運(yùn)行時稱作過程的激活。 嵌套過程語言棧式分配 。 ? array B[m:n]。 ?關(guān)鍵技術(shù):解決對非局部量的引用(存取)。 array B[m:n]。 為了解決上述問題,可采取兩種措施。 數(shù) 組 C 數(shù) 組 C 數(shù) 組 B 數(shù) 組 B C 的 向 量 內(nèi) 情 eB5的 T O PC 的 內(nèi) 情 向 量B4的 T O PB4 的 T O PB 的 內(nèi) 情 向 量B 的 內(nèi) 情 向 量 z Z B1的 T O PB1 的 T O P D I S P L A YD I S P L A Y 形式單元 m , n 2 形式單元 m , n 2連接數(shù)據(jù)連 接 數(shù) 據(jù) A 的 T O PA 的 T O P ∶ ∶ ∶ ∶ ( e ) ( f)( e ) 進(jìn)入分程序 B4分配數(shù)組 C 之后; ( f ) 進(jìn)入分程序 B5 。 (12) swap(a,b)。 begin temp:=x。 procedure c。 ? (9)begin ? (10) c ? (11)end 圖 1027 嵌套過程作為參數(shù)傳遞 p ar am c 存取鏈 m b f . 存取鏈圖 10 28 連同存取鏈一起 傳遞過程實(shí)參 各種數(shù)據(jù)對象的存儲分配 數(shù)據(jù)對象 name 名字,名稱 type 類型 location 內(nèi)存地址 value 值 ponent 成分 除實(shí)參是過程情況外,還有實(shí)參為數(shù)組,實(shí)參為標(biāo)號等情況。 begin m:=3。 其結(jié)果等價于執(zhí)行下列運(yùn)算: x :=a; y :=b; temp :=x; x :=y; y :=temp 傳地址 的實(shí)現(xiàn) ( call by reference )(callbyaddress)(callbylocation) 把實(shí)在參數(shù)的地址傳遞給相應(yīng)的形參,即 調(diào)用過程把一個指向?qū)崊⒌拇鎯Φ刂返闹羔槀鬟f給被調(diào)用過程相應(yīng)的形參: 1實(shí)在參數(shù)是一個名字,或具有左值的表達(dá)式 傳遞左值 2實(shí)在參數(shù)是無左值的表達(dá)式 計算值,放入一存儲單元,傳此存儲單元地址 3目標(biāo)代碼中,被調(diào)用過程對形參的引用變成對傳遞給被調(diào)用過程的指針的間接引用 procedure swap( x,y:integer)。 (10)begin (11) a:=1。 ( b) 進(jìn) 入 分 程 序 B1。 例如:如果有一個從第 5層分程序轉(zhuǎn)出到達(dá)第 1層分程序的標(biāo)號 L,雖然在第 5層分程序工作時知道 L所屬的層數(shù),我們極易從DISPLAY中獲得第 1層分程序的活動記錄基址( SP),但是怎么知道第 1層分程序進(jìn)入時的 TOP呢?唯一的辦法是從 5,4,3和2各層順序退出。 integer m,n。 主程序執(zhí)行語句