繁体   English   中英

如何向GCC添加基于C的语言

[英]How can I add a C-based language to GCC

如果我想修改或添加我自己的扩展到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 The essence of compilers ,ISBN 0-13-727835-7。 你也应该能够从不同的高校有一些很好的搜索字词找到的材料(编译器设计,AST,词法分析,自上而下的分析,自下而上的分析,语义分析,LL,LR)。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM