我正在開發一種簡單編程語言的解釋器。接近靜態數據的設計問題
- 有樹形結構的動態數據,其中每個數據節點的具有相關聯的(自有)型對象。
- 有幾種類型 - ListType,StructType等 - 和一個特殊的 - TypeRef。 TypeRef保存一個引用某個具體類型的名稱(一個字符串)。
- 有一個(幾乎)全球地圖(字典) - 我稱之爲環境 - (
std::map<string, Type*>
),它將類型名稱轉換爲類型對象。
問題是,可能會加載多個程序,並且每個程序都可能具有與相同名稱關聯的不同類型。這種單一的假設使得不可能有一個全球(靜態)環境,否則這將是一個完美的解決方案。因此,似乎我需要(#1)指向每個類型對象或(#2)中的環境的指針來執行環境上下文中的每個操作(例如,通過將它作爲第一個論據)。
我看到的問題:
(#1)信息冗餘,因爲所有連接的數據節點都有相同的環境。環境只會因嚴格分離的數據而有所不同。
(#2)環境的許多微不足道的傳遞給子程序,混淆了代碼。
在我看來,這個問題匹配的一般模式,我會打電話近乎靜態的數據。任何想法什麼是最好的解決方案?
不知道我理解得好。你可以使用2級地圖<字符串,地圖<字符串,類型>>?一個用於programId的字符串,一個用於鍵(選擇哪一個是第一個)。 – KLE 2009-09-10 09:10:18
這與我的($ 1)非常相似。而不是指向每個類型對象中的環境的指針,我會在那裏有一個程序的名稱。 – 2009-09-10 09:15:29