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

时间:2010-08-06 05:05:37

标签: c++ compiler-construction programming-languages c-preprocessor

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

目前唯一的目标语言是C ++,但我也想提供其他解决方案,以防某些程序可能会受益于使用后端进行编译,后端更好地支持源语言中的某些结构。

是否有任何针对编译器目标的角色设计或非常适合的语言?

我知道LLVM,虽然它本身就是一个令人兴奋的项目,但我认为它太低了,无法直接定位。我正在寻找具有高质量实现的通用,中高级语言,其语法能够由 C 预处理器生成 - 因此没有像Python或Ruby那样。对lambdas的支持会很好,但并不是绝对必要的。

6 个答案:

答案 0 :(得分:7)

JavaScript,我补充道。像C这样的语法有lambdas,非常流行的,它具有非常快速的HQ实现,可以编译为本机代码,并且随处可用。 Double-plus:您可以在任何网络浏览器中演示您的编译器,如果您有一些可以解决JavaScript的问题,那么今天每个人都在倾听。

答案 1 :(得分:3)

如果你的后端只是普通的C,你就不会支持你的基本语言的几种结构,但你会获得与其他语言的兼容性(几乎所有的语言都可以很容易地链接到C库)。您可以用您的语言编写程序的某些部分,并使用其他语言编写某些部分。它的编译速度很快。

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

答案 2 :(得分:2)

Neko是一种高级语言/ VM,已被设计为编译器的目标。 Neko编译器生成字节码,但也有一个JIT转换器(仅限x86)。

答案 3 :(得分:1)

O'Caml,Haskell,C99,Ada 2005,Scheme或Lisp怎么样?

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

答案 4 :(得分:1)

我认为,Google的Go会成为一种很好的目标语言。 Go试图用现代语言做C#在十年前对C ++和Java所做的事情 - 改进它,让它变得“更好”(在旁观者看来)。

你也应该确定Lua是受支持的,哪个AFAIK并不难做,因为它背靠C / C ++我认为(??)。

答案 5 :(得分:0)

LISP论证对此并不坏。实际上,LISP S表达式可以看作是前端发出的AST的文本表示,类似于使用JSON或XML序列化AST。此外,许多LISP实现支持宏,允许您定义新语法以实现AST中的条目,LISP默认情况下不支持这些条目。一旦你有LISP代码,你可以选择解释器,编译器和平台(甚至是硬件,如果你使用臭名昭着的LISP机器)

如果您正在寻找更多“传统”目标语言,我建议使用C或Javascript(BTW,Javascript甚至是某些Perl6编译器的目标)。或尝试某种高级汇编程序。