Python解释器可以用Python实现,但是哪个解释器会解释解释器本身?

时间:2017-06-17 14:09:30

标签: compiler-construction interpreter

1我发现了一个用Python实现的Python解释器。我很困惑我是否需要安装其他解释器来解释Interpreter本身? 如果是这样,为什么我们需要用它将要解释的语言编写解释器呢?如果没有,我该如何运行这个解释器?

2我也不太清楚用它编译的语言实现的编译器。解释器和编译器背后有相同的原因吗?

3 个答案:

答案 0 :(得分:0)

是的,你需要一些其他的解释器来运行它。对于编译器,您可以使用不同的编译器对其进行一次编译,然后使用该可执行代码再次编译源代码。见https://en.wikipedia.org/wiki/Bootstrapping_(compilers)

答案 1 :(得分:0)

如果我们编写一个可以解释简单数学表达式的程序,例如1 + 2 * 3。该程序用C语言编写。

// bash
> ./calculate "1 + 2 * 3"
> 7

因此,C语言程序可以解释一种简单的数学语言。

显然,我们可以选择Ruby或Python代替C来编写这个程序。最后,Ruby或Python语言程序可以解释数学语言。

让程序解释一个更复杂的语言,比如Python。然后我们得到了它。 Python语言程序解释Python语言。

因此,任何语言都可以解释任何语言。

编译器将源代码编译为机器代码,因此它可以直接在CPU中运行,解释器将源代码解释为字节代码,因此它可以在虚拟机中运行。唯一的区别是CPU已经存在,但需要首先编译虚拟机。

抱歉我的英语很差。

答案 2 :(得分:0)

这种技术的原因之一(称为bootstrapping,正如另一个用户正确回答的那样),可以使用不同的编译器优化技术,并且(大致)如下工作:

假设您有一个正常工作的编译器Y,它将语言X编译为汇编语言。然后,这个编译器就是将语言X编写的程序翻译成机器上可理解和可执行(在链接等之后)的形式所需的一切。

现在,您认为这个编译器在其核心方面编写得很好,但在其他方面写得不是很好(例如:它在评估长整数语句时非常慢)。

您所做的是:通过仅使用语言X的子集(使用编译器Y实现良好)重写完整的语言X,并优化对上述长案例语句的评估(示例)。

现在你有了一个编译器Z,它将一个语言X的程序计算成一个程序,该程序只包含语言X的核心语句。使用编译器Y,你现在可以将它翻译成汇编语言。

通常:在一长串编译器中的某一点上应该有一个编译器,它实际上会生成有效的机器指令,或者你将无法执行你的好程序(听起来很简单,但要记住好)。

EDIT @merito:编译器将程序从源语言转换为目标语言,可以是二进制代码,但不必如此。你在解释器和编译器之间的区别对我来说似乎不对。

相关问题