C语言翻译器计划

问题描述 投票:2回答:1

[我试图从一个方案函数开始生成C代码,但是我找不到从方案到C的任何转换器。我试图将该函数转换为C。

(define f
  (lambda(n)
     (if (= n 0) 1
         (* n (f (- n 1))))))

(display (f 10))
(newline)

[我试图使用gambit(gsc),它生成了一个C文件,看起来就像是要在某些解释器中加载的文件,而不是包含可以执行的main函数的文件。

是否有一些应用程序生成可以直接执行的C代码?标准方案库中的功能,例如display,应与某个目标文件链接。

编辑:

我的目的是了解专业翻译人员使用的算法。

c scheme r6rs
1个回答
2
投票

[有很多这样的翻译员,至少可以追溯到1980年代,我认为CHICKEN是当前的好翻译。

如果您想使用它:

  1. 获取鸡肉;
  2. 以适当的make字号构建并安装它(这对我来说在OSX上很轻松,在Linux上确实应该很轻松,因此,尽管在Windows上可能更难);
  3. 将您的代码保存在我称为f.scm的文件中。
  4. 如果您想查看C代码,请使用chicken f.scm进行编译,这将产生几百行无法理解的C;
  5. 如果只需要可执行文件,请使用csc创建它。

[如果您想做一些平凡的事情,例如在C库中进行链接或与C中的Scheme代码进行对话,则需要阅读大量的manual


[不知道您要干什么,闻起来好像是XY problem。特别是:

  • [如果您需要一个Scheme系统,该系统允许您使用C语言编写的代码进行对话,那么您可能希望使用具有FFI的系统,而不是编译为C的系统;
  • 如果您想要一个可以创建本机可执行文件的Scheme系统,那么您很可能想要一个可以创建本机可执行文件而不是编译为C的Scheme系统。>>
  • 每个都有很多示例。这些系统中的某些可能最后,如果您想了解针对C的Scheme编译器如何工作(或针对任何语言(包括汇编器)的Scheme编译器如何工作,那么传统方法可能仍然是最佳的方法:找到一个编写良好的源,该源可用,并仔细阅读其源代码。

© www.soinside.com 2019 - 2024. All rights reserved.