温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Scheme to C translator

其他 - 计划翻译

发布于 2020-03-31 23:25:15

我想从一个方案函数开始生成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应与某个目标文件链接。

编辑:

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

查看更多

提问者
alinsoar
被浏览
26
tfb 2020-02-01 02:24

有很多这样的翻译者,至少可以追溯到1980年代,我认为《 鸡》是一本不错的新书

如果要使用:

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

如果您想做一些平凡的事情,例如,在C库中进行链接或与C语言中的Scheme代码进行通讯,则需要阅读大量的手册


不知道要干什么,闻起来好像是XY问题特别是:

  • 如果您想使用一个Scheme系统,使您能够与用C编写的代码进行对话,那么您可能想要一个具有FFI的系统,而不是可以编译为C的系统;
  • 如果您想要一个可以创建本机可执行文件的Scheme系统,那么您可能想要一个可以创建本机可执行文件的Scheme系统,而不是一个可以编译为C的系统。

这些都有很多例子。这些系统中的某些也可以编译为C,或通过C编译,但是一个不依赖于另一个。

最后,如果您想了解针对C的Scheme编译器如何工作(或针对任何语言(包括汇编器)的Scheme编译器如何工作),那么传统方法可能仍然是最佳的方法:找到一个编写良好的源,并且该源可用。阅读并修改其源代码。