地特三等申論題
107年
[資訊處理] 程式語言
第 一 題
📖 題組:
三、(一)請解釋程式語言中之變數動態範圍(Dynamic Scope)與語句參考環境(Referencing Environment)。(6 分) (二)以下為一動態範圍之程式,請分別列出 a, b, c 三點之參考環境。(9 分) void subprogram1( ) { int X, Y; . . . <----------------- a } /* end of subprogram1 void subprogram2( ) { int Y, Z; . . . <----------------- b } /* end of subprogram2 void main( ) { int W, Z; . . . <----------------- c } /* end of main
三、(一)請解釋程式語言中之變數動態範圍(Dynamic Scope)與語句參考環境(Referencing Environment)。(6 分) (二)以下為一動態範圍之程式,請分別列出 a, b, c 三點之參考環境。(9 分) void subprogram1( ) { int X, Y; . . . <----------------- a } /* end of subprogram1 void subprogram2( ) { int Y, Z; . . . <----------------- b } /* end of subprogram2 void main( ) { int W, Z; . . . <----------------- c } /* end of main
📝 此題為申論題,共 2 小題
小題 (一)
請解釋程式語言中之變數動態範圍(Dynamic Scope)與語句參考環境(Referencing Environment)。
思路引導 VIP
看到此題,首先需精確定義「動態範圍」是依賴「執行期呼叫順序(Call Stack)」而非程式碼靜態結構。其次,「參考環境」是特定語句當下「所有可存取變數的集合」。處理程式追蹤時,若題目未給定呼叫順序,務必「主動假設呼叫順序(例如 main -> sub2 -> sub1)」再進行追蹤,並特別留意同名變數造成的遮蔽(Shadowing)效應,這是閱卷給分的關鍵。
小題 (二)
以下為一動態範圍之程式,請分別列出 a, b, c 三點之參考環境。
思路引導 VIP
解答本題的關鍵在於深刻理解「動態範圍」的定義:變數的繫結取決於執行時期的「呼叫順序(Calling sequence)」而非程式碼的靜態結構。看到這題,首先要警覺題目並未給定呼叫順序,因此必須在作答時「主動假設」一個合理的呼叫鏈(如 main -> subprogram2 -> subprogram1),接著沿著呼叫鏈由下往上找尋變數,並特別注意同名變數造成的「遮蔽(Shadowing)效應」。