我可以构建自己的解释器,然后将其转换为编译器吗?如果是的话,我该如何构建呢?
答案 0 :(得分:11)
这称为第二次Futamura投影。 Prof. Yoshihiko Futamura在他1971年的论文Partial Evaluation of Computation Process – An approach to a Compiler-Compiler (Japanese)中首次描述了这一点,其中English version在28年后重新出版。
它使用Partial Evaluation,通过部分评估部分求值程序本身的解释器,从而产生一个编译器。
因此,您需要两个成分:用于目标语言的解释器,用某种宿主语言编写(可能与目标语言相同或不同),以及能够同时评估解释器和本身的部分评估器。换句话说,它需要部分评估宿主语言,它本身需要用它可以评估的宿主语言编写。
答案 1 :(得分:0)
已经提到的部分评估是可能的方法之一(非常计算密集的方法,但另一方面非常通用)。另一种方法是元编程:如果语言的解释器以简单的翻译器的形式实现,该翻译器以另一种解释语言为目标,则很容易将其稍后重新定位到某种编译语言,或者用编译器替换目标解释器。
答案 2 :(得分:0)
除了Futaruma预测,另一种方法是跟踪jit。元跟踪jit不会直接跟踪或jit你的程序,而是通过解释器间接跟踪或jit。 RPython是一个很酷的元跟踪框架。你在python的受限版本中编写一个解释器,RPython将它转换为C语言中的jit编译器。