Transcript 投影片 1

第三章
變數與繫結
陳維魁 博士
[email protected]
儒林圖書公司
大綱









變數的定義
變數元件
儲存區配置問題
參考的透明性
完全計算
捷徑計算
繫結(binding)
繫結時間
精選習題
2
變數的定義

變數是由四個元件所組成




名稱(name)
屬性(attribute)
引用(reference)
值(value)
3
變數元件

名稱


變數的名字
並非所有的變數都是有名稱的,有的變數是沒
有名稱的,如指標變數(pointer variable)的名稱
僅是引用(reference)該變數的方式,並非真正
的名稱,此類變數稱為不具名變數(anonymous
variable)。
4
變數元件

屬性



屬性即為型態,代表變數的性質
如整數、實數、字元、字串及布林值等等
變數的屬性有的程式語言是在設計程式時決定,
如Pascal;有些則是在執行的時候決定,如
SNOBOL
5
變數元件

引用


即指變數的儲存位址
詳細內容請見第二節之內容
6
變數元件

值


變數的值
以C語言的“int x = 1;”敘述來作為範例,此敘
述表示宣告一個名稱為x的變數,其屬性為整
數而值為1,但其在記憶體中的位址則需視系
統是利用靜態儲存區配置或動態儲存區配置才
能決定系統會於何時配置記憶體空間給變數x
使用
7
儲存區配置問題

靜態儲存區配置(static storage allocation)




代表程式執行前,配置記憶體空間給變數
如Fortran,Cobol,Pascal的全域變數與PL/1的static記
憶指令
可加速執行的速度。
動態儲存區配置(dynamic storage allocation)



代表程式執行時,配置記憶體空間給變數
如Algol 60,APL,LISP,Snobol與Pascal的區域變數
可增加執行時的彈性,但執行速度較慢
8
參考的透明性


referential transparency
意義

程式執行的過程中,計算運算式(expression)後, 應
只能得到一個值,不能更改或破壞原來執行的環
境這種現象便是參考的透明性
9
完全計算


complete circuit evaluation
指對運算式作求值動作時,必需做完整個
運算式才可得出最後的結果,如此的計算
方式便稱為完全計算
10
捷徑計算



short circuit evaluation
short cut evaluation
指對運算式(通常是指布林運算式)作求值
動作時,無需做完整個運算式即可得出最
後的結果
11
捷徑計算範例

A1×A2×A3×……×A100


A and B and C


若A1為0,則A1×A2×A3×……×A100之結果為0,
不需將整個運算式計算完畢再決定最後的結果
值
若A為false則運算式的結果為false,不需將整
個運算式計算完畢再決定最後的結果值
A or B or C

只要A為true則整個運算式的結果就為true,不
需將整個運算式計算完畢再決定最後的結果值
12
捷徑計算


各種語言對“捷徑計算”的處理方式
內定(default)法

PASCAL內定採用完全計算




若在程式段中加入“{$B-}”敘述,則在該敘述後之所有布林
運算式將採用捷徑計算
若利用“{$B+}”則可恢復完全計算
C與C++則內定採用捷徑計算
運算子(operator)法

ADA利用AND THEN及OR ELSE代表採用捷徑計算



A OR ELSE B OR ELSE C及A AND THEN B AND THEN C
AND及OR則是代表採用完全計算
JAVA利用 || 及&&代表採用捷徑計算,而 | 及&則是代表採用
完全計算。
13
繫結(binding)

意義

繫結是指變數的名稱與其位址,屬性或值相結合
的動作
14
繫結時間

程式語言設計時的繫結



程式語言所提供的所有可能資料型態
所有符號的意義等等
程式語言製作時的繫結


所有跟機器相關的特性及變數可能的值
在不同計算機中即使相同的數學運算式,亦可
能得到不同的結果
15
繫結時間

翻譯時的繫結



變數的位址(若採靜態儲存區配置法)
變數真正的型態(若採外顯式—explicit 型態法)。
執行時的繫結



變數的位址(若採動態儲存區配置法)
變數真正的型態(若採內隱式—implicit 型態法)
變數真正的值
16
範例
假設“y = x+100;”為一個C語言的敘述(statement),若
a. 以“=”為指定運算子(assignment operator)
b. 以“+”為加法符號
c. “+”表示整數加法
d. “100”表示十進位的一百
e. 整數100的內部表示法(internal representation)
f. 100為整數
g. x, y的型態(type)
h. x, y的值
i. x, y的位址(address)
j. x, y可以宣告的型態
17
精選習題

假設以下的敘述為一未提供“捷徑計算”
能力的程式段,請利用程式設計的技巧,
使此敘述經此改寫的動作後,具有與“捷
徑計算”之處理方法相同之處理模式 。
if <A> and <B> then E1 else E2
18
精選習題

試問在C語言中,最佳化編譯程式
(optimization compiler)是否可以將二元布
林運算子(boolean operator)前後的兩項子敘
述(sub-expression)互相對調?其理由為何
19
精選習題

試說明何以動態儲存區配置允許程式中使
用遞迴呼叫(recursive call),而靜態儲存區
配置則不允許?
20
精選習題

試定義何謂靜態型態繫結(static type
binding)及動態型態繫結(dynamic type
binding)
21