如何将基于C的语言添加到GCC

如何将基于C的语言添加到GCC,c,objective-c,gcc,language-design,objective-c-runtime,C,Objective C,Gcc,Language Design,Objective C Runtime,如果我想修改或添加我自己的扩展到C,并将它们添加到GCC C编译器,我需要做什么?我不想对语言提出修改,我想知道C编译器实际上是如何工作的 我已经看过了GCC的源代码,看起来Objective-C是作为一个简单的解析器实现的,它生成了引用修改后的运行库的代码,然后对于所有基于C的代码,它都使用常规的C编译器。我没有认真研究过,所以我可能没有走上正轨 比如说,我想在Objective-C中添加我自己的关键字,只是为了好玩。我想添加一些看起来很容易实现的东西,比如可能@assert。我只想让@ass

如果我想修改或添加我自己的扩展到C,并将它们添加到GCC C编译器,我需要做什么?我不想对语言提出修改,我想知道C编译器实际上是如何工作的

我已经看过了GCC的源代码,看起来Objective-C是作为一个简单的解析器实现的,它生成了引用修改后的运行库的代码,然后对于所有基于C的代码,它都使用常规的C编译器。我没有认真研究过,所以我可能没有走上正轨

比如说,我想在Objective-C中添加我自己的关键字,只是为了好玩。我想添加一些看起来很容易实现的东西,比如可能
@assert
。我只想让
@assert
调用我将添加到Objective-C运行时的函数:

objc_runtime_assert (__FILE__, __LINE__, expression, "string version of expression");
显然,我可以将其实现为函数调用和宏,但我想了解C源代码的解析和编译阶段,也许这样我就可以为自己使用的语言添加自己的扩展

我所看到的源代码始终是指“树”,有很多很多宏执行操作或从这些树获取信息


有没有任何文档可以深入地解释这类事情?

树是最有可能的,任何编译器书籍都会教授这一点。是一个非常经典的版本,在我参加的课程中,我们使用了Robin Hunter的《编译器的精髓》,ISBN 0-13-727835-7。您还应该能够找到来自不同学院和大学的大量材料,其中包含一些好的搜索词(编译器设计、AST、词汇分析、自顶向下分析、自下而上分析、语义分析、LL、LR).

这取决于您的操作方式,但您可能希望寻找D编程语言的GCC实现。这是一项正在进行的工作,但它是一种在GCC框架中实现的完整语言,没有(到目前为止)GCC团队的认可。GCD体验可能是有益的。

这取决于您是否已经熟悉编译器。如果没有,请从以下内容开始。如果是,那么GCC已经为您提供了一些文档:

  • 尤其是,该页面包含了许多信息,包括GCC树

  • 我不能帮你,但看看如果你想破解一个编译器,特别是Objective-C,你应该看看LLVM。苹果转向LLVM的部分原因是,它比GCC更易于修改和扩展,并且有更干净的代码库。从未来开始更新——GCD已经合并到主线GCC中,并且该站点相当陈旧。@JL2210-有趣的是,十年来世界发生了怎样的变化!