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

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

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

有帮助吗?

解决方案

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

其他提示

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

  1. GCC内部手册
  2. GCC Wiki ,特别是使用入门页面包含许多内容的信息,包括GCC树。

这取决于你是如何做的 - 但你可能想要寻找D编程语言的GCC实现 - GCD 。这是一项正在进行中的工作,但是在GCC框架中实施的完整语言(如果有的话)在海湾合作委员会团队中没有得到任何认可。 GCD的经历可能是有益的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top