如果我想修改或添加我自己的扩展到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源代码的解析和编译阶段,也许我可以将自己的扩展添加到我自己使用的语言中
我看过的源代码一直是指“树”,有许多宏执行操作或从这些树中获取信息。
是否有任何文档可以深入解释这类事情?
答案 0 :(得分:2)
树很可能是abstract syntax trees (AST),任何编译器书都会教它。 The dragon book是一个非常经典的版本,在我使用的课程中我们使用了Robin Hunter的The essence of compilers
,ISBN 0-13-727835-7。您还应该能够通过一些好的搜索术语(编译器设计,AST,词法分析,自上而下的解析,自下而上的解析,语义分析,LL)找到来自不同学院和大学的吨材料。 ,LR)。
答案 1 :(得分:2)
这取决于您是否已经熟悉一般的编译器。如果没有,请从Dragon Book开始。如果是,那么GCC已经为您提供了一些文档:
答案 2 :(得分:1)
这取决于你是如何做的 - 但你可能想要寻找D编程语言的GCC实现 - GCD。这是一项正在进行中的工作,但是在GCC框架中实施的完整语言(如果有的话)在海湾合作委员会团队中没有得到任何认可。 GCD的经历可能是有益的。