口译员如何切换范围?

时间:2010-05-25 14:43:37

标签: interpreter conceptual

我问这个是因为我对翻译开发比较陌生,我想在重新发明轮子之前先了解一些基本概念。

我想到了存储在数组中的所有变量的值,这些变量使得当前作用域在进入函数时,数组被交换并且原始数组被放置在某种堆栈上。离开函数时,弹出“范围堆栈”的顶部元素并再次使用。

  • 这基本上是对的吗?
  • 不是交换数组(这意味着移动大量数据)不是很慢,因此不被现代口译员使用?

2 个答案:

答案 0 :(得分:2)

为什么要交换阵列?只需查看堆栈顶部的数组即可。此外,在大多数语言中,当您想要交换它时,您不必复制数组,只需交换引用或指针。

这也是口译员可能会做的事情。另一种方法是为当前作用域提供一个特殊的数据结构,该结构明确地保存对其父帧的引用。

答案 1 :(得分:0)

Python使用C堆栈来跟踪其范围。每次输入新的作用域时,都会进行一次新的函数调用,以便作用域的数据始终保存在堆栈的局部变量中。

对于其他一些口译员来说,一切都像你的建议一样保留在堆栈上。但是,解释器就位于堆栈顶部。因为只有一个副本,所以不需要来回复制。