口译员如何使用机器指令?

时间:2015-07-16 13:31:48

标签: interpreter

我在网上的某个地方找到了说"解释器是一个程序,它使用编程语言的基本指令集作为其机器语言来实现或模拟虚拟机。 "在上述引言的上下文中,任何人都可以解释为解释器如何实际执行高级指令吗?在网上找到的教程只涉及抽象的方式,说它一次需要一行并执行。它是否使用机器指令库或如何?我很想知道它。

1 个答案:

答案 0 :(得分:0)

解释器查看源代码中的每条指令,然后运行代码以执行该指令。它本身与机器代码无关。

例如,如果您的解释器是用C#编写的,并且源代码说要在数字上加上两个,则解释器最终将调用一个将数字相加的方法。

许多解释器编译为字节码。字节码是比原始源代码可以解析的执行速度更快的指令。因此,我们可能会得到以下字节码:

1,
7,
2

解释器定义这些数字的含义。但是我们可以将第一个数字作为指令。在这种情况下,1表示将数字添加到变量。 7可能是需要添加到变量的索引。 2可能是要添加的数字。因此,您的add函数处理程序可能如下所示:

if (bytecode[current] == 1)
{
    int varId = bytecode[++current];
    int value = bytecode[++current];
    Variables[varId] += value;
}

因此,机器代码由C#编译器生成。解释器代码与机器代码无关。它只是具有执行特定指令的例程。

这也应该说明为什么编译后的代码运行得更快。代替字节码,它将被编译为机器代码。因此,无需在运行时调用处理程序。它将简单地直接执行指令。