gpt4 book ai didi

python - 编译器与解释器(基于构造和设计)

转载 作者:太空狗 更新时间:2023-10-30 00:08:15 30 4
gpt4 key购买 nike

看了很多关于编译器和解释器之间区别的帖子,我仍然无法弄清楚它们在构造和内部机制上的区别。

我读到的最常见的区别是,编译器生成一个可执行的目标程序{意味着机器代码作为其输出},它可以在系统上运行,而不是输入。而解释器只是逐行运行输入{这里究竟发生了什么?}并产生输出。

我的主要疑虑是:

1) 编译器由词法分析器、解析器、中间代码生成器和代码生成器组成,但解释器由哪些部分组成?

2) 谁为解释型语言提供运行时支持,我的意思是谁管理递归函数的堆和堆栈?

3)这是Python语言特有的:
Python 包括编译器阶段和解释器阶段编译器生成一些字节码,然后该字节码由其虚拟机解释。
如果我只为 Python 设计编译器(Python -> 字节码)

a) 我是否必须为此管理内存{编写代码来管理堆栈和堆}?

b) 这个编译器与传统的编译器或解释器有何不同?

我知道这里有很多问题要问,但我真的很想了解这些细节。

我指的是 Alfred V. Aho 的编译器书籍


根据反馈和一些进一步的研究,我认为我应该修改我的问题

编译器不需要只生成机器代码作为其输出

但有一个问题一直困扰着我假设我想设计一个(Python->字节码)编译器,然后字节码将由虚拟机解释..(如果我错了请纠正我)。
然后我将不得不为 Python 编写一个词法分析器,然后是一个将生成某种抽象语法树的解析器。在此之后我必须生成一些中间代码(龙书中提到的 3 地址代码)或直接字节码指令(我想它会在 VM 的文档中给出)?

我是否还必须编写代码来处理堆栈以提供对递归和作用域的支持?

最佳答案

首先,“编译器”暗示“输出机器代码”。您可以从任何语言编译成任何其他语言,无论是高级编程语言、某种中间格式、虚拟机代码(字节码)还是物理机代码(机器代码)。

  1. 像编译器一样,解释器需要阅读和理解它实现的语言。因此你有相同的前端代码(尽管今天的解释器通常实现简单得多的语言——只有字节码;因此这些解释器只需要一个非常简单的前端)。与编译器不同,解释器的后端不生成代码,而是执行它。显然,这完全是一个不同的问题,因此解释器看起来与编译器有很大不同。它模拟一台计算机(通常是一台比现实生活中的机器高级得多的计算机),而不是生成等效程序的表示。

  2. 假设今天的虚拟机有点高级,这是解释器的工作 - 除其他外,有专门的指令用于调用函数和创建对象,并且垃圾收集被烘焙到 VM 中。当您以较低级别的机器(例如 x86 指令集)为目标时,需要将许多此类细节融入生成的代码中,无论是直接(系统调用或其他)还是通过调用 C 标准库实现。

3.

  • a) 可能不需要,因为专用于 Python 的 VM 不需要它。很容易搞砸,不必要的,并且可以说与 Python 语义不兼容,因为它允许手动内存管理。另一方面,如果你的目标是像 LLVM 这样的低级别的东西,你必须特别小心——细节取决于目标语言。这就是为什么没有人这样做的部分原因。

  • b) 这将是一个完美的编译器,但显然不是解释器。与针对机器代码的编译器相比,您的后端可能更简单,并且由于输入语言的性质,您不需要做那么多的分析和优化,但这没有根本区别。

    <

关于python - 编译器与解释器(基于构造和设计),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8203221/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com