版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
上次課主要內(nèi)容2021/7/71綁定(Binding)存儲(chǔ)組織與分配內(nèi)存劃分、靜態(tài)分配、動(dòng)態(tài)分配(棧、堆)參數(shù)傳遞四種傳遞方式:值、地址、復(fù)制恢復(fù)、換名符號(hào)表管理關(guān)鍵字表、層次表、符號(hào)表(過(guò)程表、變量表、標(biāo)號(hào)表)、常數(shù)表線性表(排序表)、散列表第七章
說(shuō)明與過(guò)程語(yǔ)句翻譯2021/7/72說(shuō)明語(yǔ)句翻譯組合數(shù)據(jù)說(shuō)明的翻譯過(guò)程調(diào)用翻譯7.1
說(shuō)明語(yǔ)句的翻譯2021/7/73高級(jí)語(yǔ)言中的說(shuō)明語(yǔ)句(Declarations)用于對(duì)程序中規(guī)定范圍內(nèi)使用的各類變量、常數(shù)、過(guò)程進(jìn)行說(shuō)明類型基本類型/內(nèi)部類型(built-in)用戶定義類型——結(jié)構(gòu)描述作用域一般:說(shuō)明所在的分程序、過(guò)程類型的作用2021/7/74引入數(shù)據(jù)抽象、隱蔽數(shù)據(jù)的基本表示用戶無(wú)需注明字節(jié)數(shù)規(guī)定可用的運(yùn)算類型檢查數(shù)據(jù)精度控制規(guī)定存儲(chǔ)單元的字節(jié)數(shù),優(yōu)化空間管理文法描述2021/7/75P
→
DD
→ D;
DD
→ id
:
TT
→
integerT
→
realT
→ array[num]
of
T1T
→
^T1例如:a:integer;
b:real;c:array[10]of
real變量說(shuō)明的翻譯2021/7/76在符號(hào)表中填寫變量的屬性種別、類型、相對(duì)地址、作用域……等相對(duì)地址全局變量表示為靜態(tài)數(shù)據(jù)區(qū)的偏移值(offset)局部變量表示為局部數(shù)據(jù)域(活動(dòng)記錄的部分)的偏移值例7-1:相對(duì)地址舉例名字 相對(duì)地址x
06468X[1]X[2]……X[8]ij2021/7/7708566468Beginreal
x[8];i,
j;integer……end屬性、過(guò)程、與全局量2021/7/78類型T的屬性type
類型width占用的字節(jié)數(shù)基本子程序
insert:設(shè)置變量的類型和地址
array:數(shù)組類型處理全局量offset:已分配空間字節(jié)數(shù)9說(shuō)明語(yǔ)句的翻譯模式P335P
→ {
offset
:=
0
}
DD
→ D
;
DD
→ id
:
T {insert(
id.entry,
T.type,
offset
);offset
:=
offset
+
T.width}T
→
integer {T.type
:=
integer; T.width
:=
4}T
→
real {T.type
:=
real; T.width
:=
8}T
→ array[
num
]
of
T1T
→
^T12021/7/7{T.type
:=
array(
num.val,
T1.type);T.width
:=
num.val
*
T1.width}{T.type
:=
pointer(
T1.type);T.width
:=
4}id:realTD;id:integerTDP2021/7/710例7-2:x:real;i:integer的翻譯insert(x,real,0)offset=0Doffset=8T.type=realT.width=8offset=12T.type=integerT.width=4insert(i,integer,8)7.2
組合數(shù)據(jù)說(shuō)明的翻譯2021/7/711分類同結(jié)構(gòu)的組合數(shù)據(jù)(同質(zhì)數(shù)據(jù)結(jié)構(gòu))數(shù)組、集合異結(jié)構(gòu)的組合數(shù)據(jù)(異質(zhì)數(shù)據(jù)結(jié)構(gòu))記錄、結(jié)構(gòu)、聯(lián)合抽象數(shù)據(jù)類型類、模塊數(shù)組的引用與分配策略2021/7/712B.h.j操作元素的引用、修改:A[i,j,…,k]
,結(jié)構(gòu)的引用、修改:A
,
B分配策略靜態(tài):直接完成相應(yīng)的分配工作動(dòng)態(tài):構(gòu)造代碼,以在運(yùn)行時(shí)調(diào)用分配過(guò)程數(shù)組說(shuō)明的翻譯2021/7/713符號(hào)表及有關(guān)表格(內(nèi)情向量)處理維數(shù)、下標(biāo)上界、下標(biāo)下界空間分配首地址、需用空間計(jì)算存放方式按行存放、按列存放——影響具體元素地址的計(jì)算動(dòng)態(tài)分配方案下數(shù)組說(shuō)明的代碼結(jié)構(gòu)2021/7/714D
→id:array
[low1:up1
,
……,
lown:upn]
of
Tup1.code送工作單元W12low1.code送工作單元W……upn.code送工作單元W2n-1lown.code送工作單元W2n動(dòng)態(tài)分配子程序其它參數(shù)(n,type)轉(zhuǎn)動(dòng)態(tài)分配子程序入口? D
→id:array
[num]
of
T數(shù)組元素的引用2021/7/715數(shù)組元素的翻譯完成上下界檢查生成代碼完成相對(duì)地址的計(jì)算目標(biāo)x:=y[i]和y[i]:=xy為數(shù)組地址的固定部分,i是相對(duì)地址,不是數(shù)組下標(biāo)數(shù)組元素地址計(jì)算-按行存放2021/7/716一維數(shù)組A[low1:up1]
(nk=upk-lowk)Addr(A[i])=base+(i-
low1)*w=(base-
low1*w)+i*w=c+i*w二維數(shù)組A[low1:up1
,
low2:up2]~A[i1,i2]Addr(A[i1,i2])=base+((i1-
low1)*n1+
(i2-low2))*w=
base+(i1-
low1)*n1*w+(i2-low2)*w=
base-
low1*
n1*w-low2*w
+i1
*
n1*w+
i2*w=
base-(low1*
n1
-low2)*w
+(i1
*
n1
+
i2)*w=c+(i1*n1+
i2)*wid[i1,i2,…,in](ih相當(dāng)于Eh的值)P345~3472021/7/717S→L:=EE→L{if
L.offset=null
then
gen(L.place’:=’E.place)else
gen(L.place[L.offset]’:=’E.place}{if
L.offset=null
then
E.place:=L.place
elseL→id{E.place:=newtemp;gen(E.place’:=’L.place[L.offset]}}{L.place:=id.place;
L.offset:=null}Elist→id[E{Elist.place:=E.place;Elist.ndim:=1;Elist.array:=id.place}Elist→Elist1,E{t:=newtemp;m:=Elist1.ndim+1;gen(t’:=’Elist1.place’*’limit(Elist.array,m);gen(t’:=’t’+’E.place);
Elist.array:=Elist1.array;Elist.place:=t;Elist.ndim:=m}L→Elist]{L.place:=newtemp;L.offset:=newtemp;gen(L.place’:=’
c);gen(L.offset’:=’Elist.place*w)}記錄說(shuō)明的翻譯2021/7/718空間分配設(shè)置首地址和各元素的相對(duì)地址大于所需的空間(對(duì)齊)例:struct
Node
{float
x,
y;struct
node
*next;}
node;xyn
e
x
t048記錄說(shuō)明的翻譯2021/7/719符號(hào)表及有關(guān)表格處理各元素的名字、類型、字節(jié)數(shù)生成代碼,完成元素的相對(duì)地址的計(jì)算目標(biāo)x:=y[i]和x[i]:=y
x是記錄名,i是相對(duì)地址7.3
過(guò)程調(diào)用2021/7/720過(guò)程(procedure)子程序(subroutine)、函數(shù)(function)過(guò)程的定義與調(diào)用形參和實(shí)參的結(jié)合:參數(shù)計(jì)算與傳遞調(diào)用與返回工作方式調(diào)用方:當(dāng)前環(huán)境的保存與恢復(fù)被調(diào)方:構(gòu)造環(huán)境,參數(shù)綁定Main(
){Sub1(
10
)}Sub1(
x
){Sub2(
x
+
1
)}Sub2(
y
){Sub3(
)}2021/7/721過(guò)程調(diào)用實(shí)現(xiàn)2021/7/722簡(jiǎn)單過(guò)程調(diào)用實(shí)在參數(shù)的計(jì)算和保存控制轉(zhuǎn)移、返回地址的保存實(shí)在參數(shù)和形式參數(shù)的結(jié)合(多種結(jié)合方式)局部變量的處理返回值的處理遞歸過(guò)程調(diào)用與過(guò)程參數(shù)每層過(guò)程調(diào)用信息的保存與相應(yīng)信息的查找回憶:活動(dòng)記錄中過(guò)程所用信息用于表達(dá)式的計(jì)算局部數(shù)據(jù)寄存器、程序計(jì)數(shù)器(返回地址)保存實(shí)在參數(shù)的值或地址存放返回值保存調(diào)用者活動(dòng)記錄地址等(SP)用于存取非局部名(Display)臨時(shí)變量局部變量機(jī)器狀態(tài)實(shí)在參數(shù)返回值
控制鏈
訪問鏈2021/7/723回憶:例7-3:函數(shù)的活動(dòng)記錄2021/7/7int
sub(
i,
p
)int
i;char
*p;{charbuf[32];buf[i]
=
*(p
+
i);return
i
+
1;}臨時(shí)變量:
t1,t2,t3局部變量:buf[32]機(jī)器狀態(tài):R0,…,
R9,SP,PC,
PS參數(shù):i,
p返回值控制鏈Display24過(guò)程說(shuō)明語(yǔ)句的翻譯2021/7/725分析參數(shù)的類型、分配地址統(tǒng)計(jì)參數(shù)和返回值的空間需求與調(diào)用語(yǔ)句配合完成形/實(shí)參數(shù)的結(jié)合符號(hào)表處理完成過(guò)程名的屬性登記過(guò)程說(shuō)明語(yǔ)句代碼結(jié)構(gòu)2021/7/726說(shuō)明語(yǔ)句:Procedure
id(X1,X2,…,Xn)代碼結(jié)構(gòu)按參數(shù)傳遞要求實(shí)現(xiàn)參數(shù)X1的傳遞,或者完成傳遞準(zhǔn)備;按參數(shù)傳遞要求實(shí)現(xiàn)參數(shù)X2的傳遞,或者完成傳遞準(zhǔn)備;X1.codeX2.code……Xn.code按參數(shù)傳遞要求實(shí)現(xiàn)參數(shù)Xn的傳遞,或者完成傳遞準(zhǔn)備;完成動(dòng)態(tài)存儲(chǔ)分配相關(guān)的工作;進(jìn)入過(guò)程體。過(guò)程調(diào)用語(yǔ)句的代碼結(jié)構(gòu)過(guò)程調(diào)用語(yǔ)句1
2
nid(E
,E
,
…
,E
)代碼結(jié)構(gòu)
E1.codea1:=E1.place…En.codean:=En.place動(dòng)態(tài)存儲(chǔ)分配相關(guān)工作goto
pc+n+1param
a1…
param
ancall
id.place,n需要一個(gè)隊(duì)列存放a1,a2,…,an,以生成2021/7/727過(guò)程調(diào)用的實(shí)現(xiàn)2021/7/728在過(guò)程f中調(diào)用過(guò)程g時(shí)f對(duì)實(shí)在參數(shù)求值,將結(jié)果存入g的活動(dòng)記錄參數(shù)域在g的活動(dòng)記錄中存放返回地址和當(dāng)前棧頂指針按照活動(dòng)記錄的大小,上移棧頂指針控制轉(zhuǎn)到g的入口e.g存放寄存器值和其它狀態(tài)信息2021/7/729f.執(zhí)行過(guò)程體從過(guò)程g返回:對(duì)應(yīng)return語(yǔ)句g在返回值域中保存返回值恢復(fù)原棧頂指針和其它寄存器按返回地址返回調(diào)用者過(guò)程調(diào)用語(yǔ)句的制導(dǎo)翻譯定義2021/7/730產(chǎn)生式S
→
call
id
(
Elist
)語(yǔ)義規(guī)則{ S.code
:=
Elist.code
||gen(‘goto
‘pc+Elist.num+1)||Elist
→
Efor
隊(duì)列q中的每一項(xiàng)p
do
gen(’param’p)||gen(‘call’id.place’,’Elist.num)}{Elist.num
:=
1;
Elist
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度美容美發(fā)行業(yè)品牌推廣與廣告投放合同4篇
- 2025版五金制品研發(fā)、生產(chǎn)與銷售合作協(xié)議2篇
- 2025年度鋁合金門窗維修保養(yǎng)服務(wù)合同模板4篇
- 2025年度高速公路路基采石供應(yīng)合同3篇
- 2025年行政法律文書數(shù)字化處理及輸出合同3篇
- 精準(zhǔn)農(nóng)業(yè)2025年度糧食儲(chǔ)備風(fēng)險(xiǎn)管理與保險(xiǎn)合同3篇
- 二零二五紅酒年份酒定制銷售及品牌合作合同范本3篇
- 二零二五版門窗行業(yè)環(huán)保材料采購(gòu)合同8篇
- 2025年度鋁窗產(chǎn)品研發(fā)與創(chuàng)新激勵(lì)合同4篇
- 2025年度道路施工勞務(wù)分包合同4篇
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級(jí)上冊(cè) 期末綜合試卷(含答案)
- 收養(yǎng)能力評(píng)分表
- 山東省桓臺(tái)第一中學(xué)2024-2025學(xué)年高一上學(xué)期期中考試物理試卷(拓展部)(無(wú)答案)
- 中華人民共和國(guó)保守國(guó)家秘密法實(shí)施條例培訓(xùn)課件
- 管道坡口技術(shù)培訓(xùn)
- 2024年全國(guó)統(tǒng)一高考英語(yǔ)試卷(新課標(biāo)Ⅰ卷)含答案
- 2024年認(rèn)證行業(yè)法律法規(guī)及認(rèn)證基礎(chǔ)知識(shí) CCAA年度確認(rèn) 試題與答案
- 皮膚儲(chǔ)存新技術(shù)及臨床應(yīng)用
- 外研版七年級(jí)英語(yǔ)上冊(cè)《閱讀理解》專項(xiàng)練習(xí)題(含答案)
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)必考題
- 上海市復(fù)旦大學(xué)附中2024屆高考沖刺模擬數(shù)學(xué)試題含解析
評(píng)論
0/150
提交評(píng)論