C++ 我的编译器应该针对哪些后端语言?

C++ 我的编译器应该针对哪些后端语言?,c++,compiler-construction,programming-languages,c-preprocessor,C++,Compiler Construction,Programming Languages,C Preprocessor,我已经为一种通用编程语言编写了一个编译器,它可以生成输入的优化解析树。然后通过预处理器运行此中间格式,将其转换为目标语言,以便随后编译为本机可执行文件 目前唯一的目标语言是C++,但我也想提供其他解决方案,以防某些程序可能被后端编译,从而更好地支持源语言中的某些构造。 是否有专门设计或非常适合编译器目标角色的语言? 我知道LLVM,尽管它本身是一个令人兴奋的项目,但我相信它的级别太低,无法直接针对。我正在寻找具有高质量实现的通用、中高级语言,其语法能够由C预处理器生成,因此与Python或Rub

我已经为一种通用编程语言编写了一个编译器,它可以生成输入的优化解析树。然后通过预处理器运行此中间格式,将其转换为目标语言,以便随后编译为本机可执行文件

目前唯一的目标语言是C++,但我也想提供其他解决方案,以防某些程序可能被后端编译,从而更好地支持源语言中的某些构造。 是否有专门设计或非常适合编译器目标角色的语言?


我知道LLVM,尽管它本身是一个令人兴奋的项目,但我相信它的级别太低,无法直接针对。我正在寻找具有高质量实现的通用、中高级语言,其语法能够由C预处理器生成,因此与Python或Ruby完全不同。对lambdas的支持很好,但不是绝对必要的。

关于O'Caml、Haskell、C99、Ada 2005、Scheme或Lisp呢


我不认为有任何特定的高级语言适合作为另一个编译器的目标语言。

我认为Google的Go将是一个很好的目标语言。GO试图在十年前对C++语言和java语言做些什么——改进它,使它“更好”(在观察者眼中)。
您还应该确保Lua是受支持的,这一点AFAIK并不难做到,因为它是基于C/C++的,我想(??)。像C这样的语法,有lambdas,非常流行,有非常快的HQ实现,可以编译成本机代码,在任何地方都可以使用Double plus:你可以在任何web浏览器中演示你的编译器,现在每个人都在听,如果你有一些可以启动JavaScript的东西。

如果你的后端只是纯C,你就不会支持基础语言的几种结构,但你会获得与其他语言的兼容性(几乎所有语言都可以轻松地链接到C库)。你可以用自己的语言编写程序的某些部分,也可以用其他语言编写程序的某些部分。而且编译速度很快


许多解析器生成器都在生成C代码,因此它也并不少见。

是一种高级语言/VM,被明确设计为编译器的目标。Neko编译器生成字节码,但也有一个JIT转换器(仅限x86)实际上,LISP S表达式可以看作是前端发出的AST的文本表示,类似于使用JSON或XML序列化AST。此外,许多LISP实现都支持宏,允许您定义新语法来实现LISP不支持的AST中的条目sn默认不支持。一旦你有了LISP代码,你就可以从无数的解释器、编译器和平台中进行选择(即使是硬件,如果你使用的是臭名昭著的LISP机器)


如果您正在寻找更“传统”的目标语言,我推荐C或Javascript(顺便说一句,Javascript甚至是一些Perl6编译器的目标)或者尝试某种高级汇编程序。< / P>对C++和java可能是有用的。@史提芬:java是一种独特的可能性,但现在我想远离.NET,所以C是不在的。当然,我提到这些,因为它们是两个最流行的VM,并且基于C++的语法。我想抛出的另一个想法是目标C,如果GO是一个很好的选择,因为它基本上是一个高级系统语言,但是我担心目标的价值,因为它还处于起步阶段,似乎还没有一个稳固的句柄。C是一个相当合理的建议,但是我已经瞄准了C++,这在bin方面是一样的。与其他语言兼容,同时还提供大量方便的功能,如临时性、异常和模板。哦。通过浏览器内演示生成宣传信息的能力是使用它的充分理由。我不敢相信我没有想到它。浏览器兼容性确实很好,吸引大量用户的能力也是如此如果开发人员真的不能轻松地与C代码交互,我会接受这一点,因为我的投票结果是一致的,尽管@6502的答案更像我最初想要的。