編譯原理第10章 存儲組織課件_第1頁
編譯原理第10章 存儲組織課件_第2頁
編譯原理第10章 存儲組織課件_第3頁
編譯原理第10章 存儲組織課件_第4頁
編譯原理第10章 存儲組織課件_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

編譯原理之

存儲組織編譯原理第10章存儲組織第十章目標(biāo)程序運行時的存儲組織概述數(shù)據(jù)空間的使用方法和管理方法棧式存儲分配的實現(xiàn)參數(shù)傳遞過程操作練習(xí)編譯原理第10章存儲組織概述一般來講,假如編譯程序從操作系統(tǒng)中得到一塊存儲區(qū)以位目標(biāo)程序在其上運行,該存儲區(qū)需容納生成的目標(biāo)代碼和目標(biāo)代碼運行時的數(shù)據(jù)空間。數(shù)據(jù)空間應(yīng)包括:用戶定義的各種類型的數(shù)據(jù)對象(變量和常數(shù))所需的存儲空間、作為保留中間結(jié)果和傳遞參數(shù)的臨時工作單元,調(diào)用過程時所需的連接單元、以及組織輸入/輸出所需的緩沖區(qū)。運行時的存儲區(qū)常常劃分成:目標(biāo)區(qū)、靜態(tài)數(shù)據(jù)區(qū)、棧區(qū)和堆區(qū)。運行時存儲區(qū)的典型劃分編譯程序?qū)?shù)據(jù)空間的分配編譯原理第10章存儲組織運行時存儲區(qū)的典型劃分代碼(code)區(qū)用以存放目標(biāo)代碼,這是固定長度的,即編譯時能確定的。靜態(tài)數(shù)據(jù)區(qū)(staticdata)用以存放編譯時能確定所占用空間的數(shù)據(jù)。堆棧區(qū)(stackandheap)用于可變數(shù)據(jù)以及管理過程活動的控制信息。目標(biāo)程序運行時存儲區(qū)的典型劃分編譯原理第10章存儲組織編譯程序?qū)?shù)據(jù)空間的分配基本原則是程序語言設(shè)計時對程序運行中存儲空間的使用和管理辦法的規(guī)定。數(shù)據(jù)空間的分配:本質(zhì)上看是將程序中的每個名字與一個存儲位置關(guān)聯(lián)起來,該存儲位置用以容納名字的值。在程序設(shè)計語言語義學(xué)中,使用術(shù)語environment表示將一個名字映射到一個存儲位置的函數(shù),術(shù)語state表示存儲位置到值的映射。名字到存儲、到值的映射編譯原理第10章存儲組織數(shù)據(jù)空間的使用方法和管理方法術(shù)語:靜態(tài):如果一個名字的性質(zhì)通過說明語句或隱或顯規(guī)則而定義,則稱這種性質(zhì)是“靜態(tài)”確定的。動態(tài):如果名字的性質(zhì)只有在程序運行時才能知道,則稱這種性質(zhì)為“動態(tài)”確定的。靜態(tài)存儲分配動態(tài)存儲分配編譯原理第10章存儲組織靜態(tài)存儲分配如果在編譯時能確定目標(biāo)程序運行中所需的全部數(shù)據(jù)空間的大小,編譯時安排好目標(biāo)程序運行時的全部數(shù)據(jù)空間,確定每個數(shù)據(jù)對象的存儲位置,那么則稱這種分配策略為靜態(tài)存儲分配。示例FORTRAN77的示例程序該程序中局部變量的靜態(tài)存儲位置編譯原理第10章存儲組織FORTRAN77的程序編譯原理第10章存儲組織局部變量的靜態(tài)存儲位置編譯原理第10章存儲組織動態(tài)存儲分配如果一個程序設(shè)計語言允許遞歸過程、可變數(shù)組或可變數(shù)據(jù)結(jié)構(gòu),那么,就需要采用動態(tài)存儲管理技術(shù)。因為對于這種程序在編譯時無法知道它在運行時需要多大的存儲空間,它所需要的數(shù)據(jù)空間的大小需待程序運行時動態(tài)地確定。分類:棧式動態(tài)存儲分配堆式動態(tài)存儲分配編譯原理第10章存儲組織棧式動態(tài)存儲分配這種分配策略是將整個程序的數(shù)據(jù)空間設(shè)計為一個棧。它適用于Pascal,C,ALGOL之類的語言的實現(xiàn),每當(dāng)調(diào)用一個過程時,它所需的數(shù)據(jù)空間就分配在棧頂,每當(dāng)過程工作結(jié)束時就釋放這部分空間。過程所需的數(shù)據(jù)空間包括兩部分:一部分是生存期在本過程這次活動中的數(shù)據(jù)對象,如局部變量、參數(shù)單元、臨時變量等等;另一部分則是用以管理過程活動的記錄信息,即當(dāng)一次過程調(diào)用出現(xiàn)時,調(diào)用該過程的那個過程的活動即被中斷,當(dāng)前機(jī)器的狀態(tài)信息,諸如程序計數(shù)器(返回地址)、寄存器的值等等,也都必須保留在棧中。當(dāng)控制從調(diào)用返回時,便根據(jù)棧中記錄的信息恢復(fù)機(jī)器狀態(tài),使該過程的活動重新開始。編譯原理第10章存儲組織堆式動態(tài)存儲分配如果一個程序語言提供用戶自由地申請數(shù)據(jù)空間和退還數(shù)據(jù)空間的機(jī)制(如C++中的new,delete.Pascal的new,便是這種機(jī)制),或者不僅有過程而且有進(jìn)程的程序結(jié)構(gòu),即空間的使用未必服從“先申請后釋放,后申請先釋放”的原則,那么棧式的動態(tài)分配方案就不適用了。這種情況下通常使用一種稱為堆式的動態(tài)存儲分配方案。假設(shè)程序運行時有一個大的存儲空間,每當(dāng)需要時就從這片空間中借用一塊,不用時再退還,由于借還的時間先后不一,經(jīng)一段運行之后,程序運行空間將被分劃成許多塊塊,有些占用,有些空閑。那么當(dāng)運行程序要求一塊體積為N的空間時,需要決定應(yīng)該從哪個空閑塊得到這個空間。理論上講,應(yīng)該從比N稍大一些的空間塊中取出N個單元,以便位大的空閑塊派更大的用場,但實現(xiàn)難度很大,實際中常常采用的辦法是:先遇到哪塊比N大就從其中取出N個單元。即使這樣,也會發(fā)生找不到一塊比N大的空閑塊,但所有空閑塊的總和比N大得多的情況,這時,有的分配管理系統(tǒng)采用廢品回收的辦法來應(yīng)付。編譯原理第10章存儲組織棧式存儲分配的實現(xiàn)過程的活動記錄簡單的棧式動態(tài)分配實現(xiàn)嵌套過程語言的棧式實現(xiàn)分程序結(jié)構(gòu)的存儲管理編譯原理第10章存儲組織過程的活動記錄過程的活動記錄是一段連續(xù)的存儲區(qū).用以存放過程的一次執(zhí)行所需要的信息。簡單描述編譯原理第10章存儲組織簡單描述1.臨時工作單元,比如計算表達(dá)式過程中需存放中間結(jié)果用的臨時值單元。2.局部變量,一個過程的局部變量。3.保存機(jī)器狀態(tài),容納該過程執(zhí)行前關(guān)于機(jī)器狀態(tài)信息,諸如程序計數(shù)器、寄存器的值,這些值都需要在控制從該過程返回時給予恢復(fù)。4.存取鏈,用以存取非局部變量,這些變量存放于其它過程活動記錄中。并不是所有語言需要該信息。5.控制鏈,指向調(diào)用該過程的那個過程的活動記錄,這也不是所有語言都需要的。6.實參,也稱形式單元,由調(diào)用過程向該被說過程提供實參的值(或地址)。當(dāng)然在實際編譯程序中,也常常使用機(jī)器寄存器傳遞實參。7.返回地址,保存該被調(diào)過程返回后的地址。編譯原理第10章存儲組織簡單的棧式動態(tài)分配實現(xiàn)要求:沒有分程序結(jié)構(gòu)過程定義不嵌套允許過程遞歸調(diào)用示例:程序結(jié)構(gòu)分配策略存儲分配結(jié)構(gòu)圖活動記錄內(nèi)容運行棧編譯原理第10章存儲組織程序結(jié)構(gòu)編譯原理第10章存儲組織分配策略運行時,每當(dāng)進(jìn)入一個過程,則為該過程分配一段存儲區(qū)。當(dāng)一個過程工作完畢返回時,它所占用的存儲區(qū)則可釋放。程序運行時的存儲空間,(棧)中在某一時刻可能會包含某個過程的幾個活動記錄(某個過程遞歸調(diào)用的情況);另外,同樣的一個存儲位置,可能不同運行時刻分配給不同的數(shù)據(jù)對象。編譯原理第10章存儲組織存儲分配結(jié)構(gòu)圖若主程序調(diào)用了過程Q,Q又調(diào)用了R,在R進(jìn)入運行后的存儲結(jié)構(gòu)如圖(a)所示。若主程序調(diào)用了過程Q,Q遞歸調(diào)用自己,在Q過程第二次進(jìn)入運行后的存儲結(jié)構(gòu)如圖(b)所示。若主程序先調(diào)用過程Q,然后主程序接著調(diào)用R,且Q過程不調(diào)用Q和R,這時Q和R進(jìn)入運行后的存儲結(jié)構(gòu)分別如圖(c)和(d)所示。編譯原理第10章存儲組織活動記錄內(nèi)容SP總是指向現(xiàn)行過程活動記錄的起點。TOP則始終指向已占用的棧頂單元。編譯原理第10章存儲組織運行棧編譯原理第10章存儲組織嵌套過程語言的棧式實現(xiàn)具有嵌套過程的Pascal程序程序中過程定義的嵌套情況存儲棧的布局活動記錄情況在過程活動記錄中增設(shè)存儲鏈在過程活動記錄中存取非局部變量編譯原理第10章存儲組織具有嵌套過程的Pascal程序編譯原理第10章存儲組織程序中過程定義的嵌套情況sortreadarrayexchangequicksonpartition可將整個程序sort看成最外層的過程,readarray、exchange、quickson、partition中引用的a均不是它們的局部變量,而是過程sort的局部變量。編譯原理第10章存儲組織存儲棧的布局假如過程sort激活(調(diào)用)了過程quicksort,這時存儲棧小的情形示意如下圖所示,其中在quicksort過程活動記錄中有一(或一些)存儲單元(用斜線描繪)用以記錄過程quicksort以引用sort中定義的變量a和x。編譯原理第10章存儲組織增設(shè)存儲鏈在活動記錄過程中增設(shè)存取鏈,指向包含該過程的直接外層過程的最新活動記錄的起始位置。示例:過程活動記錄的內(nèi)容圖過程sort調(diào)用過程quicksort的存儲棧圖如果某次執(zhí)行的順序為:sort→quicksort→quicksort→partition→exchange→?進(jìn)入過程exchange之后的運行棧圖。編譯原理第10章存儲組織過程活動記錄的內(nèi)容圖編譯原理第10章存儲組織過程sort調(diào)用過程quicksort的存儲棧圖編譯原理第10章存儲組織進(jìn)入過程exchange之后的運行棧圖編譯原理第10章存儲組織存取非局部變量存取非局部變量的辦法是常用的有效辦法。即每進(jìn)入一個過程后,在建立它的活動記錄的同時建立一張嵌套層次顯示表display。display是一個指針數(shù)組d,也可看作是一個小棧,自頂向下每個單元依次存放著現(xiàn)行層,直接外層,……直至最外層(0層,主程序?qū)?等每一層過程的最新活動記錄的地址。示例:1)sort→quicksort?;2)sort→quicksort→quicksort?

