0

假设我有一个简单的类 C 编程语言:

int foo() {
    int x = 10;
    int bar(y int) {
        return y * 2
    }
    return bar() + x
}

如您所见,它支持嵌套函数。
我已经实现了词法分析阶段,现在我正在研究代码生成和堆栈机器。大多数操作和简单的流程控制已经实现,但我需要一些帮助/想法如何解决嵌套函数任务。

堆栈机有两个寄存器,累加器和一个临时寄存器。
每个帧都包含:[arguments, local variables, return address, caller frame and stack pointer, temporaries and data operations],并且我对调用帧和操作评估使用相同的堆栈。也许我应该把它分成两个堆栈,一个用于调用帧,第二个用于操作评估。

我读到了两种实现嵌套函数的方法。一,使用激活链接(也称为静态链接),并显示。有没有更好的办法来处理这个问题?
如果我选择其中一个想法,是编译时间计算还是我需要在运行时存储一些东西?如果它是运行时的东西,它的时间复杂度是多少?是 O(1) 操作,还是类似于 O(k) 的操作,其中 k 是函数的深度。

4

1 回答 1

0

静态链接需要 O(k) 时间来访问中间变量,而显示器需要 O(k) 时间来在每一帧上复制它,但总是在 O(2) 时间内完成变量访问。在实践中,静态链接实际上比显示要快一些,并且在使用闭包时效果更好。

于 2018-02-19T16:27:42.740 回答