0
我正在爲類java語言編寫一個小型編譯器,除了每個東西都是這種語言的對象,即使是原始類型。編譯器:左值和右值的代碼生成
考慮下面的代碼:
class Main inherits IO {
fib(x : Int) : Int {
if x < 2
then x
else fib(x - 1) + fib(x - 2)
fi
};
main() : Object {
out_int(fib(10))
};
};
在我的實現,即進入一個功能是參考該對象的副本的一切。 (所以10是一個整數對象)。所以fib
函數也會返回一個整數對象。
但是,fib(x - 1) + fib(x - 2)
要求兩個函數的結果是右值,所以它可以正確執行加法。
我不能想出一個自動的方式來處理這個問題:如何找到一種方式,以便編譯器知道什麼時候爲左值生成代碼以及何時爲右值?