在看了很多编译器和解释器之间的区别的文章之后,我仍然无法理解它们的构造和内部机制的区别。
我读到的最常见的区别是,编译器产生一个目标程序,该程序可以在系统上运行并接受输入。而解释器只是逐行运行输入,并产生输出。
我的主要疑问是:
1)编译器由词法分析器、解析器、中间代码生成器和代码生成器组成,但解释器的组成部分是什么?
2)谁给解释语言提供运行时支持,我的意思是谁管理递归函数的堆栈?
3)这是针对Python语言的:
Python包括编译器阶段和解释器阶段
编译器会产生一些字节码,然后这些字节码会被其虚拟机解释执行。
如果我只设计Python(Python -> bytecode)的编译器
a)我需要管理内存吗?
b)这个编译器与传统的编译器或解释器有什么不同?
我知道这里要问很多问题,但我真的想理解这些细节。
我参考了Alfred V. Aho的《编译器书籍》。
根据反馈和进一步研究,我认为我应该修改我的问题
编译器不必只产生机器代码作为输出
但是还有一个问题在困扰着我,假设我想设计一个(Python -> bytecode)编译器,然后字节码将由虚拟机解释执行(如果我错了,请纠正我)。
那么我需要为Python编写词法分析器,然后是生成某种抽象语法树的解析器...之后,我是否需要生成一些中间代码(如“龙书”中提到的3地址代码)或直接生成字节码指令(我想这些指令会在VM的文档中给出)?
我是否还需要编写处理堆栈的代码来支持递归和作用域?
bash
。 - Johannes Schaub - litb