如何使用訪問連結和顯示來訪問非本地名稱?
訪問連結是指向每個啟用記錄的指標,它為巢狀過程獲取詞法作用域的直接實現。換句話說,訪問連結用於實現詞法作用域語言。“訪問線”可能需要放置被呼叫過程所需的資料。
處理在不同詞法級別定義的靜態連結的改進方案是使用稱為顯示的資料結構。顯示是一個指向啟用記錄的指標陣列。Display[0] 包含指向在詞法級別 0 定義的過程的最最近啟用的啟用記錄的指標。
顯示陣列中元素的數量由輸入源程式中巢狀的最大級別給出。在訪問封閉過程中定義的非區域性變數的顯示方案中,每個過程在啟用時將其啟用記錄的指標儲存在其詞法級別的顯示陣列中。
它儲存該位置在顯示陣列中的先前值,並在過程退出時將其恢復。顯示方案的優點是可以直接使用 Display[n] 獲取詞法級別“n”的任何封閉過程的啟用記錄,而不是像先前方案那樣遍歷訪問連結。
非區域性名稱有兩種作用域規則:
靜態作用域或詞法作用域
詞法作用域稱為靜態作用域。在這種型別的作用域中,作用域是透過確定程式文字進行測試的。例如,PASCAL、C 和 ADA 等語言使用靜態作用域規則。這些語言也稱為塊結構語言。
動態作用域
動態作用域分配規則用於非塊結構語言。在這種型別的範圍中,非區域性變數訪問指的是在最近呼叫且仍在活動的過程宣告的非區域性資料。在動態作用域下實現非區域性訪問的方法有兩種:
**深度訪問** - 基本概念是保留一個活動變數的堆疊。使用控制連結而不是訪問連結,要查詢變數,請從上到下搜尋堆疊,查詢包含所需變數空間的最新的啟用記錄。這種訪問非區域性變數的方法稱為深度訪問。由於搜尋是在堆疊中“深入”進行的,因此該方法稱為深度訪問。在這種方法中,應在執行時使用符號表。
**淺層訪問** - 其思想是保留中心儲存,併為每個變數名稱分配一個槽。如果名稱不是在執行時建立的,則可以在編譯時確定儲存佈局。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP