【发布时间】:2017-05-09 01:40:23
【问题描述】:
我正在为类似 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) 要求两个函数的结果都是右值,所以它可以正确地执行加法。
我想不出一个自动的方法来处理这个问题:如何找到一种方法让编译器知道何时为左值生成代码,何时为右值生成代码?
【问题讨论】: