我正在開發一個有趣的自定義解釋器;)到目前為止,我所做的是分配變數、定義和呼叫函式、陣列、回圈、if 塊等......我已經開始在我的語言中添加 OOP 元素,我正在無法實作“this”/“self”關鍵字。我只是想不出解決這個問題的辦法。我想了幾個解決方案:
- 一個類存盤它的實體(作為字典),當“this”關鍵字出現時,解釋器忽略“private”和“public”關鍵字(從公共方法呼叫私有方法),創建對參考的方法的呼叫“這個”并回傳。
- “this”關鍵字是一個參考,它在后臺是實體本身,但該呼叫的方法訪問修飾符被洗掉。這類似于第一個,但我想不出更好的了。
如果您知道 C#(主要)或 C ,那也很好,因為我非常依賴 OOP 來創建我的解釋器。
這是我想實作的一小段代碼示例:
struct Dog has
pub prop age;
prv def bark() do
println "woof woof";
end
pub def run(dist) do
loop 0 to $dist with "d" do
println ("the dog ran " string $d) " meters";
$self.bark();
end
end
end
def main(args) do
new Dog -> $dog;
7 -> $dog.age;
println $dog.age;
$dog.run 30;
end
請注意 bark() 方法是“prv”(私有)。我想知道如何讓結構知道它的實體,以便每次運行時都能讓狗吠(從公共方法呼叫私有方法)。
提前致謝
uj5u.com熱心網友回復:
您的解釋器將需要保留執行堆疊和環境(否則您將不知道在方法完成后回傳到哪里等)。
在這個執行堆疊/環境中,除了函式指標/簽名之外,您還需要保留正在呼叫該方法的物件(如果有的話,請記住類似靜態的函式)。
然后在取消參考時也會訪問您要存盤的這個參考$this。實際上,這是您想法的第 1 部分和第 2 部分 - 您可以在那里進行一些檢查,例如方法的可見性等。
祝你好運,聽起來是個有趣的專案!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/496388.html
上一篇:C 中使用資料成員的運行時多型性
