塊狀作用域的直譯器變數表實現

2021-07-11 18:19:25 字數 658 閱讀 1128

首先變數表應該採取一種將變數名對應到變數的方法,這種方法大致兩種,一種是將變數名parse時hash成數字,一種是直接建立string->value的map。

我們使用鍊錶結構,每乙個塊狀作用域指向父作用域,介面實現getvar()方法,遞迴查詢變數,利用exception機制處理未定義變數行為。

class variabletable 

variabletable(variabletable * t)

void definevar( int name )

value & getvar( const

int & name )

else

}~variabletable()

};

我們完全可以採用類似思路。

const

int __proto__ = getnameint("__proto__");

class object

value & __getvar(int name)

}inline value & getvar(int name)

catch (undefinedvariableexception)

}~object()

};

變數的作用域

1 int i for i 0 i 10 i text console.writeline last text output in loop text 失敗,字串變數text是for迴圈的區域性變數,這段 不能編譯,因為在該迴圈外部呼叫的console.writeline 試圖使用該變數text,這...

變數的作用域

首先定義全域性變數和區域性變數 如下 import import scope.h int gglobalvar 300 int main int argc,const char argv return 0 2015 04 01 14 52 12.123 extern 1924 303 300 201...

變數的作用域

1.變數的作用域指明可訪問該變數的一段 宣告乙個變數的同時也就指明了變數的作用域。2.作用域的基本規則 1 引數宣告的作用域是宣告方法所在的方法體 2 區域性變數在方法或方法中的一塊 中宣告,它的作用域為它所在的 塊 整個方法或方法中的某塊 3 在帶標號的break和continue語句中,標號的作...