【正文】
有關(guān))過程定義 過程名 執(zhí)行過程體 過程體 控制數(shù)據(jù)對象的分配,為執(zhí)行過程體使用源文本中同樣的名字 目標(biāo)程序中不同的數(shù)據(jù)空間因為一個過程可以是遞歸的,這時同一個名字在不同的時間可能代表不同的存儲單元決定運(yùn)行管理復(fù)雜程度的因素 ——源語言本身 1. 允許的數(shù)據(jù)類型的多少 2 .語言中允許的數(shù)據(jù)項是 靜態(tài)確定 動態(tài)確定 3 .程序結(jié)構(gòu) 決定名字的作用域的規(guī)則和結(jié)構(gòu) A . 段結(jié)構(gòu) (Fortran) B . 過程定義不嵌套,只允許過程遞歸調(diào)用 C . 分程序結(jié)構(gòu) 分程序嵌套 過程定義嵌套 4存儲類別的多少 Global Static Local dynamic 術(shù)語 ? 靜態(tài):如果一個名字的性質(zhì)通過說明語句或隱或顯規(guī)則而定義,則稱這種性質(zhì)是“靜態(tài)”確定的。 ? ? 例 : main ? 全局變量的說明 ? proc R ? …… ? end R。 const a=10。 read(b)。 ?? P Q ca ll R R( x , y)。 B1:begin real z。 L8:end。但這種辦法是很浪費(fèi)時間的。 這樣,每個過程的活動記錄所含的內(nèi)容有: TOP值,它指向過程活動記錄的棧頂位置。 數(shù) 組 BB 的 內(nèi) 情 向 量B1的 T o pD i s p l a yz形 式 單 元m , n2A 的 T o p連 接 數(shù) 據(jù)? ?( c ) 數(shù) 組 B 分 配 之 后數(shù) 組 BedB2的 T o pB 的 內(nèi) 情 向 量B1的 T o pD i s p l a yz形 式 單 元m , n2A 的 T o p連 接 數(shù) 據(jù)? ?( d ) 進(jìn) 入 分 程 序 B2數(shù) 組 C數(shù) 組 BC 的 內(nèi) 情 向 量B4的 T o pB 的 內(nèi) 情 向 量B1的 T o pD i s p l a yz形 式 單 元m , n2A 的 T o p連 接 數(shù) 據(jù)? ?( e ) 進(jìn) 入 分 程 序 B 4 分 配數(shù) 組 C 之 后數(shù) 組 C數(shù) 組 BeB5的 T o pC 的 內(nèi) 情 向 量B4的 T o pB 的 內(nèi) 情 向 量B1的 T o pD i s p l a yz形 式 單 元m , n2A 的 T o p連 接 數(shù) 據(jù)? ?( f ) 進(jìn) 入 分 程 序 B 參數(shù)傳遞 (1)procedure exchangel(i,j:integer)。 (3)procedure swap({var} x,y:integer)。 (13) writeln(?a=?,a)。 ? ,就像使用局部變量一樣使用這些形式單元。 x:=y; y:=temp end; 調(diào)用 swap(i,a[i]) 其結(jié)果等價于執(zhí)行下列運(yùn)算: 1把 i和 a[i]的地址分別放到 x和 y相應(yīng)的單元 a1,a2 2( temp :=x; )temp的內(nèi)容置為 a1所指單元中存的內(nèi)容 3 (x :=y。a,amp。 ? (5) var m:integer。 面向?qū)ο笳Z言在對運(yùn)行時方面的要求差異很大 。這是對于諸如Smalltalk的高度動態(tài)語言的合理的結(jié)構(gòu),因為類結(jié)構(gòu)可以在執(zhí)行中改變。 class C c。} } class Apple extends Fruit { string color。 ()。 a=New (Apple)。 string name。 class A { int m1。每個對象保持一個指向其定義類的指針,作為一個附加的域和它的實例變量放在一起,通過這個類就可找到所有(局部和繼承的)的方法。 b(f) end {c}。 過程調(diào)用的四元式序列 S ? call id(arglist) arglist ? arglist,E arglist ? E par T1 par T2 par Tn call id,n 過程作為參數(shù)傳遞 三種環(huán)境:詞法環(huán)境 傳遞環(huán)境 活動環(huán)境 ? (1)program param(input,output)。 *x=*y。 x:=y; y:=temp end; 調(diào)用 swap(a,b) 過程將不會影響 a和 b的值。 例如:過程 swap(x,y:integer)。 (8) y:=temp (9) end。 a[i]:=a[j]。 對于每個分程序來說,它們包括: ( 1)分程序的 TOP值。第二,不把分程序看作“無參過程”,每個分程序享用包圍它的那個最近過程的 DISPLAY。