;3)sort→quicksort→quicksort→partition?

;4)sort→quicksort→quicksort→partition→exchange?

過程調(diào)用時display的建立編譯原理第10章存儲組織1的運行棧和display編譯原理第10章存儲組織2的運行棧和display編譯原理第10章存儲組織3的運行棧和display編譯原理第10章存儲組織4的運行棧和display編譯原理第10章存儲組織過程調(diào)用時display的建立當(dāng)過程P1調(diào)用過程P2而進(jìn)入P2后,P2為了建立自己的display,P2必須知道它的直接外層過程(記為P0)的display。這意味著,當(dāng)P1調(diào)用P2時必須把P0的display地址作為連接數(shù)據(jù)之一傳給P2。display的構(gòu)造P2是真實過程時的構(gòu)造P2是形式參數(shù)時的構(gòu)造編譯原理第10章存儲組織真實過程時的構(gòu)造P0或者就是P1自身或者既是P1又是P2的直接外層(示意圖)。不論哪一種情形,只要在進(jìn)入P2后能夠知道P1的display就能知道P0的display,從而可直接構(gòu)造出P2的display。事實上,只需從P1的display中自底而上地取過l2個單元(l2為P2的層數(shù))再添上進(jìn)入P2后新建立的SP值就構(gòu)成了P2的display。也就是說,在這種情況下,只需把P1的display地址作為連接數(shù)據(jù)之一傳送給P2就能夠建立P2的display。編譯原理第10章存儲組織P1調(diào)用P2的兩種不同嵌套示意圖編譯原理第10章存儲組織形式參數(shù)時的構(gòu)造調(diào)用P2意味著調(diào)用P2當(dāng)前相應(yīng)的實在過程。此時的P0應(yīng)是這個實在過程的直接外層過程。假定P0的display地址可從形式單元P2所指示的地方獲得。為了能在P2中獲得P0的display地址,必須在P1調(diào)用P2時設(shè)法把P1的display地址作為連接數(shù)據(jù)之一(稱為“全局display地址”)傳送給P2。于是連接數(shù)據(jù)變?yōu)槿棧?1)老SP值;(2)返回地址;(3)全局display地址。編譯原理第10章存儲組織分程序結(jié)構(gòu)的存儲管理概述聲明作用域遵循的原則——最近嵌套原則分程序結(jié)構(gòu)的存儲管理分程序結(jié)構(gòu)的存儲實現(xiàn)方法視分程序為“無參過程”視分程序為完整的過程體活動記錄的內(nèi)容分程序的進(jìn)入和退出時活動記錄的情況編譯原理第10章存儲組織概述一個分程序是一個含有它自己的局部數(shù)據(jù)(變量)聲明的語句。示例:C語言,一個分程序的語法形式是:{聲明語句}C語言的一個分程序分程序的特征是它們的嵌套結(jié)構(gòu),使用界符標(biāo)明分程序的開始和結(jié)束。界符保證一個分程序要么與別的分程序無關(guān),要么是嵌在別的分程序中,這種嵌套性有時稱作“分程序結(jié)構(gòu)”編譯原理第10章存儲組織C語言的一個分程序編譯原理第10章存儲組織最近嵌套原則1、一個分程序B中的一個聲明的作用域包含在B中。2、如果某個名字x未在分程序B中聲明。那么,若B中出現(xiàn)的x的聲明的作用域是在B的包含層B’中,則應(yīng)該:(1)B’中有x的聲明;(2)B’與任何別的包含有x聲明的分程序相比,它是最近包圍B的分程序。編譯原理第10章存儲組織分程序結(jié)構(gòu)的存儲管理分程序結(jié)構(gòu)用棧式存儲分配實現(xiàn),是因為一個聲明的作用域不會落在它出現(xiàn)的分程序之外,該聲明的空間可以在分程序進(jìn)入時分配。編譯原理第10章存儲組織無參過程把分程序看成一個“無參過程”,只不過是在該分程序前調(diào)用,分程序之后返回,分程序在哪里定義就在哪里被調(diào)用。效率低下的原因解決效率低的辦法編譯原理第10章存儲組織效率低下的原因第一分程序不存在被調(diào)用的問題,不必要在進(jìn)入一個分程序時,將連接數(shù)據(jù)(如動態(tài)鏈、返回地址等)和display都放進(jìn)活動記錄中;第二,當(dāng)從內(nèi)層分程序向外轉(zhuǎn)移時可能同時要結(jié)束若干個分程序,恢復(fù)所要到達(dá)的那個分程序的數(shù)據(jù)區(qū)需要順序退出,浪費時間,降低效率。編譯原理第10章存儲組織解決效率低的辦法首先,代替原來的那個統(tǒng)一的棧頂指示器,讓每個過程和分程序都有自己的棧頂指示器TOP,它的值保存在各自的活動記錄中。這樣上述第二個問題即可解決;其次,不把分程序看作“無參過程”,而讓每個分程序享用包圍它的那個最小過程的display。每個分程序都隸屬于某個確定的過程,分程序的層次是相對于它所屬的那個過程進(jìn)行編號的。每個過程被當(dāng)作0層分程序,而過程體分程序(假定是一個分程序)當(dāng)作是它所管轄的第一層分程序。編譯原理第10章存儲組織完整過程體每次為一個完整的過程體分配存儲,即把一個過程體中的所有分程序所需的存儲一次分配好。編譯原理第10章存儲組織活動記錄的內(nèi)容內(nèi)容:1.過程的TOP單元,指向活動記錄的棧頂位置;2.連接數(shù)據(jù),共4項:(1)老SP值;(2)返回地址;(3)全局display地址;(4)調(diào)用時的棧頂單元地址,稱作老TOP。3.參數(shù)個數(shù)和形式單元。4.display表。5.過程所管轄的各分程序的局部數(shù)據(jù)單元對每個分程序來說,它們包括:(1)一個名為TOP的單元,當(dāng)進(jìn)入時它含現(xiàn)行棧頂?shù)刂?,以后用來存放棧的新高度?2)分程序的局部變量、數(shù)組內(nèi)情向量和臨時工作單元。示例:程序活動記錄編譯原理第10章存儲組織ALGOL的一個程序編譯原理第10章存儲組織ALGOL的活動記錄編譯原理第10章存儲組織活動記錄的情況分程序進(jìn)入時分程序退出時分程序結(jié)構(gòu)數(shù)據(jù)區(qū)變化圖編譯原理第10章存儲組織分程序進(jìn)入時的活動記錄每個分程序在進(jìn)入時,都有它自己的一個TOP單元,剛進(jìn)入時,它的TOP值是由其直接外層分程序的TOP單元的內(nèi)容所賦予的。一旦定義了TOP值后,就對該分程序的所有局部數(shù)組進(jìn)行地址分配。每分配一個數(shù)組區(qū)后,TOP的值隨即調(diào)整指向新的棧頂位置。過程看成0層分程序、它是通過調(diào)用而進(jìn)入的,它的TOP值是調(diào)用時的棧頂?shù)刂芳由纤幕顒佑涗浀拈L度L,L是在編譯時靜態(tài)計算出來的。運行中每逢進(jìn)入分程序(除0層分程序外),即執(zhí)行分程序的begin語句時,只需把直接外層分程序的TOP值抄進(jìn)自己的TOP單元中。由于分程序的數(shù)據(jù)區(qū)起點(分程序TOP單元所在處)可在編譯時靜態(tài)地確定,因此,這個抄送動作只需用兩條指令就可完成。所以,進(jìn)入分程序所要做的工作是非常簡單的。在進(jìn)入分程序建立TOP單元的值之后,執(zhí)行第一個執(zhí)行句之前,如果有數(shù)組說明則應(yīng)對所定義的數(shù)組分配存儲空間。數(shù)組空間分配之后,TOP調(diào)整為指向新的棧頂(新分配的數(shù)組區(qū)的頂端)。編譯原理第10章存儲組織分程序退出時的活動記錄在分程序工作完畢正常退出時,即到達(dá)分程序的end語句時,無需進(jìn)行任何退棧的工作。換句話說,分程序的正常出口不需要執(zhí)行任何指令。編譯原理第10章存儲組織分程序結(jié)構(gòu)數(shù)據(jù)區(qū)變化圖編譯原理第10章存儲組織參數(shù)傳遞傳值傳地址傳結(jié)果傳名字過程參數(shù)編譯原理第10章存儲組織傳值傳值,即call-by-value,也稱值調(diào)用,是最簡單的參數(shù)傳遞方法。即將實參計算出它的值.然后把它傳給被調(diào)過程。參數(shù)傳遞方法的不同主要基于實在參數(shù)是表達(dá)一個右值,一個左值,還是實在參數(shù)本身的文本(字)?!白蟆焙汀坝摇眮碜再x值語句的“左”端和“右”端。左值:(l-value)指表達(dá)式代表的存儲。右值:(r-value)指該存儲位置中含有的值。傳值的具體內(nèi)容傳值的特點傳值的示例編譯原理第10章存儲組織傳值的具體內(nèi)容1、形式參數(shù)當(dāng)作過程的局部變量處理,即在被調(diào)過程的活動記錄中開辟了形參的存儲空間,這些存儲位置即是實參或形式單元。2、調(diào)用過程計算實參的值,并將它們的右值(r-value)放在為形式單元開辟的空間中。3、被調(diào)用過程執(zhí)行時,就像使用局部變量一樣使用這些形式單元。編譯原理第10章存儲組織傳值的特點傳值或值調(diào)用的重要特點是對形式參數(shù)的任何運算不影響調(diào)用過程的活動記錄中實參的值。編譯原理第10章存儲組織傳值的示例該程序的輸出是:a=2,b=l如果將第3行的關(guān)鍵字var去掉,則是以傳值方式將x和y傳遞給過程swap,第12行swap(a,b)調(diào)用過程將不會影響a和b的值,則該程序的輸出是:a=1,b=2。編譯原理第10章存儲組織傳地址當(dāng)參數(shù)通過引用傳遞時,稱作傳地址,或引用調(diào)用(call-by-reference)。調(diào)用過程傳給被調(diào)過程的是指針,指向?qū)崊⒋鎯ξ恢玫闹羔槨?、如實參是一個名字或是具有左值的表達(dá)式,則左值本身傳遞過去。2、如實參是一表達(dá)式,比方a+b或2,而沒有左值,則表達(dá)式先求值,并存入某一位置,然后該位置的地址傳遞過去。3、被調(diào)過程中對形式參數(shù)的任何引用和賦值都通過傳遞到被調(diào)過程的指針被處理成間接訪問。示例編譯原理第10章存儲組織傳地址示例若用實參i和a[i]對過程swap進(jìn)行調(diào)用,即swap(i,a[i]),其效果如下步驟所述:1、將i和a[i]的地址(左值)拷貝到被調(diào)過程的活動記錄中,比如說分別對應(yīng)形參x和y的單元arg1和arg2。2、將局部變量temp設(shè)為由arg1所指單元的內(nèi)容(即令temp等于I0

,其中I0是i的初值),這一步對應(yīng)于swap定義中的第6行語句temp=x。3、將arg1所指單元的內(nèi)容設(shè)為arg2所指單元的值,即i:=a[I0],這一步對應(yīng)于swap定義中第7行的x:=y(tǒng)。4、將arg2所指單元的內(nèi)容設(shè)為等于temp的值,即,設(shè)a[I0]=i,這一步對應(yīng)y:=temp。編譯原理第10章存儲組織傳結(jié)果傳結(jié)果(call-by-value-result):處理的每一形參,需分配兩個形式單元,分別稱為該形參的第一形式單元和第二形式單元,其中第二形式單元被視為過程體的局部單元。實現(xiàn)這種傳遞的方法是:在進(jìn)行入過程時,將實參的地址送入相應(yīng)形參的第一形式單元,將實參之值送入第二形式單元。在退出過程時,再將第二形式單元中形參的終值再按第一形式單元中的實參地址賦給相應(yīng)的實參,所以有時又將這種參數(shù)傳遞稱為復(fù)寫存貯連接。編譯原理第10章存儲組織傳名字傳名字(call-by-name)。這種數(shù)據(jù)傳遞方式是:將實在參數(shù)的名字傳給過程中相應(yīng)的形式參數(shù),也就是,過程體中的形式參數(shù)都要用相應(yīng)的實在參數(shù)的名字進(jìn)行替換。這種名字替換的實質(zhì)是:在過程說明的目標(biāo)程序中,在形式參數(shù)出現(xiàn)的地方都要使用相應(yīng)實在參數(shù)當(dāng)時的值或地址。編譯原理第10章存儲組織過程參數(shù)一個嵌套過程(函數(shù))可以作為參數(shù)傳遞。示例:嵌套過程代碼過程參數(shù)傳遞情況編譯原理第10章存儲組織嵌套過程程序代碼(1)programparam(input,ouput);(2)procedureb(fuctionh(n:integer):integer);(3)beginwriteln(h(2))end;(4)procedurec;(5)varm;integer;(6)functionf(n:integer):integer;(7)beginf:=m+nend{f};(8)beginm:=0;b(f)end{c};(9)begin(10)c(11)end編譯原理第10章存儲組織過程參數(shù)傳遞情況過程c把f作為參數(shù)傳遞給b,而b通過引用形參h調(diào)用f。要注意的是:函數(shù)f有一非局部量m。但m的作用域并不包括b的過程體。b中的語句writeln(h(2))激活f,是因為形參h引用f,writeln打印的是調(diào)用f(2)的結(jié)果。編譯原理第10章存儲組織過程操作過程操作:調(diào)用進(jìn)入返回示例:四元式序列運行時的執(zhí)行含動態(tài)數(shù)組的過程的操作過程結(jié)束時的處理編譯原理第10章存儲組織四元式序列parT1parT2…parTncallP,n編譯原理第10章存儲組織運行時的執(zhí)行對于ParTi,(i=1,2,…,n)的處理是:根據(jù)parTi(i=l,2,…,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論