c - 方案到 C 转换器

标签 c scheme r6rs

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

编辑:

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

最佳答案

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

如果你想使用它:

  • 吃鸡;
  • 使用适当的 make 构建和安装它咒语(这对我来说在 OSX 上是无痛的,因此在 Linux 上确实应该是非常无痛的,尽管在 Windows 上可能更难);
  • 将您的代码存储在我将调用的文件中 f.scm .
  • 如果要查看 C 代码,请使用 chicken f.scm 编译这将产生几百行难以理解的 C;
  • 如果您只需要可执行文件,请使用 csc创建它。

  • 有一个广泛的manual如果您想做任何重要的事情,例如在 C 库中链接或与 C 中的 Scheme 代码交谈,则您需要阅读它。

    不知道你在追求什么,这闻起来好像它可能是 XY problem .特别是:
  • 如果您想要一个允许您与用 C 编写的代码对话的 Scheme 系统,那么您可能需要一个带有 FFI 的系统,而不是一个编译为 C 的系统;
  • 如果你想要一个可以创建本地可执行文件的 Scheme 系统,那么你可能想要一个可以创建本地可执行文件的 Scheme 系统,而不是一个编译为 C 的系统。

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

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

    关于c - 方案到 C 转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60003133/

    相关文章:

    compiler-construction - 是否有针对不同 "RnRS"方案标准的摘要?

    compiler-construction - 是什么让基于堆的 Scheme 比基于堆栈的 Scheme 慢?

    list - Scheme中获取树中元素的总和

    scheme - 截至 2016 年,是否有支持 100% R7RS(小型)且没有偏差的方案实现?

    c - 修改传递给函数的 char 数组,C

    C 两个玩家之间的视觉输出猜谜游戏

    c - 指针地址不递增

    c - 用于快速查询的整数 vector 散列

    scheme - 阴阳拼图是如何工作的?