4

如果我想修改或添加我自己的 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 源代码的解析和编译阶段,也许我可以将自己的扩展添加到语言中以供自己使用。

我看过的源代码一直是指“树”,并且有很多很多宏可以执行操作或从这些树中获取信息。

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

4

3 回答 3

3

这些树很可能是抽象语法树 (AST),任何编译器书籍都会教授这一点。龙书是一本非常经典的书,在我上The essence of compilers过Robin Hunter的课上,ISBN 0-13-727835-7。您还应该能够通过一些好的搜索词(编译器设计、AST、词法分析、自上而下的解析、自下而上的解析、语义分析、LL、LR)找到来自不同学院和大学的大量材料

于 2009-05-01T11:35:27.303 回答
3

这取决于您是否已经熟悉一般的编译器。如果没有,从龙书开始。如果是,那么 GCC 已经为您准备了一些文档:

  1. GCC 内部手册
  2. GCC Wiki,特别是Getting Started页面包含许多信息,包括 GCC 树。
于 2009-05-01T18:51:30.657 回答
1

这取决于你是如何做的——但你可能想寻找 D 编程语言的 GCC 实现—— GCD。这是一项正在进行中的工作,但它是在 GCC 框架中实现的完整语言,但(到目前为止)没有得到 GCC 团队的认可。GCD 的经历可能是有益的。

于 2009-05-01T12:29:47.737 回答