【问题标题】:Is it possible to write scripting language that translates to C code?是否可以编写转换为 C 代码的脚本语言?
【发布时间】:2012-07-10 11:44:49
【问题描述】:

我有一个想法来创建脚本语言,它可以让人们更轻松地编写大量宏、函数、更简单的函数名称,让简单的人使用起来更简单。该代码(自定义脚本语言)然后应该被翻译成简单的 C 语言的东西。像这样:

Scripting:
IO[9].high
@include "lib"
for (int i=0 to 55)

end
C:
IO |= (1<<9);
#include "lib.h"
int i = 0;
for (i=0; i<55; i++) {

}

是否有可能以某种方式有效地编写这种可以很好地输出到 c 代码的宏/脚本语言?

【问题讨论】:

  • 是的,这是可能的。但这并不容易。
  • 当然有可能:毕竟是简单的文本到文本的转换。不过,您认为 The World 是否需要另一种语法来表示 C 程序?
  • 可以这样做,但通常不是正确的解决方案。您(可能)最好为诸如 clang/llvm 之类的东西编写前端。 Example
  • 为什么“简单的人”想用 C 编程?给他们 Python 或类似的东西,他们可以轻松完成简单的工作。
  • 只是一个想法,但如果您要创建一种 C 脚本语言,您可能不想更改现有 C 语法的含义。

标签: c scripting macros programming-languages scripting-language


【解决方案1】:

感谢 PyPy,可以将 Python 代码的子集翻译成 c。

有关详细信息,请参阅以下参考: http://doc.pypy.org/en/latest/translation.html

另请参阅以下问题,这基本上是您指定 Python 作为脚本语言的问题:Use Cython as Python to C Converter

【讨论】:

    【解决方案2】:

    绝对;一些编译(或已经编译)成 C 的语言包括 Eiffel、Haskell (GHC)、Vala 和 Squeak。早期版本的 C++ 是作为 C++ 到 C 的转换器 (CFront) 实现的。

    一般概念是intermediate language。 C被提及为used as an intermediate language;通过使用 C 编译器,您可以获得与许多语言和库的二进制兼容性,并且不必编写自己的编译器; Ritchie 将 C 描述为“portable assembly language”。

    但是,与使用 C++ 一样,您可能很快就会发现以 C 为目标的限制过于严格; GHC 正在转向一种名为 C-- 的专用中间语言,您可能会发现使用 LLVM toolchain(本质上是针对 LLVM 中间表示)是一种更好的多平台兼容性方法。

    【讨论】:

    • 问题是我为 8 位微控制器开发了这种“语言”,我不能使用 llvm 和其他很酷的东西,我仅限于 avr-gcc。现在我认为唯一的解决方案是 preg_match 许多东西并替换为 C 等价物。
    【解决方案3】:

    例如,您是否看过 netsnmp 中的 mib2c 脚本?它使用脚本生成 C 源代码。你可以参考那个以获得更多想法。

    【讨论】:

      猜你喜欢
      • 2019-08-03
      • 2013-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 2010-11-18
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多